Goodbye Helm, hello Ivy

This commit is contained in:
Henrik Lissner 2016-06-04 22:47:20 -04:00
parent e8344945f5
commit bc33e39823
14 changed files with 191 additions and 83 deletions

24
Cask
View file

@ -21,6 +21,7 @@
(depends-on "persistent-soft") (depends-on "persistent-soft")
(depends-on "s") (depends-on "s")
(depends-on "use-package") (depends-on "use-package")
(depends-on "smex" :git "https://github.com/syl20bnr/smex")
;; OSX --- core/core-os-osx.el ;; OSX --- core/core-os-osx.el
(depends-on "applescript-mode") (depends-on "applescript-mode")
@ -74,6 +75,7 @@
(depends-on "rotate-text" :git "https://github.com/debug-ito/rotate-text.el") (depends-on "rotate-text" :git "https://github.com/debug-ito/rotate-text.el")
(depends-on "smart-forward") (depends-on "smart-forward")
(depends-on "smartparens") (depends-on "smartparens")
(depends-on "swiper")
;; Documentation --- core/core-docs.el ;; Documentation --- core/core-docs.el
(depends-on "dash-at-point") (depends-on "dash-at-point")
@ -95,10 +97,14 @@
(depends-on "flyspell") (depends-on "flyspell")
;; Project --- core/core-project.el ;; Project --- core/core-project.el
(depends-on "counsel")
(depends-on "counsel-projectile")
(depends-on "flx-ido") (depends-on "flx-ido")
;;(depends-on "ido-ubiquitous") ;;(depends-on "ido-ubiquitous")
(depends-on "ido-vertical-mode") (depends-on "ido-vertical-mode")
(depends-on "ivy")
(depends-on "neotree") (depends-on "neotree")
(depends-on "projectile")
;; VCS --- core/core-vcs.el ;; VCS --- core/core-vcs.el
(depends-on "browse-at-remote") (depends-on "browse-at-remote")
@ -110,15 +116,14 @@
(depends-on "magit") (depends-on "magit")
;; Helm -- core/core-helm.el ;; Helm -- core/core-helm.el
(depends-on "helm") ;;(depends-on "helm")
(depends-on "helm-ag") ;;(depends-on "helm-ag")
(depends-on "helm-c-yasnippet") ;;(depends-on "helm-c-yasnippet")
(depends-on "helm-company") ;;(depends-on "helm-company")
(depends-on "helm-css-scss") ;;(depends-on "helm-css-scss")
(depends-on "helm-describe-modes" :git "https://github.com/emacs-helm/helm-describe-modes") ;;(depends-on "helm-describe-modes" :git "https://github.com/emacs-helm/helm-describe-modes")
(depends-on "helm-projectile") ;;(depends-on "helm-projectile")
(depends-on "helm-swoop") ;;(depends-on "helm-swoop")
(depends-on "projectile")
;; Code evaluation/REPLs/debug -- core/core-eval.el ;; Code evaluation/REPLs/debug -- core/core-eval.el
(depends-on "quickrun") (depends-on "quickrun")
@ -156,6 +161,7 @@
(depends-on "sass-mode") (depends-on "sass-mode")
(depends-on "scss-mode") (depends-on "scss-mode")
(depends-on "stylus-mode") (depends-on "stylus-mode")
(depends-on "counsel-css" :git "https://github.com/hlissner/emacs-counsel-css")
;; Data -- modules/module-data.el ;; Data -- modules/module-data.el
(depends-on "company-ansible") (depends-on "company-ansible")

View file

@ -253,6 +253,8 @@
(sp-with-modes '(xml-mode nxml-mode php-mode) (sp-with-modes '(xml-mode nxml-mode php-mode)
(sp-local-pair "<!--" "-->" :post-handlers '(("| " "SPC"))))) (sp-local-pair "<!--" "-->" :post-handlers '(("| " "SPC")))))
(use-package swiper :commands (swiper swiper-all))
;; ;;
;; Keybinding fixes ;; Keybinding fixes

View file

@ -15,8 +15,7 @@
quickrun-with-arg quickrun-with-arg
quickrun-shell quickrun-shell
quickrun-compile-only quickrun-compile-only
quickrun-replace-region quickrun-replace-region)
helm-quickrun)
:init (add-hook 'quickrun/mode-hook 'linum-mode) :init (add-hook 'quickrun/mode-hook 'linum-mode)
:config :config
(setq quickrun-focus-p nil) (setq quickrun-focus-p nil)

35
core/core-ivy.el Normal file
View file

@ -0,0 +1,35 @@
;;; core-ivy.el
;; see defuns/defuns-ivy.el
(use-package ivy
:init
(setq projectile-completion-system 'ivy
ivy-height 15
ivy-do-completion-in-region nil)
:config
(ivy-mode +1)
(map! :map ivy-minibuffer-map
[escape] 'keyboard-escape-quit
"C-w" 'backward-kill-word
"C-u" 'backward-kill-sentence
"C-b" 'backward-word
"C-f" 'forward-word)
(require 'counsel)
(defun counsel-ag-function (string)
"Grep in the current directory for STRING."
(if (< (length string) 1)
(counsel-more-chars 1)
(let ((default-directory counsel--git-grep-dir)
(regex (counsel-unquote-regex-parens
(setq ivy--old-re
(ivy--regex string)))))
(counsel--async-command
(format counsel-ag-base-command (shell-quote-argument regex)))
nil))))
(use-package counsel-projectile :after projectile)
(provide 'core-ivy)
;;; core-ivy.el ends here

View file

@ -141,37 +141,37 @@
(message "Unable to find location in file")))) (message "Unable to find location in file"))))
'help-echo (purecopy "mouse-2, RET: find face's definition"))) 'help-echo (purecopy "mouse-2, RET: find face's definition")))
(after! helm ;; (after! helm
;; This is a good alternative to either popwin or shackle, specifically for ;; ;; This is a good alternative to either popwin or shackle, specifically for
;; helm. If either fail me (for the last time), this is where I'll turn. ;; ;; helm. If either fail me (for the last time), this is where I'll turn.
;;(add-to-list 'display-buffer-alist ;; ;;(add-to-list 'display-buffer-alist
;; `(,(rx bos "*helm" (* not-newline) "*" eos) ;; ;; `(,(rx bos "*helm" (* not-newline) "*" eos)
;; (display-buffer-in-side-window) ;; ;; (display-buffer-in-side-window)
;; (inhibit-same-window . t) ;; ;; (inhibit-same-window . t)
;; (window-height . 0.4))) ;; ;; (window-height . 0.4)))
;; Helm tries to clean up after itself, but shackle has already done this. ;; ;; Helm tries to clean up after itself, but shackle has already done this.
;; This fixes that. To reproduce, add a helm rule in `shackle-rules', open two ;; ;; This fixes that. To reproduce, add a helm rule in `shackle-rules', open two
;; splits side-by-side, move to the buffer on the right and invoke helm. It ;; ;; splits side-by-side, move to the buffer on the right and invoke helm. It
;; will close all but the left-most buffer. ;; ;; will close all but the left-most buffer.
(setq-default helm-reuse-last-window-split-state t ;; (setq-default helm-reuse-last-window-split-state t
helm-split-window-in-side-p t)) ;; helm-split-window-in-side-p t))
(after! helm-swoop ;; (after! helm-swoop
(setq helm-swoop-split-window-function (lambda (b) (doom/popup-buffer b)))) ;; (setq helm-swoop-split-window-function (lambda (b) (doom/popup-buffer b))))
(after! helm-ag ;; (after! helm-ag
;; This prevents helm-ag from switching between windows and buffers. ;; ;; This prevents helm-ag from switching between windows and buffers.
(defadvice helm-ag--edit-abort (around helm-ag-edit-abort-popup-compat activate) ;; (defadvice helm-ag--edit-abort (around helm-ag-edit-abort-popup-compat activate)
(cl-letf (((symbol-function 'select-window) 'ignore)) ad-do-it) ;; (cl-letf (((symbol-function 'select-window) 'ignore)) ad-do-it)
(doom/popup-close nil t t)) ;; (doom/popup-close nil t t))
(defadvice helm-ag--edit-commit (around helm-ag-edit-commit-popup-compat activate) ;; (defadvice helm-ag--edit-commit (around helm-ag-edit-commit-popup-compat activate)
(cl-letf (((symbol-function 'select-window) 'ignore)) ad-do-it) ;; (cl-letf (((symbol-function 'select-window) 'ignore)) ad-do-it)
(doom/popup-close nil t t)) ;; (doom/popup-close nil t t))
(defadvice helm-ag--edit (around helm-ag-edit-popup-compat activate) ;; (defadvice helm-ag--edit (around helm-ag-edit-popup-compat activate)
(cl-letf (((symbol-function 'other-window) 'ignore) ;; (cl-letf (((symbol-function 'other-window) 'ignore)
((symbol-function 'switch-to-buffer) 'doom/popup-buffer)) ;; ((symbol-function 'switch-to-buffer) 'doom/popup-buffer))
ad-do-it))) ;; ad-do-it)))
(after! quickrun (after! quickrun
;; This allows us to rerun code from inside a quickrun buffer. ;; This allows us to rerun code from inside a quickrun buffer.

View file

@ -13,8 +13,7 @@
(setq yas-verbosity 0 (setq yas-verbosity 0
yas-indent-line 'auto yas-indent-line 'auto
yas-also-auto-indent-first-line t yas-also-auto-indent-first-line t
yas-wrap-around-region nil yas-prompt-functions '(doom/yas-ivy-prompt yas-ido-prompt yas-no-prompt)
yas-prompt-functions '(yas-ido-prompt yas-no-prompt)
;; Only load personal snippets ;; Only load personal snippets
yas-snippet-dirs (list (concat doom-private-dir "/snippets") yas-snippet-dirs (list (concat doom-private-dir "/snippets")
(concat doom-private-dir "/templates"))) (concat doom-private-dir "/templates")))

View file

@ -159,6 +159,13 @@
:commands (describe-buffer describe-command describe-file :commands (describe-buffer describe-command describe-file
describe-keymap describe-option describe-option-of-type)) describe-keymap describe-option describe-option-of-type))
(use-package smex
:commands (smex smex-major-mode-commands)
:config
(setq smex-completion-method 'ivy
smex-save-file (concat doom-temp-dir "/smex-items"))
(smex-initialize))
;; ;;
;; Automatic minor modes ;; Automatic minor modes

57
core/defuns/defuns-ivy.el Normal file
View file

@ -0,0 +1,57 @@
;;; defuns-ivy.el
;;;###autoload
(defun doom/ivy-switch-buffer (&optional all-p)
"Displays open buffers in current project. If ALL-P, then show all open
buffers."
(interactive)
(let ((this-command 'ivy-switch-buffer))
(ivy-read "Switch to buffer: " (doom/get-buffer-names (not all-p))
:matcher #'ivy--switch-buffer-matcher
:preselect (buffer-name (other-buffer (current-buffer)))
:action #'ivy--switch-buffer-action
:keymap ivy-switch-buffer-map
:caller 'doom/ivy-switch-buffer)))
;;;###autoload
(defun doom/ivy-kill-ring ()
(interactive)
(ivy-read "Kill ring:" (--filter (not (or (< (length it) 3)
(string-match-p "\\`[\n[:blank:]]+\\'" it)))
(remove-duplicates kill-ring :test' equal))))
;;;###autoload (autoload 'doom:ivy-recentf "defuns-ivy" nil t)
(evil-define-command doom:ivy-recentf (&optional bang)
"Ex-mode interface for `ivy-recentf' and `projectile-recentf'."
:repeat nil
(interactive "<!>")
(if bang (ivy-recentf) (projectile-recentf)))
;;;###autoload (autoload 'doom:ivy-swipe "defuns-ivy" nil t)
(evil-define-command doom:ivy-swiper (&optional search)
(interactive "<a>")
(swiper (or search (thing-at-point 'symbol))))
;;;###autoload (autoload 'doom:ivy-ag-search "defuns-ivy" nil t)
(evil-define-operator doom:ivy-ag-search (beg end search regex-p &optional dir)
"Preform a counsel search with SEARCH. If SEARCH is nil and in visual mode,
use the selection, otherwise activate live ag searching in helm.
If REGEX-P is non-nil, SEARCH will be treated as a regular expression.
DIR specifies the default-directory from which ag is run."
:type inclusive :repeat nil
(interactive "<r><a><!>")
(let ((counsel-ag-base-command
(format "ag --nocolor --nogroup %s %%s -- ."
(if regex-p "-Q" "")))
(search (or search (and beg end (buffer-substring-no-properties beg end)))))
(counsel-ag search (or dir (f-slash (doom/project-root))))))
;;;###autoload (autoload 'doom:ivy-ag-search-cwd "defuns-ivy" nil t)
(evil-define-operator doom:ivy-ag-search-cwd (beg end search regex-p)
:type inclusive :repeat nil
(interactive "<r><a><!>")
(doom:ivy-ag-search beg end search regex-p default-directory))
(provide 'defuns-ivy)
;;; defuns-ivy.el ends here

View file

@ -92,9 +92,12 @@ normal mode if there are no fields."
;;;###autoload ;;;###autoload
(defun doom/yas-find-file () (defun doom/yas-find-file ()
"Browse through snippets folder" "Browse through snippets folder"
;; FIXME
(interactive) (interactive)
(doom/ido-find-file (car doom-snippet-dirs))) (projectile-find-file-in-directory (car yas-snippet-dirs)))
;;;###autoload
(defun doom/yas-ivy-prompt (prompt choices &optional display-fn)
(yas-completing-prompt prompt choices display-fn #'ivy-completing-read))
(provide 'defuns-yasnippet) (provide 'defuns-yasnippet)
;;; nlinum-defuns.el ends here ;;; nlinum-defuns.el ends here

View file

@ -48,7 +48,7 @@
core-flycheck ; get tazed for every semicolon you forget core-flycheck ; get tazed for every semicolon you forget
core-project ; for project navigation aficionados core-project ; for project navigation aficionados
core-vcs ; remember remember, that commit in November core-vcs ; remember remember, that commit in November
core-helm ; a search engine for life and love core-ivy ; a search engine for life and love
core-workgroups ; cure Emacs alzheimers + tab emulation core-workgroups ; cure Emacs alzheimers + tab emulation
core-eval ; run code, run; debug too core-eval ; run code, run; debug too

View file

@ -3,20 +3,20 @@
;;;###autoload ;;;###autoload
(defun doom/org-find-file-in-notes () (defun doom/org-find-file-in-notes ()
(interactive) (interactive)
(in! (f-slash org-directory) (let ((default-directory (f-slash org-directory)))
(helm-projectile-find-file))) (projectile-find-file)))
;;;###autoload ;;;###autoload
(defun doom/org-find-file () (defun doom/org-find-file ()
(interactive) (interactive)
(in! (f-slash org-directory) (let ((default-directory (f-slash org-directory)))
(helm-find-files nil))) (counsel-find-file)))
;;;###autoload ;;;###autoload
(defun doom/org-find-exported-file () (defun doom/org-find-exported-file ()
(interactive) (interactive)
(in! (f-slash doom-org-export-directory) (let ((default-directory (f-slash doom-org-export-directory)))
(helm-find-files nil))) (counsel-find-file)))
;;;###autoload ;;;###autoload
(defun doom/org-get-property (name) (defun doom/org-get-property (name)

View file

@ -25,6 +25,10 @@
:mode "\\.less$" :mode "\\.less$"
:config (push '("less" "css") projectile-other-file-alist)) :config (push '("less" "css") projectile-other-file-alist))
(use-package counsel-css
:commands (counsel-css counsel-css-imenu-setup)
:init (add-hook 'css-mode-hook 'counsel-css-imenu-setup))
;; ;;
;; Sass ;; Sass
@ -50,10 +54,7 @@
(map! :map (css-mode-map sass-mode-map scss-mode-map) (map! :map (css-mode-map sass-mode-map scss-mode-map)
:n "M-R" 'doom/web-refresh-browser :n "M-R" 'doom/web-refresh-browser
(:localleader :nv ";" 'doom/append-semicolon) (:localleader :nv ";" 'doom/append-semicolon))
(:leader
:n ";" 'helm-css-scss
:n ":" 'helm-css-scss-multi))
(provide 'module-css) (provide 'module-css)
;;; module-css.el ends here ;;; module-css.el ends here

View file

@ -4,8 +4,10 @@
(map! "<f9>" 'what-face (map! "<f9>" 'what-face
;; Essential ;; Essential
"M-x" 'helm-M-x "M-x" 'smex
"A-x" 'helm-M-x "A-x" 'smex
"M-X" 'smex-major-mode-commands
"A-X" 'smex-major-mode-commands
"M-;" 'eval-expression "M-;" 'eval-expression
"A-;" 'eval-expression "A-;" 'eval-expression
;; Tools ;; Tools
@ -54,7 +56,7 @@
"A-SPC" 'just-one-space "A-SPC" 'just-one-space
"M-a" 'mark-whole-buffer "M-a" 'mark-whole-buffer
"M-c" 'evil-yank "M-c" 'evil-yank
"M-o" 'helm-find-files "M-o" 'counsel-find-file
"M-q" 'evil-quit-all "M-q" 'evil-quit-all
"M-s" 'save-buffer "M-s" 'save-buffer
"M-v" 'clipboard-yank "M-v" 'clipboard-yank
@ -76,24 +78,23 @@
;;; <leader> and <localleader> ;;; <leader> and <localleader>
:m ";" 'evil-ex :m ";" 'evil-ex
(:leader (:leader
:nv "," 'doom/helm-buffers-dwim :nv "," 'doom/switch-to-project-buffer
:nv "." 'helm-find-files :nv "<" 'doom/switch-to-buffer
:nv "/" 'helm-projectile-find-file :nv "." 'counsel-find-file
:nv ":" 'helm-imenu-in-all-buffers :nv ">" 'projectile-find-file-in-known-projects
:nv ";" 'helm-semantic-or-imenu :nv "/" 'counsel-projectile-find-file
:nv "<" 'helm-buffers-list :n ":" 'imenu-list-minor-mode
:nv ";" 'counsel-imenu
:v "=" 'align-regexp :v "=" 'align-regexp
:nv ">" 'helm-projectile-find-file-in-known-projects :nv "a" 'projectile-find-other-file
:nv "]" 'helm-etags-select :n "b" 'counsel-bookmark
:nv "a" 'helm-projectile-find-other-file
:n "b" 'helm-bookmarks
:n "e" 'doom/flycheck-errors :n "e" 'doom/flycheck-errors
:n "k" 'doom:docs-lookup :n "k" 'doom:docs-lookup
:nv "l" 'doom/nlinum-toggle :nv "l" 'doom/nlinum-toggle
:nv "m" 'helm-recentf :nv "m" 'ivy-recentf
:nv "M" 'helm-projectile-recentf :nv "M" 'projectile-recentf
:nv "p" 'helm-show-kill-ring :nv "p" 'counsel-yank-pop
:nv "P" 'helm-projectile-switch-project :nv "P" 'counsel-projectile
:n "R" 'doom/reset-theme :n "R" 'doom/reset-theme
:n "s" 'yas-visit-snippet-file :n "s" 'yas-visit-snippet-file
:n "S" 'doom/yas-find-file :n "S" 'doom/yas-find-file
@ -101,8 +102,8 @@
:nv "Q" 'evil-save-and-quit :nv "Q" 'evil-save-and-quit
:nv "C-q" 'doom/kill-all-buffers-do-not-remember :nv "C-q" 'doom/kill-all-buffers-do-not-remember
;; Quick access to config files ;; Quick access to config files
:nv "E" 'doom/helm-find-in-emacsd :nv "E" 'doom/find-file-in-emacsd
:nv "\\" 'doom/helm-find-in-dotfiles :nv "\\" 'doom/find-file-in-dotfiles
;; Alternative to C-h (used as window shortcut) ;; Alternative to C-h (used as window shortcut)
:n "h" 'help-command :n "h" 'help-command
(:prefix "d" ; <diff> (:prefix "d" ; <diff>
@ -139,7 +140,6 @@
(:localleader (:localleader
:n "\\" 'doom/neotree :n "\\" 'doom/neotree
:n "]" 'imenu-list-minor-mode
:n "b" 'doom:build :n "b" 'doom:build
:n "R" 'doom:repl :n "R" 'doom:repl
:v "R" 'doom:repl-eval :v "R" 'doom:repl-eval
@ -175,8 +175,7 @@
;; Increment/decrement number under cursor ;; Increment/decrement number under cursor
:n "g=" 'evil-numbers/inc-at-pt :n "g=" 'evil-numbers/inc-at-pt
:n "g-" 'evil-numbers/dec-at-pt :n "g-" 'evil-numbers/dec-at-pt
;; NOTE: Helm is too bulky for ffap (which I use for quick file navigation) :n "gf" 'find-file-at-point
:n "gf" (λ! (helm-mode -1) (call-interactively 'find-file-at-point) (helm-mode 1))
;; Navigation ;; Navigation
:nv "K" 'smart-up :nv "K" 'smart-up
:m "gD" 'doom/find-def :m "gD" 'doom/find-def
@ -298,7 +297,7 @@
[tab] 'doom/company-complete-common-or-complete-full [tab] 'doom/company-complete-common-or-complete-full
"<backtab>" 'company-select-previous "<backtab>" 'company-select-previous
[escape] (λ! (company-abort) (evil-normal-state 1)) [escape] (λ! (company-abort) (evil-normal-state 1))
"<C-return>" 'helm-company) [C-return] 'counsel-company)
(:map company-search-map (:map company-search-map
"C-n" 'company-search-repeat-forward "C-n" 'company-search-repeat-forward
"C-p" 'company-search-repeat-backward "C-p" 'company-search-repeat-backward

View file

@ -8,7 +8,7 @@
;;; Custom commands ;;; Custom commands
;; Emacs utilities ;; Emacs utilities
(ex! "echo" 'doom:echo) (ex! "echo" 'doom:echo)
(ex! "minor" 'helm-describe-modes) ; list minor modes (ex! "minor" 'describe-minor-mode) ; list minor modes
(ex! "bc[omp]" 'doom:byte-compile) (ex! "bc[omp]" 'doom:byte-compile)
(ex! "re[load]" 'doom-reload) (ex! "re[load]" 'doom-reload)
(ex! "re[load]au" 'doom-reload-autoloads) (ex! "re[load]au" 'doom-reload-autoloads)
@ -26,7 +26,7 @@
(ex! "htmle[nt]" 'doom/html-entities) ; encode/decode html entities (ex! "htmle[nt]" 'doom/html-entities) ; encode/decode html entities
(ex! "ie[dit]" 'evil-multiedit-ex-match) (ex! "ie[dit]" 'evil-multiedit-ex-match)
(ex! "na[rrow]" 'doom:narrow) (ex! "na[rrow]" 'doom:narrow)
(ex! "rec[ent]" 'doom:helm-recentf) ; show recent files (ex! "mru" 'doom:ivy-recentf) ; show recent files
(ex! "ref[actor]" 'emr-show-refactor-menu) (ex! "ref[actor]" 'emr-show-refactor-menu)
(ex! "reo[rient]" 'doom/window-reorient) ; scroll all windows to left (ex! "reo[rient]" 'doom/window-reorient) ; scroll all windows to left
(ex! "retab" 'doom:whitespace-retab) (ex! "retab" 'doom:whitespace-retab)
@ -65,11 +65,11 @@
(ex! "m[sg]" 'doom/popup-messages) ; open *messages* in popup (ex! "m[sg]" 'doom/popup-messages) ; open *messages* in popup
;; Project navigation ;; Project navigation
(ex! "a" 'helm-projectile-find-other-file) (ex! "a" 'projectile-find-other-file)
(ex! "ag" 'doom:helm-ag-search) (ex! "ag" 'doom:ivy-ag-search)
(ex! "ag[cw]d" 'doom:helm-ag-search-cwd) (ex! "ag[cw]d" 'doom:ivy-ag-search-cwd)
(ex! "cd" 'doom:cd) (ex! "cd" 'doom:cd)
(ex! "se[arch]" 'doom:helm-swoop) ; in-file search (ex! "sw[iper]" 'doom:ivy-swiper) ; in-file search
;; Project tools ;; Project tools
(ex! "build" 'doom:build) (ex! "build" 'doom:build)