Refactor/optimize completion/ido module

Ensure initialization only occurs once when ido is first used. Special
steps are needed because ido is automatically loaded at startup by
Emacs.
This commit is contained in:
Henrik Lissner 2018-06-03 15:01:21 +02:00
parent 3d893ea53e
commit 83590d65ba
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395

View file

@ -1,7 +1,6 @@
;;; completion/ido/config.el -*- lexical-binding: t; -*- ;;; completion/ido/config.el -*- lexical-binding: t; -*-
(def-package! ido (defun +ido|init ()
:config
(setq ido-ignore-buffers (setq ido-ignore-buffers
'("\\` " "^\\*ESS\\*" "^\\*Messages\\*" "^\\*Help\\*" "^\\*Buffer" '("\\` " "^\\*ESS\\*" "^\\*Messages\\*" "^\\*Help\\*" "^\\*Buffer"
"^\\*.*Completions\\*$" "^\\*Ediff" "^\\*tramp" "^\\*cvs-" "^\\*.*Completions\\*$" "^\\*Ediff" "^\\*tramp" "^\\*cvs-"
@ -16,29 +15,18 @@
ido-enable-last-directory-history t ido-enable-last-directory-history t
ido-save-directory-list-file (concat doom-cache-dir "ido.last")) ido-save-directory-list-file (concat doom-cache-dir "ido.last"))
(push "\\`.DS_Store$" ido-ignore-files) (unless (member "\\`.DS_Store$" ido-ignore-files)
(push "Icon\\?$" ido-ignore-files) (push "\\`.DS_Store$" ido-ignore-files)
(push "Icon\\?$" ido-ignore-files))
(ido-mode 1) (define-key! (ido-common-completion-map ido-completion-map ido-file-completion-map)
(ido-everywhere 1) "\C-n" #'ido-next-match
(require 'ido-completing-read+) "\C-p" #'ido-prev-match
(ido-ubiquitous-mode 1) "\C-w" #'ido-delete-backward-word-updir
;; Go to $HOME with ~
(defun +ido|init () "~" (λ! (if (looking-back "/" (point-min))
(require 'ido-vertical-mode) (insert "~/")
(ido-vertical-mode 1) (call-interactively #'self-insert-command))))
(require 'flx-ido)
(flx-ido-mode +1)
(require 'crm-custom)
(crm-custom-mode +1)
(map! :map (ido-common-completion-map ido-completion-map ido-file-completion-map)
"C-n" #'ido-next-match
"C-p" #'ido-prev-match
"C-w" #'ido-delete-backward-word-updir))
(add-hook 'ido-setup-hook #'+ido|init)
(defun +ido*sort-mtime () (defun +ido*sort-mtime ()
"Sort ido filelist by mtime instead of alphabetically." "Sort ido filelist by mtime instead of alphabetically."
@ -55,10 +43,16 @@
(advice-add #'ido-sort-mtime :override #'+ido*sort-mtime) (advice-add #'ido-sort-mtime :override #'+ido*sort-mtime)
(add-hook! (ido-make-file-list ido-make-dir-list) #'+ido*sort-mtime) (add-hook! (ido-make-file-list ido-make-dir-list) #'+ido*sort-mtime)
(defun +ido|setup-home-keybind () ;;
"Go to $HOME with ~" (ido-mode 1)
(define-key ido-file-completion-map (kbd "~") (ido-everywhere 1)
(λ! (if (looking-back "/" (point-min)) (ido-ubiquitous-mode 1)
(insert "~/") (ido-vertical-mode 1)
(call-interactively #'self-insert-command))))) (flx-ido-mode +1)
(add-hook 'ido-setup-hook #'+ido|setup-home-keybind)) (crm-custom-mode +1)
;;
(remove-hook 'ido-setup-hook #'+ido|init))
;;
(add-hook 'ido-setup-hook #'+ido|init)