From 3ea5e792dcaadc84a2b932f7c04d4de264a30553 Mon Sep 17 00:00:00 2001 From: Amin Bandali Date: Sun, 24 Jun 2018 13:48:25 -0400 Subject: [PATCH] [emacs] add evil{,-escape} and general and some keybindings --- .gitmodules | 9 ++++++ init.org | 75 ++++++++++++++++++++++++++++++++++++++++++++++++- lib/evil | 1 + lib/evil-escape | 1 + lib/general | 1 + 5 files changed, 86 insertions(+), 1 deletion(-) create mode 160000 lib/evil create mode 160000 lib/evil-escape create mode 160000 lib/general diff --git a/.gitmodules b/.gitmodules index 5c2d05f..28eced6 100644 --- a/.gitmodules +++ b/.gitmodules @@ -40,6 +40,12 @@ [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 "exec-path-from-shell"] path = lib/exec-path-from-shell url = git@github.com:purcell/exec-path-from-shell.git @@ -55,6 +61,9 @@ [submodule "flycheck-haskell"] path = lib/flycheck-haskell url = git@github.com:flycheck/flycheck-haskell.git +[submodule "general"] + path = lib/general + url = git@github.com:noctuid/general.el.git [submodule "ghub"] path = lib/ghub url = git@github.com:magit/ghub.git diff --git a/init.org b/init.org index 6d927c9..04719f0 100644 --- a/init.org +++ b/init.org @@ -582,12 +582,61 @@ customizing it. 'auto-compile-inhibit-compile-detached-git-head)) #+end_src -*** TODO [[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 + ab--mode-leader-keys + :keymaps 'override + :states '(emacs normal visual motion insert) + :non-normal-prefix "C-," + :prefix ",") + + (general-create-definer + ab--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)) +#+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 + *** [[https://github.com/ch11ng/exwm][EXWM]] (window manager) #+begin_src emacs-lisp :tangle no @@ -828,6 +877,7 @@ In short, my favourite way of life. (setq org-src-tab-acts-natively t org-src-preserve-indentation nil org-edit-src-content-indentation 0) +(add-hook 'org-mode-hook 'org-indent-mode) #+end_src *** [[https://magit.vc/][Magit]] @@ -840,6 +890,7 @@ Not just how I do git, but /the/ way to do git. #+begin_src emacs-lisp (use-package magit + :general (ab--leader-keys "g s" 'magit-status) :defer t :bind (("s-g" . magit-status) ("C-x g" . magit-status) @@ -864,6 +915,7 @@ There's no way I could top that, so I won't attempt to. #+begin_src emacs-lisp (use-package ivy + :defer 1 :bind (:map ivy-minibuffer-map ([escape] . keyboard-escape-quit) @@ -881,6 +933,7 @@ There's no way I could top that, so I won't attempt to. #+begin_src emacs-lisp (use-package swiper + :general (:states 'normal "/" 'swiper) :bind (([remap isearch-forward] . swiper) ([remap isearch-backward] . swiper))) #+end_src @@ -890,6 +943,10 @@ There's no way I could top that, so I won't attempt to. #+begin_src emacs-lisp (use-package counsel :defer 1 + :general (ab--leader-keys + "f r" '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) @@ -1000,6 +1057,16 @@ TODO: break this giant source block down into individual org sections. (global-company-mode t)) #+end_src +** Customizations + +#+begin_src emacs-lisp +(ab--leader-keys + "b s" 'save-buffer + "b b" 'ivy-switch-buffer + "b k" 'kill-buffer + "q q" 'evil-save-and-quit) +#+end_src + * Syntax and spell checking #+begin_src emacs-lisp (use-package flycheck @@ -1230,6 +1297,11 @@ Emacs package that displays available keybindings in popup (delete-other-windows) (notmuch)) +;; (ab--leader-keys +;; "m" 'ab/notmuch +;; "s" 'save-buffer +;; "SPC" 'counsel-M-x) + ;; (map! ;; :leader ;; :desc "notmuch" :n "m" #'ab/notmuch @@ -1277,6 +1349,7 @@ Emacs package that displays available keybindings in popup mml-secure-openpgp-sign-with-sender t)) (use-package notmuch + :general (ab--leader-keys "m" 'ab/notmuch) :config (setq notmuch-hello-sections '(notmuch-hello-insert-header diff --git a/lib/evil b/lib/evil new file mode 160000 index 0000000..230b872 --- /dev/null +++ b/lib/evil @@ -0,0 +1 @@ +Subproject commit 230b87212c81aaa68ef5547a6b998d9c365fe139 diff --git a/lib/evil-escape b/lib/evil-escape new file mode 160000 index 0000000..25920fb --- /dev/null +++ b/lib/evil-escape @@ -0,0 +1 @@ +Subproject commit 25920fb2f4ef48998eecea433c04096f8d124cfe diff --git a/lib/general b/lib/general new file mode 160000 index 0000000..38590b2 --- /dev/null +++ b/lib/general @@ -0,0 +1 @@ +Subproject commit 38590b2b40d9ae71a047914f938416a7bd01e370 -- 2.20.1