* Modal Editing I like using =vi= inspired modal editing. For a while I tried project evil, but I had issues keeping up with all the binding management. This is how I came to start using [[https://github.com/meow-edit/meow][meow]]. Aside from motions and a few other changes the meow system mostly keeps emacs bindings similar, and also accessible via space. This way you can switch between meow, and emacs bindings pretty seemlessly. Here are my bindings which come from the Meow wiki. It is /mostly/ akin to =vi= bindings. Though deletion and line editing are a good deal different. #+begin_src emacs-lisp (defun meow-setup () (setq meow-cheatsheet-layout meow-cheatsheet-layout-qwerty) (dolist (state '((notmuch-hello-mode . motion) (notmuch-search-mode . motion) (notmuch-tree-mode . motion) (notmuch-show-mode . motion))) (add-to-list 'meow-mode-state-list state)) (meow-motion-define-key '("j" . meow-next) '("k" . meow-prev) '("" . ignore)) (meow-leader-define-key ;; Use SPC (0-9) for digit arguments. '("1" . meow-digit-argument) '("2" . meow-digit-argument) '("3" . meow-digit-argument) '("4" . meow-digit-argument) '("5" . meow-digit-argument) '("6" . meow-digit-argument) '("7" . meow-digit-argument) '("8" . meow-digit-argument) '("9" . meow-digit-argument) '("0" . meow-digit-argument) '("/" . meow-keypad-describe-key) '("?" . meow-cheatsheet)) (meow-normal-define-key '("C-," . major-mode-hydra) '("0" . meow-expand-0) '("9" . meow-expand-9) '("8" . meow-expand-8) '("7" . meow-expand-7) '("6" . meow-expand-6) '("5" . meow-expand-5) '("4" . meow-expand-4) '("3" . meow-expand-3) '("2" . meow-expand-2) '("1" . meow-expand-1) '("-" . negative-argument) '(";" . meow-reverse) '("," . meow-inner-of-thing) '("." . meow-bounds-of-thing) '("[" . meow-beginning-of-thing) '("]" . meow-end-of-thing) '("a" . meow-append) '("A" . meow-open-below) '("b" . meow-back-word) '("B" . meow-back-symbol) '("c" . meow-change) '("d" . meow-delete) '("D" . meow-backward-delete) '("e" . meow-next-word) '("E" . meow-next-symbol) '("f" . meow-find) '("g" . meow-cancel-selection) '("G" . meow-grab) '("h" . meow-left) '("H" . meow-left-expand) '("i" . meow-insert) '("I" . meow-open-above) '("j" . meow-next) '("J" . meow-next-expand) '("k" . meow-prev) '("K" . meow-prev-expand) '("l" . meow-right) '("L" . meow-right-expand) '("m" . meow-join) '("n" . meow-search) '("o" . meow-block) '("O" . meow-to-block) '("p" . meow-yank) '("P" . meow-yank-pop) '("q" . meow-quit) '("Q" . meow-goto-line) '("r" . meow-replace) '("R" . meow-swap-grab) '("s" . meow-kill) '("t" . meow-till) '("u" . meow-undo) '("U" . meow-undo-in-selection) '("v" . meow-visit) '("w" . meow-mark-word) '("W" . meow-mark-symbol) '("x" . meow-line) '("X" . meow-goto-line) '("y" . meow-save) '("Y" . meow-sync-grab) '("z" . meow-pop-selection) '("/" . consult-line) '("'" . repeat) '("" . ignore))) #+end_src There's also no dependencies that rely on meow so adding this is pretty straight forward. #+begin_src emacs-lisp (use-package meow :ensure t :config (meow-setup) (meow-global-mode 1)) #+end_src