complete-computing-environment/gnus_evil_mode.org

2.8 KiB

Gnus Evil Mode

I provide custom Evil Mode bindings here to control Gnus in the summary and group buffer, they're pretty straightforward, and I think this presentation is fairly legible. Evil Mode's motion state is very useful for light modes like this

(provide 'cce/gnus-evil-mode)

(defun cce/setup-gnus-evil-bindings ()
  (require 'gnus-topic)
  (setq evil-collection-mode-list
        (remove 'gnus evil-collection-mode-list))
  (mapc
   (lambda (defn)
     (evil-define-key* 'motion gnus-topic-mode-map
       (kbd (car defn))
       (cdr defn)))
   '(("RET" . gnus-topic-select-group)
     ("J" . gnus-group-next-unread-group)
     ("K" . gnus-group-prev-unread-group)
     ("gf" . gnus-topic-get-new-news-this-topic)
     ("f" . gnus-group-get-new-news)
     ("t" . gnus-topic-mode)
     ("s" . gnus-group-save-newsrc)
     ("q" . gnus-group-quit)))
  (mapc
   (lambda (defn)
     (evil-define-key* 'motion gnus-group-mode-map
       (kbd (car defn))
       (cdr defn)))
   '(("RET" . gnus-group-select-group)
     ("J" . gnus-group-next-unread-group)
     ("K" . gnus-group-prev-unread-group)
     ("gf" . gnus-group-get-new-news-this-group)
     ("f" . gnus-group-get-new-news)
     ("t" . gnus-topic-mode)
     ("s" . gnus-group-save-newsrc)
     ("q" . gnus-group-quit)))
  (mapc
   (lambda (defn)
     (evil-define-key* 'motion gnus-summary-mode-map
       (kbd (car defn))
       (cdr defn)))
   '(("RET" . gnus-summary-scroll-up)
     ("j" . gnus-summary-next-unread-article)
     ("k" . gnus-summary-prev-unread-article)
     ("J" . gnus-summary-next-article)
     ("K" . gnus-summary-prev-article)
     ("u" . gnus-summary-clear-mark-forward)
     ("U" . gnus-summary-clear-mark-backward)
     ("i" . gnus-summary-kill-same-subject-and-select)
     ("o" . gnus-summary-tick-article-forward)
     ("m" . gnus-summary-catchup-from-here)
     ("M" . gnus-summary-catchup-to-here)
     ("L" . gnus-summary-lower-score)
     ("I" . gnus-summary-increase-score)
     ("p" . gnus-summary-catchup-and-exit)
     ("d" . gnus-summary-mark-as-read-forward)
     ("n" . gnus-summary-next-page)
     ("q" . gnus-summary-exit)
     ("/" . gnus-summary-limit-map))))

(eval-after-load "gnus" #'cce/setup-gnus-evil-bindings)
(evil-set-initial-state 'gnus-summary-mode 'motion)
(evil-set-initial-state 'gnus-group-mode 'motion)