about summary refs log tree commit diff
path: root/emacs
diff options
context:
space:
mode:
authorWilliam Carroll <wpcarro@gmail.com>2020-02-14T15·38+0000
committerWilliam Carroll <wpcarro@gmail.com>2020-02-14T15·38+0000
commit0456a1c4b4405da2681296b2250681454637d80f (patch)
tree89b472aa0277ce7d7e23f4bdfa4df8b3d1cb8818 /emacs
parent8105af7b8d9584c354568d8d49c8354d20018387 (diff)
Define notmuch KBDs
Until I have more opinions about my workflow with notmuch, I will redefine the
KBDs from Gmail that I'm comfortable with. While not many KBDs are defined here,
evil-collection defines dozens, many of which I find reasonable; those that I
disagree with, I've unbound in this commit.

Composing emails in notmuch feels similar to writing a commit message with
magit. I want to be able to type :x or :wq, but these commands don't DWIM. For
magit, I'd like that behavior to be the same as `C-c C-c`; not surprisingly, for
notmuch, I'd like the same.

I've bound :x to do this for notmuch. I'd like to define a macro that can easily
define buffer-local evil-ex commands for particular modes. This should lower the
cost of defining evil-ex commands and hopefully convince me to support some of
this desired behavior.
Diffstat (limited to 'emacs')
-rw-r--r--emacs/.emacs.d/wpc/keybindings.el44
1 files changed, 44 insertions, 0 deletions
diff --git a/emacs/.emacs.d/wpc/keybindings.el b/emacs/.emacs.d/wpc/keybindings.el
index c9af5b48d1e9..f756e48dbe99 100644
--- a/emacs/.emacs.d/wpc/keybindings.el
+++ b/emacs/.emacs.d/wpc/keybindings.el
@@ -21,6 +21,7 @@
 (require 'buffer)
 (require 'display)
 (require 'device)
+(require 'evil-ex)
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Configuration
@@ -85,5 +86,48 @@
    "D0" #'display/disable-4k
    "D1" #'display/enable-4k))
 
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; notmuch
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;; evil-collection adds many KBDs to notmuch modes. Some of these I find
+;; disruptive.
+(general-define-key
+ :states '(normal)
+ :keymaps '(notmuch-show-mode-map)
+ "M-j" nil
+ "M-k" nil
+ "<C-S-iso-lefttab>" #'notmuch-show-previous-thread-show
+ "<C-tab>" #'notmuch-show-next-thread-show
+ "e" #'notmuch-show-archive-message-then-next-or-next-thread)
+
+;; TODO(wpcarro): Consider moving this to a separate module
+(defun evil-ex-define-cmd-local (cmd f)
+  "Define CMD to F locally to a buffer."
+  (unless (local-variable-p 'evil-ex-commands)
+    (setq-local evil-ex-commands (copy-alist evil-ex-commands)))
+  (evil-ex-define-cmd cmd f))
+
+;; TODO(wpcarro): Support a macro that can easily define evil-ex commands for a
+;; particular mode.
+;; Consumption:
+;; (evil-ex-for-mode 'notmuch-message-mode
+;;                   "x" #'notmuch-mua-send-and-exit)
+
+(add-hook 'notmuch-message-mode-hook
+          (lambda ()
+            (evil-ex-define-cmd-local "x" #'notmuch-mua-send-and-exit)))
+
+;; For now, I'm mimmicking Gmail KBDs that I have memorized and enjoy
+(general-define-key
+ :states '(normal)
+ :keymaps '(notmuch-search-mode-map)
+ "e" #'notmuch-search-archive-thread)
+
+(general-define-key
+ :states '(normal)
+ :prefix "<SPC>"
+ "gn" #'notmuch)
+
 (provide 'keybindings)
 ;;; keybindings.el ends here