This is part of the Emacs Starter Kit.
ido-mode is like magic pixie dust!
(ido-mode t)
(setq ido-everywhere t
ido-enable-prefix nil
ido-enable-flex-matching t
ido-auto-merge-work-directories-length nil
;;ido-use-filename-at-point t
ido-max-prospects 10
ido-create-new-buffer 'always
;; ido-use-virtual-buffers t
;; ido-handle-duplicate-virtual-buffers 2
ido-default-buffer-method 'selected-window
ido-default-file-method 'selected-window)
Since ido
buffer/file list is shown vertically, use <up/down> keys for
navigating through ido item
(defun ido-my-keys ()
(define-key ido-completion-map (kbd "<up>") 'ido-prev-match)
(define-key ido-completion-map (kbd "<down>") 'ido-next-match))
(add-hook 'ido-setup-hook 'ido-my-keys)
(setq ido-file-extensions-order '(".cc" ".h" ".tex" ".sh" ".org"
".el" ".tex" ".pdf"))
(setq completion-ignored-extensions '(".o" ".elc" "~" ".bin" ".bak"
".obj" ".map" ".a" ".so"
".mod" ".aux" ".out" ".pyg"))
(setq ido-ignore-extensions t)
(setq ido-ignore-buffers (list (rx (or (and bos " ")
(and bos
(or "*Completions*"
"*Shell Command Output*"
"*vc-diff*")
eos)))))
(add-hook 'ido-make-file-list-hook
(lambda ()
(define-key ido-file-dir-completion-map (kbd "SPC") 'self-insert-command)))
(setq ido-decorations (quote ("\n➔ " "" "\n " "\n ..." "[" "]" "
[No match]" " [Matched]" " [Not readable]" " [Too big]" "
[Confirm]")))
(defun ido-disable-line-truncation () (set (make-local-variable 'truncate-lines) nil))
(add-hook 'ido-minibuffer-setup-hook 'ido-disable-line-truncation)
(defun recentf-ido-find-file ()
"Find a recent file using Ido."
(interactive)
(let* ((file-assoc-list
(mapcar (lambda (x)
(cons (file-name-nondirectory x)
x))
recentf-list))
(filename-list
(remove-duplicates (mapcar #'car file-assoc-list)
:test #'string=))
(filename (ido-completing-read "Choose recent file: "
filename-list
nil
t)))
(when filename
(find-file (cdr (assoc filename
file-assoc-list))))))
(ido-ubiquitous-mode)
;;(ido-at-point-mode)
Fuzzy matching for Emacs … a la Sublime Text. See https://github.com/lewang/flx
(flx-ido-mode)
Increase emacs garbage collection size
(setq gc-cons-threshold 20000000)
From Emacs Redux.
(defadvice ido-find-file (after find-file-sudo activate)
"Find file as root if necessary."
(unless (and buffer-file-name
(file-writable-p buffer-file-name))
(find-alternate-file (concat "/sudo:root@localhost:" buffer-file-name))))
(define-key ido-file-completion-map (kbd "C-w") 'ido-delete-backward-updir)
;; Add project file to ido search using F6 shortcut
(defun my-ido-project-files ()
"Use ido to select a file from the project."
(interactive)
(let (my-project-root project-files tbl)
(unless project-details (project-root-fetch))
(setq my-project-root (cdr project-details))
;; get project files
(setq project-files
(split-string
(shell-command-to-string
(concat "find "
my-project-root
" \\( -name \"*.svn\" -o -name \"*.git\" \\) -prune -o -type f -print | grep -E -v \"\.(pyc)$\""
)) "\n"))
;; populate hash table (display repr => path)
(setq tbl (make-hash-table :test 'equal))
(let (ido-list)
(mapc (lambda (path)
;; format path for display in ido list
(setq key (replace-regexp-in-string "\\(.*?\\)\\([^/]+?\\)$" "\\2|\\1" path))
;; strip project root
(setq key (replace-regexp-in-string my-project-root "" key))
;; remove trailing | or /
(setq key (replace-regexp-in-string "\\(|\\|/\\)$" "" key))
(puthash key path tbl)
(push key ido-list)
)
project-files
)
(find-file (gethash (ido-completing-read "project-files: " ido-list) tbl)))))
;; bind to a key for quick access
(define-key global-map [f6] 'my-ido-project-files)
(require 'project-root)
(setq project-roots
'(("your project name"
:root-contains-files ("LICENSE.GPL3.txt")
)))