From 6578a877a01693dcdd1e87b0ed4ba65081f26fe7 Mon Sep 17 00:00:00 2001 From: Amin Bandali Date: Wed, 22 Aug 2018 21:19:38 -0400 Subject: [PATCH] [emacs] switch back to evil --- .gitmodules | 15 +-- init.org | 241 +++++++++++++++++++++++++++++------------------- lib/evil | 1 + lib/evil-escape | 1 + lib/evil-org | 1 + lib/key-chord | 1 - lib/ryo-modal | 1 - 7 files changed, 157 insertions(+), 104 deletions(-) create mode 160000 lib/evil create mode 160000 lib/evil-escape create mode 160000 lib/evil-org delete mode 160000 lib/key-chord delete mode 160000 lib/ryo-modal diff --git a/.gitmodules b/.gitmodules index 9d52507..c5bfcc0 100644 --- a/.gitmodules +++ b/.gitmodules @@ -59,6 +59,15 @@ [submodule "epl"] path = lib/epl url = git@github.com:cask/epl.git +[submodule "evil"] + path = lib/evil + url = git@github.com:emacs-evil/evil.git +[submodule "evil-escape"] + path = lib/evil-escape + url = git@github.com:syl20bnr/evil-escape.git +[submodule "evil-org"] + path = lib/evil-org + url = git@github.com:Somelauw/evil-org-mode.git [submodule "exec-path-from-shell"] path = lib/exec-path-from-shell url = git@github.com:purcell/exec-path-from-shell.git @@ -96,9 +105,6 @@ path = lib/ivy url = git@github.com:abo-abo/swiper.git info-path = doc -[submodule "key-chord"] - path = lib/key-chord - url = git@github.com:emacsorphanage/key-chord.git [submodule "lcr"] path = lib/lcr url = git@github.com:jyp/lcr.git @@ -162,9 +168,6 @@ [submodule "proof-site"] # Proof General path = lib/proof-site url = git@github.com:ProofGeneral/PG.git -[submodule "ryo-modal"] - path = lib/ryo-modal - url = git@github.com:Kungsgeten/ryo-modal.git [submodule "s"] path = lib/s url = git@github.com:magnars/s.el.git diff --git a/init.org b/init.org index b47a513..6aebbf1 100644 --- a/init.org +++ b/init.org @@ -609,68 +609,119 @@ customizing it. 'auto-compile-inhibit-compile-detached-git-head)) #+end_src -*** [[https://github.com/Kungsgeten/ryo-modal][ryo-modal]] +*** [[https://github.com/noctuid/general.el][general]] -#+begin_quote -Roll your own modal mode -#+end_quote + #+begin_src emacs-lisp +(use-package general + :demand t + :config + (general-evil-setup t) + + (general-override-mode) + + (general-create-definer + amin--mode-leader-keys + :keymaps 'override + :states '(emacs normal visual motion insert) + :non-normal-prefix "C-," + :prefix ",") + + (general-create-definer + amin--leader-keys + :keymaps 'override + :states '(emacs normal visual motion insert) + :non-normal-prefix "M-m" + :prefix "SPC")) +#+end_src + +*** evil + +#+begin_src emacs-lisp +(use-package evil + :demand t + :hook (view-mode . evil-motion-state) + :config (evil-mode 1) + (general-swap-key nil '(normal motion) ";" ":") + (setq evil-want-visual-char-semi-exclusive t)) +#+end_src + +#+begin_src emacs-lisp +(use-package evil-escape + :demand t + :init + (setq evil-escape-excluded-states '(normal visual multiedit emacs motion) + evil-escape-excluded-major-modes '(neotree-mode) + evil-escape-key-sequence "jk" + evil-escape-delay 0.25) + :general + (:states '(insert replace visual operator) + "C-g" #'evil-escape) + :config + (evil-escape-mode 1) + ;; no `evil-escape' in minibuffer + (push #'minibufferp evil-escape-inhibit-functions)) +#+end_src #+begin_src emacs-lisp -(use-package ryo-modal - :commands ryo-modal-mode - :bind ("M-m" . ryo-modal-mode) - :after which-key +(use-package evil-org + :hook (org-mode . evil-org-mode) + :general + (nvmap evil-org-mode-map + "TAB" 'org-cycle + "S-TAB" 'org-cycle) :config - (push '((nil . "ryo:.*:") . (nil . "")) which-key-replacement-alist) - (ryo-modal-keys - ("," ryo-modal-repeat) - ("b" backward-char) - ("n" next-line) - ("p" previous-line) - ("f" forward-char) - ("/" undo) - ("i" ryo-modal-mode) - ("l" recenter-top-bottom) - ("v" scroll-up-command) - ("V" scroll-down-command) - ("x" delete-forward-char) - ("SPC" (("b" (("b" ibuffer-list-buffers) - ("k" kill-this-buffer) - ("o" other-window) - ("s" save-buffer))) - ("B" (("A" borg-activate) - ("a" borg-assimilate) - ("b" borg-build) - ("c" borg-clone) - ("r" borg-remove))) - ("h" (("c" describe-char) - ("f" describe-function) - ("F" describe-face) - ("i" info) - ("k" describe-key) - ("l" view-lossage) - ("v" describe-variable))) - ("q" (("q" save-buffers-kill-terminal))))) - ("d" (("w" kill-word) - ("b" backward-kill-word))) - ("c w" kill-word :exit t)) - - (ryo-modal-keys - ;; First argyment to ryo-modal-keys may be a list of keywords. - ;; These keywords will be applied to all keybindings. - (:norepeat t) - ("0" "M-0") - ("1" "M-1") - ("2" "M-2") - ("3" "M-3") - ("4" "M-4") - ("5" "M-5") - ("6" "M-6") - ("7" "M-7") - ("8" "M-8") - ("9" "M-9")) - :hook ((text-mode . ryo-modal-mode) - (prog-mode . ryo-modal-mode))) + (evil-org-set-key-theme) + (require 'evil-org-agenda) + (evil-org-agenda-set-keys) + (nmap evil-org-mode-map + [backtab] 'org-shifttab) + (after! org-src + (define-key org-src-mode-map [remap evil-write] 'org-edit-src-save) + (define-key org-src-mode-map [remap evil-save-and-close] + (lambda () (interactive) + (org-edit-src-save) + (org-edit-src-exit))) + (define-key org-src-mode-map [remap evil-save-modified-and-close] + (lambda () (interactive) + (org-edit-src-save) + (org-edit-src-exit))))) +#+end_src + +#+begin_src emacs-lisp +(amin--leader-keys + "B" '(:ignore t :wk "Borg") + "BA" 'borg-activate + "Ba" 'borg-assimilate + "Bb" 'borg-build + "Bc" 'borg-clone + "Bd" 'epkg-describe-package + "Bp" 'epkg-list-packages + "Br" 'borg-remove + "Bu" 'epkg-update + + "b" '(:ignore t :wk "buffers") + "bb" 'ibuffer-list-buffers + "bk" 'kill-this-buffer + "bs" 'save-buffer + + "f" '(:ignore t :wk "files") + + "h" '(:ignore t :wk "help") + "hc" 'describe-char + "hf" 'describe-function + "hF" 'describe-face + "hi" 'info + "hk" 'describe-key + "hl" 'view-lossage + "hv" 'describe-variable + + "o" 'other-window + + "w" '(:ignore t :wk "window") + "wo" 'other-window + + "q" '(:ignore t :wk "quit") + "qq" 'save-buffers-kill-terminal) #+end_src *** [[https://orgmode.org/][Org mode]] @@ -685,12 +736,15 @@ In short, my favourite way of life. #+begin_src emacs-lisp (use-package org - :ryo ("SPC b t" org-babel-tangle) + :general + (amin--leader-keys "bt" 'org-babel-tangle) + (amin--leader-keys org-mode-map "i" 'org-edit-special) :config (setq org-src-tab-acts-natively t org-src-preserve-indentation nil org-edit-src-content-indentation 0) :hook (org-mode . org-indent-mode)) + (use-package org-notmuch :after (:any org notmuch)) #+end_src @@ -705,7 +759,21 @@ Not just how I do git, but /the/ way to do git. #+begin_src emacs-lisp (use-package magit - :ryo ("SPC" (("g s" magit-status))) + :general + (amin--leader-keys + "g" '(:ignore t :wk "magit") + "g SPC" 'magit-status + "gs" 'magit-status + "gS" 'magit-status-prefix + "gB" 'magit-blame + "gC" 'magit-clone + "gf" 'magit-fetch + "gF" 'magit-pull + "gP" 'magit-push + "gcc" 'magit-commit + "gca" 'magit-commit-amend + "gbb" 'magit-checkout + "gbc" 'magit-branch) :defer t :bind (("s-g" . magit-status) ("C-x g" . magit-status) @@ -739,7 +807,7 @@ There's no way I could top that, so I won't attempt to. ([S-up] . ivy-previous-history-element) ([S-down] . ivy-next-history-element) ("DEL" . ivy-backward-delete-char)) - :ryo ("SPC ," ivy-switch-buffer) + :general (amin--leader-keys "," 'ivy-switch-buffer) :config (setq ivy-wrap t) (ivy-mode 1)) @@ -749,9 +817,7 @@ There's no way I could top that, so I won't attempt to. #+begin_src emacs-lisp (use-package swiper - :ryo - ("SPC /" swiper) - ("s" swiper) + :general (:states 'normal "/" 'swiper) :bind (([remap isearch-forward] . swiper) ([remap isearch-backward] . swiper))) #+end_src @@ -761,10 +827,11 @@ There's no way I could top that, so I won't attempt to. #+begin_src emacs-lisp (use-package counsel :defer 1 - :ryo - ("SPC" (("f r" counsel-recentf) - ("SPC" counsel-M-x) - ("." counsel-find-file))) + :general + (amin--leader-keys + "fr" 'counsel-recentf + "SPC" 'counsel-M-x + "." 'counsel-find-file) :bind (([remap execute-extended-command] . counsel-M-x) ([remap find-file] . counsel-find-file) ("s-r" . counsel-recentf) @@ -851,9 +918,6 @@ TODO: break this giant source block down into individual org sections. (list (regexp-quote (system-name)) nil nil))) (use-package undo-tree - :ryo - ("?" undo-tree-undo) - ("_" undo-tree-redo) :bind (("C-?" . undo-tree-undo) ("M-_" . undo-tree-redo)) :config @@ -1144,15 +1208,12 @@ Emacs package that displays available keybindings in popup (use-package crux :bind (("C-c d" . crux-duplicate-current-line-or-region) ("C-c M-d" . crux-duplicate-and-comment-current-line-or-region)) - :ryo - ("o" crux-smart-open-line :exit t) - ("O" crux-smart-open-line-above :exit t) - ("SPC b K" crux-kill-other-buffers) - ("d d" crux-kill-whole-line) - ("c c" crux-kill-whole-line :then '(crux-smart-open-line-above) :exit t) - ("SPC f" (("c" crux-copy-file-preserve-attributes) - ("D" crux-delete-file-and-buffer) - ("R" crux-rename-file-and-buffer)))) + :general + (amin--leader-keys + "bK" 'crux-kill-other-buffers + "fc" 'crux-copy-file-preserve-attributes + "fD" 'crux-delete-file-and-buffer + "fR" 'crux-rename-file-and-buffer)) #+end_src ** [[https://github.com/alezost/mwim.el][mwim]] @@ -1163,21 +1224,9 @@ Emacs package that displays available keybindings in popup ("C-e" . mwim-end-of-code-or-line) ("" . mwim-beginning-of-line-or-code) ("" . mwim-end-of-line-or-code)) - :ryo - ("a" mwim-beginning-of-code-or-line) - ("e" mwim-end-of-code-or-line)) -#+end_src - -** [[https://www.emacswiki.org/emacs/KeyChord][key-chord]] - -#+begin_src emacs-lisp -(use-package key-chord - :demand t - :config - (key-chord-mode 1) - (key-chord-define-global "jk" 'ryo-modal-mode) - (setq key-chord-one-key-delay 0 ; i don't need one-key chords for now - key-chord-two-keys-delay 0.005)) + :general (:states '(normal visual) + "0" 'mwim-beginning-of-code-or-line + "$" 'mwim-end-of-code-or-line)) #+end_src * Email @@ -1241,7 +1290,7 @@ See [[notmuch:id:87muuqsvci.fsf@fencepost.gnu.org][bug follow-up]]. mml-secure-openpgp-sign-with-sender t)) (use-package notmuch - :ryo ("SPC m" amin/notmuch) + :general (amin--leader-keys "m" 'amin/notmuch) :config (setq notmuch-hello-sections '(notmuch-hello-insert-header diff --git a/lib/evil b/lib/evil new file mode 160000 index 0000000..3d9f76f --- /dev/null +++ b/lib/evil @@ -0,0 +1 @@ +Subproject commit 3d9f76f3add56f670042af9421b36dfb8574ad00 diff --git a/lib/evil-escape b/lib/evil-escape new file mode 160000 index 0000000..73b30bf --- /dev/null +++ b/lib/evil-escape @@ -0,0 +1 @@ +Subproject commit 73b30bfd912f40657b1306ee5849d215f0f9ffbd diff --git a/lib/evil-org b/lib/evil-org new file mode 160000 index 0000000..b6d652a --- /dev/null +++ b/lib/evil-org @@ -0,0 +1 @@ +Subproject commit b6d652a9163d3430a9e0933a554bdbee5244bbf6 diff --git a/lib/key-chord b/lib/key-chord deleted file mode 160000 index 72443e9..0000000 --- a/lib/key-chord +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 72443e9ff3c4f1c3ccaced3130236801efde3d83 diff --git a/lib/ryo-modal b/lib/ryo-modal deleted file mode 160000 index 42f8744..0000000 --- a/lib/ryo-modal +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 42f874467dfdce59b511f883496ce2624b133dd7 -- 2.20.1