Evil experiences

Michael Markert markert.michael at googlemail.com
Tue Sep 13 22:32:44 CEST 2011

Finally I found the time to answer here.

On  8 Sep 2011, Tom Short wrote:
> I really like evil. (That's hard to write with a straight face.)

I can follow you here. The name's just great :)

> (setq evil-emacs-state-cursor '("red" box))

I use this for `evil-default-cursor':

#+begin_src emacs_lisp
(defun cofi/evil-cursor ()
  "Change cursor color according to evil-state."
  (let ((default "OliveDrab4")
        (cursor-colors '((insert . "dark orange")
                         (emacs  . "sienna")
                         (visual . "white"))))
    (setq cursor-type (if (eq evil-state 'visual)
    (set-cursor-color (def-assoc evil-state cursor-colors default))))

> (require 'key-chord) ; for mapping simultaneous key presses
> ;; http://www.emacswiki.org/emacs/key-chord.el
> (key-chord-mode 1)
> (key-chord-define-global "jk"  'evil-normal-state) ; super ESC
> (key-chord-define-global "JK"  'evil-emacs-state)
> (key-chord-define-global "df"  'evil-window-map)
> (key-chord-define evil-window-map "df" 'evil-window-prev) ; df twice

Is that a "doesn't work" for "key-chord doesn't like evil" or just for
the double df? Anyway I use this for "jk" as `ESC' (with help from Frank):

#+begin_src emacs_lisp
(evil-define-command cofi/evil-maybe-exit ()
  :repeat change
  (let ((modified (buffer-modified-p))
        (entry-key ?j)
        (exit-key ?k))
    (insert entry-key)
    (let ((evt (read-event (format "Insert %c to exit insert state" exit-key) nil 0.5)))
       ((null evt) (message ""))
       ((and (integerp evt) (char-equal evt exit-key))
          (delete-char -1)
          (set-buffer-modified-p modified)
          (push 'escape unread-command-events))
       (t (push evt unread-command-events))))))

Maybe this could be generalized for vim-like mapping support (one that
doesn't eternally wait keys if a binding is not reached)?

To contribute a tweak myself:

#+begin_src emacs_lisp
(defadvice evil-goto-definition (around evil-goto-lisp-def activate)
  "Make use of emacs' and slime's possibilities for finding definitions."
  (case major-mode
    (lisp-mode (if slime-mode
                   (or (slime-find-definitions (symbol-name (symbol-at-point)))
    (emacs-lisp-mode (condition-case nil
                         (find-function (symbol-at-point))
                       (error (condition-case nil
                                  (find-variable (symbol-at-point))
                                (error ad-do-it)))))
    (otherwise ad-do-it)))

My complete evil config is on github[1].



[1] https://github.com/cofi/dotfiles/blob/master/emacs.d/cofi-evil.el
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 835 bytes
Desc: not available
Url : https://lists.ourproject.org/pipermail/implementations-list/attachments/20110913/56d5f28c/attachment.pgp 

More information about the implementations-list mailing list