;; AceJump integration is now included in evil, this gist is only preserved for historical reasons. | |
;; Please use the provided integration (it's far more advanced) | |
;; AceJump is a nice addition to evil's standard motions. | |
;; The following definitions are necessary to define evil motions for ace-jump-mode (version 2). | |
;; ace-jump is actually a series of commands which makes handling by evil | |
;; difficult (and with some other things as well), using this macro we let it | |
;; appear as one. | |
(defmacro evil-enclose-ace-jump (&rest body) | |
`(let ((old-mark (mark)) | |
(ace-jump-mode-scope 'window)) | |
(remove-hook 'pre-command-hook #'evil-visual-pre-command t) | |
(remove-hook 'post-command-hook #'evil-visual-post-command t) | |
(unwind-protect | |
(progn | |
,@body | |
(recursive-edit)) | |
(if (evil-visual-state-p) | |
(progn | |
(add-hook 'pre-command-hook #'evil-visual-pre-command nil t) | |
(add-hook 'post-command-hook #'evil-visual-post-command nil t) | |
(set-mark old-mark)) | |
(push-mark old-mark))))) | |
(evil-define-motion evil-ace-jump-char-mode (count) | |
:type exclusive | |
(evil-enclose-ace-jump | |
(ace-jump-mode 5))) | |
(evil-define-motion evil-ace-jump-line-mode (count) | |
:type line | |
(evil-enclose-ace-jump | |
(ace-jump-mode 9))) | |
(evil-define-motion evil-ace-jump-word-mode (count) | |
:type exclusive | |
(evil-enclose-ace-jump | |
(ace-jump-mode 1))) | |
(evil-define-motion evil-ace-jump-char-to-mode (count) | |
:type exclusive | |
(evil-enclose-ace-jump | |
(ace-jump-mode 5) | |
(forward-char -1))) | |
(add-hook 'ace-jump-mode-end-hook 'exit-recursive-edit) | |
;; some proposals for binding: | |
(define-key evil-motion-state-map (kbd "SPC") #'evil-ace-jump-char-mode) | |
(define-key evil-motion-state-map (kbd "C-SPC") #'evil-ace-jump-word-mode) | |
(define-key evil-operator-state-map (kbd "SPC") #'evil-ace-jump-char-mode) ; similar to f | |
(define-key evil-operator-state-map (kbd "C-SPC") #'evil-ace-jump-char-to-mode) ; similar to t | |
(define-key evil-operator-state-map (kbd "M-SPC") #'evil-ace-jump-word-mode) | |
;; different jumps for different visual modes | |
(defadvice evil-visual-line (before spc-for-line-jump activate) | |
(define-key evil-motion-state-map (kbd "SPC") #'evil-ace-jump-line-mode)) | |
(defadvice evil-visual-char (before spc-for-char-jump activate) | |
(define-key evil-motion-state-map (kbd "SPC") #'evil-ace-jump-char-mode)) | |
(defadvice evil-visual-block (before spc-for-char-jump activate) | |
(define-key evil-motion-state-map (kbd "SPC") #'evil-ace-jump-char-mode)) |
This comment has been minimized.
This comment has been minimized.
You can't differ the visual modes with the hook, so the advice is necessary. |
This comment has been minimized.
This comment has been minimized.
I can't seem to find any documentation on evil now having ace-jump mode integrated... can you forward a reference? |
This comment has been minimized.
This comment has been minimized.
Couldn't find a reference, but this worked nicely for me (24.4 from brew): (global-set-key (kbd "C-ø") 'ace-jump-mode) |
This comment has been minimized.
This comment has been minimized.
@joefromct: Just use the bindings. Evil now already comes with definitions of the motions. @endrebak: That works. But you don't have operator integration this way. You additionally need bindings in the motion state map. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This comment has been minimized.
Is there a particular reason this uses defadvice instead of hooks on evil states? Also, on my setup this doesn't restore the C-SPC keybinding to evil-ace-jump-char-mode after exiting evil visual line mode unless I add this: