From 149da2b62045fde28cc712d11d04f611b0163896 Mon Sep 17 00:00:00 2001 From: Kyle Meyer Date: Mon, 12 Oct 2020 21:48:59 -0400 Subject: Switch to ivy I've tried it for a few months and quite happy with it. --- init.el | 177 +++++++++++++------------------------------------- lisp/km-helm.el | 85 ------------------------ lisp/km-hydra.el | 7 +- lisp/km-outline.el | 8 +-- lisp/km-projectile.el | 6 ++ 5 files changed, 57 insertions(+), 226 deletions(-) delete mode 100644 lisp/km-helm.el diff --git a/init.el b/init.el index 116b9ec..26e5d34 100644 --- a/init.el +++ b/init.el @@ -594,6 +594,28 @@ (after 'avy (add-to-list 'avy-dispatch-alist (cons ?w #'km/avy-action-copy-line)))) +(use-package ivy + :diminish ivy-mode + :config + (setq ivy-count-format "(%d/%d) ") + (setq ivy-use-virtual-buffers t) + (setq ivy-virtual-abbreviate 'abbreviate) + (setq ivy-wrap t) + + (define-key ivy-minibuffer-map (kbd "C-'") nil) + (define-key ivy-minibuffer-map (kbd "C-.") 'ivy-avy) + + (ivy-mode 1)) + +(use-package swiper + :bind (("M-s k" . swiper))) + +(use-package counsel + :chords (("jt" . counsel-buffer-or-recentf) + ("kx" . counsel-M-x)) + :bind (("C-c l" . counsel-imenu) + ("M-y" . counsel-yank-pop))) + ;;; Buffers and files @@ -742,8 +764,8 @@ ("t" . projectile-find-implementation-or-test-other-window)) :config (setq projectile-find-dir-includes-top-level t - projectile-completion-system 'helm projectile-use-git-grep t) + (setq projectile-completion-system 'ivy) (defun km/projectile-ignore-directory-p (name) (or (file-remote-p name) @@ -773,9 +795,15 @@ (def-projectile-commander-method ?c "Run project compilation command." (call-interactively 'projectile-compile-project)) + (def-projectile-commander-method ?d + "Find directory in project." + (projectile-find-dir)) (def-projectile-commander-method ?D "Find a project directory in other window." (call-interactively 'projectile-find-dir-other-window)) + (def-projectile-commander-method ?f + "Find project file in other window." + (call-interactively 'projectile-find-file)) (def-projectile-commander-method ?F "Find project file in other window." (call-interactively 'projectile-find-file-other-window)) @@ -788,6 +816,9 @@ (def-projectile-commander-method ?o "Display a project buffer in other window." (call-interactively 'projectile-display-buffer)) + (def-projectile-commander-method ?j + "Find tag in project." + (projectile-find-tag)) (def-projectile-commander-method ?O "Run multi-occur on project buffers." (projectile-multi-occur)) @@ -798,37 +829,7 @@ "Run grep on project." (call-interactively #'projectile-grep)) - (projectile-global-mode) - (require 'helm-projectile)) - -(use-package helm-projectile - :config - (bind-keys :map projectile-command-map - ("b" . helm-projectile-switch-to-buffer) - ("d" . helm-projectile-find-dir) - ("f" . helm-projectile-find-file) - ("F" . helm-projectile-find-file-in-known-projects) - ("j" . helm-etags-select) - ("p" . helm-projectile-switch-project) - ("r" . helm-projectile-recentf)) - (def-projectile-commander-method ?b - "Find project buffer." - (call-interactively 'helm-projectile-switch-to-buffer)) - (def-projectile-commander-method ?d - "Find directory in project." - (helm-projectile-find-dir)) - (def-projectile-commander-method ?f - "Open project file." - (helm-projectile-find-file)) - (def-projectile-commander-method ?j - "Find project tag." - (helm-etags-select nil)) - (def-projectile-commander-method ?l - "Run `helm-projectile-grep'." - (helm-projectile-grep)) - (def-projectile-commander-method ?p - "Switch project." - (helm-projectile-switch-project))) + (projectile-global-mode)) (use-package km-projectile :chords ("gp" . km/projectile-switch-project) @@ -860,7 +861,17 @@ (km/projectile-view-file-other-window)) (def-projectile-commander-method ?w "Save thing." - (call-interactively #'km/projectile-save-thing)))) + (call-interactively #'km/projectile-save-thing))) + :config + (after 'elisp-mode + (add-hook 'emacs-lisp-mode-hook + #'km/projectile-maybe-activate-xref-etags-mode)) + (after 'scheme + (add-hook 'scheme-mode-hook + #'km/projectile-maybe-activate-xref-etags-mode)) + (after 'python + (add-hook 'python-mode-hook + #'km/projectile-maybe-activate-xref-etags-mode))) ;;; Version control @@ -1292,104 +1303,6 @@ (after 'org (define-key km/org-prefix-map "." #'hydra-org-link-edit/body))) - -;;; Helm - -(use-package helm - :config - (setq helm-move-to-line-cycle-in-source t) - - (require 'km-helm) - (require 'helm-mode)) - -(use-package helm-config - :config - (global-set-key (kbd "C-x c") nil) - (customize-set-value 'helm-command-prefix-key "C-c h")) - -(use-package helm-buffers - :chords ("jt" . helm-mini)) - -(use-package helm-files - :chords ("jc" . helm-find-files) - :config - (setq helm-ff-newfile-prompt-p nil - helm-ff-file-name-history-use-recentf t - helm-ff-skip-boring-files t)) - -(use-package helm-tags - :config - (advice-add 'helm-etags-all-tag-files - :override - (lambda () - (--when-let (helm-etags-get-tag-file) - (list it))) - '((name . "helm-etags-just-project-tags")))) - -(use-package km-helm - :init - (after 'helm-files - (bind-keys :map helm-find-files-map - ("C-c ." . km/helm-visit-in-dired) - ("C-c b" . km/helm-find-file-below) - ("C-c x" . km/helm-ff-org-open-file) - ("C-c C-o" . km/helm-display-file))) - (after 'helm-locate - (bind-keys :map helm-generic-files-map - ("C-c ." . km/helm-visit-in-dired) - ("C-c b" . km/helm-find-file-below) - ("C-c x" . km/helm-ff-org-open-file) - ("C-c C-o" . km/helm-display-file))) - (after 'helm-buffers - (bind-keys :map helm-buffer-map - ("C-c b" . km/helm-display-buffer-below) - ("C-c C-o" . km/helm-display-buffer))) - :config - (after 'elisp-mode - (add-hook 'emacs-lisp-mode-hook #'km/helm-maybe-override-xref)) - (after 'scheme - (add-hook 'scheme-mode-hook #'km/helm-maybe-override-xref)) - (after 'python - (add-hook 'python-mode-hook #'km/helm-maybe-override-xref))) - -(use-package helm-mode - :diminish helm-mode - :config - (helm-mode 1) - - (add-to-list 'helm-mode-no-completion-in-region-in-modes 'message-mode)) - -(use-package helm-command - :chords ("kx" . helm-M-x)) - -(use-package helm-swoop - :init - (setq helm-swoop-pre-input-function (lambda () "")) - - (define-key search-map "k" #'helm-swoop)) - -(use-package helm-apropos - :bind ("C-h a" . helm-apropos)) - -(use-package helm-imenu - :bind ("C-c l" . helm-imenu)) - -(use-package helm-man - :init (define-key km/external-map "m" #'helm-man-woman)) - -(use-package helm-ring - :bind (("M-y" . helm-show-kill-ring) - ("C-x r i" . helm-register)) - :init - (define-key km/editing-map "m" #'helm-mark-ring)) - -(use-package helm-bookmark - :bind ("C-x r b" . helm-bookmarks)) - -(use-package helm-misc - :config - (define-key minibuffer-local-map (kbd "M-r") #'helm-minibuffer-history)) - ;;; Expansion @@ -1656,6 +1569,8 @@ x-select-enable-primary t)) (use-package man + :init + (define-key km/external-map "m" #'man) :config (setq Man-notify-method 'aggressive)) diff --git a/lisp/km-helm.el b/lisp/km-helm.el deleted file mode 100644 index 7195de4..0000000 --- a/lisp/km-helm.el +++ /dev/null @@ -1,85 +0,0 @@ -;;; km-helm.el --- Helm configuration - -;; Copyright (C) 2012-2020 Kyle Meyer - -;; Author: Kyle Meyer -;; URL: https://git.kyleam.com/emacs.d - -;; This program is free software; you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation, either version 3 of the License, or -;; (at your option) any later version. - -;; This program is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with this program. If not, see . - -;;; Code: - -(require 'helm) - -;;;###autoload -(defun km/helm-display-buffer () - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action #'display-buffer))) - -;;;###autoload -(defun km/helm-visit-in-dired () - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action #'helm-point-file-in-dired))) - -;;;###autoload -(defun km/helm-display-file () - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action - (lambda (f) - (display-buffer (find-file-noselect f)))))) - -(autoload 'org-open-file "org") -;;;###autoload -(defun km/helm-ff-org-open-file () - "Run `org-open-file' from `helm-source-find-files'." - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action #'org-open-file))) - -;;;###autoload -(defun km/helm-display-buffer-below () - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action - (lambda (b) - (display-buffer b '(display-buffer-below-selected)))))) - -;;;###autoload -(defun km/helm-find-file-below () - (interactive) - (with-helm-alive-p - (helm-exit-and-execute-action - (lambda (f) - (select-window - (display-buffer (find-file-noselect f) - '(display-buffer-below-selected))))))) - -(defvar km/helm-etags-mode-map - (let ((map (make-sparse-keymap))) - (define-key map (kbd "M-.") #'helm-etags-select) - map)) - -(define-minor-mode km/helm-etags-mode - "Override `xref-find-definitions' with `helm-etags-select'." - :keymap km/helm-etags-mode-map) - -(defun km/helm-maybe-override-xref () - (when (helm-etags-find-tag-file-directory default-directory) - (km/helm-etags-mode 1))) - -(provide 'km-helm) -;;; km-helm.el ends here diff --git a/lisp/km-hydra.el b/lisp/km-hydra.el index 22c4eb8..fcd0716 100644 --- a/lisp/km-hydra.el +++ b/lisp/km-hydra.el @@ -162,9 +162,9 @@ _y_ Unmark _u_ Unmark " ^^Defining ^^Applying _?_ Query _c_ Call -_b_ Bind to key _h_ Execute with Helm -_e_ Edit _o_ Call 2nd in ring -_E_ Step edit _r_ Apply to region lines +_b_ Bind to key _o_ Call 2nd in ring +_e_ Edit _r_ Apply to region lines +_E_ Step edit _N_ Name last _l_ Use recent strokes _s_ Start defining @@ -187,7 +187,6 @@ _v_ View ("o" kmacro-call-ring-2nd-repeat) ("e" kmacro-edit-macro) ("E" kmacro-step-edit-macro) - ("h" helm-execute-kmacro) ("n" kmacro-cycle-ring-next :exit nil) ("p" kmacro-cycle-ring-previous :exit nil) ("t" kmacro-swap-ring) diff --git a/lisp/km-outline.el b/lisp/km-outline.el index 3c9f290..b5b7b2a 100644 --- a/lisp/km-outline.el +++ b/lisp/km-outline.el @@ -63,16 +63,12 @@ text is taken as everything on the line after the (push (cons head-level head) path-alist))) (nreverse index))) -(declare-function helm-imenu "helm-imenu") ;;;###autoload (defun km/outline-jump-to-heading () "Jump to heading specified by `outline-regexp'." (interactive) - (let ((imenu-create-index-function #'km/outline-imenu-create-index) - helm-cached-imenu-tick - helm-cached-imenu-alist - helm-cached-imenu-candidates) - (call-interactively #'helm-imenu))) + (let ((imenu-create-index-function #'km/outline-imenu-create-index)) + (call-interactively #'imenu))) (provide 'km-outline) ;;; km-outline.el ends here diff --git a/lisp/km-projectile.el b/lisp/km-projectile.el index 0d52bdf..cb4d0fe 100644 --- a/lisp/km-projectile.el +++ b/lisp/km-projectile.el @@ -208,5 +208,11 @@ Like `projectile-kill-buffers', but (get-buffer-window b))) (projectile-project-buffers)))) +(defun km/projectile-maybe-activate-xref-etags-mode () + (let ((root (projectile-project-root))) + (when (and root + (file-exists-p (expand-file-name "TAGS" root))) + (xref-etags-mode 1)))) + (provide 'km-projectile) ;;; km-projectile.el ends here -- cgit v1.2.3