From bdf9a71ab7baa2b1de9abcfd5df1a9107a55d141 Mon Sep 17 00:00:00 2001 From: Jack Jamison Date: Sun, 5 Jul 2026 01:19:30 -0400 Subject: add a bunch of emacs packages HELP --- .config/emacs/lisp/evil-collection/modes/.nosearch | 0 .../modes/2048-game/evil-collection-2048-game.el | 54 ++ .../emacs/lisp/evil-collection/modes/ag/README.org | 22 + .../evil-collection/modes/ag/evil-collection-ag.el | 63 ++ .../evil-collection/modes/agent-shell/README.org | 137 ++++ .../agent-shell/evil-collection-agent-shell.el | 254 +++++++ .../modes/alchemist/evil-collection-alchemist.el | 114 ++++ .../anaconda-mode/evil-collection-anaconda-mode.el | 66 ++ .../lisp/evil-collection/modes/apropos/README.org | 15 + .../modes/apropos/evil-collection-apropos.el | 52 ++ .../lisp/evil-collection/modes/arc-mode/README.org | 30 + .../modes/arc-mode/evil-collection-arc-mode.el | 78 +++ .../atomic-chrome/evil-collection-atomic-chrome.el | 42 ++ .../evil-collection-auto-package-update.el | 44 ++ .../modes/beginend/evil-collection-beginend.el | 125 ++++ .../modes/bluetooth/evil-collection-bluetooth.el | 59 ++ .../evil-collection/modes/bm/evil-collection-bm.el | 54 ++ .../lisp/evil-collection/modes/bookmark/README.org | 36 + .../modes/bookmark/evil-collection-bookmark.el | 78 +++ .../evil-collection/modes/buff-menu/README.org | 35 + .../modes/buff-menu/evil-collection-buff-menu.el | 78 +++ .../modes/bufler/evil-collection-bufler.el | 57 ++ .../lisp/evil-collection/modes/calc/README.org | 52 ++ .../modes/calc/evil-collection-calc.el | 172 +++++ .../lisp/evil-collection/modes/calendar/README.org | 63 ++ .../modes/calendar/evil-collection-calendar.el | 146 ++++ .../lisp/evil-collection/modes/cider/README.org | 164 +++++ .../modes/cider/evil-collection-cider.el | 253 +++++++ .../modes/citre/evil-collection-citre.el | 47 ++ .../evil-collection/modes/cmake-mode/README.org | 13 + .../modes/cmake-mode/evil-collection-cmake-mode.el | 44 ++ .../modes/color-rg/evil-collection-color-rg.el | 71 ++ .../lisp/evil-collection/modes/comint/README.org | 29 + .../modes/comint/evil-collection-comint.el | 74 ++ .../lisp/evil-collection/modes/company/README.org | 51 ++ .../modes/company/evil-collection-company.el | 138 ++++ .../lisp/evil-collection/modes/compile/README.org | 18 + .../modes/compile/evil-collection-compile.el | 67 ++ .../lisp/evil-collection/modes/consult/README.org | 26 + .../modes/consult/evil-collection-consult.el | 123 ++++ .../lisp/evil-collection/modes/corfu/README.org | 54 ++ .../modes/corfu/evil-collection-corfu.el | 180 +++++ .../modes/crdt/evil-collection-crdt.el | 57 ++ .../modes/csv/evil-collection-csv.el | 43 ++ .../evil-collection/modes/cus-theme/README.org | 30 + .../modes/cus-theme/evil-collection-cus-theme.el | 65 ++ .../lisp/evil-collection/modes/custom/README.org | 16 + .../modes/custom/evil-collection-custom.el | 68 ++ .../modes/daemons/evil-collection-daemons.el | 68 ++ .../lisp/evil-collection/modes/dape/README.org | 29 + .../modes/dape/evil-collection-dape.el | 74 ++ .../modes/dashboard/evil-collection-dashboard.el | 91 +++ .../lisp/evil-collection/modes/deadgrep/README.org | 24 + .../modes/deadgrep/evil-collection-deadgrep.el | 64 ++ .../modes/debbugs/evil-collection-debbugs.el | 81 +++ .../lisp/evil-collection/modes/debug/README.org | 26 + .../modes/debug/evil-collection-debug.el | 79 +++ .../modes/devdocs/evil-collection-devdocs.el | 66 ++ .../modes/dictionary/evil-collection-dictionary.el | 51 ++ .../lisp/evil-collection/modes/diff-hl/README.org | 29 + .../modes/diff-hl/evil-collection-diff-hl.el | 75 +++ .../evil-collection/modes/diff-mode/README.org | 66 ++ .../modes/diff-mode/evil-collection-diff-mode.el | 222 ++++++ .../evil-collection/modes/difftastic/README.org | 20 + .../modes/difftastic/evil-collection-difftastic.el | 57 ++ .../dired-sidebar/evil-collection-dired-sidebar.el | 52 ++ .../lisp/evil-collection/modes/dired/README.org | 40 ++ .../modes/dired/evil-collection-dired.el | 224 ++++++ .../modes/disk-usage/evil-collection-disk-usage.el | 89 +++ .../modes/distel/evil-collection-distel.el | 81 +++ .../lisp/evil-collection/modes/doc-view/README.org | 42 ++ .../modes/doc-view/evil-collection-doc-view.el | 89 +++ .../modes/docker/evil-collection-docker.el | 89 +++ .../lisp/evil-collection/modes/eat/README.org | 37 + .../modes/eat/evil-collection-eat.el | 124 ++++ .../modes/ebib/evil-collection-ebib.el | 77 +++ .../modes/ebuku/evil-collection-ebuku.el | 63 ++ .../modes/eca/evil-collection-eca.el | 56 ++ .../modes/edbi/evil-collection-edbi.el | 108 +++ .../lisp/evil-collection/modes/edebug/README.org | 53 ++ .../modes/edebug/evil-collection-edebug.el | 126 ++++ .../lisp/evil-collection/modes/ediff/README.org | 21 + .../modes/ediff/evil-collection-ediff.el | 205 ++++++ .../lisp/evil-collection/modes/eglot/README.org | 19 + .../modes/eglot/evil-collection-eglot.el | 50 ++ .../lisp/evil-collection/modes/eldoc/README.org | 19 + .../modes/eldoc/evil-collection-eldoc.el | 67 ++ .../lisp/evil-collection/modes/elfeed/README.org | 64 ++ .../modes/elfeed/evil-collection-elfeed.el | 139 ++++ .../evil-collection/modes/elisp-mode/README.org | 23 + .../modes/elisp-mode/evil-collection-elisp-mode.el | 99 +++ .../evil-collection/modes/elisp-refs/README.org | 12 + .../modes/elisp-refs/evil-collection-elisp-refs.el | 52 ++ .../modes/elisp-slime-nav/README.org | 11 + .../evil-collection-elisp-slime-nav.el | 44 ++ .../modes/elpaca/evil-collection-elpaca.el | 118 ++++ .../lisp/evil-collection/modes/embark/README.org | 19 + .../modes/embark/evil-collection-embark.el | 52 ++ .../modes/ement/evil-collection-ement.el | 138 ++++ .../lisp/evil-collection/modes/emms/README.org | 131 ++++ .../modes/emms/evil-collection-emms.el | 266 ++++++++ .../lisp/evil-collection/modes/emoji/README.org | 13 + .../modes/emoji/evil-collection-emoji.el | 44 ++ .../lisp/evil-collection/modes/epa/README.org | 34 + .../modes/epa/evil-collection-epa.el | 71 ++ .../lisp/evil-collection/modes/ert/README.org | 24 + .../modes/ert/evil-collection-ert.el | 71 ++ .../lisp/evil-collection/modes/eshell/README.org | 36 + .../modes/eshell/evil-collection-eshell.el | 168 +++++ .../evil-collection/modes/eval-sexp-fu/README.org | 16 + .../eval-sexp-fu/evil-collection-eval-sexp-fu.el | 61 ++ .../lisp/evil-collection/modes/evil-mc/README.org | 49 ++ .../modes/evil-mc/evil-collection-evil-mc.el | 79 +++ .../lisp/evil-collection/modes/eww/README.org | 61 ++ .../modes/eww/evil-collection-eww.el | 128 ++++ .../evil-collection-explain-pause-mode.el | 50 ++ .../modes/fanyi/evil-collection-fanyi.el | 47 ++ .../lisp/evil-collection/modes/finder/README.org | 13 + .../modes/finder/evil-collection-finder.el | 49 ++ .../lisp/evil-collection/modes/flycheck/README.org | 18 + .../modes/flycheck/evil-collection-flycheck.el | 56 ++ .../lisp/evil-collection/modes/flymake/README.org | 15 + .../modes/flymake/evil-collection-flymake.el | 52 ++ .../lisp/evil-collection/modes/forge/README.org | 44 ++ .../modes/forge/evil-collection-forge.el | 113 ++++ .../modes/free-keys/evil-collection-free-keys.el | 53 ++ .../lisp/evil-collection/modes/fzfa/README.org | 19 + .../modes/fzfa/evil-collection-fzfa.el | 111 +++ .../lisp/evil-collection/modes/geiser/README.org | 62 ++ .../modes/geiser/evil-collection-geiser.el | 115 ++++ .../modes/ggtags/evil-collection-ggtags.el | 104 +++ .../modes/git-timemachine/README.org | 20 + .../evil-collection-git-timemachine.el | 49 ++ .../modes/gited/evil-collection-gited.el | 157 +++++ .../lisp/evil-collection/modes/gnus/README.org | 274 ++++++++ .../modes/gnus/evil-collection-gnus.el | 491 ++++++++++++++ .../lisp/evil-collection/modes/go-mode/README.org | 19 + .../modes/go-mode/evil-collection-go-mode.el | 47 ++ .../lisp/evil-collection/modes/gptel/README.org | 47 ++ .../modes/gptel/evil-collection-gptel.el | 82 +++ .../lisp/evil-collection/modes/grep/README.org | 15 + .../modes/grep/evil-collection-grep.el | 49 ++ .../modes/guix/evil-collection-guix.el | 217 ++++++ .../modes/hackernews/evil-collection-hackernews.el | 63 ++ .../lisp/evil-collection/modes/helm/README.org | 107 +++ .../modes/helm/evil-collection-helm.el | 238 +++++++ .../lisp/evil-collection/modes/help/README.org | 23 + .../modes/help/evil-collection-help.el | 80 +++ .../lisp/evil-collection/modes/helpful/README.org | 19 + .../modes/helpful/evil-collection-helpful.el | 54 ++ .../hg-histedit/evil-collection-hg-histedit.el | 49 ++ .../lisp/evil-collection/modes/hideshow/README.org | 11 + .../modes/hideshow/evil-collection-hideshow.el | 45 ++ .../hungry-delete/evil-collection-hungry-delete.el | 60 ++ .../modes/hyrolo/evil-collection-hyrolo.el | 32 + .../lisp/evil-collection/modes/ibuffer/README.org | 60 ++ .../modes/ibuffer/evil-collection-ibuffer.el | 197 ++++++ .../lisp/evil-collection/modes/ielm/README.org | 22 + .../modes/ielm/evil-collection-ielm.el | 60 ++ .../modes/image+/evil-collection-image+.el | 54 ++ .../evil-collection/modes/image-dired/README.org | 31 + .../image-dired/evil-collection-image-dired.el | 74 ++ .../lisp/evil-collection/modes/image/README.org | 36 + .../modes/image/evil-collection-image.el | 93 +++ .../modes/imenu-list/evil-collection-imenu-list.el | 47 ++ .../lisp/evil-collection/modes/imenu/README.org | 11 + .../modes/imenu/evil-collection-imenu.el | 39 ++ .../lisp/evil-collection/modes/indent/README.org | 15 + .../modes/indent/evil-collection-indent.el | 48 ++ .../modes/indium/evil-collection-indium.el | 110 +++ .../lisp/evil-collection/modes/info/README.org | 40 ++ .../modes/info/evil-collection-info.el | 110 +++ .../lisp/evil-collection/modes/ivy/README.org | 51 ++ .../modes/ivy/evil-collection-ivy.el | 111 +++ .../lisp/evil-collection/modes/js2-mode/README.org | 12 + .../modes/js2-mode/evil-collection-js2-mode.el | 46 ++ .../lisp/evil-collection/modes/kmacro/README.org | 22 + .../modes/kmacro/evil-collection-kmacro.el | 58 ++ .../kotlin-mode/evil-collection-kotlin-mode.el | 42 ++ .../modes/leetcode/evil-collection-leetcode.el | 46 ++ .../lisp/evil-collection/modes/lispy/README.org | 140 ++++ .../modes/lispy/evil-collection-lispy.el | 659 ++++++++++++++++++ .../modes/lms/evil-collection-lms.el | 404 +++++++++++ .../lisp/evil-collection/modes/log-edit/README.org | 17 + .../modes/log-edit/evil-collection-log-edit.el | 57 ++ .../lisp/evil-collection/modes/log-view/README.org | 20 + .../modes/log-view/evil-collection-log-view.el | 63 ++ .../lsp-ui-imenu/evil-collection-lsp-ui-imenu.el | 47 ++ .../lisp/evil-collection/modes/lua-mode/README.org | 18 + .../modes/lua-mode/evil-collection-lua-mode.el | 50 ++ .../evil-collection/modes/macrostep/README.org | 13 + .../modes/macrostep/evil-collection-macrostep.el | 52 ++ .../evil-collection/modes/magit-repos/README.org | 17 + .../magit-repos/evil-collection-magit-repos.el | 49 ++ .../evil-collection/modes/magit-section/README.org | 47 ++ .../magit-section/evil-collection-magit-section.el | 91 +++ .../evil-collection/modes/magit-todos/README.org | 32 + .../magit-todos/evil-collection-magit-todos.el | 62 ++ .../lisp/evil-collection/modes/magit/README.org | 212 ++++++ .../modes/magit/evil-collection-magit.el | 747 +++++++++++++++++++++ .../lisp/evil-collection/modes/man/README.org | 22 + .../modes/man/evil-collection-man.el | 68 ++ .../evil-collection/modes/markdown-mode/README.org | 14 + .../markdown-mode/evil-collection-markdown-mode.el | 50 ++ .../lisp/evil-collection/modes/message/README.org | 18 + .../modes/message/evil-collection-message.el | 46 ++ .../minesweeper/evil-collection-minesweeper.el | 53 ++ .../evil-collection/modes/minibuffer/README.org | 47 ++ .../modes/minibuffer/evil-collection-minibuffer.el | 85 +++ .../modes/monky/evil-collection-monky.el | 129 ++++ .../lisp/evil-collection/modes/mpc/README.org | 44 ++ .../modes/mpc/evil-collection-mpc.el | 80 +++ .../modes/mpdel/evil-collection-mpdel.el | 96 +++ .../modes/mpdired/evil-collection-mpdired.el | 85 +++ .../evil-collection-mu4e-conversation.el | 75 +++ .../modes/mu4e/evil-collection-mu4e-1.8.el | 435 ++++++++++++ .../modes/mu4e/evil-collection-mu4e.el | 344 ++++++++++ .../modes/neotree/evil-collection-neotree.el | 101 +++ .../evil-collection/modes/newsticker/README.org | 56 ++ .../modes/newsticker/evil-collection-newsticker.el | 116 ++++ .../lisp/evil-collection/modes/notmuch/README.org | 142 ++++ .../modes/notmuch/evil-collection-notmuch.el | 256 +++++++ .../modes/nov/evil-collection-nov.el | 67 ++ .../modes/omnisharp/evil-collection-omnisharp.el | 44 ++ .../modes/org-agenda/evil-collection-org-agenda.el | 147 ++++ .../org-present/evil-collection-org-present.el | 65 ++ .../modes/org-roam/evil-collection-org-roam.el | 56 ++ .../lisp/evil-collection/modes/org/README.org | 46 ++ .../modes/org/evil-collection-org.el | 87 +++ .../evil-collection-osx-dictionary.el | 47 ++ .../lisp/evil-collection/modes/outline/README.org | 39 ++ .../modes/outline/evil-collection-outline.el | 116 ++++ .../modes/ovpn-mode/evil-collection-ovpn-mode.el | 56 ++ .../modes/p-search/evil-collection-p-search.el | 85 +++ .../evil-collection/modes/p4/evil-collection-p4.el | 123 ++++ .../evil-collection/modes/package-menu/README.org | 22 + .../package-menu/evil-collection-package-menu.el | 60 ++ .../modes/pass/evil-collection-pass.el | 102 +++ .../modes/pdf/evil-collection-pdf.el | 320 +++++++++ .../lisp/evil-collection/modes/popup/README.org | 12 + .../modes/popup/evil-collection-popup.el | 44 ++ .../lisp/evil-collection/modes/proced/README.org | 33 + .../modes/proced/evil-collection-proced.el | 88 +++ .../evil-collection/modes/process-menu/README.org | 18 + .../process-menu/evil-collection-process-menu.el | 54 ++ .../modes/prodigy/evil-collection-prodigy.el | 86 +++ .../lisp/evil-collection/modes/profiler/README.org | 25 + .../modes/profiler/evil-collection-profiler.el | 71 ++ .../lisp/evil-collection/modes/python/README.org | 17 + .../modes/python/evil-collection-python.el | 52 ++ .../modes/quickrun/evil-collection-quickrun.el | 42 ++ .../modes/racer/evil-collection-racer.el | 48 ++ .../evil-collection-racket-describe.el | 45 ++ .../modes/reader/evil-collection-reader.el | 162 +++++ .../modes/realgud/evil-collection-realgud.el | 103 +++ .../lisp/evil-collection/modes/reftex/README.org | 75 +++ .../modes/reftex/evil-collection-reftex.el | 174 +++++ .../lisp/evil-collection/modes/replace/README.org | 34 + .../modes/replace/evil-collection-replace.el | 79 +++ .../modes/restclient/evil-collection-restclient.el | 66 ++ .../emacs/lisp/evil-collection/modes/rg/README.org | 47 ++ .../evil-collection/modes/rg/evil-collection-rg.el | 91 +++ .../lisp/evil-collection/modes/ripgrep/README.org | 14 + .../modes/ripgrep/evil-collection-ripgrep.el | 48 ++ .../modes/rjsx-mode/evil-collection-rjsx-mode.el | 47 ++ .../modes/robe/evil-collection-robe.el | 45 ++ .../modes/rtags/evil-collection-rtags.el | 141 ++++ .../evil-collection/modes/ruby-mode/README.org | 9 + .../modes/ruby-mode/evil-collection-ruby-mode.el | 45 ++ .../lisp/evil-collection/modes/scheme/README.org | 17 + .../modes/scheme/evil-collection-scheme.el | 47 ++ .../evil-collection/modes/scroll-lock/README.org | 24 + .../scroll-lock/evil-collection-scroll-lock.el | 87 +++ .../evil-collection/modes/selectrum/README.org | 43 ++ .../modes/selectrum/evil-collection-selectrum.el | 72 ++ .../evil-collection/modes/sh-script/README.org | 15 + .../modes/sh-script/evil-collection-sh-script.el | 48 ++ .../shell-maker/evil-collection-shell-maker.el | 65 ++ .../lisp/evil-collection/modes/shortdoc/README.org | 20 + .../modes/shortdoc/evil-collection-shortdoc.el | 49 ++ .../modes/simple-mpc/evil-collection-simple-mpc.el | 122 ++++ .../lisp/evil-collection/modes/simple/README.org | 23 + .../modes/simple/evil-collection-simple.el | 49 ++ .../modes/slime/evil-collection-slime.el | 222 ++++++ .../modes/sly/evil-collection-sly.el | 276 ++++++++ .../evil-collection/modes/smerge-mode/README.org | 16 + .../smerge-mode/evil-collection-smerge-mode.el | 54 ++ .../lisp/evil-collection/modes/snake/README.org | 16 + .../modes/snake/evil-collection-snake.el | 50 ++ .../lisp/evil-collection/modes/so-long/README.org | 22 + .../modes/so-long/evil-collection-so-long.el | 51 ++ .../lisp/evil-collection/modes/speedbar/README.org | 61 ++ .../modes/speedbar/evil-collection-speedbar.el | 110 +++ .../lisp/evil-collection/modes/tab-bar/README.org | 15 + .../modes/tab-bar/evil-collection-tab-bar.el | 59 ++ .../modes/tablist/evil-collection-tablist.el | 64 ++ .../modes/tabulated-list/README.org | 20 + .../evil-collection-tabulated-list.el | 54 ++ .../lisp/evil-collection/modes/tar-mode/README.org | 27 + .../modes/tar-mode/evil-collection-tar-mode.el | 81 +++ .../modes/telega/evil-collection-telega.el | 218 ++++++ .../lisp/evil-collection/modes/term/README.org | 55 ++ .../modes/term/evil-collection-term.el | 170 +++++ .../lisp/evil-collection/modes/tetris/README.org | 18 + .../modes/tetris/evil-collection-tetris.el | 55 ++ .../lisp/evil-collection/modes/thread/README.org | 14 + .../modes/thread/evil-collection-thread.el | 45 ++ .../modes/tide/evil-collection-tide.el | 64 ++ .../evil-collection/modes/timer-list/README.org | 12 + .../modes/timer-list/evil-collection-timer-list.el | 43 ++ .../transmission/evil-collection-transmission.el | 163 +++++ .../modes/trashed/evil-collection-trashed.el | 87 +++ .../lisp/evil-collection/modes/tuareg/README.org | 9 + .../modes/tuareg/evil-collection-tuareg.el | 44 ++ .../modes/typescript-mode/README.org | 13 + .../evil-collection-typescript-mode.el | 46 ++ .../ultra-scroll/evil-collection-ultra-scroll.el | 58 ++ .../modes/unimpaired/evil-collection-unimpaired.el | 313 +++++++++ .../evil-collection/modes/vc-annotate/README.org | 23 + .../vc-annotate/evil-collection-vc-annotate.el | 59 ++ .../lisp/evil-collection/modes/vc-dir/README.org | 47 ++ .../modes/vc-dir/evil-collection-vc-dir.el | 113 ++++ .../lisp/evil-collection/modes/vc-git/README.org | 16 + .../modes/vc-git/evil-collection-vc-git.el | 48 ++ .../lisp/evil-collection/modes/vdiff/README.org | 18 + .../modes/vdiff/evil-collection-vdiff.el | 54 ++ .../lisp/evil-collection/modes/vertico/README.org | 40 ++ .../modes/vertico/evil-collection-vertico.el | 68 ++ .../lisp/evil-collection/modes/view/README.org | 14 + .../modes/view/evil-collection-view.el | 49 ++ .../lisp/evil-collection/modes/vlf/README.org | 46 ++ .../modes/vlf/evil-collection-vlf.el | 86 +++ .../lisp/evil-collection/modes/vterm/README.org | 55 ++ .../modes/vterm/evil-collection-vterm.el | 308 +++++++++ .../lisp/evil-collection/modes/vundo/README.org | 31 + .../modes/vundo/evil-collection-vundo.el | 93 +++ .../modes/w3m/evil-collection-w3m.el | 87 +++ .../lisp/evil-collection/modes/wdired/README.org | 14 + .../modes/wdired/evil-collection-wdired.el | 49 ++ .../lisp/evil-collection/modes/wgrep/README.org | 19 + .../modes/wgrep/evil-collection-wgrep.el | 49 ++ .../evil-collection/modes/which-key/README.org | 17 + .../modes/which-key/evil-collection-which-key.el | 52 ++ .../evil-collection/modes/with-editor/README.org | 17 + .../with-editor/evil-collection-with-editor.el | 45 ++ .../lisp/evil-collection/modes/woman/README.org | 13 + .../modes/woman/evil-collection-woman.el | 51 ++ .../lisp/evil-collection/modes/xref/README.org | 26 + .../modes/xref/evil-collection-xref.el | 76 +++ .../lisp/evil-collection/modes/xwidget/README.org | 43 ++ .../modes/xwidget/evil-collection-xwidget.el | 184 +++++ .../evil-collection/modes/yaml-mode/README.org | 15 + .../modes/yaml-mode/evil-collection-yaml-mode.el | 42 ++ .../modes/youtube-dl/evil-collection-youtube-dl.el | 67 ++ .../modes/zmusic/evil-collection-zmusic.el | 49 ++ .../modes/ztree/evil-collection-ztree.el | 68 ++ 356 files changed, 26950 insertions(+) create mode 100644 .config/emacs/lisp/evil-collection/modes/.nosearch create mode 100644 .config/emacs/lisp/evil-collection/modes/2048-game/evil-collection-2048-game.el create mode 100644 .config/emacs/lisp/evil-collection/modes/ag/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/ag/evil-collection-ag.el create mode 100644 .config/emacs/lisp/evil-collection/modes/agent-shell/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/agent-shell/evil-collection-agent-shell.el create mode 100644 .config/emacs/lisp/evil-collection/modes/alchemist/evil-collection-alchemist.el create mode 100644 .config/emacs/lisp/evil-collection/modes/anaconda-mode/evil-collection-anaconda-mode.el create mode 100644 .config/emacs/lisp/evil-collection/modes/apropos/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/apropos/evil-collection-apropos.el create mode 100644 .config/emacs/lisp/evil-collection/modes/arc-mode/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/arc-mode/evil-collection-arc-mode.el create mode 100644 .config/emacs/lisp/evil-collection/modes/atomic-chrome/evil-collection-atomic-chrome.el create mode 100644 .config/emacs/lisp/evil-collection/modes/auto-package-update/evil-collection-auto-package-update.el create mode 100644 .config/emacs/lisp/evil-collection/modes/beginend/evil-collection-beginend.el create mode 100644 .config/emacs/lisp/evil-collection/modes/bluetooth/evil-collection-bluetooth.el create mode 100644 .config/emacs/lisp/evil-collection/modes/bm/evil-collection-bm.el create mode 100644 .config/emacs/lisp/evil-collection/modes/bookmark/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/bookmark/evil-collection-bookmark.el create mode 100644 .config/emacs/lisp/evil-collection/modes/buff-menu/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/buff-menu/evil-collection-buff-menu.el create mode 100644 .config/emacs/lisp/evil-collection/modes/bufler/evil-collection-bufler.el create mode 100644 .config/emacs/lisp/evil-collection/modes/calc/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/calc/evil-collection-calc.el create mode 100644 .config/emacs/lisp/evil-collection/modes/calendar/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/calendar/evil-collection-calendar.el create mode 100644 .config/emacs/lisp/evil-collection/modes/cider/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/cider/evil-collection-cider.el create mode 100644 .config/emacs/lisp/evil-collection/modes/citre/evil-collection-citre.el create mode 100644 .config/emacs/lisp/evil-collection/modes/cmake-mode/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/cmake-mode/evil-collection-cmake-mode.el create mode 100644 .config/emacs/lisp/evil-collection/modes/color-rg/evil-collection-color-rg.el create mode 100644 .config/emacs/lisp/evil-collection/modes/comint/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/comint/evil-collection-comint.el create mode 100644 .config/emacs/lisp/evil-collection/modes/company/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/company/evil-collection-company.el create mode 100644 .config/emacs/lisp/evil-collection/modes/compile/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/compile/evil-collection-compile.el create mode 100644 .config/emacs/lisp/evil-collection/modes/consult/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/consult/evil-collection-consult.el create mode 100644 .config/emacs/lisp/evil-collection/modes/corfu/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/corfu/evil-collection-corfu.el create mode 100644 .config/emacs/lisp/evil-collection/modes/crdt/evil-collection-crdt.el create mode 100644 .config/emacs/lisp/evil-collection/modes/csv/evil-collection-csv.el create mode 100644 .config/emacs/lisp/evil-collection/modes/cus-theme/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/cus-theme/evil-collection-cus-theme.el create mode 100644 .config/emacs/lisp/evil-collection/modes/custom/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/custom/evil-collection-custom.el create mode 100644 .config/emacs/lisp/evil-collection/modes/daemons/evil-collection-daemons.el create mode 100644 .config/emacs/lisp/evil-collection/modes/dape/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/dape/evil-collection-dape.el create mode 100644 .config/emacs/lisp/evil-collection/modes/dashboard/evil-collection-dashboard.el create mode 100644 .config/emacs/lisp/evil-collection/modes/deadgrep/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/deadgrep/evil-collection-deadgrep.el create mode 100644 .config/emacs/lisp/evil-collection/modes/debbugs/evil-collection-debbugs.el create mode 100644 .config/emacs/lisp/evil-collection/modes/debug/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/debug/evil-collection-debug.el create mode 100644 .config/emacs/lisp/evil-collection/modes/devdocs/evil-collection-devdocs.el create mode 100644 .config/emacs/lisp/evil-collection/modes/dictionary/evil-collection-dictionary.el create mode 100644 .config/emacs/lisp/evil-collection/modes/diff-hl/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/diff-hl/evil-collection-diff-hl.el create mode 100644 .config/emacs/lisp/evil-collection/modes/diff-mode/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/diff-mode/evil-collection-diff-mode.el create mode 100644 .config/emacs/lisp/evil-collection/modes/difftastic/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/difftastic/evil-collection-difftastic.el create mode 100644 .config/emacs/lisp/evil-collection/modes/dired-sidebar/evil-collection-dired-sidebar.el create mode 100644 .config/emacs/lisp/evil-collection/modes/dired/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/dired/evil-collection-dired.el create mode 100644 .config/emacs/lisp/evil-collection/modes/disk-usage/evil-collection-disk-usage.el create mode 100644 .config/emacs/lisp/evil-collection/modes/distel/evil-collection-distel.el create mode 100644 .config/emacs/lisp/evil-collection/modes/doc-view/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/doc-view/evil-collection-doc-view.el create mode 100644 .config/emacs/lisp/evil-collection/modes/docker/evil-collection-docker.el create mode 100644 .config/emacs/lisp/evil-collection/modes/eat/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/eat/evil-collection-eat.el create mode 100644 .config/emacs/lisp/evil-collection/modes/ebib/evil-collection-ebib.el create mode 100644 .config/emacs/lisp/evil-collection/modes/ebuku/evil-collection-ebuku.el create mode 100644 .config/emacs/lisp/evil-collection/modes/eca/evil-collection-eca.el create mode 100644 .config/emacs/lisp/evil-collection/modes/edbi/evil-collection-edbi.el create mode 100644 .config/emacs/lisp/evil-collection/modes/edebug/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/edebug/evil-collection-edebug.el create mode 100644 .config/emacs/lisp/evil-collection/modes/ediff/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/ediff/evil-collection-ediff.el create mode 100644 .config/emacs/lisp/evil-collection/modes/eglot/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/eglot/evil-collection-eglot.el create mode 100644 .config/emacs/lisp/evil-collection/modes/eldoc/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/eldoc/evil-collection-eldoc.el create mode 100644 .config/emacs/lisp/evil-collection/modes/elfeed/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/elfeed/evil-collection-elfeed.el create mode 100644 .config/emacs/lisp/evil-collection/modes/elisp-mode/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/elisp-mode/evil-collection-elisp-mode.el create mode 100644 .config/emacs/lisp/evil-collection/modes/elisp-refs/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/elisp-refs/evil-collection-elisp-refs.el create mode 100644 .config/emacs/lisp/evil-collection/modes/elisp-slime-nav/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/elisp-slime-nav/evil-collection-elisp-slime-nav.el create mode 100644 .config/emacs/lisp/evil-collection/modes/elpaca/evil-collection-elpaca.el create mode 100644 .config/emacs/lisp/evil-collection/modes/embark/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/embark/evil-collection-embark.el create mode 100644 .config/emacs/lisp/evil-collection/modes/ement/evil-collection-ement.el create mode 100644 .config/emacs/lisp/evil-collection/modes/emms/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/emms/evil-collection-emms.el create mode 100644 .config/emacs/lisp/evil-collection/modes/emoji/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/emoji/evil-collection-emoji.el create mode 100644 .config/emacs/lisp/evil-collection/modes/epa/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/epa/evil-collection-epa.el create mode 100644 .config/emacs/lisp/evil-collection/modes/ert/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/ert/evil-collection-ert.el create mode 100644 .config/emacs/lisp/evil-collection/modes/eshell/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/eshell/evil-collection-eshell.el create mode 100644 .config/emacs/lisp/evil-collection/modes/eval-sexp-fu/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/eval-sexp-fu/evil-collection-eval-sexp-fu.el create mode 100644 .config/emacs/lisp/evil-collection/modes/evil-mc/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/evil-mc/evil-collection-evil-mc.el create mode 100644 .config/emacs/lisp/evil-collection/modes/eww/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/eww/evil-collection-eww.el create mode 100644 .config/emacs/lisp/evil-collection/modes/explain-pause-mode/evil-collection-explain-pause-mode.el create mode 100644 .config/emacs/lisp/evil-collection/modes/fanyi/evil-collection-fanyi.el create mode 100644 .config/emacs/lisp/evil-collection/modes/finder/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/finder/evil-collection-finder.el create mode 100644 .config/emacs/lisp/evil-collection/modes/flycheck/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/flycheck/evil-collection-flycheck.el create mode 100644 .config/emacs/lisp/evil-collection/modes/flymake/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/flymake/evil-collection-flymake.el create mode 100644 .config/emacs/lisp/evil-collection/modes/forge/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/forge/evil-collection-forge.el create mode 100644 .config/emacs/lisp/evil-collection/modes/free-keys/evil-collection-free-keys.el create mode 100644 .config/emacs/lisp/evil-collection/modes/fzfa/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/fzfa/evil-collection-fzfa.el create mode 100644 .config/emacs/lisp/evil-collection/modes/geiser/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/geiser/evil-collection-geiser.el create mode 100644 .config/emacs/lisp/evil-collection/modes/ggtags/evil-collection-ggtags.el create mode 100644 .config/emacs/lisp/evil-collection/modes/git-timemachine/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/git-timemachine/evil-collection-git-timemachine.el create mode 100644 .config/emacs/lisp/evil-collection/modes/gited/evil-collection-gited.el create mode 100644 .config/emacs/lisp/evil-collection/modes/gnus/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/gnus/evil-collection-gnus.el create mode 100644 .config/emacs/lisp/evil-collection/modes/go-mode/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/go-mode/evil-collection-go-mode.el create mode 100644 .config/emacs/lisp/evil-collection/modes/gptel/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/gptel/evil-collection-gptel.el create mode 100644 .config/emacs/lisp/evil-collection/modes/grep/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/grep/evil-collection-grep.el create mode 100644 .config/emacs/lisp/evil-collection/modes/guix/evil-collection-guix.el create mode 100644 .config/emacs/lisp/evil-collection/modes/hackernews/evil-collection-hackernews.el create mode 100644 .config/emacs/lisp/evil-collection/modes/helm/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/helm/evil-collection-helm.el create mode 100644 .config/emacs/lisp/evil-collection/modes/help/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/help/evil-collection-help.el create mode 100644 .config/emacs/lisp/evil-collection/modes/helpful/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/helpful/evil-collection-helpful.el create mode 100644 .config/emacs/lisp/evil-collection/modes/hg-histedit/evil-collection-hg-histedit.el create mode 100644 .config/emacs/lisp/evil-collection/modes/hideshow/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/hideshow/evil-collection-hideshow.el create mode 100644 .config/emacs/lisp/evil-collection/modes/hungry-delete/evil-collection-hungry-delete.el create mode 100644 .config/emacs/lisp/evil-collection/modes/hyrolo/evil-collection-hyrolo.el create mode 100644 .config/emacs/lisp/evil-collection/modes/ibuffer/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/ibuffer/evil-collection-ibuffer.el create mode 100644 .config/emacs/lisp/evil-collection/modes/ielm/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/ielm/evil-collection-ielm.el create mode 100644 .config/emacs/lisp/evil-collection/modes/image+/evil-collection-image+.el create mode 100644 .config/emacs/lisp/evil-collection/modes/image-dired/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/image-dired/evil-collection-image-dired.el create mode 100644 .config/emacs/lisp/evil-collection/modes/image/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/image/evil-collection-image.el create mode 100644 .config/emacs/lisp/evil-collection/modes/imenu-list/evil-collection-imenu-list.el create mode 100644 .config/emacs/lisp/evil-collection/modes/imenu/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/imenu/evil-collection-imenu.el create mode 100644 .config/emacs/lisp/evil-collection/modes/indent/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/indent/evil-collection-indent.el create mode 100644 .config/emacs/lisp/evil-collection/modes/indium/evil-collection-indium.el create mode 100644 .config/emacs/lisp/evil-collection/modes/info/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/info/evil-collection-info.el create mode 100644 .config/emacs/lisp/evil-collection/modes/ivy/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/ivy/evil-collection-ivy.el create mode 100644 .config/emacs/lisp/evil-collection/modes/js2-mode/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/js2-mode/evil-collection-js2-mode.el create mode 100644 .config/emacs/lisp/evil-collection/modes/kmacro/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/kmacro/evil-collection-kmacro.el create mode 100644 .config/emacs/lisp/evil-collection/modes/kotlin-mode/evil-collection-kotlin-mode.el create mode 100644 .config/emacs/lisp/evil-collection/modes/leetcode/evil-collection-leetcode.el create mode 100644 .config/emacs/lisp/evil-collection/modes/lispy/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/lispy/evil-collection-lispy.el create mode 100644 .config/emacs/lisp/evil-collection/modes/lms/evil-collection-lms.el create mode 100644 .config/emacs/lisp/evil-collection/modes/log-edit/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/log-edit/evil-collection-log-edit.el create mode 100644 .config/emacs/lisp/evil-collection/modes/log-view/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/log-view/evil-collection-log-view.el create mode 100644 .config/emacs/lisp/evil-collection/modes/lsp-ui-imenu/evil-collection-lsp-ui-imenu.el create mode 100644 .config/emacs/lisp/evil-collection/modes/lua-mode/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/lua-mode/evil-collection-lua-mode.el create mode 100644 .config/emacs/lisp/evil-collection/modes/macrostep/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/macrostep/evil-collection-macrostep.el create mode 100644 .config/emacs/lisp/evil-collection/modes/magit-repos/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/magit-repos/evil-collection-magit-repos.el create mode 100644 .config/emacs/lisp/evil-collection/modes/magit-section/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/magit-section/evil-collection-magit-section.el create mode 100644 .config/emacs/lisp/evil-collection/modes/magit-todos/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/magit-todos/evil-collection-magit-todos.el create mode 100644 .config/emacs/lisp/evil-collection/modes/magit/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/magit/evil-collection-magit.el create mode 100644 .config/emacs/lisp/evil-collection/modes/man/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/man/evil-collection-man.el create mode 100644 .config/emacs/lisp/evil-collection/modes/markdown-mode/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/markdown-mode/evil-collection-markdown-mode.el create mode 100644 .config/emacs/lisp/evil-collection/modes/message/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/message/evil-collection-message.el create mode 100644 .config/emacs/lisp/evil-collection/modes/minesweeper/evil-collection-minesweeper.el create mode 100644 .config/emacs/lisp/evil-collection/modes/minibuffer/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/minibuffer/evil-collection-minibuffer.el create mode 100644 .config/emacs/lisp/evil-collection/modes/monky/evil-collection-monky.el create mode 100644 .config/emacs/lisp/evil-collection/modes/mpc/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/mpc/evil-collection-mpc.el create mode 100644 .config/emacs/lisp/evil-collection/modes/mpdel/evil-collection-mpdel.el create mode 100644 .config/emacs/lisp/evil-collection/modes/mpdired/evil-collection-mpdired.el create mode 100644 .config/emacs/lisp/evil-collection/modes/mu4e-conversation/evil-collection-mu4e-conversation.el create mode 100644 .config/emacs/lisp/evil-collection/modes/mu4e/evil-collection-mu4e-1.8.el create mode 100644 .config/emacs/lisp/evil-collection/modes/mu4e/evil-collection-mu4e.el create mode 100644 .config/emacs/lisp/evil-collection/modes/neotree/evil-collection-neotree.el create mode 100644 .config/emacs/lisp/evil-collection/modes/newsticker/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/newsticker/evil-collection-newsticker.el create mode 100644 .config/emacs/lisp/evil-collection/modes/notmuch/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/notmuch/evil-collection-notmuch.el create mode 100644 .config/emacs/lisp/evil-collection/modes/nov/evil-collection-nov.el create mode 100644 .config/emacs/lisp/evil-collection/modes/omnisharp/evil-collection-omnisharp.el create mode 100644 .config/emacs/lisp/evil-collection/modes/org-agenda/evil-collection-org-agenda.el create mode 100644 .config/emacs/lisp/evil-collection/modes/org-present/evil-collection-org-present.el create mode 100644 .config/emacs/lisp/evil-collection/modes/org-roam/evil-collection-org-roam.el create mode 100644 .config/emacs/lisp/evil-collection/modes/org/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/org/evil-collection-org.el create mode 100644 .config/emacs/lisp/evil-collection/modes/osx-dictionary/evil-collection-osx-dictionary.el create mode 100644 .config/emacs/lisp/evil-collection/modes/outline/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/outline/evil-collection-outline.el create mode 100644 .config/emacs/lisp/evil-collection/modes/ovpn-mode/evil-collection-ovpn-mode.el create mode 100644 .config/emacs/lisp/evil-collection/modes/p-search/evil-collection-p-search.el create mode 100644 .config/emacs/lisp/evil-collection/modes/p4/evil-collection-p4.el create mode 100644 .config/emacs/lisp/evil-collection/modes/package-menu/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/package-menu/evil-collection-package-menu.el create mode 100644 .config/emacs/lisp/evil-collection/modes/pass/evil-collection-pass.el create mode 100644 .config/emacs/lisp/evil-collection/modes/pdf/evil-collection-pdf.el create mode 100644 .config/emacs/lisp/evil-collection/modes/popup/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/popup/evil-collection-popup.el create mode 100644 .config/emacs/lisp/evil-collection/modes/proced/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/proced/evil-collection-proced.el create mode 100644 .config/emacs/lisp/evil-collection/modes/process-menu/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/process-menu/evil-collection-process-menu.el create mode 100644 .config/emacs/lisp/evil-collection/modes/prodigy/evil-collection-prodigy.el create mode 100644 .config/emacs/lisp/evil-collection/modes/profiler/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/profiler/evil-collection-profiler.el create mode 100644 .config/emacs/lisp/evil-collection/modes/python/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/python/evil-collection-python.el create mode 100644 .config/emacs/lisp/evil-collection/modes/quickrun/evil-collection-quickrun.el create mode 100644 .config/emacs/lisp/evil-collection/modes/racer/evil-collection-racer.el create mode 100644 .config/emacs/lisp/evil-collection/modes/racket-describe/evil-collection-racket-describe.el create mode 100644 .config/emacs/lisp/evil-collection/modes/reader/evil-collection-reader.el create mode 100644 .config/emacs/lisp/evil-collection/modes/realgud/evil-collection-realgud.el create mode 100644 .config/emacs/lisp/evil-collection/modes/reftex/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/reftex/evil-collection-reftex.el create mode 100644 .config/emacs/lisp/evil-collection/modes/replace/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/replace/evil-collection-replace.el create mode 100644 .config/emacs/lisp/evil-collection/modes/restclient/evil-collection-restclient.el create mode 100644 .config/emacs/lisp/evil-collection/modes/rg/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/rg/evil-collection-rg.el create mode 100644 .config/emacs/lisp/evil-collection/modes/ripgrep/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/ripgrep/evil-collection-ripgrep.el create mode 100644 .config/emacs/lisp/evil-collection/modes/rjsx-mode/evil-collection-rjsx-mode.el create mode 100644 .config/emacs/lisp/evil-collection/modes/robe/evil-collection-robe.el create mode 100644 .config/emacs/lisp/evil-collection/modes/rtags/evil-collection-rtags.el create mode 100644 .config/emacs/lisp/evil-collection/modes/ruby-mode/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/ruby-mode/evil-collection-ruby-mode.el create mode 100644 .config/emacs/lisp/evil-collection/modes/scheme/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/scheme/evil-collection-scheme.el create mode 100644 .config/emacs/lisp/evil-collection/modes/scroll-lock/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/scroll-lock/evil-collection-scroll-lock.el create mode 100644 .config/emacs/lisp/evil-collection/modes/selectrum/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/selectrum/evil-collection-selectrum.el create mode 100644 .config/emacs/lisp/evil-collection/modes/sh-script/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/sh-script/evil-collection-sh-script.el create mode 100644 .config/emacs/lisp/evil-collection/modes/shell-maker/evil-collection-shell-maker.el create mode 100644 .config/emacs/lisp/evil-collection/modes/shortdoc/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/shortdoc/evil-collection-shortdoc.el create mode 100644 .config/emacs/lisp/evil-collection/modes/simple-mpc/evil-collection-simple-mpc.el create mode 100644 .config/emacs/lisp/evil-collection/modes/simple/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/simple/evil-collection-simple.el create mode 100644 .config/emacs/lisp/evil-collection/modes/slime/evil-collection-slime.el create mode 100644 .config/emacs/lisp/evil-collection/modes/sly/evil-collection-sly.el create mode 100644 .config/emacs/lisp/evil-collection/modes/smerge-mode/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/smerge-mode/evil-collection-smerge-mode.el create mode 100644 .config/emacs/lisp/evil-collection/modes/snake/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/snake/evil-collection-snake.el create mode 100644 .config/emacs/lisp/evil-collection/modes/so-long/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/so-long/evil-collection-so-long.el create mode 100644 .config/emacs/lisp/evil-collection/modes/speedbar/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/speedbar/evil-collection-speedbar.el create mode 100644 .config/emacs/lisp/evil-collection/modes/tab-bar/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/tab-bar/evil-collection-tab-bar.el create mode 100644 .config/emacs/lisp/evil-collection/modes/tablist/evil-collection-tablist.el create mode 100644 .config/emacs/lisp/evil-collection/modes/tabulated-list/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/tabulated-list/evil-collection-tabulated-list.el create mode 100644 .config/emacs/lisp/evil-collection/modes/tar-mode/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/tar-mode/evil-collection-tar-mode.el create mode 100644 .config/emacs/lisp/evil-collection/modes/telega/evil-collection-telega.el create mode 100644 .config/emacs/lisp/evil-collection/modes/term/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/term/evil-collection-term.el create mode 100644 .config/emacs/lisp/evil-collection/modes/tetris/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/tetris/evil-collection-tetris.el create mode 100644 .config/emacs/lisp/evil-collection/modes/thread/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/thread/evil-collection-thread.el create mode 100644 .config/emacs/lisp/evil-collection/modes/tide/evil-collection-tide.el create mode 100644 .config/emacs/lisp/evil-collection/modes/timer-list/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/timer-list/evil-collection-timer-list.el create mode 100644 .config/emacs/lisp/evil-collection/modes/transmission/evil-collection-transmission.el create mode 100644 .config/emacs/lisp/evil-collection/modes/trashed/evil-collection-trashed.el create mode 100644 .config/emacs/lisp/evil-collection/modes/tuareg/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/tuareg/evil-collection-tuareg.el create mode 100644 .config/emacs/lisp/evil-collection/modes/typescript-mode/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/typescript-mode/evil-collection-typescript-mode.el create mode 100644 .config/emacs/lisp/evil-collection/modes/ultra-scroll/evil-collection-ultra-scroll.el create mode 100644 .config/emacs/lisp/evil-collection/modes/unimpaired/evil-collection-unimpaired.el create mode 100644 .config/emacs/lisp/evil-collection/modes/vc-annotate/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/vc-annotate/evil-collection-vc-annotate.el create mode 100644 .config/emacs/lisp/evil-collection/modes/vc-dir/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/vc-dir/evil-collection-vc-dir.el create mode 100644 .config/emacs/lisp/evil-collection/modes/vc-git/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/vc-git/evil-collection-vc-git.el create mode 100644 .config/emacs/lisp/evil-collection/modes/vdiff/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/vdiff/evil-collection-vdiff.el create mode 100644 .config/emacs/lisp/evil-collection/modes/vertico/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/vertico/evil-collection-vertico.el create mode 100644 .config/emacs/lisp/evil-collection/modes/view/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/view/evil-collection-view.el create mode 100644 .config/emacs/lisp/evil-collection/modes/vlf/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/vlf/evil-collection-vlf.el create mode 100644 .config/emacs/lisp/evil-collection/modes/vterm/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/vterm/evil-collection-vterm.el create mode 100644 .config/emacs/lisp/evil-collection/modes/vundo/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/vundo/evil-collection-vundo.el create mode 100644 .config/emacs/lisp/evil-collection/modes/w3m/evil-collection-w3m.el create mode 100644 .config/emacs/lisp/evil-collection/modes/wdired/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/wdired/evil-collection-wdired.el create mode 100644 .config/emacs/lisp/evil-collection/modes/wgrep/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/wgrep/evil-collection-wgrep.el create mode 100644 .config/emacs/lisp/evil-collection/modes/which-key/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/which-key/evil-collection-which-key.el create mode 100644 .config/emacs/lisp/evil-collection/modes/with-editor/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/with-editor/evil-collection-with-editor.el create mode 100644 .config/emacs/lisp/evil-collection/modes/woman/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/woman/evil-collection-woman.el create mode 100644 .config/emacs/lisp/evil-collection/modes/xref/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/xref/evil-collection-xref.el create mode 100644 .config/emacs/lisp/evil-collection/modes/xwidget/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/xwidget/evil-collection-xwidget.el create mode 100644 .config/emacs/lisp/evil-collection/modes/yaml-mode/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/yaml-mode/evil-collection-yaml-mode.el create mode 100644 .config/emacs/lisp/evil-collection/modes/youtube-dl/evil-collection-youtube-dl.el create mode 100644 .config/emacs/lisp/evil-collection/modes/zmusic/evil-collection-zmusic.el create mode 100644 .config/emacs/lisp/evil-collection/modes/ztree/evil-collection-ztree.el (limited to '.config/emacs/lisp/evil-collection/modes') diff --git a/.config/emacs/lisp/evil-collection/modes/.nosearch b/.config/emacs/lisp/evil-collection/modes/.nosearch new file mode 100644 index 0000000..e69de29 diff --git a/.config/emacs/lisp/evil-collection/modes/2048-game/evil-collection-2048-game.el b/.config/emacs/lisp/evil-collection/modes/2048-game/evil-collection-2048-game.el new file mode 100644 index 0000000..ce64221 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/2048-game/evil-collection-2048-game.el @@ -0,0 +1,54 @@ +;;; evil-collection-2048-game.el --- Evil bindings for `2048-game' -*- lexical-binding: t -*- + +;; Copyright (C) 2019 James Nguyen + +;; Author: Daniel Phan +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, games + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for `2048-game'. + +;;; Code: +(require 'evil-collection) +(require '2048-game nil t) + +(defconst evil-collection-2048-game-maps '(2048-mode-map)) + +;;;###autoload +(defun evil-collection-2048-game-setup () + "Set up `evil' bindings for `2048-game'." + (evil-set-initial-state '2048-mode 'normal) + (evil-collection-define-key 'normal '2048-mode-map + "h" '2048-left + "j" '2048-down + "k" '2048-up + "l" '2048-right + "r" '2048-random-move + (kbd "") '2048-up + (kbd "") '2048-left + (kbd "") '2048-right + (kbd "") '2048-down + "q" 'quit-window + "ZQ" 'evil-quit + "ZZ" 'quit-window)) + +(provide 'evil-collection-2048-game) +;;; evil-collection-2048-game.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/ag/README.org b/.config/emacs/lisp/evil-collection/modes/ag/README.org new file mode 100644 index 0000000..48ceccc --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/ag/README.org @@ -0,0 +1,22 @@ +* ag + + Evil bindings for [[https://github.com/Wilfred/ag.el][ag]] search result buffers. + + Initial state for =ag-mode= is forced to =normal= so the buffer can be + edited with [[https://github.com/mhayashi1120/Emacs-wgrep][wgrep]]. + +** Key bindings + + Applied in =normal= and =visual= states. + + | Command | Original | Evil | + |------------------------------+----------+-------------------| + | =evil-previous-line= | | =k= | + | =evil-backward-char= | | =h= | + | =recompile= | =g= | =gr= | + | =compilation-next-error= | =n= | =gj=, =C-j=, =]]= | + | =compilation-previous-error= | =p= | =gk=, =C-k=, =[[= | + | =evil-search-backward= | | =?= | + | =evil-search-forward= | | =/= | + | =evil-search-next= | | =n= | + | =evil-search-previous= | | =N= | diff --git a/.config/emacs/lisp/evil-collection/modes/ag/evil-collection-ag.el b/.config/emacs/lisp/evil-collection/modes/ag/evil-collection-ag.el new file mode 100644 index 0000000..0ce8b90 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/ag/evil-collection-ag.el @@ -0,0 +1,63 @@ +;;; evil-collection-ag.el --- Evil Bindings for Ag -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, ag, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for `ag-mode' from the `wgrep-ag' package. + +;;; Code: +(require 'ag nil t) +(require 'evil-collection) + +(defconst evil-collection-ag-maps '(ag-mode-map)) + +;;;###autoload +(defun evil-collection-ag-setup () + "Set up `evil' bindings for `ag'." + (evil-collection-define-key '(normal visual) 'ag-mode-map + "k" 'evil-previous-line + "h" 'evil-backward-char + + ;; refresh + "gr" 'recompile + + ;; navigation + "gj" 'compilation-next-error + "gk" 'compilation-previous-error + (kbd "C-j") 'compilation-next-error + (kbd "C-k") 'compilation-previous-error + "]]" 'compilation-next-error + "[[" 'compilation-previous-error + + ;; search + "?" evil-collection-evil-search-backward + "/" evil-collection-evil-search-forward + "n" evil-collection-evil-search-next + "N" evil-collection-evil-search-previous) + ;; `ag' is best set in 'normal state because its buffer can be edited. + ;; https://github.com/mhayashi1120/Emacs-wgrep + (evil-set-initial-state 'ag-mode 'normal)) + +(provide 'evil-collection-ag) +;;; evil-collection-ag.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/agent-shell/README.org b/.config/emacs/lisp/evil-collection/modes/agent-shell/README.org new file mode 100644 index 0000000..a362a2f --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/agent-shell/README.org @@ -0,0 +1,137 @@ +* agent-shell + + Evil bindings for [[https://github.com/xenodium/agent-shell][agent-shell]] -- a + comint-based chat REPL with permission prompts, a side viewport and a diff + buffer. + +** agent-shell-mode-map + + Upstream's =n= / =p= top-level bindings are unset so they don't intercept + keystrokes in insert state; in insert they self-insert. + +*** Permission dispatch (normal state) + + Only active when =evil-collection-agent-shell-want-permission-bindings= is + non-nil. Each key falls through to its default evil command unless a + pending permission button is visible. + + | Command | Action | Evil | + |-------------------------------------------------------+------------------+------| + | =evil-collection-agent-shell-permission-view-diff= | view diff =v= | =v= | + | =evil-collection-agent-shell-permission-allow-once= | allow =y= | =y= | + | =evil-collection-agent-shell-permission-reject-once= | reject =C-c C-c= | =n= | + | =evil-collection-agent-shell-permission-allow-always= | always allow =!= | =!= | + +*** Navigation (normal state) + + | Command | Original | Evil | + |----------------------------------+----------+-------------| + | =agent-shell-next-item= | =n= | =TAB= | + | =agent-shell-previous-item= | =p= | == | + | =agent-shell-cycle-session-mode= | n/a | =C-= | + +*** g-prefix (only when =evil-collection-want-g-bindings=) + + | Command | Evil | + |----------------------------------+------| + | =agent-shell-cycle-session-mode= | =gs= | + | =agent-shell-interrupt= | =gx= | + | =agent-shell-set-session-mode= | =gm= | + | =agent-shell-set-session-model= | =gv= | + | =agent-shell-other-buffer= | =go= | + | =agent-shell-yank-dwim= | =gp= | + | =agent-shell-reload= | =gr= | + | =agent-shell-restart= | =gR= | + | =agent-shell-fork= | =gF= | + | =agent-shell-copy-session-id= | =gy= | + | =agent-shell-prompt-compose= | =gc= | + | =agent-shell-queue-request= | =gq= | + | =agent-shell-open-transcript= | =gt= | + +** agent-shell-viewport-edit-mode-map + + The viewport's compose buffer. Standard save/quit verbs become send/cancel. + + | Command | Original | Evil | + |------------------------------------------+-----------+--------------------------------| + | =agent-shell-viewport-compose-send= | =C-c C-c= | =:w=, =:wq=, =ZZ=, =RET= remap | + | =agent-shell-viewport-compose-cancel= | =C-c C-k= | =:q=, =ZQ= | + | =agent-shell-viewport-previous-history= | n/a | =M-k= | + | =agent-shell-viewport-next-history= | n/a | =M-j= | + | =agent-shell-viewport-compose-peek-last= | n/a | =C-o= | + + When =evil-collection-want-g-bindings= is non-nil: + + | Command | Evil | + |------------------------------------------+------| + | =agent-shell-viewport-compose-help-menu= | =g?= | + | =agent-shell-cycle-session-mode= | =gs= | + | =agent-shell-viewport-set-session-mode= | =gm= | + | =agent-shell-viewport-set-session-model= | =gv= | + | =agent-shell-other-buffer= | =go= | + | =agent-shell-yank-dwim= | =gp= | + | =agent-shell-viewport-search-history= | =g/= | + | =agent-shell-viewport-copy-session-id= | =gy= | + | =agent-shell-viewport-open-transcript= | =gt= | + +** agent-shell-viewport-view-mode-map + + Read-only viewport. =RET= / =:w= / =ZZ= all interrupt the agent; =:q= / + =ZQ= bury. + + | Command | Original | Evil | + |--------------------------------------+-----------+-------------------------| + | =agent-shell-viewport-interrupt= | =C-c C-c= | =RET=, =:w=, =ZZ= remap | + | =bury-buffer= | =q= | =q=, =ZQ=, =:q= remap | + | =agent-shell-viewport-next-item= | =n= | =TAB=, =gj= | + | =agent-shell-viewport-previous-item= | =p= | ==, =gk= | + | =agent-shell-viewport-next-page= | =f= | =C-j= | + | =agent-shell-viewport-previous-page= | =b= | =C-k= | + + When =evil-collection-want-g-bindings= is non-nil: + + | Command | Evil | + |-------------------------------------------+--------------| + | =agent-shell-viewport-reply-1..9= | =g1= .. =g9= | + | =agent-shell-viewport-cycle-session-mode= | =gs= | + | =agent-shell-viewport-set-session-model= | =gv= | + | =agent-shell-other-buffer= | =go= | + | =agent-shell-viewport-set-session-mode= | =gm= | + | =agent-shell-viewport-help-menu= | =g?= | + | =agent-shell-viewport-reply= | =gr= | + | =agent-shell-viewport-reply-yes= | =gy= | + | =agent-shell-viewport-reply-more= | =gM= | + | =agent-shell-viewport-reply-again= | =ga= | + | =agent-shell-viewport-reply-continue= | =gc= | + | =agent-shell-viewport-edit= | =ge= | + | =agent-shell-viewport-fork= | =gF= | + | =agent-shell-viewport-copy-session-id= | =gY= | + | =agent-shell-viewport-open-transcript= | =gt= | + | =agent-shell-viewport-refresh= | =gz= | + +** agent-shell-diff-mode-map + + | Command | Original | Evil (=g-bindings=) | Evil (no =g-bindings=) | + |-------------------------------+----------+---------------------+------------------------| + | =agent-shell-diff-open-file= | =f= | =gf= | =f= | + | =agent-shell-diff-accept-all= | =y= | =gy= | =y= | + | =agent-shell-diff-reject-all= | =n= | =gn= | =n= | + | =kill-current-buffer= | n/a | =q= | =q= | + +** New commands + + | Command | Purpose | + |-------------------------------------------------------+----------------------------------------------------| + | =evil-collection-agent-shell-permission-allow-once= | Press =y= on the latest pending permission button. | + | =evil-collection-agent-shell-permission-reject-once= | Send =C-c C-c= to it. | + | =evil-collection-agent-shell-permission-allow-always= | Press =!=. | + | =evil-collection-agent-shell-permission-view-diff= | Press =v=. | + + Each only fires when a pending permission button is visible -- otherwise the + keymap entry resolves to nil via a =:filter= and evil's default takes over. + +** Customization + + | Variable | Default | Purpose | + |--------------------------------------------------------+---------+-------------------------------------------------------| + | =evil-collection-agent-shell-want-permission-bindings= | =t= | Bind =y= / =n= / =!= / =v= for the dispatchers above. | diff --git a/.config/emacs/lisp/evil-collection/modes/agent-shell/evil-collection-agent-shell.el b/.config/emacs/lisp/evil-collection/modes/agent-shell/evil-collection-agent-shell.el new file mode 100644 index 0000000..c738d94 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/agent-shell/evil-collection-agent-shell.el @@ -0,0 +1,254 @@ +;;; evil-collection-agent-shell.el --- Bindings for agent-shell -*- lexical-binding: t -*- + +;; Copyright (C) 2026 Joseph LaFreniere + +;; Author: Joseph LaFreniere +;; Maintainer: Joseph LaFreniere +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "29.1")) +;; Keywords: evil, agent-shell, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for agent-shell. + +;;; Code: +(require 'evil-collection) +(require 'agent-shell nil t) + +(defconst evil-collection-agent-shell-maps '(agent-shell-mode-map + agent-shell-viewport-edit-mode-map + agent-shell-viewport-view-mode-map + agent-shell-diff-mode-map)) + +(defvar agent-shell-mode-map) +(defvar agent-shell-viewport-edit-mode-map) +(defvar agent-shell-viewport-view-mode-map) +(defvar agent-shell-diff-mode-map) + +(defcustom evil-collection-agent-shell-want-permission-bindings t + "When non-nil, bind permission button keys in normal state. + +`y', `n', `!', and `v' will activate the latest pending permission +button when one is visible, and fall through to their default Evil +commands otherwise." + :type 'boolean + :group 'evil-collection) + +;;; Permission button helpers. + +(defun evil-collection-agent-shell--latest-permission-keymap () + "Return the keymap of the latest pending permission button, or nil. +Walks the buffer backward from `point-max' looking for text with the +`agent-shell-permission-button' property -- the navigatable single-char +marker that `agent-shell--make-permission-button' adds to each button." + (save-excursion + (goto-char (point-max)) + (when-let* ((match (text-property-search-backward + 'agent-shell-permission-button t t))) + (get-text-property (prop-match-beginning match) 'keymap)))) + +(defun evil-collection-agent-shell--pending-permission-p () + "Return non-nil when the current buffer has a pending permission button." + (and (evil-collection-agent-shell--latest-permission-keymap) t)) + +(defun evil-collection-agent-shell--press (key) + "Dispatch KEY through the latest pending permission's button keymap. +KEY is a string passed to `kbd'." + (let* ((km (or (evil-collection-agent-shell--latest-permission-keymap) + (user-error "No pending permission"))) + (binding (lookup-key km (kbd key)))) + (cond + ((commandp binding) (call-interactively binding)) + ((null binding) (user-error "No `%s' action on this permission" key)) + (t (user-error "Unexpected binding for `%s': %S" key binding))))) + +(defun evil-collection-agent-shell-permission-allow-once () + "Allow the latest pending tool-call permission once." + (interactive) + (evil-collection-agent-shell--press "y")) + +(defun evil-collection-agent-shell-permission-reject-once () + "Reject the latest pending tool-call permission and interrupt the agent." + (interactive) + (evil-collection-agent-shell--press "C-c C-c")) + +(defun evil-collection-agent-shell-permission-allow-always () + "Always-allow the tool kind for the latest pending permission." + (interactive) + (evil-collection-agent-shell--press "!")) + +(defun evil-collection-agent-shell-permission-view-diff () + "View the diff for the latest pending permission, if any." + (interactive) + (evil-collection-agent-shell--press "v")) + +(defvar evil-collection-agent-shell-permission-allow-once + `(menu-item "" nil :filter + ,(lambda (&optional _) + (when (evil-collection-agent-shell--pending-permission-p) + 'evil-collection-agent-shell-permission-allow-once)))) + +(defvar evil-collection-agent-shell-permission-reject-once + `(menu-item "" nil :filter + ,(lambda (&optional _) + (when (evil-collection-agent-shell--pending-permission-p) + 'evil-collection-agent-shell-permission-reject-once)))) + +(defvar evil-collection-agent-shell-permission-allow-always + `(menu-item "" nil :filter + ,(lambda (&optional _) + (when (evil-collection-agent-shell--pending-permission-p) + 'evil-collection-agent-shell-permission-allow-always)))) + +(defvar evil-collection-agent-shell-permission-view-diff + `(menu-item "" nil :filter + ,(lambda (&optional _) + (when (evil-collection-agent-shell--pending-permission-p) + 'evil-collection-agent-shell-permission-view-diff)))) + +;;;###autoload +(defun evil-collection-agent-shell-setup () + "Set up `evil' bindings for `agent-shell'." + ;; `agent-shell-mode-map' binds \"n\" and \"p\" at the map level, which causes + ;; them to intercept keystrokes even in insert state. Remove those bindings + ;; entirely. + (if (fboundp 'keymap-unset) + (progn + (keymap-unset agent-shell-mode-map "n" t) + (keymap-unset agent-shell-mode-map "p" t)) + (define-key agent-shell-mode-map "n" nil) + (define-key agent-shell-mode-map "p" nil)) + + (evil-collection-define-key 'insert 'agent-shell-mode-map + "n" 'self-insert-command + "p" 'self-insert-command) + + (when evil-collection-agent-shell-want-permission-bindings + (evil-collection-define-key 'normal 'agent-shell-mode-map + "v" evil-collection-agent-shell-permission-view-diff + "y" evil-collection-agent-shell-permission-allow-once + "n" evil-collection-agent-shell-permission-reject-once + "!" evil-collection-agent-shell-permission-allow-always)) + + (evil-collection-define-key 'normal 'agent-shell-mode-map + (kbd "TAB") 'agent-shell-next-item + "" 'agent-shell-previous-item + (kbd "C-") 'agent-shell-cycle-session-mode) + + (when evil-collection-want-g-bindings + (evil-collection-define-key 'normal 'agent-shell-mode-map + "gs" 'agent-shell-cycle-session-mode + "gx" 'agent-shell-interrupt + "gm" 'agent-shell-set-session-mode + "gv" 'agent-shell-set-session-model + "go" 'agent-shell-other-buffer + "gp" 'agent-shell-yank-dwim + "gr" 'agent-shell-reload + "gR" 'agent-shell-restart + "gF" 'agent-shell-fork + "gy" 'agent-shell-copy-session-id + "gc" 'agent-shell-prompt-compose + "gq" 'agent-shell-queue-request + "gt" 'agent-shell-open-transcript)) + + (evil-collection-define-key 'normal 'agent-shell-viewport-edit-mode-map + [remap evil-save-and-close] 'agent-shell-viewport-compose-send + [remap evil-save-modified-and-close] 'agent-shell-viewport-compose-send + [remap evil-ret] 'agent-shell-viewport-compose-send + [remap evil-write] 'agent-shell-viewport-compose-send + [remap evil-quit] 'agent-shell-viewport-compose-cancel + "M-k" 'agent-shell-viewport-previous-history + "M-j" 'agent-shell-viewport-next-history + (kbd "C-o") 'agent-shell-viewport-compose-peek-last) + + (when evil-collection-want-g-bindings + (evil-collection-define-key 'normal 'agent-shell-viewport-edit-mode-map + "g?" 'agent-shell-viewport-compose-help-menu + "gs" 'agent-shell-cycle-session-mode + "gm" 'agent-shell-viewport-set-session-mode + "gv" 'agent-shell-viewport-set-session-model + "go" 'agent-shell-other-buffer + "gp" 'agent-shell-yank-dwim + "g/" 'agent-shell-viewport-search-history + "gy" 'agent-shell-viewport-copy-session-id + "gt" 'agent-shell-viewport-open-transcript)) + + (evil-collection-define-key 'normal 'agent-shell-viewport-view-mode-map + [remap evil-save-and-close] 'agent-shell-viewport-interrupt + [remap evil-save-modified-and-close] 'agent-shell-viewport-interrupt + [remap evil-ret] 'agent-shell-viewport-interrupt + [remap evil-write] 'agent-shell-viewport-interrupt + [remap evil-quit] 'bury-buffer + (kbd "TAB") 'agent-shell-viewport-next-item + (kbd "") 'agent-shell-viewport-previous-item + "gj" 'agent-shell-viewport-next-item + "gk" 'agent-shell-viewport-previous-item + (kbd "C-j") 'agent-shell-viewport-next-page + (kbd "C-k") 'agent-shell-viewport-previous-page + "q" 'bury-buffer) + + (when evil-collection-want-g-bindings + (evil-collection-define-key 'normal 'agent-shell-viewport-view-mode-map + "g1" 'agent-shell-viewport-reply-1 + "g2" 'agent-shell-viewport-reply-2 + "g3" 'agent-shell-viewport-reply-3 + "g4" 'agent-shell-viewport-reply-4 + "g5" 'agent-shell-viewport-reply-5 + "g6" 'agent-shell-viewport-reply-6 + "g7" 'agent-shell-viewport-reply-7 + "g8" 'agent-shell-viewport-reply-8 + "g9" 'agent-shell-viewport-reply-9 + "gs" 'agent-shell-viewport-cycle-session-mode + "gv" 'agent-shell-viewport-set-session-model + "go" 'agent-shell-other-buffer + "gm" 'agent-shell-viewport-set-session-mode + "g?" 'agent-shell-viewport-help-menu + ;; Maybe move elsewhere. + "gr" 'agent-shell-viewport-reply + "gy" 'agent-shell-viewport-reply-yes + "gM" 'agent-shell-viewport-reply-more + "ga" 'agent-shell-viewport-reply-again + "gc" 'agent-shell-viewport-reply-continue + "ge" 'agent-shell-viewport-edit + "gF" 'agent-shell-viewport-fork + "gY" 'agent-shell-viewport-copy-session-id + "gt" 'agent-shell-viewport-open-transcript + "gz" 'agent-shell-viewport-refresh)) + + (evil-collection-define-key 'normal 'agent-shell-diff-mode-map + "q" #'kill-current-buffer) + + (if evil-collection-want-g-bindings + (evil-collection-define-key 'normal 'agent-shell-diff-mode-map + "gf" 'agent-shell-diff-open-file + "gy" 'agent-shell-diff-accept-all + "gn" 'agent-shell-diff-reject-all) + (evil-collection-define-key 'normal 'agent-shell-diff-mode-map + "f" 'agent-shell-diff-open-file + "y" 'agent-shell-diff-accept-all + "n" 'agent-shell-diff-reject-all)) + + (add-hook 'agent-shell-diff-mode-hook #'evil-normalize-keymaps) + (add-hook 'agent-shell-mode-hook #'evil-normalize-keymaps) + (add-hook 'agent-shell-viewport-view-mode-hook #'evil-normalize-keymaps) + (add-hook 'agent-shell-viewport-edit-mode-hook #'evil-normalize-keymaps) + + (advice-add 'agent-shell-jump-to-latest-permission-button-row + :after (lambda (&rest _) (evil-normalize-keymaps)))) + +(provide 'evil-collection-agent-shell) +;;; evil-collection-agent-shell.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/alchemist/evil-collection-alchemist.el b/.config/emacs/lisp/evil-collection/modes/alchemist/evil-collection-alchemist.el new file mode 100644 index 0000000..43a823d --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/alchemist/evil-collection-alchemist.el @@ -0,0 +1,114 @@ +;;; evil-collection-alchemist.el --- Bindings for `alchemist' -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, alchemist, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for `alchemist'. + +;;; Code: +(require 'evil-collection) +(require 'alchemist nil t) + +(defconst evil-collection-alchemist-maps '(alchemist-compile-mode-map + alchemist-eval-mode-map + alchemist-execute-mode-map + alchemist-message-mode-map + alchemist-help-minor-mode-map + alchemist-macroexpand-mode-map + alchemist-mix-mode-map + alchemist-test-report-mode-map + alchemist-mode-map)) + + +;;;###autoload +(defun evil-collection-alchemist-setup () + "Set up `evil' bindings for `alchemist'." + (evil-set-initial-state 'alchemist-compile-mode 'normal) + (evil-set-initial-state 'alchemist-eval-mode 'normal) + (evil-set-initial-state 'alchemist-execute-mode 'normal) + (evil-set-initial-state 'alchemist-message-mode 'normal) + (evil-set-initial-state 'alchemist-help-minor-mode 'normal) + (evil-set-initial-state 'alchemist-macroexpand-mode 'normal) + (evil-set-initial-state 'alchemist-refcard-mode 'normal) + (evil-set-initial-state 'alchemist-mix-mode 'normal) + (evil-set-initial-state 'alchemist-test-mode 'normal) + (evil-set-initial-state 'alchemist-test-report-mode 'normal) + + (evil-collection-define-key 'normal 'alchemist-compile-mode-map + "q" 'quit-window) + + (evil-collection-define-key 'normal 'alchemist-eval-mode-map + "q" 'quit-window) + + (evil-collection-define-key 'normal 'alchemist-execute-mode-map + "q" 'quit-window) + + (evil-collection-define-key 'normal 'alchemist-message-mode-map + "q" 'quit-window) + + (evil-collection-define-key 'normal 'alchemist-help-minor-mode-map + "q" 'quit-window + "K" 'alchemist-help-search-at-point + "m" 'alchemist-help-module + "s" 'alchemist-help + "gh" 'alchemist-help-history + "gd" 'alchemist-goto-definition-at-point + "g?" 'alchemist-help-minor-mode-key-binding-summary) + + (evil-collection-define-key 'normal 'alchemist-macroexpand-mode-map + "q" 'quit-window) + + (evil-collection-define-key 'normal 'alchemist-refcard-mode-map + "gd" 'alchemist-refcard--describe-funtion-at-point + "g?" 'alchemist-refcard--describe-funtion-at-point + "q" 'quit-window) + + (evil-collection-define-key 'normal 'alchemist-mix-mode-map + "q" 'quit-window + "i" 'alchemist-mix-send-input-to-mix-process + "gr" 'alchemist-mix-rerun-last-task) + + (evil-collection-define-key 'normal 'alchemist-test-report-mode-map + "q" 'quit-window + "t" 'toggle-truncate-lines + "gr" 'alchemist-mix-rerun-last-test + "gj" 'alchemist-test-next-result + "gk" 'alchemist-test-previous-result + (kbd "C-j") 'alchemist-test-next-result + (kbd "C-k") 'alchemist-test-previous-result + "]]" 'alchemist-test-next-stacktrace-file + "[[" 'alchemist-test-previous-stacktrace-file + (kbd "C-c C-k") 'alchemist-report-interrupt-current-process) + + (evil-collection-define-key 'normal 'alchemist-mode-map + "gz" 'alchemist-iex-run + "K" 'alchemist-help-search-at-point + "gd" 'alchemist-goto-definition-at-point + (kbd "C-t") 'alchemist-goto-jump-back + "g?" 'alchemist-help + (kbd "C-j") 'alchemist-goto-jump-to-next-def-symbol + (kbd "C-k") 'alchemist-goto-jump-to-previous-def-symbol)) + +(provide 'evil-collection-alchemist) +;;; evil-collection-alchemist.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/anaconda-mode/evil-collection-anaconda-mode.el b/.config/emacs/lisp/evil-collection/modes/anaconda-mode/evil-collection-anaconda-mode.el new file mode 100644 index 0000000..a37ecf6 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/anaconda-mode/evil-collection-anaconda-mode.el @@ -0,0 +1,66 @@ +;;; evil-collection-anaconda-mode.el --- Bindings for `anaconda-mode' -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, python, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for `anaconda-mode'. + +;;; Code: +(require 'anaconda-mode nil t) +(require 'evil-collection) + +(defconst evil-collection-anaconda-mode-maps '(anaconda-view-mode-map + anaconda-mode-map)) + +;;;###autoload +(defun evil-collection-anaconda-mode-setup () + "Set up `evil' bindings for `anaconda-mode'." + ;; Bindings don't seem to be set the first time. + (add-hook 'anaconda-mode-hook #'evil-normalize-keymaps) + + ;; latest anaconda has replaced view mode by an xref implementation, + ;; anaconda stable uses `anaconda-view-mode-map' + (when (boundp 'anaconda-view-mode-map) + (evil-collection-define-key 'normal 'anaconda-view-mode-map + "gj" 'next-error-no-select + "gk" 'previous-error-no-select + (kbd "C-j") 'next-error-no-select + (kbd "C-k") 'previous-error-no-select + "]]" 'next-error-no-select + "[[" 'previous-error-no-select + "q" 'quit-window)) + + (evil-collection-define-key 'normal 'anaconda-mode-map + "gd" 'anaconda-mode-find-definitions + (kbd "C-t") (if (fboundp 'anaconda-mode-go-back) + 'anaconda-mode-go-back + 'xref-pop-marker-stack) + "K" 'anaconda-mode-show-doc) + + (when evil-collection-want-find-usages-bindings + (evil-collection-define-key 'normal 'anaconda-mode-map + "gA" 'anaconda-mode-find-assignments + "gr" 'anaconda-mode-find-references))) + +(provide 'evil-collection-anaconda-mode) +;;; evil-collection-anaconda-mode.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/apropos/README.org b/.config/emacs/lisp/evil-collection/modes/apropos/README.org new file mode 100644 index 0000000..650102a --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/apropos/README.org @@ -0,0 +1,15 @@ +* apropos + + Evil bindings for =apropos-mode=. + +** Key bindings + + | Command | Original | Evil | + |-------------------+----------+-----------| + | =apropos-follow= | =RET= | =RET= | + | =forward-button= | =TAB= | =TAB= | + | =backward-button= | =S-TAB= | =S-TAB= | + | =describe-mode= | =h=, =?= | =g?= | + | =revert-buffer= | =g= | =gr= | + | =quit-window= | =q= | =q=, =ZZ= | + | =evil-quit= | n/a | =ZQ= | diff --git a/.config/emacs/lisp/evil-collection/modes/apropos/evil-collection-apropos.el b/.config/emacs/lisp/evil-collection/modes/apropos/evil-collection-apropos.el new file mode 100644 index 0000000..7820a49 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/apropos/evil-collection-apropos.el @@ -0,0 +1,52 @@ +;;; evil-collection-apropos.el --- Evil bindings for apropos-mode -*- lexical-binding: t -*- + +;; Copyright (C) 2019 Pierre Neidhardt + +;; Author: Pierre Neidhardt +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, help, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for `apropos-mode'. + +;;; Code: +(require 'evil-collection) +(require 'apropos) + +(defconst evil-collection-apropos-maps '(apropos-mode-map)) + +;;;###autoload +(defun evil-collection-apropos-setup () + "Set up `evil' bindings for `apropos'." + (evil-set-initial-state 'apropos-mode 'normal) + (evil-collection-define-key 'normal 'apropos-mode-map + (kbd "RET") 'apropos-follow + (kbd "TAB") 'forward-button + (kbd "S-TAB") 'backward-button + "g?" 'describe-mode + "gr" 'revert-buffer + + ;; quit + "q" 'quit-window + "ZQ" 'evil-quit + "ZZ" 'quit-window)) + +(provide 'evil-collection-apropos) +;;; evil-collection-apropos.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/arc-mode/README.org b/.config/emacs/lisp/evil-collection/modes/arc-mode/README.org new file mode 100644 index 0000000..178486b --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/arc-mode/README.org @@ -0,0 +1,30 @@ +* arc-mode + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/emacs/File-Archives.html][arc-mode]] (archive file browser). + + =arc-mode= and =archive-mode= start in normal state. + +** Key bindings + + | Command | Original | Evil | + |--------------------------------+-----------------+------------------------------| + | =archive-next-line= | =n=, =C-n= | =j=, =C-j=, =gj=, =n=, =C-n= | + | =archive-previous-line= | =p=, =C-p= | =k=, =C-k=, =gk=, =p=, =C-p= | + | =beginning-of-buffer= | =<= | =gg=, =<= | + | =end-of-buffer= | =>= | =G=, =>= | + | =archive-extract= | =RET=, =e=, =f= | =RET= | + | =archive-extract-other-window= | =o= | =go=, =S-RET= | + | =archive-view= | =v= | =M-RET= | + | =archive-alternate-display= | =a= | =a= | + | =archive-flag-deleted= | =d=, =C-d= | =d=, =C-d= | + | =archive-rename-entry= | =r= | =r= | + | =archive-expunge= | =x= | =x= | + | =archive-copy-file= | =C= | =C= | + | =archive-chmod-entry= | =M= | =M= | + | =archive-chown-entry= | =O= | =O= | + | =archive-chgrp-entry= | =G= | =P= | + | =archive-mark= | =m= | =m= | + | =archive-unflag= | =u= | =u= | + | =archive-unmark-all-files= | =M-DEL= | =U=, =M-DEL= | + | =revert-buffer= | =g= | =gr= | + | =quit-window= | =q= | =q= | diff --git a/.config/emacs/lisp/evil-collection/modes/arc-mode/evil-collection-arc-mode.el b/.config/emacs/lisp/evil-collection/modes/arc-mode/evil-collection-arc-mode.el new file mode 100644 index 0000000..7392b37 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/arc-mode/evil-collection-arc-mode.el @@ -0,0 +1,78 @@ +;;; evil-collection-arc-mode.el --- Evil bindings for arc-mode -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, arc-mode, archive, bindings, files + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Evil bindings for arc-mode. + +;;; Code: +(require 'arc-mode) +(require 'evil-collection) + +(defconst evil-collection-arc-mode-maps '(archive-mode-map)) + +;;;###autoload +(defun evil-collection-arc-mode-setup () + "Set up `evil' bindings for `arc-mode'." + (evil-set-initial-state 'arc-mode 'normal) + (evil-set-initial-state 'archive-mode 'normal) + (evil-collection-define-key 'normal 'archive-mode-map + "j" 'archive-next-line + "k" 'archive-previous-line + (kbd "C-j") 'archive-next-line + (kbd "C-k") 'archive-previous-line + "gj" 'archive-next-line + "gk" 'archive-previous-line + + "gg" 'beginning-of-buffer + "G" 'end-of-buffer + + ;; open + (kbd "RET") 'archive-extract + (kbd "S-") 'archive-extract-other-window + (kbd "M-") 'archive-view + "go" 'archive-extract-other-window + + "a" 'archive-alternate-display + "d" 'archive-flag-deleted + "r" 'archive-rename-entry + "x" 'archive-expunge + "C" 'archive-copy-file + "M" 'archive-chmod-entry + "O" 'archive-chown-entry + "P" 'archive-chgrp-entry + + ;; refresh + "gr" 'revert-buffer + + ;; mark + "m" 'archive-mark + "u" 'archive-unflag + "U" 'archive-unmark-all-files + + ;; quit + "q" 'quit-window)) + +(provide 'evil-collection-arc-mode) +;;; evil-collection-arc-mode.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/atomic-chrome/evil-collection-atomic-chrome.el b/.config/emacs/lisp/evil-collection/modes/atomic-chrome/evil-collection-atomic-chrome.el new file mode 100644 index 0000000..61d2eb2 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/atomic-chrome/evil-collection-atomic-chrome.el @@ -0,0 +1,42 @@ +;;; evil-collection-atomic-chrome.el --- Evil bindings for atomic-chrome -*- lexical-binding: t -*- + +;; Copyright (C) 2022 Zhiwei Chen + +;; Author: Zhiwei Chen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for atomic-chrome. + +;;; Code: +(require 'evil-collection) +(require 'atomic-chrome nil t) + +(defconst evil-collection-atomic-chrome-maps nil) + +;;;###autoload +(defun evil-collection-atomic-chrome-setup () + "Set up `evil' bindings for `atomic-chrome'." + ;; The browser is in "inserted" state, makes it consistent. + (evil-set-initial-state 'atomic-chrome-edit-mode 'insert)) + +(provide 'evil-collection-atomic-chrome) +;;; evil-collection-atomic-chrome.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/auto-package-update/evil-collection-auto-package-update.el b/.config/emacs/lisp/evil-collection/modes/auto-package-update/evil-collection-auto-package-update.el new file mode 100644 index 0000000..7f832b7 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/auto-package-update/evil-collection-auto-package-update.el @@ -0,0 +1,44 @@ +;;; evil-collection-auto-package-update.el --- Evil bindings for auto-package-update -*- lexical-binding: t -*- + +;; Copyright (C) 2020 Zhiwei Chen + +;; Author: Zhiwei Chen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, auto-package-update, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for auto-package-update. + +;;; Code: +(require 'evil-collection) +(require 'auto-package-update nil t) + +(defconst evil-collection-auto-package-update-maps '(auto-package-update-minor-mode-map)) + +;;;###autoload +(defun evil-collection-auto-package-update-setup () + "Set up `evil' bindings for `auto-package-update'." + (add-hook 'auto-package-update-minor-mode-hook 'evil-normalize-keymaps) + (evil-collection-define-key 'normal 'auto-package-update-minor-mode-map + "q" 'quit-window)) + +(provide 'evil-collection-auto-package-update) + +;;; evil-collection-auto-package-update.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/beginend/evil-collection-beginend.el b/.config/emacs/lisp/evil-collection/modes/beginend/evil-collection-beginend.el new file mode 100644 index 0000000..715a471 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/beginend/evil-collection-beginend.el @@ -0,0 +1,125 @@ +;;; evil-collection-beginend.el --- Evil bindings for beginend -*- lexical-binding: t -*- + +;; Copyright (C) 2021 Balaji Sivaraman + +;; Author: Balaji Sivaraman +;; Maintainer: Balaji Sivaraman +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for beginend. + +;;; Code: + +(require 'evil-collection) +(require 'beginend nil t) + +(eval-and-compile + (defconst evil-collection-beginend-modes '(bs-mode + rg-mode + org-mode + deft-mode + prog-mode + LaTeX-mode + dired-mode + latex-mode + nroam-mode + occur-mode + vc-dir-mode + ibuffer-mode + message-mode + outline-mode + prodigy-mode + org-agenda-mode + compilation-mode + epa-key-list-mode + magit-status-mode + elfeed-search-mode + elfeed-show-mode + magit-revision-mode + notmuch-search-mode + recentf-dialog-mode))) + + +(defmacro evil-beginend--define-goto-beginning-motion (ec-mode-name) + "Macro to define new Evil motion that will use the corresponding +beginend-goto-beginning function for EC-MODE-NAME when count is not +provided for the motion; otherwise behave like `evil-goto-first-line' +if count is provided. + +This will also associate the regular Evil `gg' keybinding with the +newly defined motion." + (let ((motion-name (intern (format "evil-beginend-%s-goto-beginning" ec-mode-name))) + (beginend-beginning-fn-name (intern (format "beginend-%s-goto-beginning" ec-mode-name))) + (beginend-map-name (intern (format "beginend-%s-map" ec-mode-name)))) + `(progn + (declare-function ,motion-name "evil-collection") + (declare-function ,beginend-beginning-fn-name "ext:beginend") + (evil-define-motion ,motion-name (count) + :jump t + :type line + (if count + (evil-goto-first-line count) + (,beginend-beginning-fn-name))) + (evil-collection-define-key 'normal ',beginend-map-name + "gg" ',motion-name)))) + +(defmacro evil-beginend--define-goto-end-motion (ec-mode-name) + "Macro to define new Evil motion that will use the corresponding +beginend-goto-end function for EC-MODE-NAME when count is not +provided for the motion; otherwise behave like `evil-goto-line' +if count is provided. + +This will also associate the regular Evil `G' keybinding with the +newly defined motion." + (let ((motion-name (intern (format "evil-beginend-%s-goto-end" ec-mode-name))) + (beginend-end-fn-name (intern (format "beginend-%s-goto-end" ec-mode-name))) + (beginend-map-name (intern (format "beginend-%s-map" ec-mode-name)))) + `(progn + (declare-function ,motion-name "evil-collection") + (declare-function ,beginend-end-fn-name "ext:beginend") + (evil-define-motion ,motion-name (count) + :jump t + :type line + (if count + (evil-goto-line count) + (,beginend-end-fn-name))) + (evil-collection-define-key 'normal ',beginend-map-name + "G" ',motion-name)))) + +(defmacro evil-beginend--define-mode-motions () + "Define the goto-beginning and goto-end motions for all modes in +`evil-collection-beginend-modes'." + `(progn + ,@(mapcar + (lambda (mode-symbol) + (let ((mode-string (symbol-name mode-symbol))) + `(progn + (evil-beginend--define-goto-beginning-motion ,mode-string) + (evil-beginend--define-goto-end-motion ,mode-string)))) + evil-collection-beginend-modes))) + +;;;###autoload +(defun evil-collection-beginend-setup () + "Set up `evil' bindings for `beginend'." + (evil-beginend--define-mode-motions)) + +(provide 'evil-collection-beginend) +;;; evil-collection-beginend.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/bluetooth/evil-collection-bluetooth.el b/.config/emacs/lisp/evil-collection/modes/bluetooth/evil-collection-bluetooth.el new file mode 100644 index 0000000..8d18604 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/bluetooth/evil-collection-bluetooth.el @@ -0,0 +1,59 @@ +;;; evil-collection-bluetooth.el --- Bindings for `bluetooth' -*- lexical-binding: t -*- + +;; Copyright (C) 2022 Arian Dehghani + +;; Author: Arian Dehghani +;; Maintainer: Arian Dehghani +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "27.1")) +;; Keywords: evil, emacs, tools, blutooth + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for `bluetooth'. + +;;; Code: +(require 'evil-collection) +(require 'bluetooth nil t) + +(defvar bluetooth-mode-map) + +(defconst evil-collection-bluetooth-maps '(bluetooth-mode-map)) + +;;;###autoload +(defun evil-collection-bluetooth-setup () + "Set up `evil' bindings for `bluetooth'." + (evil-collection-set-readonly-bindings 'bluetooth-mode-map) + (evil-collection-define-key 'normal 'bluetooth-mode-map + "c" 'bluetooth-connect + "d" 'bluetooth-disconnect + "b" 'bluetooth-toggle-blocked + "t" 'bluetooth-toggle-trusted + "a" 'bluetooth-set-alias + "r" 'bluetooth-start-discovery + "R" 'bluetooth-stop-discovery + "s" 'bluetooth-toggle-powered + "P" 'bluetooth-pair + "D" 'bluetooth-toggle-discoverable + "x" 'bluetooth-toggle-pairable + "i" 'bluetooth-show-device-info + "A" 'bluetooth-show-adapter-info + "K" 'bluetooth-remove-device + "<" 'bluetooth-beginning-of-list + ">" 'bluetooth-end-of-list)) + +(provide 'evil-collection-bluetooth) +;;; evil-collection-bluetooth.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/bm/evil-collection-bm.el b/.config/emacs/lisp/evil-collection/modes/bm/evil-collection-bm.el new file mode 100644 index 0000000..d4470f5 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/bm/evil-collection-bm.el @@ -0,0 +1,54 @@ +;;; evil-collection-bm.el --- Evil bindings for bm -*- lexical-binding: t -*- + +;; Copyright (C) 2020 Zhiwei Chen + +;; Author: Zhiwei Chen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, bm, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for bm. + +;;; Code: +(require 'evil-collection) +(require 'bm nil t) + +(defconst evil-collection-bm-maps '(bm-show-mode-map)) + +;;;###autoload +(defun evil-collection-bm-setup () + "Set up `evil' bindings for `bm'." + (evil-set-initial-state 'bm-show-mode 'normal) + + (evil-collection-define-key 'normal 'bm-show-mode-map + "q" 'bm-show-quit-window + "gr" 'revert-buffer + "g?" 'describe-mode + + "j" 'bm-show-next + "k" 'bm-show-prev + + ;; open + (kbd "RET") 'bm-show-goto-bookmark + (kbd "S-") 'bm-show-bookmark)) + + +(provide 'evil-collection-bm) +;;; evil-collection-bm.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/bookmark/README.org b/.config/emacs/lisp/evil-collection/modes/bookmark/README.org new file mode 100644 index 0000000..5d3aa8e --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/bookmark/README.org @@ -0,0 +1,36 @@ +* bookmark + + Evil bindings for the bookmark list (=bookmark-bmenu-mode=). + + Standard motion / quit bindings come from =evil-collection-set-readonly-bindings= + and are not repeated below. + +** Key bindings + + | Command | Original | Evil | + |---------------------------------------+-----------------+------------------------------| + | =bookmark-bmenu-this-window= | =RET=, =f=, =j= | =RET= | + | =bookmark-bmenu-other-window= | =o= | =o=, =go=, =S-RET= | + | =bookmark-bmenu-switch-other-window= | =C-o= | =gO=, =M-RET= | + | =bookmark-bmenu-select= | =v= | =o= (see above; =v= unbound) | + | =bookmark-bmenu-1-window= | =1= | =1= | + | =bookmark-bmenu-2-window= | =2= | =2= | + | =bookmark-bmenu-other-frame= | =5= | =5= | + | =bookmark-bmenu-delete= | =d=, =k= | =d= | + | =bookmark-bmenu-delete-backwards= | =C-d= | =D= | + | =bookmark-bmenu-execute-deletions= | =x= | =x= | + | =bookmark-bmenu-search= | =/= | =s= (=s= also via custom) | + | =bookmark-bmenu-rename= | =r= | =r= | + | =bookmark-bmenu-relocate= | =R= | =R= | + | =bookmark-bmenu-load= | =l= | =L= | + | =bookmark-bmenu-save= | =s= | =s=, remap of =evil-write= | + | =bookmark-bmenu-toggle-filenames= | =t= | =t= | + | =bookmark-bmenu-locate= | =w= | =W= | + | =bookmark-bmenu-show-annotation= | =a= | =a= | + | =bookmark-bmenu-show-all-annotations= | =A= | =A= | + | =bookmark-bmenu-edit-annotation= | =e= | =E= | + | =bookmark-bmenu-mark= | =m= | =m= | + | =bookmark-bmenu-mark-all= | =M= | =M= | + | =bookmark-bmenu-unmark= | =u= | =u= | + | =bookmark-bmenu-unmark-all= | =U= | =U= | + | =bookmark-bmenu-backup-unmark= | =DEL= | =DEL= | diff --git a/.config/emacs/lisp/evil-collection/modes/bookmark/evil-collection-bookmark.el b/.config/emacs/lisp/evil-collection/modes/bookmark/evil-collection-bookmark.el new file mode 100644 index 0000000..f21ad32 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/bookmark/evil-collection-bookmark.el @@ -0,0 +1,78 @@ +;;; evil-collection-bookmark.el --- Evil bindings for bookmarks -*- lexical-binding: t -*- + +;; Copyright (C) 2017, 2022 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, bookmark, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for bookmarks. + +;;; Code: +(require 'evil-collection) +(require 'bookmark) + +(defconst evil-collection-bookmark-maps '(bookmark-bmenu-mode-map)) + +;;;###autoload +(defun evil-collection-bookmark-setup () + "Set up `evil' bindings for `bookmark'." + (evil-set-initial-state 'bookmark-bmenu-mode 'normal) + (evil-collection-set-readonly-bindings 'bookmark-bmenu-mode-map) + (evil-collection-define-key 'normal 'bookmark-bmenu-mode-map + [remap evil-write] 'bookmark-bmenu-save + + "1" 'bookmark-bmenu-1-window + "2" 'bookmark-bmenu-2-window + "5" 'bookmark-bmenu-other-frame + "d" 'bookmark-bmenu-delete + "x" 'bookmark-bmenu-execute-deletions + "s" 'bookmark-bmenu-search + "r" 'bookmark-bmenu-rename + "R" 'bookmark-bmenu-relocate + "L" 'bookmark-bmenu-load + "t" 'bookmark-bmenu-toggle-filenames + "W" 'bookmark-bmenu-locate + "D" 'bookmark-bmenu-delete-backwards + + ;; annotation + "a" 'bookmark-bmenu-show-annotation + "A" 'bookmark-bmenu-show-all-annotations + "E" 'bookmark-bmenu-edit-annotation + + ;; mark + "u" 'bookmark-bmenu-unmark + "U" 'bookmark-bmenu-unmark-all + "m" 'bookmark-bmenu-mark + "M" 'bookmark-bmenu-mark-all + + ;; open + "o" 'bookmark-bmenu-select + "O" 'bookmark-bmenu-other-window + "go" 'bookmark-bmenu-other-window + "gO" 'bookmark-bmenu-switch-other-window + (kbd "DEL") 'bookmark-bmenu-backup-unmark + (kbd "RET") 'bookmark-bmenu-this-window + (kbd "S-") 'bookmark-bmenu-other-window + (kbd "M-") 'bookmark-bmenu-switch-other-window)) + +(provide 'evil-collection-bookmark) +;;; evil-collection-bookmark.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/buff-menu/README.org b/.config/emacs/lisp/evil-collection/modes/buff-menu/README.org new file mode 100644 index 0000000..b048631 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/buff-menu/README.org @@ -0,0 +1,35 @@ +* buff-menu + + Evil bindings for the buffer list (=Buffer-menu-mode=). + +** Key bindings + + | Command | Original | Evil | + |--------------------------------------+-----------------+--------------------| + | =Buffer-menu-this-window= | =RET=, =f=, =e= | =RET=, =go=, =C-m= | + | =Buffer-menu-other-window= | =o= | =gO= | + | =Buffer-menu-select= | =v= | =gv= | + | =Buffer-menu-view= | =V= | =gV= | + | =Buffer-menu-delete= | =d=, =k= | =d=, =C-k= | + | =Buffer-menu-delete-backwards= | =C-d= | =C-d= | + | =Buffer-menu-execute= | =x= | =x= | + | =Buffer-menu-save= | =s= | =s= | + | =Buffer-menu-bury= | =b= | =X= | + | =Buffer-menu-mark= | =m= | =m= | + | =Buffer-menu-unmark= | =u= | =u= | + | =Buffer-menu-unmark-all= | =U= | =U= | + | =Buffer-menu-backup-unmark= | =DEL= | =DEL= | + | =Buffer-menu-not-modified= | =~= | =~= | + | =Buffer-menu-toggle-read-only= | =%= | =%= | + | =Buffer-menu-toggle-files-only= | =T= | =T= | + | =Buffer-menu-visit-tags-table= | =t= | =t= | + | =tabulated-list-sort= | =S= | =o= | + | =revert-buffer= | =g= | =gr= | + | =evil-visual-char= | n/a | =v= | + | =quit-window= | =q= | =q=, =ZZ= | + | =evil-quit= | n/a | =ZQ= | + | =Buffer-menu-1-window= | =1= | =1= | + | =Buffer-menu-2-window= | =2= | =2= | + | =Buffer-menu-isearch-buffers= | =M-s a C-s= | =M-s a C-s= | + | =Buffer-menu-isearch-buffers-regexp= | =M-s a M-C-s= | =M-s a M-C-s= | + | =Buffer-menu-multi-occur= | =M-s a C-o= | =M-s a C-o= | diff --git a/.config/emacs/lisp/evil-collection/modes/buff-menu/evil-collection-buff-menu.el b/.config/emacs/lisp/evil-collection/modes/buff-menu/evil-collection-buff-menu.el new file mode 100644 index 0000000..a754978 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/buff-menu/evil-collection-buff-menu.el @@ -0,0 +1,78 @@ +;;; evil-collection-buff-menu.el --- Bindings for `buff-menu' -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, emacs, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for `buff-menu'. + +;;; Code: +(require 'evil-collection) + +(defconst evil-collection-buff-menu-maps '(Buffer-menu-mode-map)) + +;;;###autoload +(defun evil-collection-buff-menu-setup () + "Set up `evil' bindings for `buff-menu'.." + (evil-set-initial-state 'Buffer-menu-mode 'normal) + + (evil-collection-define-key 'normal 'Buffer-menu-mode-map + "ZQ" 'evil-quit + "ZZ" 'quit-window + "gr" 'revert-buffer + "go" 'Buffer-menu-this-window + "gO" 'Buffer-menu-other-window + "d" 'Buffer-menu-delete + "s" 'Buffer-menu-save + [mouse-2] 'Buffer-menu-mouse-select + [follow-link] 'mouse-face + "x" 'Buffer-menu-execute + "o" 'tabulated-list-sort + "gv" 'Buffer-menu-select + "gV" 'Buffer-menu-view + "v" 'evil-visual-char + + ;; mark + "u" 'Buffer-menu-unmark + "U" 'Buffer-menu-unmark-all + "m" 'Buffer-menu-mark + + "X" 'Buffer-menu-bury + + ;; Default ones, unchanged. Redundant ones commented + "2" 'Buffer-menu-2-window + "1" 'Buffer-menu-1-window + (kbd "C-m") 'Buffer-menu-this-window + (kbd "C-k") 'Buffer-menu-delete + (kbd "C-d") 'Buffer-menu-delete-backwards + (kbd "") 'Buffer-menu-backup-unmark + "~" 'Buffer-menu-not-modified + "t" 'Buffer-menu-visit-tags-table + "%" 'Buffer-menu-toggle-read-only + "T" 'Buffer-menu-toggle-files-only + (kbd "M-s a C-s") 'Buffer-menu-isearch-buffers + (kbd "M-s a M-C-s") 'Buffer-menu-isearch-buffers-regexp + (kbd "M-s a C-o") 'Buffer-menu-multi-occur)) + +(provide 'evil-collection-buff-menu) +;;; evil-collection-buff-menu.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/bufler/evil-collection-bufler.el b/.config/emacs/lisp/evil-collection/modes/bufler/evil-collection-bufler.el new file mode 100644 index 0000000..85aa748 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/bufler/evil-collection-bufler.el @@ -0,0 +1,57 @@ +;;; evil-collection-bufler.el --- Evil bindings for mpdel -*- lexical-binding: t -*- + +;; Copyright (C) 2023 Ruoyu Feng + +;; Author: Ruoyu Feng +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "27.1")) +;; Keywords: evil, tools, bufler, buffer list + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: +;; Evil bindings for bufler. + +;;; Code: + +(require 'bufler nil t) +(require 'evil-collection) + +(defvar bufler-list-mode-map) + +(defconst evil-collection-bufler-maps '(bufler-list-mode-map)) + +(defconst evil-collection-bufler-modes '(bufler-list-mode)) + +;;;###autoload +(defun evil-collection-bufler-setup () + "Set up `evil' bindings for `bufler'." + + (evil-collection-set-readonly-bindings 'bufler-list-mode-map) + (dolist (mode evil-collection-bufler-modes) + (evil-set-initial-state mode 'normal)) + (evil-collection-define-key 'normal 'bufler-list-mode-map + "?" 'hydra:bufler/body + "B" 'bufler + "f" 'bufler-list-group-frame + "F" 'bufler-list-group-make-frame + "r" 'bufler-list-buffer-name-workspace + "D" 'bufler-list-buffer-kill + "w" 'bufler-list-buffer-save + (kbd "RET") 'bufler-list-buffer-switch + "J" 'bufler-list-buffer-peek)) + +(provide 'evil-collection-bufler) +;;; evil-collection-bufler.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/calc/README.org b/.config/emacs/lisp/evil-collection/modes/calc/README.org new file mode 100644 index 0000000..97a2e1b --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/calc/README.org @@ -0,0 +1,52 @@ +* calc + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/calc/index.html][calc]]. + + Standard motion / quit bindings come from =evil-collection-set-readonly-bindings= + and are not repeated below. Calc's =calc-ext= prefix maps (=V=, =Y=, =Z=, =a=, + =b=, =c=, =f=, =g=, =m=, =r=, =s=, =t=, =v=) are kept on their original keys; + prefixes that conflict with evil motions are relocated. + +** Key bindings + + | Command | Original | Evil | + |-----------------------------+--------------------------+---------------------------| + | =calc-enter= | =RET= | =RET=, =SPC= | + | =calc-over= | =C-j= | =S-RET= | + | =calc-roll-down= | =TAB= | =TAB= | + | =calc-roll-up= | =M-TAB= | =C-M-i= | + | =calc-pop= | =DEL=, ==, =C-d= | =DEL=, == | + | =calc-pop-above= | =M-DEL=, =M-d= | =M-DEL=, =C-M-d= | + | =calc-kill= | =C-k= | =d= | + | =calc-kill-region= (visual) | =C-w= | =d= | + | =calc-yank= | =C-y= | =pp= | + | =calc-copy-to-buffer= | =y= | =pP= | + | =calc-copy-as-kill= | =M-k= | =M-k= | + | =calc-copy-region-as-kill= | =M-w= | =M-w= | + | =calc-undo= | =U= | =u= | + | =calc-redo= | =D= | =D= (via prefix relocate) | + | =calc-precision= | =p= | =C-p= | + | =calc-call-last-kbd-macro= | =X= | =X= | + | =calc-help= | =?= | =?= | + | =calc-info= | =i= | =i= | + | =calc-quit= | =q= | =q= | + | =calc-last-args= | =M-RET= | =M-RET= | + | =calc-percent= | =M-%= | =M-%= | + | =calc-transpose-lines= | =C-x C-t= | =C-x C-t= | + | =calc-total-algebraic-mode= | =m t= | =M-m t= | + +** Relocated prefix maps + + Calc prefixes are moved off keys that conflict with evil motion or operators: + + | Original prefix | Evil prefix | + |-----------------+-------------| + | =d= | =D= | + | =j= | =zj= | + | =k= | =zk= | + | =l= | =zl= | + | =u= | =U= | + | =z= | =zz= | + + All operator / digit / symbol keys (=+=, =-=, =*=, =/=, digits, =A=–=T=, =[[=, + =]]=, etc.) keep their default calc bindings. diff --git a/.config/emacs/lisp/evil-collection/modes/calc/evil-collection-calc.el b/.config/emacs/lisp/evil-collection/modes/calc/evil-collection-calc.el new file mode 100644 index 0000000..8f35b98 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/calc/evil-collection-calc.el @@ -0,0 +1,172 @@ +;;; evil-collection-calc.el --- Evil bindings for calc -*- lexical-binding: t -*- + +;; Copyright (C) 2018 Pierre Neidhardt + +;; Author: Pierre Neidhardt +;; Maintainer: James Nguyen , Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, calc, tools + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: +;; Evil bindings for calc. + +;;; Code: +(require 'evil-collection) +(require 'calc) + +(defconst evil-collection-calc-maps '(calc-mode-map)) + +;;;###autoload +(defun evil-collection-calc-setup () + "Set up `evil' bindings for `calc'." + (evil-collection-set-readonly-bindings 'calc-mode-map) + (evil-set-initial-state 'calc-mode 'normal) + + ;; Calc sets up its bindings just-in-time for its "extensions". I don't think + ;; it's worth copying this clumsy design (for what performance benefit?), + ;; while making the bindings much harder to maintain. + (require 'calc-ext) + + (evil-collection-define-key 'normal 'calc-mode-map + "0" 'calcDigit-start + "1" 'calcDigit-start + "2" 'calcDigit-start + "3" 'calcDigit-start + "4" 'calcDigit-start + "5" 'calcDigit-start + "6" 'calcDigit-start + "7" 'calcDigit-start + "8" 'calcDigit-start + "9" 'calcDigit-start + + (kbd "") 'calc-roll-down + (kbd "S-") 'calc-over + (kbd "RET") 'calc-enter + (kbd "SPC") 'calc-enter + + (kbd "C-x C-t") 'calc-transpose-lines + (kbd "C-M-d") 'calc-pop-above + (kbd "C-M-i") 'calc-roll-up + (kbd "M-RET") 'calc-last-args + (kbd "C-M-w") 'kill-ring-save + (kbd "M-%") 'calc-percent + (kbd "M-k") 'calc-copy-as-kill + (kbd "M-w") 'calc-copy-region-as-kill + (kbd "M-DEL") 'calc-pop-above + (kbd "M-m t") 'calc-total-algebraic-mode + (kbd "") 'calc-pop + (kbd "") 'calc-yank + (kbd "DEL") 'calc-pop ; was "C-d" + "d" 'calc-kill ; was "C-k" + "u" 'calc-undo ; was "U" + "X" 'calc-call-last-kbd-macro ; "@" is already used. + "pp" 'calc-yank ; was "C-y" + "pP" 'calc-copy-to-buffer ; was "y" + + (kbd "C-p") 'calc-precision ; was "p" + + "?" 'calc-help + ;; "h" 'calc-help-prefix ; TODO: Rebind? + "i" 'calc-info + + "\"" 'calc-auto-algebraic-entry + "$" 'calc-auto-algebraic-entry ; TODO: No need for this one? + "'" 'calc-algebraic-entry + + "!" 'calc-factorial + "#" 'calcDigit-start + "%" 'calc-mod + "&" 'calc-inv + "(" 'calc-begin-complex + ")" 'calc-end-complex + "*" 'calc-times + "+" 'calc-plus + "," 'calc-comma + "-" 'calc-minus + "." 'calcDigit-start + "/" 'calc-divide + ":" 'calc-fdiv + ";" 'calc-semi ; TODO: Shall we really override `evil-ex'? + "<" 'calc-scroll-left + "=" 'calc-evaluate + ">" 'calc-scroll-right + "@" 'calcDigit-start + "A" 'calc-abs + "B" 'calc-log + "C" 'calc-cos + ;; "D" 'calc-redo ; TODO: What's the purpose of this? Bind to C-r? + "E" 'calc-exp + "F" 'calc-floor + "G" 'calc-argument + "H" 'calc-hyperbolic + "I" 'calc-inverse + "J" 'calc-conj + "K" 'calc-keep-args + "L" 'calc-ln + "M" 'calc-more-recursion-depth + "N" 'calc-eval-num + "O" 'calc-option + "P" 'calc-pi + "Q" 'calc-sqrt + "R" 'calc-round + "S" 'calc-sin + "T" 'calc-tan + "[[" 'calc-begin-vector + "]]" 'calc-end-vector + "\\" 'calc-idiv + "^" 'calc-power + "_" 'calcDigit-start + "`" 'calc-edit + "e" 'calcDigit-start + "n" 'calc-change-sign + "o" 'calc-realign + "w" 'calc-why + "x" 'calc-execute-extended-command + "|" 'calc-concat + "{" 'calc-scroll-down ; TODO: Not necessary? + "}" 'calc-scroll-up ; TODO: Not necessary? + "~" 'calc-num-prefix + + "V" (lookup-key calc-mode-map (kbd "V")) + "Y" (lookup-key calc-mode-map (kbd "Y")) + "Z" (lookup-key calc-mode-map (kbd "Z")) + "a" (lookup-key calc-mode-map (kbd "a")) + "b" (lookup-key calc-mode-map (kbd "b")) + "c" (lookup-key calc-mode-map (kbd "c")) + "D" (lookup-key calc-mode-map (kbd "d")) + "f" (lookup-key calc-mode-map (kbd "f")) + "g" (lookup-key calc-mode-map (kbd "g")) + "zj" (lookup-key calc-mode-map (kbd "j")) + "zk" (lookup-key calc-mode-map (kbd "k")) + "zl" (lookup-key calc-mode-map (kbd "l")) + "m" (lookup-key calc-mode-map (kbd "m")) + "r" (lookup-key calc-mode-map (kbd "r")) + "s" (lookup-key calc-mode-map (kbd "s")) + "t" (lookup-key calc-mode-map (kbd "t")) + "U" (lookup-key calc-mode-map (kbd "u")) + "v" (lookup-key calc-mode-map (kbd "v")) + "zz" (lookup-key calc-mode-map (kbd "z")) + + ;; quit + "q" 'calc-quit) + + (evil-collection-define-key 'visual 'calc-mode-map + "d" 'calc-kill-region)) + +(provide 'evil-collection-calc) +;;; evil-collection-calc.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/calendar/README.org b/.config/emacs/lisp/evil-collection/modes/calendar/README.org new file mode 100644 index 0000000..2733b42 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/calendar/README.org @@ -0,0 +1,63 @@ +* calendar + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Calendar_002fDiary.html][calendar]]. + +** Key bindings + + | Command | Original | Evil | + |--------------------------------------+----------------+---------------------| + | =calendar-backward-day= | =C-b=, =left= | =h= | + | =calendar-forward-day= | =C-f=, =right= | =l= | + | =calendar-backward-week= | =C-p=, =up= | =k= | + | =calendar-forward-week= | =C-n=, =down= | =j= | + | =calendar-beginning-of-week= | =C-a= | =0=, =^= | + | =calendar-end-of-week= | =C-e= | =$= | + | =calendar-beginning-of-month= | =M-a= | =(= | + | =calendar-end-of-month= | =M-e= | =)= | + | =calendar-backward-month= | =M-{= | ={=, =C-k=, =gk= | + | =calendar-forward-month= | =M-}= | =}=, =C-j=, =gj= | + | =calendar-backward-year= | =C-x [= | =[[= | + | =calendar-forward-year= | =C-x ]= | =]]= | + | =calendar-beginning-of-year= | =M-<= | =M-<= | + | =calendar-end-of-year= | =M->= | =M->= | + | =calendar-scroll-right= | =>=, =C-x <= | =<= | + | =calendar-scroll-left= | =<=, =C-x >= | =>= | + | =calendar-scroll-right-three-months= | =M-v=, =prior= | =C-b= | + | =calendar-scroll-left-three-months= | =C-v=, =next= | =C-f= | + | =scroll-other-window= | =SPC= | =SPC= | + | =scroll-other-window-down= | =S-SPC=, =DEL= | =S-SPC=, == | + | =calendar-set-mark= | =C-SPC= | =v= | + | =calendar-goto-today= | =.= | =.= | + | =calendar-other-month= | =o= | =o=, =gD= | + | =calendar-goto-date= | =g d= | =gd= | + | =diary-view-entries= | =d= | =d= | + | =diary-view-other-diary-entries= | =D= | =D= | + | =diary-mark-entries= | =m= | =m= | + | =diary-show-all-entries= | =s= | =s= | + | =appt-add= | =A a= | =Aa= | + | =appt-delete= | =A d= | =Ad= | + | =calendar-unmark= | =u= | =u= | + | =calendar-mark-holidays= | =x= | =x= | + | =calendar-list-holidays= | =a= | =a=, =gh= | + | =calendar-cursor-holidays= | =h= | =r= | + | =calendar-lunar-phases= | =M= | =gm= | + | =calendar-sunrise-sunset= | =S= | =gs= | + | =org-calendar-goto-agenda= | n/a | =gc= | + | =calendar-redraw= | =C-c C-l= | =gr= | + | =calendar-goto-info-node= | =?= | =?=, =g?= | + | =calendar-count-days-region= | =M-== | =M-== | + | =calendar-exit= | =q= | =q=, =ZZ= | + | =evil-quit= | n/a | =ZQ= | + +** Org integration + + When =evil-collection-calendar-want-org-bindings= is non-nil, the key named by + =org-calendar-to-agenda-key= (default =c=) is bound to =org-calendar-goto-agenda=, + and =org-calendar-insert-diary-entry-key= (default =i=) to =org-agenda-diary-entry= + when =org-agenda-diary-file= is set. + +** Customization + + | Variable | Default | Purpose | + |----------------------------------------------+---------+---------------------------------------------| + | =evil-collection-calendar-want-org-bindings= | =nil= | Install =org-calendar-*= bindings on entry. | diff --git a/.config/emacs/lisp/evil-collection/modes/calendar/evil-collection-calendar.el b/.config/emacs/lisp/evil-collection/modes/calendar/evil-collection-calendar.el new file mode 100644 index 0000000..81464a8 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/calendar/evil-collection-calendar.el @@ -0,0 +1,146 @@ +;;; evil-collection-calendar.el --- Evil bindings for calendar -*- lexical-binding: t -*- + +;; Copyright (C) 2017 Pierre Neidhardt + +;; Author: Pierre Neidhardt +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, calendar, tools + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: +;; Evil bindings for the calendar. + +;;; Code: +(require 'calendar) +(require 'evil-collection) + +(defconst evil-collection-calendar-maps '(calendar-mode-map)) + +(defun evil-collection-calendar-setup-org-bindings () + "Bind Org functions to Calendar keymap." + (require 'org) + (require 'org-agenda) + (defvar org-calendar-to-agenda-key) + (defvar org-agenda-diary-file) + (defvar org-calendar-insert-diary-entry-key) + + (let ((key (pcase org-calendar-to-agenda-key + ((and key (pred stringp)) key) + ;; The default value of `org-calendar-to-agenda-key' is [?c] in Org 9.1 + ;; We do make a minimal compatibility support for vector of integers. + ((and key (pred vectorp)) (mapconcat (lambda (x) (format "%c" x)) key "")) + ((and (pred symbolp) 'default) "c") + (_ "")))) + (evil-collection-define-key 'normal 'calendar-mode-map + (kbd key) 'org-calendar-goto-agenda)) + + ;; Similar to `org-calendar-to-agenda-key'. + (unless (eq org-agenda-diary-file 'diary-file) + (let ((key (pcase org-calendar-insert-diary-entry-key + ((and key (pred stringp)) key) + ((and key (pred vectorp)) (mapconcat (lambda (x) (format "%c" x)) key "")) + ;; NOTE Consistent behavior with `org-calendar-to-agenda-key' + ;; although it's not supported in Org officially. + ((and (pred symbolp) 'default) "i") + (_ "")))) + (evil-collection-define-key 'normal 'calendar-mode-map + (kbd key) 'org-agenda-diary-entry)))) + +;; Otherwise it will load tons of org stuff at startup. +(defvar evil-collection-calendar-want-org-bindings) +(when evil-collection-calendar-want-org-bindings + (add-hook 'calendar-mode-hook #'evil-collection-calendar-setup-org-bindings)) + +;;;###autoload +(defun evil-collection-calendar-setup () + "Set up `evil' bindings for `calendar'." + (evil-set-initial-state 'calendar-mode 'normal) + (evil-collection-define-key 'normal 'calendar-mode-map + ;; motion + "h" 'calendar-backward-day + "j" 'calendar-forward-week + "k" 'calendar-backward-week + "l" 'calendar-forward-day + "0" 'calendar-beginning-of-week + "^" 'calendar-beginning-of-week + "$" 'calendar-end-of-week + "[[" 'calendar-backward-year + "]]" 'calendar-forward-year + (kbd "M-<") 'calendar-beginning-of-year + (kbd "M->") 'calendar-end-of-year + "(" 'calendar-beginning-of-month + ")" 'calendar-end-of-month + (kbd "SPC") 'scroll-other-window + (kbd "S-SPC") 'scroll-other-window-down + (kbd "") 'scroll-other-window-down + "<" 'calendar-scroll-right + ">" 'calendar-scroll-left + (kbd "C-b") 'calendar-scroll-right-three-months + (kbd "C-f") 'calendar-scroll-left-three-months + "{" 'calendar-backward-month + "}" 'calendar-forward-month + (kbd "C-k") 'calendar-backward-month + (kbd "C-j") 'calendar-forward-month + "gk" 'calendar-backward-month + "gj" 'calendar-forward-month + + ;; visual + "v" 'calendar-set-mark + + ;; goto + "." 'calendar-goto-today + "o" 'calendar-other-month + "gd" 'calendar-goto-date ; "gd" in evil-org-agenda, "gd" in Emacs. + "gD" 'calendar-other-month + + ;; diary + "D" 'diary-view-other-diary-entries + "d" 'diary-view-entries + "m" 'diary-mark-entries + "s" 'diary-show-all-entries + + ;; appointment + "Aa" 'appt-add + "Ad" 'appt-delete + + "u" 'calendar-unmark + "x" 'calendar-mark-holidays + + ;; show + "gm" 'calendar-lunar-phases ; "gm" in evil-org-agenda. TODO: Shadows calendar-mayan. + "gs" 'calendar-sunrise-sunset ; "gs" in evil-org-agenda + "gh" 'calendar-list-holidays ; "gh" in evil-org-agenda. TODO: Shadows calendar-hebrew. + "gc" 'org-calendar-goto-agenda ; "gc" in evil-org-agenda. TODO: Shadows calendar-iso. + "a" 'calendar-list-holidays + "r" 'calendar-cursor-holidays + + ;; refresh + "gr" 'calendar-redraw + + "g?" 'calendar-goto-info-node + "?" 'calendar-goto-info-node ; Search is not very useful. + (kbd "M-=") 'calendar-count-days-region + + ;; quit + "q" 'calendar-exit + "ZQ" 'evil-quit + "ZZ" 'calendar-exit)) + +(provide 'evil-collection-calendar) +;;; evil-collection-calendar.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/cider/README.org b/.config/emacs/lisp/evil-collection/modes/cider/README.org new file mode 100644 index 0000000..a72a3a7 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/cider/README.org @@ -0,0 +1,164 @@ +* cider + + Evil bindings for [[https://github.com/clojure-emacs/cider][CIDER]]. + + The bulk of CIDER's commands live under the =C-c= prefix in =cider-mode-map= + -- those are left alone. Evil only adds vim-style navigation, doc lookup and + the debugger keys. + +** cider-mode-map + + | Command | Original | Evil | + |----------------------------------+---------------+-----------| + | =cider-switch-to-repl-buffer= | =C-c C-z= | =gz= | + | =cider-find-resource= | =C-c M-.= | =gf= | + | =cider-doc= | =C-c C-d C-d= | =K= | + | =cider-find-var= | =M-.= | =gd= ([[#xref][†]]) | + | =cider-pop-back= | =M-,= | =C-t= ([[#xref][†]]) | + | =cider-browse-instrumented-defs= | n/a | == | + | =cider-debug-defun-at-point= | =C-u C-M-x= | == | + + The == / == bindings only fire when + =evil-collection-setup-debugger-keys= is non-nil. + +** cider-repl-mode-map + + | Command | Original | Evil | + |---------------------------------------+---------------+----------------------------------------------| + | =cider-switch-to-last-clojure-buffer= | =C-c C-z= | =gz= | + | =cider-refresh= | =C-c M-n r= | =gr= | + | =cider-find-resource= | =C-c M-.= | =gf= | + | =cider-doc= | =C-c C-d C-d= | =K= | + | =cider-find-var= | =M-.= | =gd= ([[#xref][†]]) | + | =cider-pop-back= | =M-,= | =C-t= ([[#xref][†]]) | + | =cider-repl-return= | =RET= | =RET= in =evil-collection-repl-submit-state= | + | =newline= | =C-j= | =RET= in the opposite state | + + See =evil-collection-repl-submit-state= (normal or insert) for which state + submits. + +** cider-repl-history-mode-map + + | Command | Original | Evil | + |----------------------------------------+----------+-------------------| + | =cider-repl-history-previous= | =p= | =C-k=, =gk=, =[[= | + | =cider-repl-history-forward= | =n= | =C-j=, =gj=, =]]= | + | =cider-repl-history-insert-and-quit= | =RET= | =RET= | + | =cider-repl-history-update= | =g= | =gr= | + | =cider-repl-history-quit= | =q= | =q= | + | =cider-repl-history-undo-other-window= | =U= | =u= | + +** cider-test-report-mode-map + + | Command | Original | Evil | + |------------------------------------+------------+--------------------| + | =cider-test-commands-map= | n/a | =C-c ,=, =C-c C-t= | + | =cider-test-previous-result= | n/a | =M-p=, == | + | =cider-test-next-result= | =TAB= | =M-n=, == | + | =cider-test-jump= | =t=, =RET= | =gd=, =t=, =RET= | + | =cider-test-ediff= | =d= | =d= | + | =cider-test-stacktrace= | =e= | =e= | + | =cider-test-rerun-failed-tests= | =f= | =f= | + | =cider-test-run-ns-tests= | =n= | =n= | + | =cider-test-run-loaded-tests= | =l= | =L= | + | =cider-test-run-project-tests= | =p= | =p= | + | =cider-test-run-test= | =g= | =gr= | + | =cider-popup-buffer-quit-function= | n/a | =q= | + +** cider-macroexpansion-mode-map + + | Command | Original | Evil | + |--------------------------------------------+----------+-------------| + | =cider-popup-buffer-quit-function= | n/a | =q= | + | =cider-macroexpand-again= | =g= | =r= | + | =cider-doc= | =d= | =K= | + | =cider-javadoc= | =j= | =J= | + | =cider-find-var= / =xref-find-definitions= | =.= | =.= | + | =cider-macroexpand-1-inplace= | =m= | =m= | + | =cider-macroexpand-all-inplace= | =a= | =a= | + | =cider-macroexpand-undo= | =u= | =u=, =undo= | + +** cider-connections-buffer-mode-map + + | Command | Original | Evil | + |--------------------------------------+----------+-------| + | =cider-connections-make-default= | n/a | =d= | + | =cider-connection-browser= | n/a | =c= | + | =cider-connections-close-connection= | n/a | =x= | + | =cider-connections-goto-connection= | n/a | =RET= | + | =describe-mode= | n/a | =g?= | + +** cider-stacktrace-mode-map + + Initial evil state is forced to normal. + + | Command | Original | Evil | + |----------------------------------------+----------+-------------------| + | =cider-stacktrace-previous-cause= | n/a | =C-k=, =gk=, =[[= | + | =cider-stacktrace-next-cause= | n/a | =C-j=, =gj=, =]]= | + | =cider-stacktrace-jump= | n/a | =gd= | + | =cider-popup-buffer-quit-function= | =q= | =q= | + | =cider-stacktrace-toggle-java= | =j= | =J= | + | =cider-stacktrace-toggle-clj= | =c= | =C= | + | =cider-stacktrace-toggle-repl= | =r= | =R= | + | =cider-stacktrace-toggle-tooling= | =t= | =T= | + | =cider-stacktrace-toggle-duplicates= | =d= | =D= | + | =cider-stacktrace-show-only-project= | =p= | =P= | + | =cider-stacktrace-toggle-all= | =a= | =A= | + | =cider-stacktrace-cycle-cause-1..5= | =1..5= | =1..5= | + | =cider-stacktrace-cycle-all-causes= | =0= | =0=, == | + | =cider-stacktrace-cycle-current-cause= | =TAB= | =TAB= | + +** cider-inspector-mode-map + + | Command | Original | Evil | + |-----------------------------------------------+--------------+--------------| + | =quit-window= | n/a | =q= | + | =cider-inspector-operate-on-point= | =RET= | =RET= | + | =cider-inspector-pop= | =l= | =L= | + | =cider-inspector-refresh= | =g= | =gr= | + | =cider-inspector-next-page= | =SPC= | =C-j=, =SPC= | + | =cider-inspector-prev-page= | =S-SPC= | =C-k= | + | =cider-inspector-set-page-size= | =s= | =s= | + | =cider-inspector-next-inspectable-object= | =n=, =TAB= | =]]=, =gj= | + | =cider-inspector-previous-inspectable-object= | =p=, =S-TAB= | =[[=, =gk= | + +** cider--debug-mode-map + + Only active when =evil-collection-setup-debugger-keys= is non-nil. Each key + sends a reply through =cider-debug-mode-send-reply=. + + | Command | Reply | Evil | + |----------------------------------------------+-------------------+------| + | =cider-debug-defun-at-point= | (re-instrument) | =b= | + | =evil-collection-cider-debug-continue= | =:continue= | =c= | + | =evil-collection-cider-debug-continue-all= | =:continue-all= | =C= | + | =evil-collection-cider-debug-next= | =:next= | =n= | + | =evil-collection-cider-debug-in= | =:in= | =I= | + | =evil-collection-cider-debug-out= | =:out= | =o= | + | =evil-collection-cider-debug-force-out= | =:force-out= | =O= | + | =cider-debug-move-here= | (move here) | =H= | + | =evil-collection-cider-debug-eval= | =:eval= | =e= | + | =evil-collection-cider-debug-inspect= | =:inspect= | =p= | + | =evil-collection-cider-debug-inspect-prompt= | =:inspect-prompt= | =P= | + | =evil-collection-cider-debug-locals= | =:locals= | =L= | + | =evil-collection-cider-debug-inject= | =:inject= | =J= | + | =evil-collection-cider-debug-stacktrace= | =:stacktrace= | =s= | + | =evil-collection-cider-debug-trace= | =:trace= | =t= | + | =evil-collection-cider-debug-quit= | =:quit= | =q= | + +** New commands + + | Command | Purpose | + |-----------------------------------+------------------------------------------------------------------------------------------------------| + | =evil-collection-cider-debug-*= | One per cider-debug reply keyword (see =cider--debug-mode-map=). | + | =evil-collection-cider-last-sexp= | Advice for =cider-eval-last-sexp= so the last sexp ends at point when =evil-move-beyond-eol= is nil. | + +** Xref fallbacks + :PROPERTIES: + :CUSTOM_ID: xref + :END: + + =gd= / =C-t= are only bound when =cider-use-xref= is nil. With xref enabled + the user already has =M-.= / =M-,= going through =xref-find-definitions= and + nothing extra is added. diff --git a/.config/emacs/lisp/evil-collection/modes/cider/evil-collection-cider.el b/.config/emacs/lisp/evil-collection/modes/cider/evil-collection-cider.el new file mode 100644 index 0000000..e8ec712 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/cider/evil-collection-cider.el @@ -0,0 +1,253 @@ +;;; evil-collection-cider.el --- Evil bindings for Cider -*- lexical-binding: t -*- + +;; Copyright (C) 2017, 2024 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, cider, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for Cider. + +;;; Code: +(require 'cl-lib) +(require 'cider nil t) +(require 'evil-collection) + +(defvar cider-use-xref) + +(declare-function cider-debug-mode-send-reply "cider-debug") + +(defconst evil-collection-cider-maps '(cider-mode-map + cider-repl-mode-map + cider-repl-history-mode-map + cider-test-report-mode-map + cider-macroexpansion-mode-map + cider-connections-buffer-mode-map)) + +(defun evil-collection-cider-last-sexp (command &rest args) + "In normal-state or motion-state, last sexp ends at point." + (if (and (not evil-move-beyond-eol) + (or (evil-normal-state-p) (evil-motion-state-p))) + (save-excursion + (unless (or (eobp) (eolp)) (forward-char)) + (apply command args)) + (apply command args))) + +(defmacro evil-collection-cider-make-debug-command (&rest cider-commands) + "Make functions that wrap `cider-debug' commands. + +Cider debug commands are sent through `cider-debug-mode-send-reply'. + +ex. \(cider-debug-mode-send-reply \":next\"\)" + (let ((commands (if (consp cider-commands) + cider-commands + (list cider-commands)))) + `(progn + ,@(cl-loop + for command in commands + collect + (let ((funsymbol + (intern (format "evil-collection-cider-debug-%s" command)))) + `(defun ,funsymbol () + ,(format + "Send :%s to `cider-debug-mode-send-reply'." command) + (interactive) + (cider-debug-mode-send-reply ,(format ":%s" command)))))))) + +(evil-collection-cider-make-debug-command "continue" + "continue-all" + "next" + "in" + "out" + "force-out" + "eval" + "inspect" + "inspect-prompt" + "locals" + "inject" + "stacktrace" + "trace" + "quit") + +;;;###autoload +(defun evil-collection-cider-setup () + "Set up `evil' bindings for `cider'." + (unless evil-move-beyond-eol + (advice-add 'cider-eval-last-sexp :around 'evil-collection-cider-last-sexp) + (advice-add 'cider-eval-last-sexp-and-replace :around 'evil-collection-cider-last-sexp) + (advice-add 'cider-eval-last-sexp-to-repl :around 'evil-collection-cider-last-sexp) + (with-eval-after-load 'cider-eval-sexp-fu + (advice-add 'cider-esf--bounds-of-last-sexp :around 'evil-collection-cider-last-sexp))) + + (when evil-collection-setup-debugger-keys + (add-hook 'cider-mode-hook #'evil-normalize-keymaps) + (add-hook 'cider--debug-mode-hook #'evil-normalize-keymaps) + (evil-collection-define-key 'normal 'cider-mode-map + [f6] 'cider-browse-instrumented-defs + [f9] 'cider-debug-defun-at-point) + + (evil-collection-define-key 'normal 'cider--debug-mode-map + "b" 'cider-debug-defun-at-point + "c" 'evil-collection-cider-debug-continue + "C" 'evil-collection-cider-debug-continue-all + "n" 'evil-collection-cider-debug-next + "I" 'evil-collection-cider-debug-in + "o" 'evil-collection-cider-debug-out + "O" 'evil-collection-cider-debug-force-out + "H" 'cider-debug-move-here + "e" 'evil-collection-cider-debug-eval + "p" 'evil-collection-cider-debug-inspect + "P" 'evil-collection-cider-debug-inspect-prompt + "L" 'evil-collection-cider-debug-locals + "J" 'evil-collection-cider-debug-inject + "s" 'evil-collection-cider-debug-stacktrace + "t" 'evil-collection-cider-debug-trace + "q" 'evil-collection-cider-debug-quit)) + + (evil-collection-define-key '(normal visual) 'cider-mode-map + "gz" 'cider-switch-to-repl-buffer + "gf" 'cider-find-resource + "K" 'cider-doc) + + (unless cider-use-xref + (evil-collection-define-key '(normal visual) 'cider-mode-map + "gd" 'cider-find-var + (kbd "C-t") 'cider-pop-back)) + + (evil-collection-define-key '(normal visual) 'cider-repl-mode-map + ;; FIXME: This seems to get overwritten by `cider-switch-to-repl-buffer'. + "gz" 'cider-switch-to-last-clojure-buffer + "gr" 'cider-refresh + "gf" 'cider-find-resource + "K" 'cider-doc) + + (let* ((submit evil-collection-repl-submit-state) + (newline-state (if (eq submit 'normal) 'insert 'normal))) + (evil-collection-define-key submit 'cider-repl-mode-map + (kbd "RET") 'cider-repl-return) + (evil-collection-define-key newline-state 'cider-repl-mode-map + (kbd "RET") 'newline)) + + (unless cider-use-xref + (evil-collection-define-key '(normal visual) 'cider-repl-mode-map + "gd" 'cider-find-var + (kbd "C-t") 'cider-pop-back)) + + (evil-collection-define-key '(normal visual) 'cider-repl-history-mode-map + (kbd "C-k") 'cider-repl-history-previous + (kbd "C-j") 'cider-repl-history-forward + "gk" 'cider-repl-history-previous + "gj" 'cider-repl-history-forward + "[[" 'cider-repl-history-previous + "]]" 'cider-repl-history-forward + + (kbd "RET") 'cider-repl-history-insert-and-quit + "gr" 'cider-repl-history-update + "q" 'cider-repl-history-quit + "u" 'cider-repl-history-undo-other-window) + + (evil-collection-define-key 'normal 'cider-test-report-mode-map + (kbd "C-c ,") 'cider-test-commands-map + (kbd "C-c C-t") 'cider-test-commands-map + (kbd "M-p") 'cider-test-previous-result + (kbd "M-n") 'cider-test-next-result + + ;; goto + "gd" 'cider-test-jump + + (kbd "") 'cider-test-previous-result + (kbd "") 'cider-test-next-result + (kbd "RET") 'cider-test-jump + "t" 'cider-test-jump + "d" 'cider-test-ediff + "e" 'cider-test-stacktrace + "f" 'cider-test-rerun-failed-tests + "n" 'cider-test-run-ns-tests + "L" 'cider-test-run-loaded-tests + "p" 'cider-test-run-project-tests + "gr" 'cider-test-run-test + "q" 'cider-popup-buffer-quit-function) + + (evil-collection-define-key 'normal 'cider-macroexpansion-mode-map + ;; quit + "q" 'cider-popup-buffer-quit-function + + "r" 'cider-macroexpand-again + "K" 'cider-doc ; Evil has `evil-lookup'. + "J" 'cider-javadoc + "." (if cider-use-xref 'xref-find-definitions 'cider-find-var) + "m" 'cider-macroexpand-1-inplace + "a" 'cider-macroexpand-all-inplace + "u" 'cider-macroexpand-undo + [remap undo] 'cider-macroexpand-undo) + + (evil-collection-define-key 'normal 'cider-connections-buffer-mode-map + "d" 'cider-connections-make-default + "c" 'cider-connection-browser + "x" 'cider-connections-close-connection + (kbd "RET") 'cider-connections-goto-connection + "g?" 'describe-mode) + + (evil-set-initial-state 'cider-stacktrace-mode 'normal) + (evil-collection-define-key 'normal 'cider-stacktrace-mode-map + (kbd "C-k") 'cider-stacktrace-previous-cause + (kbd "C-j") 'cider-stacktrace-next-cause + (kbd "gk") 'cider-stacktrace-previous-cause + (kbd "gj") 'cider-stacktrace-next-cause + (kbd "[[") 'cider-stacktrace-previous-cause + (kbd "]]") 'cider-stacktrace-next-cause + "gd" 'cider-stacktrace-jump + "q" 'cider-popup-buffer-quit-function + "J" 'cider-stacktrace-toggle-java + "C" 'cider-stacktrace-toggle-clj + "R" 'cider-stacktrace-toggle-repl + "T" 'cider-stacktrace-toggle-tooling + "D" 'cider-stacktrace-toggle-duplicates + "P" 'cider-stacktrace-show-only-project + "A" 'cider-stacktrace-toggle-all + "1" 'cider-stacktrace-cycle-cause-1 + "2" 'cider-stacktrace-cycle-cause-2 + "3" 'cider-stacktrace-cycle-cause-3 + "4" 'cider-stacktrace-cycle-cause-4 + "5" 'cider-stacktrace-cycle-cause-5 + "0" 'cider-stacktrace-cycle-all-causes + (kbd "TAB") 'cider-stacktrace-cycle-current-cause + [backtab] 'cider-stacktrace-cycle-all-causes) + + (add-hook 'cider-inspector-mode-hook #'evil-normalize-keymaps) + (evil-collection-define-key 'normal 'cider-inspector-mode-map + "q" 'quit-window + (kbd "RET") 'cider-inspector-operate-on-point + [mouse-1] 'cider-inspector-operate-on-click + "L" 'cider-inspector-pop + "gr" 'cider-inspector-refresh + ;; Page-up/down + (kbd "C-j") 'cider-inspector-next-page + (kbd "C-k") 'cider-inspector-prev-page + " " 'cider-inspector-next-page + "s" 'cider-inspector-set-page-size + (kbd "]]") 'cider-inspector-next-inspectable-object + (kbd "[[") 'cider-inspector-previous-inspectable-object + "gj" 'cider-inspector-next-inspectable-object + "gk" 'cider-inspector-previous-inspectable-object)) + +(provide 'evil-collection-cider) +;;; evil-collection-cider.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/citre/evil-collection-citre.el b/.config/emacs/lisp/evil-collection/modes/citre/evil-collection-citre.el new file mode 100644 index 0000000..2bce581 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/citre/evil-collection-citre.el @@ -0,0 +1,47 @@ +;;; evil-collection-citre.el --- Bindings for `citre' -*- lexical-binding: t -*- + +;; Copyright (C) 2024 Zhiwei Chen + +;; Author: Zhiwei Chen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, citre, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for `citre' + +;;; Code: +(require 'evil-collection) + +(defun evil-collection-citre-set-bindings () + "Set jump point for citre commands." + (dolist (cmd '(citre-jump + citre-query-jump + citre-jump-to-reference + citre-query-jump-to-reference)) + (evil-declare-not-repeat cmd) + (evil-set-command-property cmd :jump t))) + +;;;###autoload +(defun evil-collection-citre-setup () + "Set up `evil' bindings for `citre'." + (evil-collection-citre-set-bindings)) + +(provide 'evil-collection-citre) +;;; evil-collection-citre.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/cmake-mode/README.org b/.config/emacs/lisp/evil-collection/modes/cmake-mode/README.org new file mode 100644 index 0000000..d7a7975 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/cmake-mode/README.org @@ -0,0 +1,13 @@ +* cmake-mode + + Evil setup for [[https://gitlab.kitware.com/cmake/cmake][cmake-mode]]. No key + rebindings -- only =evil-shift-width= is aligned to =cmake-tab-width=. + +** New commands + + | Command | Purpose | + |---------------------------------------------------+------------------------------------------------------| + | =evil-collection-cmake-mode-set-evil-shift-width= | Buffer-local =evil-shift-width= = =cmake-tab-width=. | + + Hooked to =cmake-mode-hook= so =>=, =<= and friends indent by the same width + cmake-mode uses. diff --git a/.config/emacs/lisp/evil-collection/modes/cmake-mode/evil-collection-cmake-mode.el b/.config/emacs/lisp/evil-collection/modes/cmake-mode/evil-collection-cmake-mode.el new file mode 100644 index 0000000..5b0113e --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/cmake-mode/evil-collection-cmake-mode.el @@ -0,0 +1,44 @@ +;;; evil-collection-cmake-mode.el --- Bindings for `cmake-mode' -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, emacs, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for `cmake-mode' + +;;; Code: +(require 'evil-collection) +(require 'cmake-mode nil t) + +(defvar cmake-tab-width) +(defun evil-collection-cmake-mode-set-evil-shift-width () + "Set `evil-shift-width' according to `cmake-tab-with'." + (setq-local evil-shift-width cmake-tab-width)) + +;;;###autoload +(defun evil-collection-cmake-mode-setup () + "Set up `evil' bindings for `cmake-mode'." + (add-hook 'cmake-mode-hook #'evil-collection-cmake-mode-set-evil-shift-width)) + +(provide 'evil-collection-cmake-mode) +;;; evil-collection-cmake-mode.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/color-rg/evil-collection-color-rg.el b/.config/emacs/lisp/evil-collection/modes/color-rg/evil-collection-color-rg.el new file mode 100644 index 0000000..5a53b25 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/color-rg/evil-collection-color-rg.el @@ -0,0 +1,71 @@ +;;; evil-collection-color-rg.el --- Bindings for color-rg -*- lexical-binding: t -*- + +;; Copyright (C) 2023 Mumulhl + +;; Author: Mumulhl +;; Maintainer: Mumulhl +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, emacs, convenience, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for color-rg. + +;;; Code: +(require 'evil-collection) +(require 'color-rg nil t) + +(defvar color-rg-mode-map) +(defconst evil-collection-color-rg-maps '(color-rg-mode-map)) + +;;;###autoload +(defun evil-collection-color-rg-setup () + "Set up `evil' bindings for color-rg." + (evil-collection-define-key 'normal 'color-rg-mode-map + (kbd "") 'color-rg-jump-prev-keyword + (kbd "") 'color-rg-jump-next-keyword + "C" 'color-rg-rerun-toggle-case + (kbd "C-a") 'color-rg-beginning-of-line + "D" 'color-rg-remove-line-from-results + "E" 'color-rg-rerun-change-exclude-files + "F" 'color-rg-filter-mismatch-results + "G" 'color-rg-rerun-change-globs + "I" 'color-rg-rerun-toggle-ignore + "L" 'color-rg-rerun-literal + "N" 'color-rg-rerun-toggle-node + "O" 'color-rg-rerun-in-project + "R" 'color-rg-rerun-regexp + (kbd "RET") 'color-rg-open-file-and-stay + "S" 'color-rg-customized-search + (kbd "SPC") 'color-rg-open-file + "X" 'color-rg-filter-mismatch-files + "e" 'color-rg-switch-to-edit-mode + "f" 'color-rg-filter-match-results + "h" 'color-rg-jump-next-file + "i" 'color-rg-insert-current-line + "j" 'color-rg-jump-next-keyword + "k" 'color-rg-jump-prev-keyword + "l" 'color-rg-jump-prev-file + "o" 'color-rg-rerun-in-parent-dir + "q" 'color-rg-quit + "r" 'color-rg-replace-all-matches + "s" 'color-rg-rerun-change-dir + "u" 'color-rg-unfilter + "x" 'color-rg-filter-match-files)) + +(provide 'evil-collection-color-rg) +;;; evil-collection-color-rg.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/comint/README.org b/.config/emacs/lisp/evil-collection/modes/comint/README.org new file mode 100644 index 0000000..0b03dd2 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/comint/README.org @@ -0,0 +1,29 @@ +* comint + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/elisp/Comint.html][comint-mode]], the base mode for many Emacs shells and + REPLs (shell, inferior-lisp, sql, python, etc.). Bindings here propagate to + every derived mode that does not override them. + +** Key bindings + + Normal-state additions to =comint-mode-map=: + + | Command | Original | Evil | + |--------------------------+-----------+-------------------------------------| + | =comint-next-prompt= | =C-c C-n= | =C-j=, =gj=, =]]= | + | =comint-previous-prompt= | =C-c C-p= | =C-k=, =gk=, =[[= | + | =comint-previous-input= | =M-p= | =C-p= | + | =comint-next-input= | =M-n= | =C-n= | + | =evil-scroll-down= | n/a | =C-d= (when =evil-want-C-d-scroll=) | + + Insert state: + + | Command | Original | Evil | + |-------------------------+-----------+-------------------------------------| + | =comint-previous-input= | =M-p= | == | + | =comint-next-input= | =M-n= | == | + | =comint-kill-input= | =C-c C-u= | =C-u= (when =evil-want-C-u-delete=) | + + =RET= sends input in the state named by =evil-collection-repl-submit-state= + and inserts a newline in the complementary state (both =RET= and =C-m= / + =[return]= are wired). diff --git a/.config/emacs/lisp/evil-collection/modes/comint/evil-collection-comint.el b/.config/emacs/lisp/evil-collection/modes/comint/evil-collection-comint.el new file mode 100644 index 0000000..40d0a00 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/comint/evil-collection-comint.el @@ -0,0 +1,74 @@ +;;; evil-collection-comint.el --- Bindings for `comint-mode' -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, comint, processes + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for `comint-mode'. + +;;; Code: +(require 'comint) +(require 'evil-collection) + +(defconst evil-collection-comint-maps '(comint-mode-map)) + +;;;###autoload +(defun evil-collection-comint-setup () + "Set up `evil' bindings for `comint'." + (when evil-want-C-d-scroll + (evil-collection-define-key 'normal 'comint-mode-map + (kbd "C-d") #'evil-scroll-down)) + + (let* ((submit evil-collection-repl-submit-state) + (newline-state (if (eq submit 'normal) 'insert 'normal))) + (evil-collection-define-key submit 'comint-mode-map + (kbd "RET") #'comint-send-input + (kbd "\C-m") #'comint-send-input + [return] #'comint-send-input) + (evil-collection-define-key newline-state 'comint-mode-map + (kbd "RET") #'newline + (kbd "\C-m") #'newline + [return] #'newline)) + + (evil-collection-define-key 'normal 'comint-mode-map + ;; Match Eshell bindings: + (kbd "C-j") #'comint-next-prompt + (kbd "C-k") #'comint-previous-prompt + (kbd "gj") #'comint-next-prompt + (kbd "gk") #'comint-previous-prompt + (kbd "]]") #'comint-next-prompt + (kbd "[[") #'comint-previous-prompt + (kbd "C-p") #'comint-previous-input + (kbd "C-n") #'comint-next-input) + + ;; TODO: What if the user changes `evil-want-C-u-delete' after this is run? + (when evil-want-C-u-delete + (evil-collection-define-key 'insert 'comint-mode-map + (kbd "C-u") #'comint-kill-input)) + + (evil-collection-define-key 'insert 'comint-mode-map + (kbd "") #'comint-previous-input + (kbd "") #'comint-next-input)) + +(provide 'evil-collection-comint) +;;; evil-collection-comint.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/company/README.org b/.config/emacs/lisp/evil-collection/modes/company/README.org new file mode 100644 index 0000000..22c1d84 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/company/README.org @@ -0,0 +1,51 @@ +* company + + Evil bindings for [[https://github.com/company-mode/company-mode][company-mode]]. + Bindings are installed without an explicit state so they apply whenever the + company overlay is active. + +** company-active-map + + | Command | Original | Evil | + |------------------------------------+----------+-------------------------------------| + | =company-select-next-or-abort= | =C-n= | =C-n=, =C-j= | + | =company-select-previous-or-abort= | =C-p= | =C-p=, =C-k= | + | =company-select-next= | n/a | =M-j= | + | =company-select-previous= | n/a | =M-k= | + | =company-previous-page= | =M-<= | =C-u= (when =evil-want-C-u-scroll=) | + | =company-next-page= | =M->= | =C-d= (when =evil-want-C-d-scroll=) | + + With =evil-collection-want-company-extended-keybindings= (vim's =C-x ...= + completion family): + + | Command | Evil | + |---------------------------------------+-------| + | =evil-collection-company-whole-lines= | =C-l= | + | =company-etags= | =C-]= | + | =company-files= | =C-f= | + | =company-capf= | =C-o= | + | =company-ispell= | =C-s= | + +** company-search-map + + | Command | Original | Evil | + |------------------------------------+----------+------------| + | =company-select-next-or-abort= | =C-n= | =C-j= | + | =company-select-previous-or-abort= | =C-p= | =C-k= | + | =company-select-next= | n/a | =M-j= | + | =company-select-previous= | n/a | =M-k= | + | =company-search-abort= | =C-g= | == | + +** New commands + + | Command | Purpose | + |---------------------------------------+------------------------------------------------| + | =evil-collection-company-whole-lines= | Whole-line completion backend (vim =C-x C-l=). | + +** Customization + + | Variable | Default | Purpose | + |-----------------------------------------------------+--------------------------+--------------------------------------------------------------------------------------------------| + | =evil-collection-company-supported-states= | =(insert replace emacs)= | Evil states in which company is allowed to pop up. | + | =evil-collection-want-company-extended-keybindings= | =nil= | Enable the vim-style =C-x= completion bindings above. | + | =evil-collection-company-enable-keymap-protection= | =t= | Re-install =company-active-map= after =company-doc-buffer= et al. so evil does not eat the keys. | diff --git a/.config/emacs/lisp/evil-collection/modes/company/evil-collection-company.el b/.config/emacs/lisp/evil-collection/modes/company/evil-collection-company.el new file mode 100644 index 0000000..7042221 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/company/evil-collection-company.el @@ -0,0 +1,138 @@ +;;; evil-collection-company.el --- Bindings for `company-mode' -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, company, abbrev, convenience, matching + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for `company-mode'. + +;;; Code: +(require 'company nil t) +(require 'evil-collection) + +(declare-function company-tng-mode "company-tng") +(declare-function company-grab-line "company") +(declare-function company-begin-backend "company") +(declare-function company-ensure-emulation-alist "company") + +(defgroup evil-collection-company nil + "Evil bindings for `company-mode'." + :group 'evil-collection) + +(defcustom evil-collection-company-supported-states '(insert replace emacs) + "The `evil-state's which `company' function can be requested." + :type '(repeat symbol)) +(defcustom evil-collection-want-company-extended-keybindings nil + "The \='evil-company-extended' keybindings should be requested" + :type 'boolean) + +(defcustom evil-collection-company-enable-keymap-protection t + "Prevent evil from breaking company completion keymap. +When non-nil, prevents evil from overriding `company-active-map' +after calling `company-doc-buffer'. If disabled, the completion +keymap will be in a broken state." + :type 'boolean) + +(defvar company-active-map) +(defvar company-search-map) + +(defconst evil-collection-company-maps '(company-active-map company-search-map)) + +(defun evil-collection-company-supported-p (command &rest _) + "Return non-nil if `evil-state' is in supported states." + (cond + ((not (bound-and-true-p evil-mode)) t) + ((eq command 'prefix) + (memq evil-state evil-collection-company-supported-states)) + (t t))) + +(defun evil-collection-company-protect-keymap () + "Prevent evil from overriding `company-mode' completion keymap." + (when (and evil-collection-company-enable-keymap-protection + (memq 'company-emulation-alist emulation-mode-map-alists)) + (company-ensure-emulation-alist))) + +;;;###autoload +(defun evil-collection-company-whole-lines (command &optional arg &rest _ignored) + "`company-mode' completion backend that completes whole-lines, akin to vim's +C-x C-l." + (interactive (list 'interactive)) + (require 'company) + (pcase command + (`interactive (company-begin-backend 'evil-collection-company-whole-lines)) + (`prefix (company-grab-line "^[\t\s]*\\(.+\\)" 1)) + (`candidates + (all-completions + arg + (delete-dups + (split-string + (replace-regexp-in-string + "^[\t\s]+" "" + (concat (buffer-substring-no-properties (point-min) (line-beginning-position)) + (buffer-substring-no-properties (line-end-position) (point-max)))) + "\\(\r\n\\|[\n\r]\\)" t)))))) + +;;;###autoload +(defun evil-collection-company-setup () + "Set up `evil' bindings for `company'." + (evil-collection-define-key nil 'company-active-map + (kbd "C-n") 'company-select-next-or-abort + (kbd "C-p") 'company-select-previous-or-abort + (kbd "C-j") 'company-select-next-or-abort + (kbd "C-k") 'company-select-previous-or-abort + (kbd "M-j") 'company-select-next + (kbd "M-k") 'company-select-previous) + + (when evil-collection-want-company-extended-keybindings + (evil-collection-define-key nil 'company-active-map + (kbd "C-l") 'evil-collection-company-whole-lines + (kbd "C-]") 'company-etags + (kbd "C-f") 'company-files + (kbd "C-o") 'company-capf + (kbd "C-s") 'company-ispell)) + + (when evil-want-C-u-scroll + (evil-collection-define-key nil 'company-active-map + (kbd "C-u") 'company-previous-page)) + + (when evil-want-C-d-scroll + (evil-collection-define-key nil 'company-active-map + (kbd "C-d") 'company-next-page)) + + (evil-collection-define-key nil 'company-search-map + (kbd "C-j") 'company-select-next-or-abort + (kbd "C-k") 'company-select-previous-or-abort + (kbd "M-j") 'company-select-next + (kbd "M-k") 'company-select-previous + (kbd "") 'company-search-abort) + + ;; https://github.com/emacs-evil/evil-collection/issues/664 + (add-hook 'evil-local-mode-hook #'evil-collection-company-protect-keymap) + + ;; Make `company-mode' not show popup when not in supported state + (advice-add 'company-call-backend + :before-while 'evil-collection-company-supported-p)) + + +(provide 'evil-collection-company) +;;; evil-collection-company.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/compile/README.org b/.config/emacs/lisp/evil-collection/modes/compile/README.org new file mode 100644 index 0000000..c8e3c60 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/compile/README.org @@ -0,0 +1,18 @@ +* compile + + Evil bindings for =compilation-mode= and =compilation-minor-mode=. + + Standard motion / quit bindings come from =evil-collection-set-readonly-bindings= + and are not repeated below. + +** Key bindings + + | Command | Original | Evil | + |------------------------------+------------------+------------------------| + | =compile-goto-error= | =RET=, =C-c C-c= | =RET= | + | =compilation-display-error= | =C-o= | =go=, =M-RET=, =S-RET= | + | =compilation-next-error= | =M-n= | =TAB=, =gj=, =C-j= | + | =compilation-previous-error= | =M-p= | =S-TAB=, =gk=, =C-k= | + | =compilation-next-file= | =M-}= | =]]= | + | =compilation-previous-file= | =M-{= | =[[= | + | =recompile= | =g= | =gr= | diff --git a/.config/emacs/lisp/evil-collection/modes/compile/evil-collection-compile.el b/.config/emacs/lisp/evil-collection/modes/compile/evil-collection-compile.el new file mode 100644 index 0000000..b59f9d4 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/compile/evil-collection-compile.el @@ -0,0 +1,67 @@ +;;; evil-collection-compile.el --- Evil bindings for `compile' -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, compile, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for `compile'. + +;;; Code: +(require 'evil-collection) +(require 'compile) + +(defconst evil-collection-compile-maps '(compilation-mode-map + compilation-minor-mode-map)) + +;;;###autoload +(defun evil-collection-compile-setup () + "Set up `evil' bindings for `compile'." + (evil-set-initial-state 'compilation-mode 'normal) + (evil-collection-set-readonly-bindings 'compilation-mode-map) + + (dolist (keymap evil-collection-compile-maps) + + (evil-collection-define-key nil keymap + "g" nil) + + (evil-collection-define-key 'normal keymap + (kbd "RET") 'compile-goto-error + + "go" 'compilation-display-error + (kbd "M-RET") 'compilation-display-error + (kbd "M-") 'compilation-display-error + (kbd "S-") 'compilation-display-error + + (kbd "TAB") 'compilation-next-error + (kbd "S-TAB") 'compilation-previous-error + + "gj" 'compilation-next-error + "gk" 'compilation-previous-error + (kbd "C-j") 'compilation-next-error + (kbd "C-k") 'compilation-previous-error + "[[" 'compilation-previous-file + "]]" 'compilation-next-file + "gr" 'recompile))) + +(provide 'evil-collection-compile) +;;; evil-collection-compile.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/consult/README.org b/.config/emacs/lisp/evil-collection/modes/consult/README.org new file mode 100644 index 0000000..c71d837 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/consult/README.org @@ -0,0 +1,26 @@ +* consult + + Evil bindings for [[https://github.com/minad/consult][consult]]. + + No keymap is rebound. Setup marks a small set of jump-style commands as + non-repeatable and registers them as evil jumps so =C-o= / =C-i= work after + selection. + +** Jump commands + + The following are declared with =:jump t= and =evil-declare-not-repeat=: + + - =consult-outline= + - =consult-mark= + - =consult-global-mark= + - =consult-imenu= + - =consult-org-heading= + - =consult-org-agenda= + - =consult-line= + +** New commands + + | Command | Purpose | + |-------------------------------------+---------------------------------------------------------------| + | =evil-collection-consult-mark= | =consult-mark= over evil's per-buffer marker ring. | + | =evil-collection-consult-jump-list= | =consult-global-mark= over the evil jump list of this window. | diff --git a/.config/emacs/lisp/evil-collection/modes/consult/evil-collection-consult.el b/.config/emacs/lisp/evil-collection/modes/consult/evil-collection-consult.el new file mode 100644 index 0000000..f8b0e93 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/consult/evil-collection-consult.el @@ -0,0 +1,123 @@ +;;; evil-collection-consult.el --- Evil bindings for consult -*- lexical-binding: t -*- + +;; Copyright (C) 2017, 2024 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, consult, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for `consult'. +;; +;; Since +;; +;; `consult-outline' +;; `consult-mark' +;; `consult-global-mark' +;; `consult-imenu' +;; `consult-org-heading' +;; `consult-org-agenda' +;; `consult-line' +;; +;; are all autoloaded, no (require 'consult nil t) is needed. + +;;; Code: +(require 'evil-collection) + +(defvar consult-line-numbers-widen) +(declare-function consult--forbid-minibuffer "consult") +(declare-function consult--fontify-all "consult") +(declare-function consult--in-range-p "consult") +(declare-function consult--line-with-mark "consult") +(declare-function consult--location-candidate "consult") +(declare-function consult--remove-dups "consult") +(declare-function consult--mark-candidates "consult") +(declare-function consult-mark "consult") +(declare-function consult-global-mark "consult") + +(defun evil-collection-consult-set-bindings () + "Set the bindings." + (dolist (cmd '(consult-outline + consult-mark + consult-global-mark + consult-imenu + consult-org-heading + consult-org-agenda + consult-line)) + (evil-declare-not-repeat cmd) + (evil-set-command-property cmd :jump t))) + +(defun evil-collection-consult--evil-mark-ring () + "Return alist of char & marker for evil markers in current buffer." + (sort (cl-remove-if (lambda (elem) + (or (evil-global-marker-p (car elem)) + (not (markerp (cdr-safe elem))))) + evil-markers-alist) + #'car-less-than-car)) + +(defun evil-collection-consult--mark-candidates (&optional markers) + "Return alist of lines containing markers from `evil-mark-alist'. +Opional MARKERS should be an alist containing (char . marker) pairs +as defined in `evil-collection-consult--evil-mark-ring'." + (consult--forbid-minibuffer) + (unless (evil-collection-consult--evil-mark-ring) + (user-error "No marks")) + (let* ((candidates) + (current-buf (current-buffer))) + (save-excursion + (pcase-dolist (`(,char . ,marker) (or markers (evil-collection-consult--evil-mark-ring))) + (let ((pos (marker-position marker)) + (buf (marker-buffer marker))) + (when (and (eq buf current-buf) + (consult--in-range-p pos)) + (goto-char pos) + (push (consult--location-candidate + (format "%s: %s" (char-to-string char) (consult--line-with-mark marker)) + marker + (line-number-at-pos pos consult-line-numbers-widen) + marker) + candidates))))) + (nreverse (delete-dups candidates)))) + +;;;###autoload +(defun evil-collection-consult-mark () + "Jump to an evil marker in the current buffer." + (interactive) + (cl-letf (((symbol-function 'consult--mark-candidates) + #'evil-collection-consult--mark-candidates)) + (consult-mark (evil-collection-consult--evil-mark-ring)))) + +;;;###autoload +(defun evil-collection-consult-jump-list () + "Jump to a position in the evil jump list." + (interactive) + (consult-global-mark (delq nil (mapcar (lambda (jump) + (let ((mark (car jump))) + (when (markerp mark) + mark))) + (ring-elements (evil--jumps-get-window-jump-list)))))) + +;;;###autoload +(defun evil-collection-consult-setup () + "Set up `evil' bindings for `consult'." + (evil-collection-consult-set-bindings)) + +(provide 'evil-collection-consult) +;;; evil-collection-consult.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/corfu/README.org b/.config/emacs/lisp/evil-collection/modes/corfu/README.org new file mode 100644 index 0000000..71820eb --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/corfu/README.org @@ -0,0 +1,54 @@ +* corfu + + Evil bindings for [[https://github.com/minad/corfu][corfu]] in-buffer completion. + + Bindings apply in =insert= state on =corfu-map= and are gated by + =evil-collection-corfu-key-themes=. Only =default= is enabled out of the box. + +** Key bindings + +*** default theme + + | Command | Original | Evil | + |-----------------------------------------+----------+-------------------------------------| + | =corfu-next= | == | =C-n=, =C-j=, =M-j=, == | + | =corfu-previous= | == | =C-p=, =C-k=, =M-k=, == | + | =corfu-insert= | =RET= | =RET= | + | =corfu-complete= | =TAB= | =TAB= | + | =corfu-quit= | =C-g= | =C-g= | + | =evil-collection-corfu-quit-and-escape= | n/a | == | + | =corfu-scroll-up= | n/a | =C-d= (when =evil-want-C-u-scroll=) | + | =corfu-scroll-down= | n/a | =C-u= (when =evil-want-C-d-scroll=) | + +*** tab-n-go theme + + Also sets =corfu-cycle= to =t= and =corfu-preselect= to =prompt=. + + | Command | Original | Evil | + |------------------+----------+--------------------| + | =corfu-next= | n/a | =TAB= | + | =corfu-previous= | n/a | =S-TAB=, =backtab= | + +*** magic-return theme + + =RET= / == insert the candidate when one is selected, otherwise + fall through to the buffer's default newline. + +*** magic-backspace theme + + =DEL= / == reset the selection when one is active, otherwise + fall through. + +** New commands + + | Command | Purpose | + |-----------------------------------------+----------------------------------------------------------| + | =evil-collection-corfu-quit-and-escape= | =corfu-quit= then =evil-normal-state=. | + | =evil-collection-corfu-insert-exact= | Insert current candidate with =exact= status, else quit. | + +** Customization + + | Variable | Default | Purpose | + |------------------------------------------+------------------------------+-----------------------------------------------------------------------| + | =evil-collection-corfu-key-themes= | =(default)= | Themes from =default=, =tab-n-go=, =magic-return=, =magic-backspace=. | + | =evil-collection-corfu-supported-states= | =(insert replace emacs nil)= | Evil states in which =corfu= is allowed to run. | diff --git a/.config/emacs/lisp/evil-collection/modes/corfu/evil-collection-corfu.el b/.config/emacs/lisp/evil-collection/modes/corfu/evil-collection-corfu.el new file mode 100644 index 0000000..f70dedc --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/corfu/evil-collection-corfu.el @@ -0,0 +1,180 @@ +;;; evil-collection-corfu.el --- Bindings for `corfu-mode' -*- lexical-binding: t -*- + +;; Copyright (C) 2022 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "27.1")) +;; Keywords: evil, corfu, convenience, matching + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for `corfu-mode'. + +;;; Code: +(require 'corfu nil t) +(require 'evil-collection) + +(defgroup evil-collection-corfu nil + "Evil bindings for `corfu-mode'." + :group 'evil-collection) + +(defvar corfu-map) +(defvar corfu-cycle) +(defvar corfu-preselect) +(defvar corfu--index) + +(declare-function corfu-insert "corfu") +(declare-function corfu-reset "corfu") +(declare-function corfu-quit "corfu") + +(defconst evil-collection-corfu-maps '(corfu-map)) + +(defun evil-collection-corfu-quit-and-escape () + "Call `corfu-quit' and then return to Normal State." + (interactive) + (call-interactively 'corfu-quit) + (evil-normal-state)) + +;; https://github.com/minad/corfu/pull/169 +;; https://github.com/minad/corfu/pull/225 +(defun evil-collection-corfu-unread-this-command-keys () + (when (> (length (this-command-keys)) 0) + (setq unread-command-events (nconc + (listify-key-sequence (this-command-keys)) + unread-command-events)) + (clear-this-command-keys t))) + +(defun evil-collection-corfu-insert-exact () + "Insert current candidate with the `exact' status. +Quit if no candidate is selected." + (interactive) + (if (>= corfu--index 0) + (corfu--insert 'exact) + (corfu-quit))) + +(defcustom evil-collection-corfu-key-themes '(default) + "Determines the key theme to be mapped. + +This variable should be set before `evil-collection-corfu-setup' is called. + +By default, only default is added to this list as the other key themes might +be too obtrusive. + +This key theme variable may be refactored in the future so use with caution." + :type + '(repeat + :tag "Key Themes" + (choice + (const + :tag "Default Theme" default) + (const + :tag "Tab & Go" tab-n-go) + (const + :tag "Magic Return" magic-return) + (const + :tag "Magic Backspace" magic-backspace)))) + +(defcustom evil-collection-corfu-supported-states '(insert replace emacs nil) + "The `evil-state's which `corfu' function can be requested." + :type '(repeat symbol)) + +;;;###autoload +(defun evil-collection-corfu-setup () + "Set up `evil' bindings for `corfu'." + (when (memq 'default evil-collection-corfu-key-themes) + (evil-collection-define-key 'insert 'corfu-map + (kbd "C-n") 'corfu-next + (kbd "C-p") 'corfu-previous + (kbd "C-j") 'corfu-next + (kbd "C-k") 'corfu-previous + (kbd "M-j") 'corfu-next + (kbd "M-k") 'corfu-previous + (kbd "") 'corfu-next + (kbd "") 'corfu-previous + (kbd "") 'evil-collection-corfu-quit-and-escape)) + + ;; https://github.com/minad/corfu#tab-and-go-completion + (when (memq 'tab-n-go evil-collection-corfu-key-themes) + (setq corfu-cycle t + corfu-preselect 'prompt) + (evil-collection-define-key 'insert 'corfu-map + (kbd "TAB") 'corfu-next + [tab] 'corfu-next + [S-tab] 'corfu-previous + [backtab] 'corfu-previous)) + + (when (memq 'magic-return evil-collection-corfu-key-themes) + (defvar evil-collection-corfu-insert-or-next-line + `(menu-item "" nil :filter ,(lambda (&optional _) + (when (>= corfu--index 0) + 'corfu-insert))) + "If we made a selection during `corfu' completion, select it.") + ;; FIXME: Not sure why we need to use `define-key' here instead of + ;; `evil-collection-define-key';. + (when (evil-collection-can-bind-key "") + (define-key corfu-map (kbd "") + evil-collection-corfu-insert-or-next-line)) + (when (evil-collection-can-bind-key "RET") + (define-key corfu-map (kbd "RET") + evil-collection-corfu-insert-or-next-line))) + + (when (memq 'magic-backspace evil-collection-corfu-key-themes) + (defvar evil-collection-corfu-cancel-or-backspace + `(menu-item "" nil :filter ,(lambda (&optional _) + (when (>= corfu--index 0) + 'corfu-reset))) + "If we made a selection during `corfu' completion, cancel it.") + (evil-collection-define-key 'insert + 'corfu-map (kbd "DEL") evil-collection-corfu-cancel-or-backspace) + (evil-collection-define-key 'insert + 'corfu-map [backspace] evil-collection-corfu-cancel-or-backspace) + (evil-collection-define-key 'insert + 'corfu-map (kbd "") evil-collection-corfu-cancel-or-backspace)) + + (when evil-want-C-u-scroll + (evil-collection-define-key 'insert 'corfu-map + (kbd "C-d") 'corfu-scroll-up)) + (when evil-want-C-d-scroll + (evil-collection-define-key 'insert 'corfu-map + (kbd "C-u") 'corfu-scroll-down)) + + (advice-add 'corfu--setup :after (lambda (&rest _) (evil-normalize-keymaps))) + (advice-add 'corfu--teardown :after (lambda (&rest _) (evil-normalize-keymaps))) + (advice-add 'corfu--continue-p + :before-while (lambda (&rest _) (memq evil-state evil-collection-corfu-supported-states))) + + (cl-defmethod corfu--insert :around (status) + (if (or (eq this-command 'evil-collection-corfu-insert-exact) + (not (eq status 'exact))) + (cl-call-next-method) + (evil-collection-corfu-unread-this-command-keys) + (setq this-command 'evil-collection-corfu-insert-exact))) + + (mapc #'evil-declare-ignore-repeat + '(corfu-next + corfu-previous + corfu-first + corfu-last)) + + (mapc #'evil-declare-change-repeat + '(evil-collection-corfu-insert-exact + corfu-insert + corfu-complete))) + +(provide 'evil-collection-corfu) +;;; evil-collection-corfu.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/crdt/evil-collection-crdt.el b/.config/emacs/lisp/evil-collection/modes/crdt/evil-collection-crdt.el new file mode 100644 index 0000000..25cd61f --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/crdt/evil-collection-crdt.el @@ -0,0 +1,57 @@ +;;; evil-collection-crdt.el --- Bindings for `crdt' -*- lexical-binding: t -*- + +;; Copyright (C) 2022 Arte Ebrahimi and Jonathan Ming + +;; Authors: Arte Ebrahimi and Jonathan Ming +;; Maintainer: James Nguyen +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.2 +;; Package-Requires: ((emacs "27.1")) +;; Keywords: evil, emacs, convenience, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for crdt. + +;;; Code: +(require 'evil-collection) +(require 'crdt nil t) + +(defvar crdt-mode-map) +(defconst evil-collection-crdt-maps + '(crdt-buffer-menu-mode-map crdt-session-menu-mode-map crdt-user-menu-mode-map crdt-read-settings-map)) + +(defun evil-collection-crdt-setup () + "Set up `evil' bindings for crdt." + (evil-collection-define-key 'normal 'crdt-buffer-menu-mode-map + (kbd "RET") 'crdt-switch-to-buffer-other-window + "x" 'crdt-stop-share-buffer) + + (evil-collection-define-key 'normal 'crdt-session-menu-mode-map + (kbd "RET") 'crdt-list-buffers + "x" 'crdt--stop-session) + + (evil-collection-define-key 'normal 'crdt-user-menu-mode-map + (kbd "RET") 'crdt-goto-user + "x" 'crdt-kill-user + "f" 'crdt-follow-user) + + (evil-collection-define-key 'normal 'crdt-read-settings-map + (kbd "RET") 'exit-recursive-edit + "q" 'abort-recursive-edit + "ZZ" 'exit-recursive-edit)) + +(provide 'evil-collection-crdt) +;;; evil-collection-crdt.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/csv/evil-collection-csv.el b/.config/emacs/lisp/evil-collection/modes/csv/evil-collection-csv.el new file mode 100644 index 0000000..395aee2 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/csv/evil-collection-csv.el @@ -0,0 +1,43 @@ +;;; evil-collection-csv.el --- Bindings for `csv' -*- lexical-binding: t -*- + +;; Copyright (C) 2024 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.2 +;; Package-Requires: ((emacs "27.1")) +;; Keywords: evil, emacs, convenience, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for csv. + +;;; Code: +(require 'evil-collection) +(require 'csv nil t) + +(defvar csv-mode-map) +(defconst evil-collection-csv-maps '(csv-mode-map)) + +;;;###autoload +(defun evil-collection-csv-setup () + "Set up `evil' bindings for csv." + (evil-collection-define-key 'normal 'csv-mode-map + [tab] 'csv-tab-command + [backtab] 'csv-backtab-command)) + +(provide 'evil-collection-csv) +;;; evil-collection-csv.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/cus-theme/README.org b/.config/emacs/lisp/evil-collection/modes/cus-theme/README.org new file mode 100644 index 0000000..f34e2c0 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/cus-theme/README.org @@ -0,0 +1,30 @@ +* cus-theme + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Custom-Themes.html][cus-theme]] (=M-x customize-themes=, =M-x customize-create-theme=). + + Both =custom-theme-choose-mode= and =custom-new-theme-mode= start in + normal state. + +** Key bindings + +*** custom-theme-choose-mode-map + + | Command | Original | Evil | + |-------------------------+--------------+---------------------------------| + | =widget-forward= | =TAB=, =n= | =gj=, =]]=, =C-j=, =TAB=, =n= | + | =widget-backward= | =S-TAB=, =p= | =gk=, =[[=, =C-k=, =S-TAB=, =p= | + | =custom-describe-theme= | =?= | =K= | + | =widget-button-press= | =RET= | =RET= | + | =quit-window= | =q= | =q= | + | =revert-buffer= | =g= | =g= | + +*** custom-new-theme-mode-map + + | Command | Original | Evil | + |-----------------------+--------------+---------------------------------| + | =widget-forward= | =TAB=, =n= | =gj=, =]]=, =C-j=, =TAB=, =n= | + | =widget-backward= | =S-TAB=, =p= | =gk=, =[[=, =C-k=, =S-TAB=, =p= | + | =Custom-buffer-done= | =q= | =q=, =ZZ= | + | =evil-quit= | n/a | =ZQ= | + | =widget-button-press= | =RET= | =RET= | + | =revert-buffer= | =g= | =g= | diff --git a/.config/emacs/lisp/evil-collection/modes/cus-theme/evil-collection-cus-theme.el b/.config/emacs/lisp/evil-collection/modes/cus-theme/evil-collection-cus-theme.el new file mode 100644 index 0000000..09926a3 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/cus-theme/evil-collection-cus-theme.el @@ -0,0 +1,65 @@ +;;; evil-collection-cus-theme.el --- Bindings for `cus-theme' -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, custom themes, help, faces + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for `cus-theme'. + +;;; Code: +(require 'cus-theme) +(require 'evil-collection) + +(defconst evil-collection-cus-theme-maps '(custom-theme-choose-mode-map + custom-new-theme-mode-map)) + +;;;###autoload +(defun evil-collection-cus-theme-setup () + "Set up `evil' bindings for `cus-theme'." + (evil-set-initial-state 'custom-new-theme-mode 'normal) + (evil-set-initial-state 'custom-theme-choose-mode 'normal) + + (evil-collection-define-key 'normal 'custom-theme-choose-mode-map + "gj" 'widget-forward + "gk" 'widget-backward + (kbd "]]") 'widget-forward + (kbd "[[") 'widget-backward + (kbd "C-j") 'widget-forward + (kbd "C-k") 'widget-backward + "K" 'custom-describe-theme) + + (evil-collection-define-key 'normal 'custom-new-theme-mode-map + "gj" 'widget-forward + "gk" 'widget-backward + (kbd "]]") 'widget-forward + (kbd "[[") 'widget-backward + (kbd "C-j") 'widget-forward + (kbd "C-k") 'widget-backward + + ;; quit + "q" 'Custom-buffer-done + "ZQ" 'evil-quit + "ZZ" 'Custom-buffer-done)) + +(provide 'evil-collection-cus-theme) +;;; evil-collection-cus-theme.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/custom/README.org b/.config/emacs/lisp/evil-collection/modes/custom/README.org new file mode 100644 index 0000000..d06b556 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/custom/README.org @@ -0,0 +1,16 @@ +* custom + + Evil bindings for the Customize interface (=Custom-mode=). + +** Key bindings + + | Command | Original | Evil | + |-----------------------+-------------------------+---------------------------------------| + | =Custom-newline= | =RET= | =RET= | + | =widget-forward= | =TAB=, =n= | =TAB=, =]]=, =gj=, =C-j= | + | =widget-backward= | =S-TAB=, =backtab=, =p= | =S-TAB=, =backtab=, =[[=, =gk=, =C-k= | + | =scroll-up-command= | =SPC= | =SPC= | + | =scroll-down-command= | =S-SPC=, =DEL= | =S-SPC=, == | + | =Custom-goto-parent= | =u= | =^=, =<=, =C-o= | + | =Custom-buffer-done= | =q= | =q=, =ZZ= | + | =evil-quit= | n/a | =ZQ= | diff --git a/.config/emacs/lisp/evil-collection/modes/custom/evil-collection-custom.el b/.config/emacs/lisp/evil-collection/modes/custom/evil-collection-custom.el new file mode 100644 index 0000000..bf9114b --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/custom/evil-collection-custom.el @@ -0,0 +1,68 @@ +;;; evil-collection-custom.el --- Evil bindings for Customize -*- lexical-binding: t -*- + +;; Copyright (C) 2017 Pierre Neidhardt + +;; Author: Pierre Neidhardt +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, custom, tools + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: +;; Evil bindings for the Customize interface. + +;;; Code: +(require 'cus-edit) +(require 'evil-collection) + +(defconst evil-collection-custom-maps '(custom-mode-map)) + +;;;###autoload +(defun evil-collection-custom-setup () + "Set up `evil' bindings for `Custom-mode'." + (evil-set-initial-state 'Custom-mode 'normal) + + (evil-collection-define-key 'normal 'custom-mode-map + ;; motion + (kbd "") 'widget-forward + (kbd "S-") 'widget-backward + (kbd "") 'widget-backward + (kbd "SPC") 'scroll-up-command + (kbd "S-SPC") 'scroll-down-command + (kbd "") 'scroll-down-command + (kbd "RET") 'Custom-newline + (kbd "]]") 'widget-forward + (kbd "[[") 'widget-backward + ;; TODO: Should the following be added? + (kbd "C-j") 'widget-forward + (kbd "C-k") 'widget-backward + "gj" 'widget-forward + "gk" 'widget-backward + + "^" 'Custom-goto-parent + (kbd "C-o") 'Custom-goto-parent + ;; TODO: Should the following be added? + "<" 'Custom-goto-parent + + ;; quit + "q" 'Custom-buffer-done + "ZQ" 'evil-quit + "ZZ" 'Custom-buffer-done)) + +(provide 'evil-collection-custom) +;;; evil-collection-custom.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/daemons/evil-collection-daemons.el b/.config/emacs/lisp/evil-collection/modes/daemons/evil-collection-daemons.el new file mode 100644 index 0000000..d02ea44 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/daemons/evil-collection-daemons.el @@ -0,0 +1,68 @@ +;;; evil-collection-daemons.el --- Evil Bindings for Daemons -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: Jay Kamat +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, daemons, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for `daemons' from the `daemons.el' package. + +;;; Code: +(require 'daemons nil t) +(require 'evil-collection) + +(defconst evil-collection-daemons-maps '(daemons-mode-map + daemons-output-mode-map)) + +;;;###autoload +(defun evil-collection-daemons-setup () + "Set up `evil' bindings for `daemons'." + (evil-collection-define-key '(normal visual) 'daemons-mode-map + (kbd "RET") 'daemons-status-at-point + "s" 'daemons-start-at-point + "S" 'daemons-stop-at-point + "r" 'daemons-reload-at-point + "R" 'daemons-restart-at-point + + "gr" 'revert-buffer + + "q" 'quit-window + "ZZ" 'quit-window + "ZQ" 'quit-window) + + ;; Functions are available in daemons-output-mode-map as well + (evil-collection-define-key '(normal visual) 'daemons-output-mode-map + (kbd "RET") 'daemons-status-at-point + "s" 'daemons-start-at-point + "S" 'daemons-stop-at-point + "r" 'daemons-reload-at-point + "R" 'daemons-restart-at-point + + "q" 'quit-window + "ZZ" 'quit-window + "ZQ" 'quit-window) + + (evil-set-initial-state 'daemons-mode 'normal) + (evil-set-initial-state 'daemons-output-mode 'normal)) + +(provide 'evil-collection-daemons) +;;; evil-collection-daemons.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/dape/README.org b/.config/emacs/lisp/evil-collection/modes/dape/README.org new file mode 100644 index 0000000..7899945 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/dape/README.org @@ -0,0 +1,29 @@ +* dape + + Evil bindings for [[https://github.com/svaante/dape][dape]] (Debug Adapter + Protocol for Emacs). + + The =dape-info-*= mode maps are marked as overriding so dape's single-letter + commands still win in normal state. + +** dape-info-watch-mode-map + + | Command | Original | Evil | + |-----------------------------+----------+------| + | =dape-info-watch-edit-mode= | n/a | =i= | + + Underlying upstream keys (=e=, =m=, ===, =W=, =b= for scope ops) remain + reachable through the overriding map. + +** dape-info-watch-edit-mode-map + + | Command | Original | Evil | + |---------------------------------+-----------+------------------------| + | =dape-info-watch-finish-edit= | =C-c C-c= | =ZZ=, ==, =:w= | + | =dape-info-watch-abort-changes= | =C-c C-k= | =ZQ= | + +** dape-memory-mode-map + + | Command | Original | Evil | + |---------------+-----------+------------| + | =save-buffer= | =C-x C-s= | =ZZ=, =:w= | diff --git a/.config/emacs/lisp/evil-collection/modes/dape/evil-collection-dape.el b/.config/emacs/lisp/evil-collection/modes/dape/evil-collection-dape.el new file mode 100644 index 0000000..9f4f5a9 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/dape/evil-collection-dape.el @@ -0,0 +1,74 @@ +;;; evil-collection-dape.el --- Bindings for `dape' -*- lexical-binding: t -*- + +;; Copyright (C) 2024 Daniel Pettersson + +;; Author: Daniel Pettersson +;; Maintainer: Daniel Pettersson +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.2 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, emacs, tools, dape + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Bindings for `dape'. + +;;; Code: +(require 'evil-collection) +(require 'dape nil t) + +(defvar dape-info-scope-mode-map) +(defvar dape-info-watch-mode-map) +(defvar dape-info-stack-mode-map) +(defvar dape-info-sources-mode-map) +(defvar dape-info-modules-mode-map) +(defvar dape-info-breakpoints-mode-map) +(defvar dape-info-threads-mode-map) + +(defconst evil-collection-dape--info-mode-maps '(dape-info-scope-mode-map + dape-info-watch-mode-map + dape-info-stack-mode-map + dape-info-sources-mode-map + dape-info-modules-mode-map + dape-info-breakpoints-mode-map + dape-info-threads-mode-map)) + +(defconst evil-collection-dape-maps `(dape-info-watch-edit-mode-map + dape-memory-mode-map + . ,evil-collection-dape--info-mode-maps)) + +;;;###autoload +(defun evil-collection-dape-setup () + "Set up `evil' bindings for `dape'." + (dolist (map-symbol evil-collection-dape--info-mode-maps) + (evil-make-overriding-map (symbol-value map-symbol))) + + (evil-collection-define-key 'normal 'dape-info-watch-mode-map + "i" 'dape-info-watch-edit-mode) + + (evil-collection-define-key nil 'dape-info-watch-edit-mode-map + [remap evil-write] 'dape-info-watch-finish-edit) + + (evil-collection-define-key 'normal 'dape-memory-mode-map + [remap evil-write] 'save-buffer + "ZZ" 'save-buffer) + + (evil-collection-define-key 'normal 'dape-info-watch-edit-mode-map + "ZQ" 'dape-info-watch-abort-changes + "ZZ" 'dape-info-watch-finish-edit + (kbd "") 'dape-info-watch-finish-edit)) + +(provide 'evil-collection-dape) +;;; evil-collection-dape.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/dashboard/evil-collection-dashboard.el b/.config/emacs/lisp/evil-collection/modes/dashboard/evil-collection-dashboard.el new file mode 100644 index 0000000..2cc1386 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/dashboard/evil-collection-dashboard.el @@ -0,0 +1,91 @@ +;;; evil-collection-dashboard.el --- Evil bindings for Dashboard -*- lexical-binding: t; -*- + +;; Copyright (C) 2020, 2022 Kisaragi Hiu + +;; Author: Kisaragi Hiu +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, dashboard, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: + +;; Evil bindings for Dashboard. + +;;; Code: + +(require 'evil-collection) +(require 'dashboard nil t) + +(defvar dashboard-mode-map) + +(defconst evil-collection-dashboard-maps '(dashboard-mode-map)) + +(defun evil-collection-dashboard-setup-jump-commands (&rest _) + "Set up bindings for jump commands in Dashboard." + (evil-collection-define-key 'normal 'dashboard-mode-map + "r" (lookup-key dashboard-mode-map "r") ; recents + "m" (lookup-key dashboard-mode-map "m") ; bookmarks + "p" (lookup-key dashboard-mode-map "p") ; projects + "a" (lookup-key dashboard-mode-map "a") ; agenda + ;; - Dashboard inserts shortcut hints in its buffer, so it's + ;; hard to differ from the default. + ;; + ;; - "registers" isn't shown in Dashboard by default; those who + ;; added it would have to choose between the widget and losing + ;; `evil-forward-word-end'. That's probably still better than + ;; having a shortcut hint that isn't correct. + "e" (lookup-key dashboard-mode-map "e"))) ; registers + +;;;###autoload +(defun evil-collection-dashboard-setup () + "Set up Evil bindings for Dashboard." + (evil-collection-set-readonly-bindings 'dashboard-mode-map) + (evil-collection-define-key 'normal 'dashboard-mode-map + ;; Movement + "j" 'dashboard-next-line + "k" 'dashboard-previous-line + ;; Like `evil-collection-outline.el'. + ;; These don't support COUNT, so it's probably better to leave [[ + ;; and ]] alone. + "gj" 'dashboard-next-section + "gk" 'dashboard-previous-section + + ;; Enabling this binding makes RET insert a newline. + ;; Default `evil-ret' works better. + ;; (kbd "RET") 'dashboard-return + + ;; Other commands + [tab] 'widget-forward + [backtab] 'widget-backward + [down-mouse-1] 'widget-button-click) + + ;; Jump commands + ;; + ;; I had to use an advice as dashboard.el defines these bindings + ;; after the map has been defined, as unnamed functions bound to a + ;; local variable. See + ;; https://github.com/emacs-dashboard/emacs-dashboard/blob/f15d3e2e/dashboard-widgets.el#L308 + ;; for what I mean. + ;; + ;; Despite the name, this function is what sets up the dashboard + ;; buffer itself. + (advice-add 'dashboard-insert-startupify-lists :after + 'evil-collection-dashboard-setup-jump-commands)) + +(provide 'evil-collection-dashboard) + +;;; evil-collection-dashboard.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/deadgrep/README.org b/.config/emacs/lisp/evil-collection/modes/deadgrep/README.org new file mode 100644 index 0000000..c35427a --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/deadgrep/README.org @@ -0,0 +1,24 @@ +* deadgrep + + Evil bindings for [[https://github.com/Wilfred/deadgrep][deadgrep]]. + +** deadgrep-mode-map + + | Command | Original | Evil | + |--------------------------------------+-----------+---------------| + | =deadgrep-visit-result= | =RET= | =RET= | + | =deadgrep-visit-result-other-window= | =o= | =S-RET=, =go= | + | =deadgrep-forward-match= | =n= | =C-j=, =gj= | + | =deadgrep-backward-match= | =p= | =C-k=, =gk= | + | =deadgrep-toggle-file-results= | =TAB= | =TAB= | + | =deadgrep-restart= | =g= | =gr= | + | =deadgrep-edit-mode= | =C-x C-q= | =i= | + | =quit-window= | n/a | =q=, =ZZ= | + | =evil-quit= | n/a | =ZQ= | + +** deadgrep-edit-mode-map + + | Command | Original | Evil | + |-------------------------+-----------+------------| + | =deadgrep-visit-result= | =RET= | =RET= | + | =deadgrep-mode= | =C-c C-c= | == | diff --git a/.config/emacs/lisp/evil-collection/modes/deadgrep/evil-collection-deadgrep.el b/.config/emacs/lisp/evil-collection/modes/deadgrep/evil-collection-deadgrep.el new file mode 100644 index 0000000..89e3444 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/deadgrep/evil-collection-deadgrep.el @@ -0,0 +1,64 @@ +;;; evil-collection-deadgrep.el --- Bindings for deadgrep -*- lexical-binding: t -*- + +;; Copyright (C) 2018 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, emacs, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for deadgrep. + +;;; Code: +(require 'evil-collection) +(require 'deadgrep nil t) + +(defconst evil-collection-deadgrep-maps '(deadgrep-edit-mode-map + deadgrep-mode-map)) + +;;;###autoload +(defun evil-collection-deadgrep-setup () + "Set up `evil' bindings for deadgrep.." + (evil-collection-define-key 'normal 'deadgrep-edit-mode-map + (kbd "RET") 'deadgrep-visit-result + (kbd "") 'deadgrep-mode) + (evil-collection-define-key 'normal 'deadgrep-mode-map + (kbd "RET") 'deadgrep-visit-result + (kbd "") 'deadgrep-visit-result-other-window + "go" 'deadgrep-visit-result-other-window + "gr" 'deadgrep-restart + (kbd "C-j") 'deadgrep-forward + (kbd "C-k") 'deadgrep-backward + "gj" 'deadgrep-forward + "gk" 'deadgrep-backward + (kbd "TAB") 'deadgrep-toggle-file-results + + "i" 'deadgrep-edit-mode + + ;; FIXME: Maybe we should bind this to something? + ;; (define-key map (kbd "C-c C-k") #'deadgrep-kill-process) + + ;; Quit + "q" 'quit-window + "ZZ" 'quit-window + "ZQ" 'evil-quit)) + +(provide 'evil-collection-deadgrep) +;;; evil-collection-deadgrep.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/debbugs/evil-collection-debbugs.el b/.config/emacs/lisp/evil-collection/modes/debbugs/evil-collection-debbugs.el new file mode 100644 index 0000000..be0b7bf --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/debbugs/evil-collection-debbugs.el @@ -0,0 +1,81 @@ +;;; evil-collection-debbugs.el --- Evil bindings for debbugs -*- lexical-binding: t -*- + +;; Copyright (C) 2017 Pierre Neidhardt + +;; Author: Pierre Neidhardt +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, debbugs, tools + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: +;; Evil bindings for debbugs. + +;;; Code: +(require 'debbugs nil t) +(require 'evil-collection) + +(defconst evil-collection-debbugs-maps '(debbugs-gnu-mode-map)) + +;;;###autoload +(defun evil-collection-debbugs-setup () + "Set up `evil' bindings for `debbugs-gnu-mode'." + (evil-set-initial-state 'debbugs-gnu-mode 'normal) + + (evil-collection-define-key 'normal 'debbugs-gnu-mode-map + ;; motion + (kbd "") 'forward-button + (kbd "") 'backward-button + (kbd "SPC") 'scroll-up-command + + (kbd "RET") 'debbugs-gnu-select-report + "c" 'debbugs-gnu-send-control-message + "d" 'debbugs-gnu-display-status + + ;; filter + "s" 'debbugs-gnu-narrow-to-status + "S" 'debbugs-gnu-search + ;; "S" 'debbugs-gnu-widen ; Useless if we can just press "s RET" (empty filter). + "x" 'debbugs-gnu-toggle-suppress + "r" 'debbugs-gnu-show-all-blocking-reports + + ;; sort + "o" 'debbugs-gnu-toggle-sort + "O" 'tabulated-list-sort + + ;; show + "gB" 'debbugs-gnu-show-blocking-reports + "gb" 'debbugs-gnu-show-blocked-by-reports + + ;; mark + "m" 'debbugs-gnu-toggle-tag + + ;; refresh + "gr" 'debbugs-gnu-rescan + + "g?" 'debbugs-gnu-manual + "gt" 'debbugs-gnu-view-bug-triage + "g#" 'debbugs-gnu-bugs + + ;; quit + "q" 'quit-window + "ZQ" 'quit-window + "ZZ" 'quit-window)) + +(provide 'evil-collection-debbugs) +;;; evil-collection-debbugs.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/debug/README.org b/.config/emacs/lisp/evil-collection/modes/debug/README.org new file mode 100644 index 0000000..ea4dcfe --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/debug/README.org @@ -0,0 +1,26 @@ +* debug + + Evil bindings for the Elisp debugger (=debugger-mode=). + +** Key bindings + + | Command | Original | Evil | + |------------------------------------------------------+----------+-----------| + | =debug-help-follow= / =backtrace-help-follow-symbol= | =RET= | =RET= | + | =forward-button= | =TAB= | =TAB= | + | =backward-button= | =S-TAB= | =S-TAB= | + | =next-line= | n/a | =SPC= | + | =debugger-continue= | =c= | =c= | + | =debugger-step-through= | =d= | =d= | + | =debugger-jump= | =j= | =J= | + | =debugger-eval-expression= | =e= | =x=, =E= | + | =debugger-record-expression= | =R= | =R= | + | =debugger-return-value= | =r= | =r= | + | =debugger-frame= | =b= | =gb= | + | =debugger-frame-clear= | =u= | =u= | + | =debugger-list-functions= | =l= | =gl= | + | =debugger-toggle-locals= / =backtrace-toggle-locals= | =v= | =L=, =p= | + | =backtrace-multi-line= | =+= | =zo= | + | =backtrace-single-line= | =-= | =zc= | + | =top-level= | =q= | =q=, =ZZ= | + | =evil-quit= | n/a | =ZQ= | diff --git a/.config/emacs/lisp/evil-collection/modes/debug/evil-collection-debug.el b/.config/emacs/lisp/evil-collection/modes/debug/evil-collection-debug.el new file mode 100644 index 0000000..cf00b51 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/debug/evil-collection-debug.el @@ -0,0 +1,79 @@ +;;; evil-collection-debug.el --- Evil bindings for the debugger -*- lexical-binding: t -*- + +;; Copyright (C) 2017 Pierre Neidhardt + +;; Author: Pierre Neidhardt +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, debug, tools + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: +;; Evil bindings for the debugger. + +;;; Code: + +(require 'evil-collection) +(require 'debug) + +(defconst evil-collection-debug-maps '(debugger-mode-map)) + +;;;###autoload +(defun evil-collection-debug-setup () + "Set up `evil' bindings for `debug'." + (evil-set-initial-state 'debugger-mode 'normal) + + (evil-collection-define-key 'normal 'debugger-mode-map + ;; motion + (kbd "") 'forward-button + (kbd "S-") 'backward-button + (kbd "RET") (if (fboundp 'debug-help-follow) + 'debug-help-follow + 'backtrace-help-follow-symbol) + (kbd "SPC") 'next-line + + "R" 'debugger-record-expression + "c" 'debugger-continue + "d" 'debugger-step-through + + "x" 'debugger-eval-expression + "E" 'debugger-eval-expression + + "J" 'debugger-jump + + "gl" 'debugger-list-functions + "gb" 'debugger-frame + "r" 'debugger-return-value + "u" 'debugger-frame-clear + "L" (if (fboundp 'debugger-toggle-locals) + 'debugger-toggle-locals + 'backtrace-toggle-locals) + "p" (if (fboundp 'debugger-toggle-locals) + 'debugger-toggle-locals + 'backtrace-toggle-locals) + + "zo" 'backtrace-multi-line + "zc" 'backtrace-single-line + + ;; quit + "q" 'top-level + "ZQ" 'evil-quit + "ZZ" 'top-level)) + +(provide 'evil-collection-debug) +;;; evil-collection-debug.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/devdocs/evil-collection-devdocs.el b/.config/emacs/lisp/evil-collection/modes/devdocs/evil-collection-devdocs.el new file mode 100644 index 0000000..696f669 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/devdocs/evil-collection-devdocs.el @@ -0,0 +1,66 @@ +;;; evil-collection-devdocs.el --- Evil bindings for devdocs -*- lexical-binding: t -*- + +;; Copyright (C) 2021 Zhiwei Chen + +;; Author: Zhiwei Chen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for devdocs. + +;;; Code: +(require 'evil-collection) +(require 'devdocs nil t) + +(defconst evil-collection-devdocs-maps '(devdocs-mode-map)) + +;;;###autoload +(defun evil-collection-devdocs-setup () + "Set up `evil' bindings for `devdocs'." + (evil-set-initial-state 'devdocs-mode 'normal) + (evil-collection-set-readonly-bindings 'devdocs-mode-map) + + (evil-collection-define-key 'normal 'devdocs-mode-map + ;; motion + (kbd "SPC") 'scroll-up-command + (kbd "S-SPC") 'scroll-down-command + (kbd "") 'forward-button + (kbd "") 'backward-button + + "[[" 'devdocs-previous-page + "]]" 'devdocs-next-page + "gk" 'devdocs-previous-page + "gj" 'devdocs-next-page + + "g." 'devdocs-goto-target + + ;; history + (kbd "C-p") 'devdocs-go-back + (kbd "C-n") 'devdocs-go-forward + + ;; copy + "C" 'devdocs-copy-url + + ;; search + "s" 'devdocs-lookup)) + +(provide 'evil-collection-devdocs) +;;; evil-collection-devdocs.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/dictionary/evil-collection-dictionary.el b/.config/emacs/lisp/evil-collection/modes/dictionary/evil-collection-dictionary.el new file mode 100644 index 0000000..7113fb3 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/dictionary/evil-collection-dictionary.el @@ -0,0 +1,51 @@ +;;; evil-collection-dictionary.el --- Evil bindings for dictionary-mode -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: Sid Kasivajhula +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, dictionary, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for `dictionary'. + +;;; Code: +(require 'evil-collection) +(require 'dictionary nil t) + +(defconst evil-collection-dictionary-maps '(dictionary-mode-map)) + +;;;###autoload +(defun evil-collection-dictionary-setup () + "Set up `evil' bindings for `dictionary'." + (evil-set-initial-state 'dictionary-mode 'normal) + (evil-collection-set-readonly-bindings 'dictionary-mode-map) + (evil-collection-define-key 'normal 'dictionary-mode-map + ;; button + [tab] 'forward-button + [backtab] 'backward-button + ;; mouse + [mouse-1] 'link-selected + ;; misc + "g?" 'dictionary-help ; normally under `h` which is rebound here + (kbd "C-o") 'dictionary-previous)) ; normally under `l` which is rebound here + +(provide 'evil-collection-dictionary) +;;; evil-collection-dictionary.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/diff-hl/README.org b/.config/emacs/lisp/evil-collection/modes/diff-hl/README.org new file mode 100644 index 0000000..67e87a7 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/diff-hl/README.org @@ -0,0 +1,29 @@ +* diff-hl + + Evil bindings for [[https://github.com/dgutov/diff-hl][diff-hl]]'s show-hunk popup and inline overlay. + + Also adds =evil-normalize-keymaps= to + =diff-hl-show-hunk-inline-transient-mode-hook= so the bindings take + effect when the transient mode toggles on. + +** Key bindings + +*** diff-hl-show-hunk-map + + | Command | Original | Evil | + |----------------------------------------+----------+------| + | =diff-hl-show-hunk-previous= | =p=, ={= | =p= | + | =diff-hl-show-hunk-next= | =n=, =}= | =n= | + | =diff-hl-show-hunk-copy-original-text= | =c= | =c= | + | =diff-hl-show-hunk-revert-hunk= | =r= | =r= | + | =diff-hl-show-hunk-stage-hunk= | =S= | =S= | + +*** diff-hl-show-hunk-inline-transient-mode-map + + | Command | Original | Evil | + |--------------------------------------------+-------------------+------------| + | =diff-hl-show-hunk-inline-hide= | =q=, =C-g=, =ESC= | =q=, =ESC= | + | =diff-hl-show-hunk-inline--popup-down= | ==, =C-n= | =j= | + | =diff-hl-show-hunk-inline--popup-up= | ==, =C-p= | =k= | + | =diff-hl-show-hunk-inline--popup-pagedown= | ==, =C-v= | =C-f= | + | =diff-hl-show-hunk-inline--popup-pageup= | ==, =M-v= | =C-b= | diff --git a/.config/emacs/lisp/evil-collection/modes/diff-hl/evil-collection-diff-hl.el b/.config/emacs/lisp/evil-collection/modes/diff-hl/evil-collection-diff-hl.el new file mode 100644 index 0000000..9a9fe5b --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/diff-hl/evil-collection-diff-hl.el @@ -0,0 +1,75 @@ +;;; evil-collection-diff-hl.el --- Evil bindings for diff-hl -*- lexical-binding: t -*- + +;; Copyright (C) 2021 Zhiwei Chen + +;; Author: Zhiwei Chen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, diff, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for diff-hl. +;; +;; All functions used below are autoloaded except for +;; `diff-hl-show-hunk-inline--popup-down' et al commands. +;; +;; When users invoke `diff-hl-show-hunk' (it invokes +;; `diff-hl-show-hunk-function' under the hood), `diff-hl-show-hunk-inline.el' or +;; `diff-hl-show-hunk-posframe.el' will be loaded eventually. +;; +;; So there is no +;; +;; (require 'diff-hl nil t) +;; +;; below. + +;;; Code: +(require 'evil-collection) + +(defconst evil-collection-diff-hl-maps '(diff-hl-show-hunk-map + diff-hl-show-hunk-inline-transient-mode-map)) + +;;;###autoload +(defun evil-collection-diff-hl-setup() + "Set up `evil' bindings for `diff-hl'." + (add-hook 'diff-hl-show-hunk-inline-transient-mode-hook 'evil-normalize-keymaps) + + (evil-collection-define-key 'normal 'diff-hl-show-hunk-inline-transient-mode-map + ;; quit + "q" 'diff-hl-show-hunk-inline-hide + (kbd "") 'diff-hl-show-hunk-inline-hide + + ;; motion + "j" 'diff-hl-show-hunk-inline--popup-down + "k" 'diff-hl-show-hunk-inline--popup-up + (kbd "C-f") 'diff-hl-show-hunk-inline--popup-pagedown + (kbd "C-b") 'diff-hl-show-hunk-inline--popup-pageup) + + ;; Actually `diff-hl-show-hunk-inline-transient-mode-map' will inherit it by + ;; `set-keymap-parent'. + (evil-collection-define-key 'normal 'diff-hl-show-hunk-map + ;; Keep it the same as the overlay shows. + "p" 'diff-hl-show-hunk-previous + "n" 'diff-hl-show-hunk-next + "c" 'diff-hl-show-hunk-copy-original-text + "r" 'diff-hl-show-hunk-revert-hunk + "S" 'diff-hl-show-hunk-stage-hunk)) + +(provide 'evil-collection-diff-hl) +;;; evil-collection-diff-hl.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/diff-mode/README.org b/.config/emacs/lisp/evil-collection/modes/diff-mode/README.org new file mode 100644 index 0000000..a15d829 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/diff-mode/README.org @@ -0,0 +1,66 @@ +* diff-mode + + Evil bindings for =diff-mode=. By default they are installed on a dedicated + minor mode (=evil-collection-diff-mode=) attached to every =diff-mode= buffer, + so normal/insert states keep working for editing. Set + =evil-collection-diff-mode-want-minor-mode= to =nil= to instead bind on + =diff-mode-map= and have read-only / motion state toggle together. + +** Key bindings (minor-mode setup, default) + + Active in normal state. + + | Command | Original | Evil | + |--------------------+-----------+-------------| + | =diff-goto-source= | =C-c C-c= | =RET= | + | =diff-file-prev= | =M-{= | =[[= | + | =diff-file-next= | =M-}= | =]]= | + | =diff-hunk-prev= | =M-p= | =gk=, =C-k= | + | =diff-hunk-next= | =M-n= | =gj=, =C-j= | + | =diff-ediff-patch= | =C-c C-e= | =ge= | + | =read-only-mode= | n/a | =\= | + | =quit-window= | n/a | =q= | + + With =evil-collection-want-g-bindings= (the default), edit commands sit under + =g=: + + | Command | Original | Evil | + |-----------------------------------------------+-----------+------| + | =diff-apply-hunk= | =C-c C-a= | =ga= | + | =diff-refine-hunk= | =C-c C-b= | =g*= | + | =diff-hunk-kill= | =C-c C-k= | =gx= | + | =diff-file-kill= | =C-c M-k= | =gX= | + | =diff-split-hunk= | =C-c C-s= | =gs= | + | =diff-test-hunk= | =C-c C-t= | =gc= | + | =diff-reverse-direction= | =C-c C-r= | =g~= | + | =diff-ignore-whitespace-hunk= | =C-c C-w= | =g#= | + | =diff-add-change-log-entries-other-window= | =C-x 4 A= | =gA= | + | =evil-collection-diff-toggle-context-unified= | n/a | =g%= | + | =evil-collection-diff-toggle-restrict-view= | =C-c C-n= | =go= | + | =next-error-follow-minor-mode= | =C-c C-f= | =gi= | + + Without =evil-collection-want-g-bindings=, the commands above land on their + single-letter equivalents (=a=, =*=, =d=, =D=, =s=, =c=, =~=, =#=, =A=, =x=, + =o=, =i=) instead. + +** Motion-state setup (when =evil-collection-diff-mode-want-minor-mode= is nil) + + Same set of commands, but they go on =diff-mode-map= directly in normal and + motion states. A hook (=evil-collection-diff-toggle-setup=) flips state + whenever the buffer's read-only flag changes — read-only buffers enter motion + state, writable buffers normal state. Toggle this hook per-buffer with =M-x + evil-collection-diff-toggle-setup=. + +** New commands + + | Command | Key | | + |-----------------------------------------------+------+--------------------------------------------------| + | =evil-collection-diff-toggle-context-unified= | =g%= | Toggle context <-> unified view. | + | =evil-collection-diff-toggle-restrict-view= | =go= | Toggle =diff-restrict-view=; widens if narrowed. | + | =evil-collection-diff-toggle-setup= | n/a | Toggle the read-only state hook in the buffer. | + +** Customization + + | Variable | Default | Purpose | + |---------------------------------------------+---------+----------------------------------------------------------------------------| + | =evil-collection-diff-mode-want-minor-mode= | =t= | Bind on =evil-collection-diff-mode= minor mode instead of =diff-mode-map=. | diff --git a/.config/emacs/lisp/evil-collection/modes/diff-mode/evil-collection-diff-mode.el b/.config/emacs/lisp/evil-collection/modes/diff-mode/evil-collection-diff-mode.el new file mode 100644 index 0000000..1015705 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/diff-mode/evil-collection-diff-mode.el @@ -0,0 +1,222 @@ +;;; evil-collection-diff-mode.el --- Add Evil bindings to diff-mode -*- lexical-binding: t -*- + +;; Copyright (C) 2017 Pierre Neidhardt + +;; Author: Pierre Neidhardt +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, diff, tools + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: +;; +;; Evil-Collection-Diff re-uses the read-only particularity of `diff-mode': +;; When the buffer is read-only, enter motion state +;; and manipulate the diffs with simple bindings. +;; When the buffer is writage, use normal/insert states with some Evil-specific +;; keys to ease navigation. +;; +;; See also `evil-collection-diff-toggle-setup'. + +;;; Code: + +(require 'evil-collection) +(require 'diff-mode) + +(defconst evil-collection-diff-mode-maps '(diff-mode-map)) + +(defun evil-collection-diff-read-only-state-switch () + "Make read-only in motion state, writable in normal state." + (when (eq major-mode 'diff-mode) + (if buffer-read-only + (evil-motion-state) + (evil-normal-state)))) + +;;;###autoload +(defun evil-collection-diff-toggle-setup () + "Toggle visiting diff buffers in motion state." + (interactive) + (when (eq major-mode 'diff-mode) + (if (memq 'evil-collection-diff-read-only-state-switch read-only-mode-hook) + (remove-hook 'read-only-mode-hook 'evil-collection-diff-read-only-state-switch t) + (add-hook 'read-only-mode-hook 'evil-collection-diff-read-only-state-switch nil t)))) + +;;; TODO: Report toggle function upstream? +(defun evil-collection-diff-toggle-context-unified (start end) + "Toggle between context and unified views. + +START and END are either taken from the region (if a prefix arg is given) or +else cover the whole buffer." + (interactive (if (or current-prefix-arg (use-region-p)) + (list (region-beginning) (region-end)) + (list (point-min) (point-max)))) + ;; There seems to be no way to know whether we are in context or unified views. + ;; Workaround: assume that point-max will change. This is brittle. + (let ((old-point-max (point-max))) + (diff-unified->context start end) + (when (= old-point-max (point-max)) + (diff-context->unified start end)))) + +;;; TODO: Report toggle function upstream? +(defun evil-collection-diff-toggle-restrict-view (&optional arg) + "Toggle the restriction of the view to the current hunk. +When restricting and if the prefix ARG is given, restrict the view to the +current file instead." + (interactive "P") + (if (buffer-narrowed-p) + (widen) + (diff-restrict-view arg))) + +(defcustom evil-collection-diff-mode-want-minor-mode t + "Whether to bind keys to a `evil-collection' created minor mode. + +When this is enabled, disable bootstrap related to setting up keys for motion, +binding keys to a minor mode created by `evil-collection' instead." + :type 'boolean + :group 'evil-collection) + +(define-obsolete-variable-alias 'evil-collection-diff-mode-want-g-bindings + 'evil-collection-want-g-bindings "0.0.11") + +(defvar evil-collection-diff-mode-map (make-sparse-keymap)) + +(define-minor-mode evil-collection-diff-mode + "A minor mode to attach to `diff-mode' results" + :group 'evil-collection-diff-mode + :keymap evil-collection-diff-mode-map + :lighter nil) + +(defun evil-collection-diff-mode-turn-on () + "Turn on `evil-collection-diff-mode' and normalize keymaps." + (evil-collection-diff-mode) + (evil-normalize-keymaps)) + +(defun evil-collection-diff-mode-setup-on-minor-mode () + "Set up bindings on `evil-collection-diff-mode'." + (evil-collection-define-key 'normal 'evil-collection-diff-mode-map + (kbd "[[") 'diff-file-prev + (kbd "]]") 'diff-file-next + (kbd "C-j") 'diff-hunk-next + (kbd "C-k") 'diff-hunk-prev + "gj" 'diff-hunk-next + "gk" 'diff-hunk-prev + "ge" 'diff-ediff-patch + "q" 'quit-window + "\\" 'read-only-mode + (kbd "RET") 'diff-goto-source) + + (if evil-collection-want-g-bindings + (evil-collection-define-key 'normal 'evil-collection-diff-mode-map + "gA" 'diff-add-change-log-entries-other-window + "ga" 'diff-apply-hunk + "g*" 'diff-refine-hunk + "gX" 'diff-file-kill + "gx" 'diff-hunk-kill + "gi" 'next-error-follow-minor-mode + "go" 'evil-collection-diff-toggle-restrict-view + "g~" 'diff-reverse-direction + "gs" 'diff-split-hunk + "gc" 'diff-test-hunk + "g%" 'evil-collection-diff-toggle-context-unified + "g#" 'diff-ignore-whitespace-hunk) + (evil-collection-define-key 'normal 'evil-collection-diff-mode-map + "A" 'diff-add-change-log-entries-other-window + "a" 'diff-apply-hunk + "*" 'diff-refine-hunk + "D" 'diff-file-kill + "d" 'diff-hunk-kill + "i" 'next-error-follow-minor-mode + "o" 'evil-collection-diff-toggle-restrict-view + "~" 'diff-reverse-direction + "s" 'diff-split-hunk + "c" 'diff-test-hunk + "x" 'evil-collection-diff-toggle-context-unified + "#" 'diff-ignore-whitespace-hunk)) + + ;; Enable a separate minor mode so that we can bind keys to it. + (add-hook 'diff-mode-hook 'evil-collection-diff-mode)) + +(defun evil-collection-diff-mode-setup-on-motion-state () + "Set up keys with motion state." + (evil-collection-define-key 'normal 'diff-mode-map + ;; motion + (kbd "SPC") 'scroll-up-command + (kbd "S-SPC") 'scroll-down-command + (kbd "[[") 'diff-file-prev + (kbd "]]") 'diff-file-next + (kbd "C-j") 'diff-hunk-next + (kbd "C-k") 'diff-hunk-prev + "gj" 'diff-hunk-next + "gk" 'diff-hunk-prev + + "q" 'quit-window + + "\\" 'read-only-mode) ; magit has "\" + + (evil-collection-define-key 'motion 'diff-mode-map + ;; motion + (kbd "SPC") 'scroll-up-command + (kbd "S-SPC") 'scroll-down-command + (kbd "[[") 'diff-file-prev + (kbd "]]") 'diff-file-next + (kbd "C-j") 'diff-hunk-next + (kbd "C-k") 'diff-hunk-prev + "gj" 'diff-hunk-next + "gk" 'diff-hunk-prev + + (kbd "RET") 'diff-goto-source + "A" 'diff-add-change-log-entries-other-window + + "a" 'diff-apply-hunk + "*" 'diff-refine-hunk + "D" 'diff-file-kill + "d" 'diff-hunk-kill + + "ge" 'diff-ediff-patch + "i" 'next-error-follow-minor-mode + "o" 'evil-collection-diff-toggle-restrict-view + "~" 'diff-reverse-direction + "s" 'diff-split-hunk + "c" 'diff-test-hunk + "x" 'evil-collection-diff-toggle-context-unified + "#" 'diff-ignore-whitespace-hunk + + "\\" 'read-only-mode) ; magit has "\" + ) + +;;;###autoload +(defun evil-collection-diff-mode-setup () + "Set up `evil' bindings for `diff-mode'." + ;; Don't switch to read-only/motion state by default as this can interfere + ;; with other modes which require a writable buffer, e.g. magit. + (evil-set-initial-state 'diff-mode 'normal) + + (if evil-collection-diff-mode-want-minor-mode + (evil-collection-diff-mode-setup-on-minor-mode) + (evil-collection-diff-mode-setup-on-motion-state))) + +(unless evil-collection-diff-mode-want-minor-mode + (add-hook 'diff-mode-hook 'evil-collection-diff-toggle-setup)) + +(defun evil-collection-diff-unload-function () + "For `unload-feature'." + (unless evil-collection-diff-mode-want-minor-mode + (remove-hook 'diff-mode-hook 'evil-collection-diff-toggle-setup))) + +(provide 'evil-collection-diff-mode) +;;; evil-collection-diff-mode.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/difftastic/README.org b/.config/emacs/lisp/evil-collection/modes/difftastic/README.org new file mode 100644 index 0000000..2486a73 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/difftastic/README.org @@ -0,0 +1,20 @@ +* difftastic + + Evil bindings for [[https://github.com/pkryger/difftastic.el][difftastic]] result buffers. + +** Key bindings + + | Command | Original | Evil | + |---------------------------------------+---------------------+-------------| + | =difftastic-previous-file= | =P=, =M-p= | =[[= | + | =difftastic-next-file= | =N=, =M-n= | =]]= | + | =difftastic-next-chunk= | =n= | =C-j=, =gj= | + | =difftastic-previous-chunk= | =p= | =C-k=, =gk= | + | =difftastic-hide-chunk= | | =zc= | + | =difftastic-show-chunk= | | =zo= | + | =difftastic-toggle-chunk= | =TAB= | =TAB= | + | =difftastic-diff-visit-file= | =RET= | =RET= | + | =difftastic-diff-visit-worktree-file= | =C-=, =C-j= | =o= | + | =difftastic-rerun= | =g= | =gr= | + | =difftastic-leave= | =c=, =e= | =q= | + | =difftastic-quit= | =q= | =ZQ= | diff --git a/.config/emacs/lisp/evil-collection/modes/difftastic/evil-collection-difftastic.el b/.config/emacs/lisp/evil-collection/modes/difftastic/evil-collection-difftastic.el new file mode 100644 index 0000000..e1b223c --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/difftastic/evil-collection-difftastic.el @@ -0,0 +1,57 @@ +;;; evil-collection-difftastic.el --- Bindings for `difftastic' -*- lexical-binding: t -*- + +;; Copyright (C) 2025 hiecaq + +;; Author: hiecaq +;; Maintainer: hiecaq +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, emacs, convenience, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for difftastic. + +;;; Code: +(require 'evil-collection) +(require 'difftastic nil t) + +(defvar difftastic-mode-map) + +(defconst evil-collection-difftastic-maps '(difftastic-mode-map)) + +;;;###autoload +(defun evil-collection-difftastic-setup () + "Set up `evil' bindings for `difftastic'." + (evil-collection-define-key 'normal 'difftastic-mode-map + (kbd "[[") 'difftastic-previous-file + (kbd "]]") 'difftastic-next-file + (kbd "C-j") 'difftastic-next-chunk + (kbd "C-k") 'difftastic-previous-chunk + "gj" 'difftastic-next-chunk + "gk" 'difftastic-previous-chunk + "zc" 'difftastic-hide-chunk + "zo" 'difftastic-show-chunk + (kbd "TAB") 'difftastic-toggle-chunk + (kbd "RET") 'difftastic-diff-visit-file + "o" 'difftastic-diff-visit-worktree-file + "gr" 'difftastic-rerun + "q" 'difftastic-leave + "ZQ" 'difftastic-quit)) + +(provide 'evil-collection-difftastic) + +;;; evil-collection-difftastic.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/dired-sidebar/evil-collection-dired-sidebar.el b/.config/emacs/lisp/evil-collection/modes/dired-sidebar/evil-collection-dired-sidebar.el new file mode 100644 index 0000000..f03f379 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/dired-sidebar/evil-collection-dired-sidebar.el @@ -0,0 +1,52 @@ +;;; evil-collection-dired-sidebar.el --- Evil bindings for dired-sidebar -*- lexical-binding: t; -*- + +;; Copyright (C) 2019 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, dired, tools + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: +;; Evil bindings for `dired-sidebar' + +;;; Code: + +(require 'evil-collection) +(require 'dired-sidebar nil t) + +(defconst evil-collection-dired-sidebar-maps '(dired-sidebar-mode-map)) + +;;;###autoload +(defun evil-collection-dired-sidebar-setup () + "Set up `evil' bindings for `dired-sidebar'." + (evil-collection-define-key 'normal 'dired-sidebar-mode-map + (kbd "RET") 'dired-sidebar-find-file + (kbd "C-m") 'dired-sidebar-find-file + (kbd "") 'dired-sidebar-find-file + (kbd "TAB") 'dired-sidebar-subtree-toggle + [tab] 'dired-sidebar-subtree-toggle + "^" 'dired-sidebar-up-directory + "-" 'dired-sidebar-up-directory + (kbd "C-o") 'dired-sidebar-find-file-alt + [mouse-2] 'dired-sidebar-mouse-subtree-cycle-or-find-file + "ZZ" 'quit-window)) + +(provide 'evil-collection-dired-sidebar) +;;; evil-collection-dired-sidebar.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/dired/README.org b/.config/emacs/lisp/evil-collection/modes/dired/README.org new file mode 100644 index 0000000..4068799 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/dired/README.org @@ -0,0 +1,40 @@ +* dired + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Dired.html][Dired]]. + +** Key bindings + + | Command | Original | Evil | + |--------------------------------+-----------------+-----------------| + | =dired-next-line= | =n=, =SPC= | =j=, =SPC= | + | =dired-previous-line= | =p=, =S-SPC= | =k=, =S-SPC= | + | =dired-find-file= | =f=, =RET=, =e= | =gf=, =RET= | + | =dired-find-file-other-window= | =o= | =gO= | + | =dired-view-file= | =v= | =go= | + | =revert-buffer= | =g= | =gr= | + | =dired-summary= | =?=, =h= | =g?= | + | =dired-show-file-type= | =y= | =gy= | + | =dired-copy-filename-as-kill= | =w= | =Y= | + | =dired-do-kill-lines= | =k= | =K= | + | =dired-do-chgrp= | =G= | =gG= | + | =dired-hide-subdir= | =$= | =g$= | + | =dired-next-dirline= | =>= | =gj=, =]]=, =>= | + | =dired-prev-dirline= | =<= | =gk=, =[[=, =<= | + | =dired-up-directory= | =^= | =^=, =-= | + | =dired-sort-toggle-or-edit= | =s= | =o= | + | =dired-do-redisplay= | =l= | =r= | + | =dired-find-alternate-file= | =a= | =a= | + | =quit-window= | =q= | =q= | + + Uppercase operator keys (=A=, =B=, =C=, =D=, =H=, =L=, =M=, =O=, =P=, =Q=, + =R=, =S=, =T=, =U=, =W=, =X=, =Z=) and marking/flagging keys (=+=, =&=, + =!=, =%=, =*=, =~=, =#=, =.=, ===) keep their default dired bindings. + + On Emacs 30+: =E= → =dired-do-open=. + +** Integrations + + - [[https://github.com/Fuco1/dired-hacks][dired-narrow]]: =s= → =dired-narrow-regexp=. + - [[https://github.com/Fuco1/dired-hacks][dired-subtree]]: =TAB= toggle, =gh= / =gl= up/down, =M-j= / =M-k= sibling navigation. + - [[https://github.com/Fuco1/dired-hacks][dired-filter]]: =*= → =dired-filter-mark-map=, =g/= → =dired-filter-map=. + - dired-x: =*(=, =*.=, =*O= for sexp / extension / omitted marking. diff --git a/.config/emacs/lisp/evil-collection/modes/dired/evil-collection-dired.el b/.config/emacs/lisp/evil-collection/modes/dired/evil-collection-dired.el new file mode 100644 index 0000000..7898c1a --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/dired/evil-collection-dired.el @@ -0,0 +1,224 @@ +;;; evil-collection-dired.el --- Evil bindings for Dired -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, dired, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for Dired. + +;;; Code: +(require 'dired) +(require 'evil-collection) + +(defvar dired-filter-mark-map) +(defvar dired-filter-map) + +(defconst evil-collection-dired-maps '(dired-mode-map + dired-filter-mark-map + dired-filter-map)) + +;;;###autoload +(defun evil-collection-dired-setup () + "Set up `evil' bindings for `dired'." + (evil-collection-define-key 'normal 'dired-mode-map + "q" 'quit-window + "j" 'dired-next-line + "k" 'dired-previous-line + [mouse-2] 'dired-mouse-find-file-other-window + [follow-link] 'mouse-face + ;; Commands to mark or flag certain categories of files + "#" 'dired-flag-auto-save-files + "." 'dired-clean-directory + "~" 'dired-flag-backup-files + ;; Upper case keys (except !) for operating on the marked files + "A" 'dired-do-find-regexp + "C" 'dired-do-copy + "B" 'dired-do-byte-compile + "D" 'dired-do-delete + "gG" 'dired-do-chgrp ;; FIXME: This can probably live on a better binding. + "H" 'dired-do-hardlink + "L" 'dired-do-load + "M" 'dired-do-chmod + "O" 'dired-do-chown + "P" 'dired-do-print + "Q" 'dired-do-find-regexp-and-replace + "R" 'dired-do-rename + "S" 'dired-do-symlink + "T" 'dired-do-touch + "X" 'dired-do-shell-command + "Z" 'dired-do-compress + "c" 'dired-do-compress-to + "!" 'dired-do-shell-command + "&" 'dired-do-async-shell-command + ;; Comparison commands + "=" 'dired-diff + ;; Tree Dired commands + (kbd "M-C-?") 'dired-unmark-all-files + (kbd "M-C-d") 'dired-tree-down + (kbd "M-C-u") 'dired-tree-up + (kbd "M-C-n") 'dired-next-subdir + (kbd "M-C-p") 'dired-prev-subdir + ;; move to marked files + (kbd "M-{") 'dired-prev-marked-file + (kbd "M-}") 'dired-next-marked-file + ;; Make all regexp commands share a `%' prefix: + ;; We used to get to the submap via a symbol dired-regexp-prefix, + ;; but that seems to serve little purpose, and copy-keymap + ;; does a better job without it. + "%" nil + "%u" 'dired-upcase + "%l" 'dired-downcase + "%d" 'dired-flag-files-regexp + "%g" 'dired-mark-files-containing-regexp + "%m" 'dired-mark-files-regexp + "%r" 'dired-do-rename-regexp + "%C" 'dired-do-copy-regexp + "%H" 'dired-do-hardlink-regexp + "%R" 'dired-do-rename-regexp + "%S" 'dired-do-symlink-regexp + "%&" 'dired-flag-garbage-files + ;; mark + "*" nil + "**" 'dired-mark-executables + "*/" 'dired-mark-directories + "*@" 'dired-mark-symlinks + "*%" 'dired-mark-files-regexp + "*c" 'dired-change-marks + "*s" 'dired-mark-subdir-files + "*m" 'dired-mark + "*u" 'dired-unmark + "*?" 'dired-unmark-all-files + "*!" 'dired-unmark-all-marks + "U" 'dired-unmark-all-marks + (kbd "* ") 'dired-unmark-backward + (kbd "* C-n") 'dired-next-marked-file + (kbd "* C-p") 'dired-prev-marked-file + "*t" 'dired-toggle-marks + ;; Lower keys for commands not operating on all the marked files + "a" 'dired-find-alternate-file + "d" 'dired-flag-file-deletion + "gf" 'dired-find-file + (kbd "C-m") 'dired-find-file + "gr" 'revert-buffer + "i" 'dired-toggle-read-only + "I" 'dired-maybe-insert-subdir + "J" 'dired-goto-file + "K" 'dired-do-kill-lines + "r" 'dired-do-redisplay + "m" 'dired-mark + "t" 'dired-toggle-marks + "u" 'dired-unmark ; also "*u" + "W" 'browse-url-of-dired-file + "x" 'dired-do-flagged-delete + "gy" 'dired-show-file-type ;; FIXME: This could probably go on a better key. + "Y" 'dired-copy-filename-as-kill + "+" 'dired-create-directory + ;; open + (kbd "RET") 'dired-find-file + (kbd "S-") 'dired-find-file-other-window + (kbd "M-RET") 'dired-display-file + "gO" 'dired-find-file-other-window + "go" 'dired-view-file + ;; sort + "o" 'dired-sort-toggle-or-edit + ;; moving + "gj" 'dired-next-dirline + "gk" 'dired-prev-dirline + "[[" 'dired-prev-dirline + "]]" 'dired-next-dirline + "<" 'dired-prev-dirline + ">" 'dired-next-dirline + "^" 'dired-up-directory + "-" 'dired-up-directory + " " 'dired-next-line + [?\S-\ ] 'dired-previous-line + [remap next-line] 'dired-next-line + [remap previous-line] 'dired-previous-line + ;; hiding + "g$" 'dired-hide-subdir ;; FIXME: This can probably live on a better binding. + (kbd "M-$") 'dired-hide-all + "(" 'dired-hide-details-mode + ;; isearch + (kbd "M-s a C-s") 'dired-do-isearch + (kbd "M-s a M-C-s") 'dired-do-isearch-regexp + (kbd "M-s f C-s") 'dired-isearch-filenames + (kbd "M-s f M-C-s") 'dired-isearch-filenames-regexp + ;; misc + [remap read-only-mode] 'dired-toggle-read-only + ;; `toggle-read-only' is an obsolete alias for `read-only-mode' + [remap toggle-read-only] 'dired-toggle-read-only + "g?" 'dired-summary + (kbd "") 'dired-unmark-backward + [remap undo] 'dired-undo + [remap advertised-undo] 'dired-undo + ;; thumbnail manipulation (image-dired) + (kbd "C-t d") 'image-dired-display-thumbs + (kbd "C-t t") 'image-dired-tag-files + (kbd "C-t r") 'image-dired-delete-tag + (kbd "C-t j") 'image-dired-jump-thumbnail-buffer + (kbd "C-t i") 'image-dired-dired-display-image + (kbd "C-t x") 'image-dired-dired-display-external + (kbd "C-t a") 'image-dired-display-thumbs-append + (kbd "C-t .") 'image-dired-display-thumb + (kbd "C-t c") 'image-dired-dired-comment-files + (kbd "C-t f") 'image-dired-mark-tagged-files + (kbd "C-t C-t") 'image-dired-dired-toggle-marked-thumbs + (kbd "C-t e") 'image-dired-dired-edit-comment-and-tags + ;; encryption and decryption (epa-dired) + ";d" 'epa-dired-do-decrypt + ";v" 'epa-dired-do-verify + ";s" 'epa-dired-do-sign + ";e" 'epa-dired-do-encrypt) + + (when (>= emacs-major-version 30) + (evil-collection-define-key 'normal 'dired-mode-map + "E" 'dired-do-open)) + + ;; dired-x commands + (with-eval-after-load 'dired-x + (evil-collection-define-key 'normal 'dired-mode-map + "*(" 'dired-mark-sexp + "*." 'dired-mark-extension + "*O" 'dired-mark-omitted)) + + ;; dired-narrow commands + (with-eval-after-load 'dired-narrow + (evil-collection-define-key 'normal 'dired-mode-map + "s" 'dired-narrow-regexp)) + + ;; dired-subtree commands + (with-eval-after-load 'dired-subtree + (evil-collection-define-key 'normal 'dired-mode-map + (kbd "TAB") 'dired-subtree-toggle + "gh" 'dired-subtree-up + "gl" 'dired-subtree-down + (kbd "M-j") 'dired-subtree-next-sibling + (kbd "M-k") 'dired-subtree-previous-sibling)) + + (with-eval-after-load 'dired-filter + (evil-collection-define-key 'normal 'dired-mode-map + "*" dired-filter-mark-map + "g/" dired-filter-map))) + +(provide 'evil-collection-dired) +;;; evil-collection-dired.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/disk-usage/evil-collection-disk-usage.el b/.config/emacs/lisp/evil-collection/modes/disk-usage/evil-collection-disk-usage.el new file mode 100644 index 0000000..ee1b5c9 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/disk-usage/evil-collection-disk-usage.el @@ -0,0 +1,89 @@ +;;; evil-collection-disk-usage.el --- Evil bindings for disk-usage.el -*- lexical-binding: t -*- + +;; Copyright (C) 2019 Pierre Neidhardt + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, files, convenience, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for `disk-usage-mode'. + +;;; Code: +(require 'evil-collection) +(require 'disk-usage nil t) + +(defconst evil-collection-disk-usage-maps '(disk-usage-mode-map + disk-usage-by-types-mode-map)) + +;;;###autoload +(defun evil-collection-disk-usage-setup () + "Set up `evil' bindings for `disk-usage'." + (evil-collection-set-readonly-bindings 'disk-usage-mode-map) + (evil-collection-define-key 'normal 'disk-usage-mode-map + ;; motion + (kbd "SPC") 'scroll-up-command + (kbd "S-SPC") 'scroll-down-command + (kbd "") 'forward-button + (kbd "") 'backward-button + + "S" 'tabulated-list-sort + "^" 'disk-usage-up + + "zh" 'disk-usage-toggle-human-readable + "zf" 'disk-usage-toggle-full-path + "zr" 'disk-usage-toggle-recursive + + (kbd "ze") 'disk-usage-eshell-at-point + (kbd "zs") 'disk-usage-shell-at-point + (kbd "d") 'disk-usage-dired-at-point + + "m" 'disk-usage-mark + "u" 'disk-usage-unmark + "x" 'disk-usage-delete-marked-files + + "a" 'disk-usage-add-filters + "A" 'disk-usage-remove-filters + + "g?" 'describe-mode + "gr" 'revert-buffer) + + (evil-collection-set-readonly-bindings 'disk-usage-by-types-mode-map) + (evil-collection-define-key 'normal 'disk-usage-by-types-mode-map + ;; motion + (kbd "SPC") 'scroll-up-command + (kbd "S-SPC") 'scroll-down-command + (kbd "") 'forward-button + (kbd "") 'backward-button + + (kbd "RET") 'disk-usage-files + + "S" 'tabulated-list-sort + + "zh" 'disk-usage-toggle-human-readable + + "g?" 'describe-mode + "gr" 'revert-buffer + + "a" 'disk-usage-add-filters + "A" 'disk-usage-remove-filters)) + +(provide 'evil-collection-disk-usage) +;;; evil-collection-disk-usage.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/distel/evil-collection-distel.el b/.config/emacs/lisp/evil-collection/modes/distel/evil-collection-distel.el new file mode 100644 index 0000000..098cc1d --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/distel/evil-collection-distel.el @@ -0,0 +1,81 @@ +;;; evil-collection-distel.el --- Bindings for `distel' -*- lexical-binding: t -*- + +;; Copyright (C) 2021 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, elisp, lisp + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for `distel'. + +;;; Code: +(require 'distel nil t) +(require 'evil-collection) + +(defconst evil-collection-distel-maps '(erlang-extended-mode-map + edb-attach-mode-map + edb-monitor-mode-map + edb-variables-mode-map)) + +;;;###autoload +(defun evil-collection-distel-setup () + "Set up `evil' bindings for `distel'." + (evil-collection-define-key 'normal 'erlang-extended-mode-map + "gd" 'erl-find-source-under-point + (kbd "C-t") 'erl-find-source-unwind + "gz" 'erl-ie-show-session + "K" 'erl-find-doc-under-point) + + (when evil-collection-setup-debugger-keys + (evil-collection-define-key 'normal 'erlang-extended-mode-map + [f5] 'edb-toggle-interpret + [f9] 'edb-toggle-breakpoint + ;; ("\C-c\C-ds" edb-synch-breakpoints) + ;; ("\C-c\C-dS" edb-save-dbg-state) + ;; ("\C-c\C-dR" edb-restore-dbg-state) + ;; ("\C-c\C-dm" edb-monitor) + ) + + (evil-collection-define-key 'normal 'edb-monitor-mode-map + (kbd "RET") 'edb-attach-command + "q" 'erl-bury-viewer) + + (evil-collection-define-key 'normal 'edb-variables-mode-map + (kbd "RET") 'edb-show-variable) + + (evil-collection-define-key 'normal 'edb-attach-mode-map + "i" 'edb-attach-step ;; Step Into + "n" 'edb-attach-next + "c" 'edb-attach-continue + "U" 'edb-attach-up + "D" 'edb-attach-down + "H" 'edb-attach-finish + "q" 'erl-quit-viewer + "g?" 'edb-attach-help + "b" 'edb-toggle-breakpoint)) + + (when evil-collection-want-find-usages-bindings + (evil-collection-define-key 'normal 'erlang-extended-mode-map + "gr" 'erl-who-calls)) + + (add-hook 'erlang-extended-mode-hook 'evil-normalize-keymaps)) + +(provide 'evil-collection-distel) +;;; evil-collection-distel.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/doc-view/README.org b/.config/emacs/lisp/evil-collection/modes/doc-view/README.org new file mode 100644 index 0000000..ea0af7c --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/doc-view/README.org @@ -0,0 +1,42 @@ +* doc-view + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Document-View.html][doc-view]] (PDF / PS / DVI viewer). + + =doc-view-mode= starts in normal state. + +** Key bindings + + | Command | Original | Evil | + |-------------------------------------------+----------------+-------------------------------------| + | =doc-view-next-line-or-next-page= | =C-n=, =down= | =j= (remap) | + | =doc-view-previous-line-or-previous-page= | =C-p=, =up= | =k= (remap) | + | =image-forward-hscroll= | n/a | =l= (remap) | + | =image-backward-hscroll= | n/a | =h= (remap) | + | =doc-view-next-page= | =n= | =gj=, =C-j=, =n= | + | =doc-view-previous-page= | =p= | =gk=, =C-k=, =p= | + | =doc-view-first-page= | =M-<= | =gg= | + | =doc-view-last-page= | =M->= | =G= | + | =doc-view-goto-page= | =M-g M-g= | =J= | + | =doc-view-scroll-up-or-next-page= | =SPC= | =SPC= | + | =doc-view-scroll-down-or-previous-page= | =DEL=, =S-SPC= | =DEL=, =S-SPC= | + | =forward-page= | =next= | =C-d= | + | =backward-page= | =prior= | =C-u= (when =evil-want-C-u-scroll=) | + | =image-next-line= | =RET= | =RET= | + | =doc-view-enlarge= | =+=, === | =+=, === | + | =doc-view-shrink= | =-= | =-= | + | =doc-view-scale-reset= | =0= | =0= | + | =doc-view-fit-width-to-window= | =W= | =W= | + | =doc-view-fit-height-to-window= | =H= | =H= | + | =doc-view-fit-page-to-window= | =P= | =P= | + | =doc-view-kill-proc= | =K= | =X= | + | =doc-view-set-slice= | =c s= | =s s= | + | =doc-view-set-slice-using-mouse= | =c m= | =s m= | + | =doc-view-set-slice-from-bounding-box= | =c b= | =s b= | + | =doc-view-reset-slice= | =c r= | =s r= | + | =doc-view-search= | =C-s=, =find= | =/= | + | =doc-view-search-backward= | =C-r= | =?= | + | =doc-view-show-tooltip= | =C-t= | =C-t= | + | =doc-view-toggle-display= | =C-c C-c= | =C-c C-c= | + | =doc-view-open-text= | =C-c C-t= | =C-c C-t= | + | =doc-view-revert-buffer= | n/a | =gr= | + | =quit-window= | n/a | =q= | diff --git a/.config/emacs/lisp/evil-collection/modes/doc-view/evil-collection-doc-view.el b/.config/emacs/lisp/evil-collection/modes/doc-view/evil-collection-doc-view.el new file mode 100644 index 0000000..42b10ff --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/doc-view/evil-collection-doc-view.el @@ -0,0 +1,89 @@ +;;; evil-collection-doc-view.el --- Evil bindings for docview -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, bindings, files, pdf, ps, dvi + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Evil bindings for doc-view. + +;;; Code: +(require 'evil-collection) +(require 'doc-view) + +(defconst evil-collection-doc-view-maps '(doc-view-mode-map)) + +;;;###autoload +(defun evil-collection-doc-view-setup () + "Set up `evil' bindings for `doc-view'." + (evil-set-initial-state 'doc-view-mode 'normal) + (evil-collection-define-key 'normal 'doc-view-mode-map + "q" 'quit-window + [remap evil-next-line] 'doc-view-next-line-or-next-page + [remap evil-previous-line] 'doc-view-previous-line-or-previous-page + [remap evil-backward-char] 'image-backward-hscroll + [remap evil-forward-char] 'image-forward-hscroll + (kbd "C-j") 'doc-view-next-page + (kbd "C-k") 'doc-view-previous-page + "gj" 'doc-view-next-page + "gk" 'doc-view-previous-page + (kbd "C-d") 'forward-page + (kbd "SPC") 'doc-view-scroll-up-or-next-page + (kbd "DEL") 'doc-view-scroll-down-or-previous-page + (kbd "S-SPC") 'doc-view-scroll-down-or-previous-page + "gg" 'doc-view-first-page + "G" 'doc-view-last-page + "J" 'doc-view-goto-page + (kbd "RET") 'image-next-line + + ;; zoom + "+" 'doc-view-enlarge + "=" 'doc-view-enlarge + "0" 'doc-view-scale-reset + "-" 'doc-view-shrink + + "W" 'doc-view-fit-width-to-window ; Like evil-image. + "H" 'doc-view-fit-height-to-window ; Like evil-image. + "P" 'doc-view-fit-page-to-window + "X" 'doc-view-kill-proc + + (kbd "s s") 'doc-view-set-slice + (kbd "s m") 'doc-view-set-slice-using-mouse + (kbd "s b") 'doc-view-set-slice-from-bounding-box + (kbd "s r") 'doc-view-reset-slice + + (kbd "/") 'doc-view-search + (kbd "?") 'doc-view-search-backward + (kbd "C-t") 'doc-view-show-tooltip + (kbd "C-c C-c") 'doc-view-toggle-display + (kbd "C-c C-t") 'doc-view-open-text + + ;; refresh + (kbd "gr") 'doc-view-revert-buffer) + + ;; TODO: What if the user changes `evil-want-C-u-scroll' after this is run? + (when evil-want-C-u-scroll + (evil-collection-define-key 'normal 'doc-view-mode-map + (kbd "C-u") 'backward-page))) + +(provide 'evil-collection-doc-view) +;;; evil-collection-doc-view.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/docker/evil-collection-docker.el b/.config/emacs/lisp/evil-collection/modes/docker/evil-collection-docker.el new file mode 100644 index 0000000..29ecd21 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/docker/evil-collection-docker.el @@ -0,0 +1,89 @@ +;;; evil-collection-docker.el --- Evil bindings for docker.el -*- lexical-binding: t -*- + +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, docker, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for docker.el + +;;; Code: +(require 'docker nil t) +(require 'evil-collection) + +(defconst evil-collection-docker-maps '(docker-container-mode-map + docker-context-mode-map + docker-image-mode-map + docker-machine-mode-map + docker-network-mode-map + docker-volume-mode-map)) + +(defun evil-collection-docker-setup () + "Set up `evil' bindings for `docker'." + (evil-collection-define-key 'normal 'docker-container-mode-map + ";" 'docker-container-ls + "?" 'docker-container-help + "C" 'docker-container-cp + "D" 'docker-container-rm + "I" 'docker-container-inspect + "K" 'docker-container-kill + "L" 'docker-container-logs + "O" 'docker-container-stop + "P" 'docker-container-pause + "R" 'docker-container-restart + "S" 'docker-container-start + "a" 'docker-container-attach + "b" 'docker-container-shells + "d" 'docker-container-diff + "f" 'docker-container-open + "r" 'docker-container-rename-selection) + + (evil-collection-define-key 'normal 'docker-context-mode-map + "?" 'docker-context-help + "D" 'docker-context-rm + "I" 'docker-context-inspect + "X" 'docker-context-use) + + (evil-collection-define-key 'normal 'docker-image-mode-map + ";" 'docker-image-ls + "?" 'docker-image-help + "D" 'docker-image-rm + "F" 'docker-image-pull + "I" 'docker-image-inspect + "P" 'docker-image-push + "R" 'docker-image-run + "T" 'docker-image-tag-selection + "d" 'docker-image-mark-dangling) + + (evil-collection-define-key 'normal 'docker-network-mode-map + ";" 'docker-network-ls + "?" 'docker-network-help + "D" 'docker-network-rm + "I" 'docker-network-inspect + "d" 'docker-network-mark-dangling) + + (evil-collection-define-key 'normal 'docker-volume-mode-map + ";" 'docker-volume-ls + "?" 'docker-volume-help + "D" 'docker-volume-rm + "I" 'docker-volume-inspect + "d" 'docker-volume-mark-dangling + "f" 'docker-volume-dired-selection)) + +(provide 'evil-collection-docker) + +;;; evil-collection-docker.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/eat/README.org b/.config/emacs/lisp/evil-collection/modes/eat/README.org new file mode 100644 index 0000000..b8fdfae --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/eat/README.org @@ -0,0 +1,37 @@ +* eat + + Evil bindings for [[https://codeberg.org/akib/emacs-eat][eat]], the Emulate A Terminal package. + + Initial state for =eat-mode= is =insert=. The same =C-*= keys that vterm + forwards raw to the terminal are bound to =eat-self-input= here so that + shells and TUIs receive them instead of evil-insert-state. + +** Key bindings + +*** eat-mode-map + + | Command | Original | Evil | + |------------------------------------------+----------+-----------| + | =evil-collection-eat-toggle-send-escape= | n/a | =C-c C-z= | + + The following keys are forwarded raw to the terminal via =eat-self-input= + in insert state: =C-a=, =C-b=, =C-d=, =C-e=, =C-f=, =C-k=, =C-l=, =C-n=, + =C-o=, =C-p=, =C-q=, =C-r=, =C-s=, =C-t=, =C-u=, =C-v=, =C-w=, =C-y=, + =C-z=, ==. =C-c= (prefix) and =C-h= (help) are not forwarded. + +*** eat-line-mode-map + + =RET=, =C-m= and =[return]= send input to the terminal in the state + named by =evil-collection-repl-submit-state=, and insert a newline in + the opposite state. + + | Command | Original | State | + |-----------------------+----------+-------------------------------------| + | =eat-line-send-input= | =RET= | =evil-collection-repl-submit-state= | + | =newline= | n/a | opposite of submit state | + +** New commands + + | Command | Purpose | + |------------------------------------------+---------------------------------------------------| + | =evil-collection-eat-toggle-send-escape= | Toggle whether =ESC= goes to eat or back to evil. | diff --git a/.config/emacs/lisp/evil-collection/modes/eat/evil-collection-eat.el b/.config/emacs/lisp/evil-collection/modes/eat/evil-collection-eat.el new file mode 100644 index 0000000..b5a6262 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/eat/evil-collection-eat.el @@ -0,0 +1,124 @@ +;;; evil-collection-eat.el --- Bindings for `eat' -*- lexical-binding: t -*- + +;; Copyright (C) 2024 James Cherti + +;; Maintainer: James Cherti +;; Author: James Cherti +;; Based on evil-collection-vterm.el by James Nguyen and Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, eat, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; This package provides `evil-mode' keybindings for `eat'. + +;;; Code: +(require 'evil-collection) +(require 'eat nil t) + +(defconst evil-collection-eat-maps '(eat-mode-map + eat-line-mode-map + eat-semi-char-mode-map + eat-char-mode-map + eat-eshell-semi-char-mode-map + eat-eshell-char-mode-map)) + +;; The map symbols below are only referenced inside quoted lists in this +;; file, so the byte-compiler does not actually require these declarations. +;; Defining them keeps certain linters happy. +(defvar eat-line-mode-map) +(defvar eat-semi-char-mode-map) +(defvar eat-char-mode-map) +(defvar eat-eshell-semi-char-mode-map) +(defvar eat-eshell-char-mode-map) + +(defvar-local evil-collection-eat-send-escape-to-eat-p nil + "Track whether or not we send ESC to `eat' or `emacs'.") + +(defun evil-collection-eat-toggle-send-escape () + "Toggle the destination of the ESC key between `eat' and `emacs'. +This adjustment is necessary for programs that utilize ESC, such as Vim or an +SSH-accessed Emacs that also uses `evil-mode'." + (interactive) + (if evil-collection-eat-send-escape-to-eat-p + (evil-collection-define-key 'insert 'eat-mode-map (kbd "") + (lookup-key evil-insert-state-map (kbd ""))) + (evil-collection-define-key 'insert 'eat-mode-map + (kbd "") 'eat-self-input)) + (setq evil-collection-eat-send-escape-to-eat-p + (not evil-collection-eat-send-escape-to-eat-p)) + (message (format "Sending ESC to %s." + (if evil-collection-eat-send-escape-to-eat-p + "eat" + "emacs")))) + +;;;###autoload +(defun evil-collection-eat-setup () + "Set up `evil' bindings for `eat'." + (evil-set-initial-state 'eat-mode 'insert) + + (let* ((submit evil-collection-repl-submit-state) + (newline-state (if (eq submit 'normal) 'insert 'normal))) + (evil-collection-define-key submit 'eat-line-mode-map + (kbd "RET") 'eat-line-send-input + (kbd "\C-m") 'eat-line-send-input + [return] 'eat-line-send-input) + (evil-collection-define-key newline-state 'eat-line-mode-map + (kbd "RET") #'newline + (kbd "\C-m") #'newline + [return] #'newline)) + + (evil-collection-define-key '(normal insert) 'eat-mode-map + (kbd "C-c C-z") 'evil-collection-eat-toggle-send-escape) + + ;; `Evil' has some "C-" bindings in insert state that shadow the `eat' terminal + ;; bindings. Do not send "C-c" (prefix key) nor "C-h" (help prefix) as raw input. + (evil-collection-define-key 'insert 'eat-mode-map + (kbd "C-a") 'eat-self-input + (kbd "C-b") 'eat-self-input + (kbd "C-d") 'eat-self-input + (kbd "C-e") 'eat-self-input + (kbd "C-f") 'eat-self-input + (kbd "C-k") 'eat-self-input + (kbd "C-l") 'eat-self-input + (kbd "C-n") 'eat-self-input + (kbd "C-o") 'eat-self-input + (kbd "C-p") 'eat-self-input + (kbd "C-q") 'eat-self-input + (kbd "C-r") 'eat-self-input + (kbd "C-s") 'eat-self-input + (kbd "C-t") 'eat-self-input + (kbd "C-u") 'eat-self-input + (kbd "C-v") 'eat-self-input + (kbd "C-w") 'eat-self-input + (kbd "C-y") 'eat-self-input + (kbd "C-z") 'eat-self-input + (kbd "") 'eat-self-input) + + ;; Paste bindings: in a terminal, "paste before/after" is meaningless because + ;; the cursor position is controlled by the running program. Bind both `p' + ;; and `P' to `eat-yank' so the kill-ring is sent as terminal input. + (dolist (map '(eat-semi-char-mode-map + eat-char-mode-map + eat-eshell-semi-char-mode-map + eat-eshell-char-mode-map)) + (evil-collection-define-key 'normal map + (kbd "p") 'eat-yank + (kbd "P") 'eat-yank))) + +(provide 'evil-collection-eat) +;;; evil-collection-eat.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/ebib/evil-collection-ebib.el b/.config/emacs/lisp/evil-collection/modes/ebib/evil-collection-ebib.el new file mode 100644 index 0000000..1c51451 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/ebib/evil-collection-ebib.el @@ -0,0 +1,77 @@ +;;; evil-collection-ebib.el --- Evil bindings for ebib -*- lexical-binding: t -*- + +;; Author: Justin Burkett +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, ebib, tools + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: +;; Evil bindings for the ebib. + +;;; Code: +(require 'evil-collection) +(require 'ebib nil t) + +(defconst evil-collection-ebib-maps '(ebib-index-mode-map + ebib-entry-mode-map)) + +(defvar ebib-index-mode-map) +(defvar ebib-entry-mode-map) + +;;;###autoload +(defun evil-collection-ebib-setup () + "Set up `evil' bindings for `ebib'." + (evil-set-initial-state 'ebib-index-mode 'normal) + (evil-make-overriding-map ebib-index-mode-map 'normal) + (evil-collection-inhibit-insert-state 'ebib-index-mode-map) + (evil-collection-define-key 'normal 'ebib-index-mode-map + "d" 'ebib-kill-entry + "D" 'ebib-delete-entry + "gg" 'ebib-goto-first-entry + "G" 'ebib-goto-last-entry + "j" 'ebib-next-entry + "k" 'ebib-prev-entry + "n" 'ebib-search-next + "p" 'ebib-yank-entry + "gj" 'ebib-jump-to-entry + "ZQ" 'ebib-quit + "ZZ" 'ebib-lower + (kbd "C-u") 'ebib-index-scroll-down + (kbd "C-d") 'ebib-index-scroll-up + (kbd "C-b") 'ebib-index-scroll-down + (kbd "C-f") 'ebib-index-scroll-up) + (evil-set-initial-state 'ebib-entry-mode 'normal) + (evil-make-overriding-map ebib-entry-mode-map 'normal) + (evil-collection-inhibit-insert-state 'ebib-entry-mode-map) + (evil-collection-define-key 'normal 'ebib-entry-mode-map + "[[" 'ebib-goto-prev-set + "]]" 'ebib-goto-next-set + "d" 'ebib-kill-field-contents + "D" 'ebib-delete-field-contents + "gg" 'ebib-goto-first-field + "gk" 'ebib-goto-prev-set + "gj" 'ebib-goto-next-set + "G" 'ebib-goto-last-field + "j" 'ebib-next-field + "k" 'ebib-prev-field + "p" 'ebib-yank-field-contents + "y" 'ebib-copy-current-field-contents + "ZZ" 'ebib-quit-entry-buffer + "ZQ" 'ebib-quit-entry-buffer)) + +(provide 'evil-collection-ebib) +;;; evil-collection-ebib.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/ebuku/evil-collection-ebuku.el b/.config/emacs/lisp/evil-collection/modes/ebuku/evil-collection-ebuku.el new file mode 100644 index 0000000..8ab4129 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/ebuku/evil-collection-ebuku.el @@ -0,0 +1,63 @@ +;;; evil-collection-ebuku.el --- Evil bindings for Ebuku -*- lexical-binding: t -*- + +;; Copyright (C) 2020-2022 Alexis + +;; Author: Alexis +;; Maintainer: Alexis +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, ebuku, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: + +;; Evil bindings for Ebuku. + +;;; Code: + +(require 'evil-collection) +(require 'ebuku nil t) + + +;;;###autoload +(defun evil-collection-ebuku-setup () + "Set up `evil' bindings for `Ebuku'." + (evil-collection-define-key 'normal 'ebuku-mode-map + "q" 'quit-window + "a" 'ebuku-add-bookmark + "d" 'ebuku-delete-bookmark + "x" 'ebuku-delete-bookmark + "e" 'ebuku-edit-bookmark + "gr" 'ebuku-refresh + "j" 'ebuku-next-bookmark + (kbd "C-j") 'ebuku-next-bookmark + "k" 'ebuku-previous-bookmark + (kbd "C-k") 'ebuku-previous-bookmark + "r" 'ebuku-search-on-recent + "s" 'ebuku-search + "*" 'ebuku-show-all + "-" 'ebuku-toggle-results-limit + "t" 'ebuku-toggle-results-limit + (kbd "RET") 'ebuku-open-url + "C" 'ebuku-copy-url + "T" 'ebuku-copy-title + "I" 'ebuku-copy-index + [mouse-1] 'ebuku-open-url + [mouse-2] 'ebuku-open-url)) + + +(provide 'evil-collection-ebuku) +;;; evil-collection-ebuku.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/eca/evil-collection-eca.el b/.config/emacs/lisp/evil-collection/modes/eca/evil-collection-eca.el new file mode 100644 index 0000000..37657bd --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/eca/evil-collection-eca.el @@ -0,0 +1,56 @@ +;;; evil-collection-eca.el --- Bindings for eca -*- lexical-binding: t -*- + +;; Copyright (C) 2026 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "29.1")) +;; Keywords: evil, eca, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for eca. + +;;; Code: +(require 'evil-collection) +(require 'eca nil t) + +(defconst evil-collection-eca-maps '(eca-chat-mode-map)) + +(defvar eca-chat-mode-map) + +;;;###autoload +(defun evil-collection-eca-setup () + "Set up `evil' bindings for `eca'." + (add-hook 'eca-chat-mode-hook 'evil-normalize-keymaps) + + (let* ((submit evil-collection-repl-submit-state) + (newline-state (if (eq submit 'normal) 'insert 'normal))) + (evil-collection-define-key submit 'eca-chat-mode-map + (kbd "") 'eca-chat--key-pressed-return + (kbd "RET") 'eca-chat--key-pressed-return) + (evil-collection-define-key newline-state 'eca-chat-mode-map + (kbd "") 'eca-chat--key-pressed-newline + (kbd "RET") 'eca-chat--key-pressed-newline)) + + (evil-collection-define-key 'insert 'eca-chat-mode-map + (kbd "S-") 'eca-chat--key-pressed-newline) + (evil-collection-define-key 'normal 'eca-chat-mode-map + (kbd "S-") 'eca-chat--key-pressed-newline)) + +(provide 'evil-collection-eca) +;;; evil-collection-eca.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/edbi/evil-collection-edbi.el b/.config/emacs/lisp/evil-collection/modes/edbi/evil-collection-edbi.el new file mode 100644 index 0000000..f6b7f63 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/edbi/evil-collection-edbi.el @@ -0,0 +1,108 @@ +;;; evil-collection-edbi.el --- Evil bindings for EDBI -*- lexical-binding: t -*- + +;; Copyright (C) 2019 Pierre Neidhardt + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, database, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for EDBI. + +;;; Code: +(require 'evil-collection) +(require 'edbi nil t) + +(defvar ctbl:table-mode-map) +(defvar edbi:dbview-keymap) +(declare-function ctbl:define-keymap "ctable") +(declare-function epc:add-keymap "epc") + +(defconst evil-collection-edbi-maps '(edbi:dbview-query-result-keymap + edbi:sql-mode-map)) + +(defun evil-collection-edbi-dbview-setup () + "The `ctbl:table-mode-map' and `edbi:dbview-keymap' are stored +as local maps and are not bound to any mode. As such, the only +way to add Evil bindings to the dbview is to overwrite the +default bindings." + (setq ctbl:table-mode-map + (ctbl:define-keymap + '( + ("k" . ctbl:navi-move-up) + ("j" . ctbl:navi-move-down) + ("h" . ctbl:navi-move-left) + ("l" . ctbl:navi-move-right) + + ("gc" . ctbl:navi-jump-to-column) + + ("$" . ctbl:navi-move-right-most) + ("0" . ctbl:navi-move-left-most) + + ("gr" . ctbl:action-update-buffer) + + ("g?" . ctbl:describe-bindings) + + ([mouse-1] . ctbl:navi-on-click) + ("C-m" . ctbl:navi-on-click) + ("RET" . ctbl:navi-on-click)))) + + (setq edbi:dbview-keymap + (epc:add-keymap + ctbl:table-mode-map + '(("gr" . edbi:dbview-update-command) + ("SPC" . edbi:dbview-show-tabledef-command) + ("c" . edbi:dbview-query-editor-command) + ("C" . edbi:dbview-query-editor-new-command) + ("C-m" . edbi:dbview-show-table-data-command) + ("q" . edbi:dbview-quit-command))))) + +;;;###autoload +(defun evil-collection-edbi-setup () + "Set up `evil' bindings for EDBI." + (evil-collection-edbi-dbview-setup) + (evil-collection-define-key 'normal 'edbi:dbview-query-result-keymap + "0" 'ctbl:navi-move-left-most + "$" 'ctbl:navi-move-right-most + + "h" 'ctbl:navi-move-left + "j" 'ctbl:navi-move-down + "k" 'ctbl:navi-move-up + "l" 'ctbl:navi-move-right + + "gc" 'ctbl:navi-jump-to-column + + "g?" 'ctbl:describe-bindings + + ;; motion + "gr" 'ctbl:action-update-buffer + + ;; quit + "q" 'edbi:dbview-query-result-quit-command + "ZQ" 'evil-quit + "ZZ" 'quit-window) + + (evil-collection-define-key 'normal 'edbi:sql-mode-map + "q" 'edbi:dbview-query-editor-quit-command + (kbd "C-n") 'edbi:dbview-query-editor-history-forward-command + (kbd "C-p") 'edbi:dbview-query-editor-history-back-command)) + +(provide 'evil-collection-edbi) +;;; evil-collection-edbi.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/edebug/README.org b/.config/emacs/lisp/evil-collection/modes/edebug/README.org new file mode 100644 index 0000000..aba73a1 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/edebug/README.org @@ -0,0 +1,53 @@ +* edebug + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/elisp/Edebug.html][Edebug]]. + +** Key bindings + + Bindings live in =edebug-mode-map=. Edebug overlays the source while a form + is instrumented; evil-collection sets the initial state to normal and frees + =g=, =G=, and =h= as prefixes. + + | Command | Original | Evil | + |-------------------------------------+-----------+-----------------| + | =edebug-step-mode= | =SPC= | =s=, =C-c C-s= | + | =edebug-next-mode= | =n= | =n=, =C-c C-n= | + | =edebug-go-mode= | =g= | =go=, =C-c C-c= | + | =edebug-Go-nonstop-mode= | =G= | =gO= | + | =edebug-trace-mode= | =t= | =t= | + | =edebug-Trace-fast-mode= | =T= | =T= | + | =edebug-continue-mode= | =c= | =c= | + | =edebug-Continue-fast-mode= | =C= | =C= | + | =edebug-forward-sexp= | =f= | =f= | + | =edebug-step-in= | =i= | =i= | + | =edebug-step-out= | =o= | =o= | + | =edebug-goto-here= | =h= | =H= | + | =edebug-instrument-callee= | =I= | =I= | + | =edebug-stop= | =S= | =S= | + | =top-level= | =q= | =q= | + | =edebug-top-level-nonstop= | =Q= | =Q= | + | =abort-recursive-edit= | =a= | =a= | + | =edebug-set-breakpoint= | =b= | =b=, =C-x SPC= | + | =edebug-unset-breakpoint= | =u= | =u=, =C-c C-d= | + | =edebug-next-breakpoint= | =B= | =B= | + | =edebug-set-conditional-breakpoint= | =x= | =x= | + | =edebug-set-global-break-condition= | =X= | =X= | + | =edebug-previous-result= | =r= | =r= | + | =edebug-eval-expression= | =e= | =e= | + | =edebug-eval-last-sexp= | =C-x C-e= | =C-x C-e= | + | =edebug-visit-eval-list= | =E= | =EL= | + | =edebug-where= | =w= | =WW=, =C-c C-l= | + | =edebug-bounce-point= | =p= | =p= | + | =edebug-view-outside= | =v=, =P= | =P= | + | =edebug-toggle-save-windows= | =W= | =WS= | + | =edebug-help= | =?= | =g?= | + | =edebug-backtrace= | =d= | =d= | + | =edebug-temp-display-freq-count= | === | === | + | =negative-argument= | =-= | =-= | + +** Integrations + + - edebug-x: in =edebug-x-instrumented-function-list-mode-map=, =RET= jumps to + the function, =E= evaluates, =Q= clears data, =q= quits. In + =edebug-x-breakpoint-list-mode-map=, =RET= visits the breakpoint, =x= kills + it, =Q= clears data, =q= quits. diff --git a/.config/emacs/lisp/evil-collection/modes/edebug/evil-collection-edebug.el b/.config/emacs/lisp/evil-collection/modes/edebug/evil-collection-edebug.el new file mode 100644 index 0000000..2c3d1d7 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/edebug/evil-collection-edebug.el @@ -0,0 +1,126 @@ +;;; evil-collection-edebug.el --- Evil bindings for Edebug -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, edebug, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for `edebug-mode'. + +;;; Code: +(require 'edebug) +(require 'evil-collection) + +(defconst evil-collection-edebug-maps + '(edebug-mode-map + edebug-x-instrumented-function-list-mode-map + edebug-x-breakpoint-list-mode-map)) + +;;;###autoload +(defun evil-collection-edebug-setup () + "Set up `evil' bindings for `edebug'." + (evil-set-initial-state 'edebug-mode 'normal) + + (add-hook 'edebug-mode-hook #'evil-normalize-keymaps) + + (evil-collection-define-key nil 'edebug-mode-map + "g" nil + "G" nil + "h" nil) + + ;; FIXME: Seems like other minor modes will readily clash with `edebug'. + ;; `lispyville' and `edebug' 's' key? + (evil-collection-define-key 'normal 'edebug-mode-map + ;; control + "s" 'edebug-step-mode + "n" 'edebug-next-mode + "go" 'edebug-go-mode + "gO" 'edebug-Go-nonstop-mode + "t" 'edebug-trace-mode + "T" 'edebug-Trace-fast-mode + "c" 'edebug-continue-mode + "C" 'edebug-Continue-fast-mode + + "f" 'edebug-forward-sexp + "H" 'edebug-goto-here + "I" 'edebug-instrument-callee + "i" 'edebug-step-in + "o" 'edebug-step-out + + ;; quit + "q" 'top-level + "Q" 'edebug-top-level-nonstop + "a" 'abort-recursive-edit + "S" 'edebug-stop + + ;; breakpoints + "b" 'edebug-set-breakpoint + "u" 'edebug-unset-breakpoint + "B" 'edebug-next-breakpoint + "x" 'edebug-set-conditional-breakpoint + "X" 'edebug-set-global-break-condition + + ;; evaluation + "r" 'edebug-previous-result + "e" 'edebug-eval-expression + (kbd "C-x C-e") 'edebug-eval-last-sexp + "EL" 'edebug-visit-eval-list + + ;; views + "WW" 'edebug-where + "p" 'edebug-bounce-point + "P" 'edebug-view-outside ;; same as v + "WS" 'edebug-toggle-save-windows + + ;; misc + "g?" 'edebug-help + "d" 'edebug-backtrace + + "-" 'negative-argument + + ;; statistics + "=" 'edebug-temp-display-freq-count + + ;; GUD bindings + (kbd "C-c C-s") 'edebug-step-mode + (kbd "C-c C-n") 'edebug-next-mode + (kbd "C-c C-c") 'edebug-go-mode + + (kbd "C-x SPC") 'edebug-set-breakpoint + (kbd "C-c C-d") 'edebug-unset-breakpoint + (kbd "C-c C-t") (lambda () (interactive) (edebug-set-breakpoint t)) + (kbd "C-c C-l") 'edebug-where) + + (with-eval-after-load 'edebug-x + (evil-collection-define-key 'normal 'edebug-x-instrumented-function-list-mode-map + "E" 'edebug-x-evaluate-function + "Q" 'edebug-x-clear-data + (kbd "RET") 'edebug-x-find-function + "q" 'quit-window) + (evil-collection-define-key 'normal 'edebug-x-breakpoint-list-mode-map + (kbd "RET") 'edebug-x-visit-breakpoint + "x" 'edebug-x-kill-breakpoint + "Q" 'edebug-x-clear-data + "q" 'quit-window))) + +(provide 'evil-collection-edebug) +;;; evil-collection-edebug.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/ediff/README.org b/.config/emacs/lisp/evil-collection/modes/ediff/README.org new file mode 100644 index 0000000..6aa4b6f --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/ediff/README.org @@ -0,0 +1,21 @@ +* ediff + + The table below shows the binding changes that are made to ediff-mode. + +| Command | Original Binding | evil-collection-ediff | +|-----------------------------+------------------+-----------------------| +| =ediff-next-difference= | =n, SPC= | =j, n, SPC= | +| =ediff-previous-difference= | =p, DEL= | =k, N, p, DEL= | +| =ediff-jump-to-difference= | =j= | =d= | +| jump to first difference | =1j= | =gg, 1d= | +| jump to last difference | N/A | =G= | +| copy region A to region B | =a= | =a, l= | +| copy region B to region A | =b= | =b, h= | +| scroll down 1 line | =C-u 1 v= | =C-e= | +| scroll up 1 line | =C-u 1 V= | =C-y= | +| scroll down half page | =v, C-v= | =C-d, v, C-v= | +| scroll up half page | =V, M-v= | =C-u, V, M-v= | +| scroll left | =>= | =zh= | +| scroll right | =<= | =zl= | +| toggle highlighting | =h= | =H= | +| =ediff-suspend= | =z= | =C-z= | diff --git a/.config/emacs/lisp/evil-collection/modes/ediff/evil-collection-ediff.el b/.config/emacs/lisp/evil-collection/modes/ediff/evil-collection-ediff.el new file mode 100644 index 0000000..549d692 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/ediff/evil-collection-ediff.el @@ -0,0 +1,205 @@ +;;; evil-collection-ediff.el --- Evil bindings for ediff -*- lexical-binding: t -*- +;; Copyright (C) 2015 Justin Burkett + +;; Author: Justin Burkett +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Homepage: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3") (evil "1.2.3")) +;; Keywords: evil, ediff, tools + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: + +;; Make ediff a little evil. This configures ediff to be friendlier to users +;; of vim-like keybindings. Consult the help buffer (=?=) for more info. + +;; Here's a table describing the bindings + +;; | Command | Original Binding | Evil-ediff | +;; |-----------------------------+------------------+-------------| +;; | ediff-next-difference | n,SPC | C-j,n,SPC | +;; | ediff-previous-difference | p,DEL | C-k,N,p,DEL | +;; | ediff-jump-to-difference | j | d | +;; | jump to first difference | 1j | gg (or 1d) | +;; | jump to last difference | N/A | G | +;; | copy region A to region B | a | a,l | +;; | copy region B to region A | b | b,h | +;; | scroll down 1 line | C-u 1 v | j | +;; | scroll up 1 line | C-u 1 V | k | +;; | scroll down half page | v,C-v | C-d,v,C-v | +;; | scroll up half page | V,M-v | C-u,V,M-v | +;; | scroll left | > | zh | +;; | scroll right | < | zl | +;; | toggle highlighting | h | H | +;; | ediff-suspend | z | C-z | + +;; Not implemented yet +;; | restore old diff | ra,rb,rc | u | + +;;; Code: + +(require 'evil-collection) +(require 'ediff nil t) + +(defconst evil-collection-ediff-maps '(ediff-mode-map)) + +(defvar evil-collection-ediff-initial-state-backup (evil-initial-state 'ediff-mode)) +(defvar evil-collection-ediff-long-help-message-compare2-backup ediff-long-help-message-compare2) +(defvar evil-collection-ediff-long-help-message-compare3-backup ediff-long-help-message-compare3) +(defvar evil-collection-ediff-long-help-message-narrow2-backup ediff-long-help-message-narrow2) +(defvar evil-collection-ediff-long-help-message-word-backup ediff-long-help-message-word-mode) +(defvar evil-collection-ediff-long-help-message-merge-backup ediff-long-help-message-merge) +(defvar evil-collection-ediff-long-help-message-head-backup ediff-long-help-message-head) +(defvar evil-collection-ediff-long-help-message-tail-backup ediff-long-help-message-tail) + +(defvar evil-collection-ediff-help-changed nil) + +(defun evil-collection-ediff-adjust-help () + "Adjust long help messages to reflect evil-ediff bindings." + (unless evil-collection-ediff-help-changed + (dolist (msg '(ediff-long-help-message-compare2 + ediff-long-help-message-compare3 + ediff-long-help-message-narrow2 + ediff-long-help-message-word-mode + ediff-long-help-message-merge + ediff-long-help-message-head + ediff-long-help-message-tail)) + (dolist (chng '( ;;("^" . " ") + ("p,DEL -previous diff " . "k,N,p -previous diff ") + ("n,SPC -next diff " . " j,n -next diff ") + (" j -jump to diff " . " d -jump to diff ") + (" h -highlighting " . " H -highlighting ") + (" v/V -scroll up/dn " . "C-u/d -scroll up/dn ") + (" -scroll lt/rt " . "zh/zl -scroll lt/rt ") + (" z/q -suspend/quit" . "C-z/q -suspend/quit"))) + (setf (symbol-value msg) + (replace-regexp-in-string (car chng) (cdr chng) (symbol-value msg)))))) + (setq evil-collection-ediff-help-changed t)) + +(defun evil-collection-ediff-scroll-left (&optional arg) + "Scroll left." + (interactive "P") + (let ((last-command-event ?>)) + (ediff-scroll-horizontally arg))) + +(defun evil-collection-ediff-scroll-right (&optional arg) + "Scroll right." + (interactive "P") + (let ((last-command-event ?<)) + (ediff-scroll-horizontally arg))) + +(defun evil-collection-ediff-scroll-up (&optional arg) + "Scroll up by half of a page." + (interactive "P") + (let ((last-command-event ?V)) + (ediff-scroll-vertically arg))) + +(defun evil-collection-ediff-scroll-down (&optional arg) + "Scroll down by half of a page." + (interactive "P") + (let ((last-command-event ?v)) + (ediff-scroll-vertically arg))) + +(defun evil-collection-ediff-scroll-down-1 () + "Scroll down by a line." + (interactive) + (let ((last-command-event ?v)) + (ediff-scroll-vertically 1))) + +(defun evil-collection-ediff-scroll-up-1 () + "Scroll down by a line." + (interactive) + (let ((last-command-event ?V)) + (ediff-scroll-vertically 1))) + +(defun evil-collection-ediff-first-difference () + "Jump to first difference." + (interactive) + (ediff-jump-to-difference 1)) + +(defun evil-collection-ediff-last-difference () + "Jump to last difference." + (interactive) + (ediff-jump-to-difference ediff-number-of-differences)) + +;; (defun evil-collection-ediff-restore-diff () +;; "Restore the copy of current region." +;; (interactive) +;; (ediff-restore-diff nil ?a) +;; (ediff-restore-diff nil ?b)) + +(defvar evil-collection-ediff-bindings + '(("d" . ediff-jump-to-difference) + ("H" . ediff-toggle-hilit) + ("\C-e" . evil-collection-ediff-scroll-down-1) + ("\C-y" . evil-collection-ediff-scroll-up-1) + ("j" . ediff-next-difference) + ("k" . ediff-previous-difference) + ("N" . ediff-previous-difference) + ("gg" . evil-collection-ediff-first-difference) + ("G" . evil-collection-ediff-last-difference) + ("\C-d" . evil-collection-ediff-scroll-down) + ("\C-u" . evil-collection-ediff-scroll-up) + ("\C-z" . ediff-suspend) + ("z" . nil) + ("zl" . evil-collection-ediff-scroll-right) + ("zh" . evil-collection-ediff-scroll-left) + ;; Not working yet + ;; ("u" . evil-collection-ediff-restore-diff) + ) + "A list of bindings changed/added in evil-ediff.") + +(defun evil-collection-ediff-startup-hook () + "Place evil-ediff bindings in `ediff-mode-map'." + (evil-make-overriding-map ediff-mode-map 'normal) + (dolist (entry evil-collection-ediff-bindings) + (define-key ediff-mode-map (car entry) (cdr entry))) + (unless (or ediff-3way-comparison-job + (eq ediff-split-window-function 'split-window-vertically)) + (define-key ediff-mode-map "l" 'ediff-copy-A-to-B) + (define-key ediff-mode-map "h" 'ediff-copy-B-to-A)) + (evil-normalize-keymaps) + nil) + +;;;###autoload +(defun evil-collection-ediff-setup () + "Initialize evil-ediff." + (interactive) + (evil-set-initial-state 'ediff-mode 'normal) + (add-hook 'ediff-keymap-setup-hook 'evil-collection-ediff-startup-hook) + (evil-collection-ediff-adjust-help)) + +(defun evil-collection-ediff-revert () + "Revert changes made by evil-ediff." + (interactive) + (evil-set-initial-state 'ediff-mode evil-collection-ediff-initial-state-backup) + (unless evil-collection-ediff-help-changed + (dolist (msg + '((ediff-long-help-message-compare2 . ediff-long-help-message-compare2-backup) + (ediff-long-help-message-compare3 . ediff-long-help-message-compare3-backup) + (ediff-long-help-message-narrow2 . ediff-long-help-message-narrow2-backup) + (ediff-long-help-message-word-mode . ediff-long-help-message-word-mode-backup) + (ediff-long-help-message-merge . ediff-long-help-message-merge-backup) + (ediff-long-help-message-head . ediff-long-help-message-head-backup) + (ediff-long-help-message-tail . ediff-long-help-message-tail-backup))) + (setf (symbol-value (car msg)) (symbol-value (cdr msg))))) + (setq evil-collection-ediff-help-changed nil) + (remove-hook 'ediff-keymap-setup-hook 'evil-collection-ediff-startup-hook)) + +(provide 'evil-collection-ediff) +;;; evil-collection-ediff.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/eglot/README.org b/.config/emacs/lisp/evil-collection/modes/eglot/README.org new file mode 100644 index 0000000..b93d3c1 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/eglot/README.org @@ -0,0 +1,19 @@ +* eglot + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/eglot/index.html][eglot]], the built-in LSP client. + +** Key bindings (normal state) + + | Command | Original | Evil | + |--------------------------------------+-----------+-------| + | =xref-find-definitions= | =M-.= | =gd= | + | =xref-find-definitions-other-window= | =C-x 4 .= | =gD= | + | =xref-find-definitions-other-frame= | =C-x 5 .= | =g5= | + | =xref-pop-marker-stack= | =M-,= | =C-t= | + | =eldoc-doc-buffer= | n/a | =K= | + | =xref-find-references= | =M-?= | =gr= | + + =gr= is only bound when =evil-collection-want-find-usages-bindings= is non-nil. + + =eglot-managed-mode-hook= adds =evil-normalize-keymaps= so the bindings + activate as soon as eglot manages a buffer. diff --git a/.config/emacs/lisp/evil-collection/modes/eglot/evil-collection-eglot.el b/.config/emacs/lisp/evil-collection/modes/eglot/evil-collection-eglot.el new file mode 100644 index 0000000..6633107 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/eglot/evil-collection-eglot.el @@ -0,0 +1,50 @@ +;;; evil-collection-eglot.el --- Bindings for `eglot' -*- lexical-binding: t -*- + +;; Copyright (C) 2018 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, eglot, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for `eglot'. + +;;; Code: +(require 'eglot nil t) +(require 'evil-collection) + +(defconst evil-collection-eglot-maps '(eglot-mode-map)) + +;;;###autoload +(defun evil-collection-eglot-setup () + "Set up `evil' bindings for `eglot'." + (add-hook 'eglot-managed-mode-hook 'evil-normalize-keymaps) + (evil-collection-define-key 'normal 'eglot-mode-map + "gd" 'xref-find-definitions + "gD" 'xref-find-definitions-other-window + "g5" 'xref-find-definitions-other-frame + (kbd "C-t") 'xref-pop-marker-stack + "K" 'eldoc-doc-buffer) + + (when evil-collection-want-find-usages-bindings + (evil-collection-define-key 'normal 'eglot-mode-map + "gr" 'xref-find-references))) + +(provide 'evil-collection-eglot) +;;; evil-collection-eglot.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/eldoc/README.org b/.config/emacs/lisp/evil-collection/modes/eldoc/README.org new file mode 100644 index 0000000..1f1f776 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/eldoc/README.org @@ -0,0 +1,19 @@ +* eldoc + + Evil bindings for the buffer popped by =eldoc-doc-buffer=. + +** Key bindings + + Applied via =evil-collection-eldoc-doc-buffer-mode=, a minor mode attached + to the =*eldoc*= buffer. + + | Command | Original | Evil | + |---------------+----------+-----------| + | =quit-window= | =q= | =q=, =ZZ= | + | =evil-quit= | n/a | =ZQ= | + +** Notes + + On Emacs < 29, the minor mode is attached via advice on =eldoc-doc-buffer=. + On Emacs 29+, eldoc buffers derive from =special-mode=, which + evil-collection covers separately. diff --git a/.config/emacs/lisp/evil-collection/modes/eldoc/evil-collection-eldoc.el b/.config/emacs/lisp/evil-collection/modes/eldoc/evil-collection-eldoc.el new file mode 100644 index 0000000..698ab10 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/eldoc/evil-collection-eldoc.el @@ -0,0 +1,67 @@ +;;; evil-collection-eldoc.el --- Bindings for `eldoc' -*- lexical-binding: t -*- + +;; Copyright (C) 2022 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.2 +;; Package-Requires: ((emacs "27.1")) +;; Keywords: evil, emacs, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for `eldoc'. + +;;; Code: +(require 'evil-collection) +(require 'eldoc nil t) + +(defconst evil-collection-eldoc-maps + '(evil-collection-eldoc-doc-buffer-mode-map)) + +(defvar eldoc--doc-buffer) ;; Internal to `eldoc'. + +(defvar evil-collection-eldoc-doc-buffer-mode-map (make-sparse-keymap)) + +(define-minor-mode evil-collection-eldoc-doc-buffer-mode + "A minor mode to attach to `eldoc-doc-buffer' buffers." + :group 'evil-collection-eldoc-mode + :keymap evil-collection-eldoc-doc-buffer-mode-map + :lighter nil) + +(defun evil-collection-eldoc-setup-doc-buffer-mode (&rest _) + "Set up `evil-collection-eldoc-doc-buffer-mode'." + (with-current-buffer eldoc--doc-buffer + (evil-collection-eldoc-doc-buffer-mode +1) + (evil-normalize-keymaps))) + +;;;###autoload +(defun evil-collection-eldoc-setup () + "Set up `evil' bindings for `eldoc'." + (evil-collection-define-key 'normal 'evil-collection-eldoc-doc-buffer-mode-map + "q" #'quit-window + "ZZ" #'quit-window + "ZQ" #'evil-quit) + + ;; 'special-mode' is used in eldoc since + ;; https://github.com/emacs-mirror/emacs/commit/97abe8511a829861f6efb865209ac2dd0e7ae129 + (when (< emacs-major-version 29) + ;; Enable a separate minor mode so that we can bind keys to it. + (advice-add 'eldoc-doc-buffer + :after 'evil-collection-eldoc-setup-doc-buffer-mode))) + +(provide 'evil-collection-eldoc) +;;; evil-collection-eldoc.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/elfeed/README.org b/.config/emacs/lisp/evil-collection/modes/elfeed/README.org new file mode 100644 index 0000000..b1f2dcd --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/elfeed/README.org @@ -0,0 +1,64 @@ +* elfeed + + Evil bindings for [[https://github.com/skeeto/elfeed][elfeed]]. + + Standard motion / quit bindings (=gg=, =G=, =j=, =k=, =q=, =ZZ=, =ZQ=) come + from =evil-collection-set-readonly-bindings= and are not repeated below. + +** elfeed-search-mode-map + + | Command | Original | Evil | + |----------------------------------+----------+---------------------| + | =elfeed-search-show-entry= | =RET= | =RET= | + | =elfeed-search-browse-url= | =b= | =S-RET=, =go= | + | =elfeed-search-yank= | =y= | =y= | + | =elfeed-search-live-filter= | =s= | =s= | + | =elfeed-search-set-filter= | =S= | =S= | + | =elfeed-search-clear-filter= | =c= | =c= | + | =elfeed-search-fetch= | =G= | =gR= | + | =revert-buffer= | =g= | =gr= | + | =elfeed-search-tag-all= | =+= | =+= | + | =elfeed-search-untag-all= | =-= | =-= | + | =elfeed-search-tag-all-unread= | =u= | =U= | + | =elfeed-search-untag-all-unread= | =r= | =u= | + | =scroll-up-command= | n/a | =SPC= | + | =scroll-down-command= | n/a | =S-SPC= | + | =elfeed-search-quit-window= | =q= | =q=, =ZQ=, =ZZ= ([[#fallbacks][†]]) | + +** elfeed-show-mode-map + + | Command | Original | Evil | + |-----------------------------------------+----------+-------------------| + | =elfeed-show-visit= | =b= | =S-RET=, =go= | + | =elfeed-show-yank= | =y= | =yu= | + | =elfeed-show-next= | =n= | =]]=, =gj=, =C-j= | + | =elfeed-show-prev= | =p= | =[[=, =gk=, =C-k= | + | =elfeed-show-refresh= | n/a | =gr= | + | =elfeed-show-new-live-search= | =s= | =s= | + | =elfeed-show-tag= | =+= | =+= | + | =elfeed-show-untag= | =-= | =-= | + | =elfeed-show-play-enclosure= | =P= | =P= | + | =elfeed-show-add-enclosure-to-playlist= | =A= | =A= | + | =elfeed-show-save-enclosure= | =d= | =d= | + | =elfeed-show-next-link= | =TAB= | =TAB= | + | =scroll-up-command= | =SPC= | =SPC= | + | =scroll-down-command= | =S-SPC= | =S-SPC= | + | =elfeed-kill-buffer= | =q= | =q=, =ZQ=, =ZZ= | + +** elfeed-tree-mode-map + + | Command | Original | Evil | + |----------------------+----------+-------| + | =elfeed-tree-search= | =RET= | =RET= | + +** Fallbacks + :PROPERTIES: + :CUSTOM_ID: fallbacks + :END: + + Two version-compat fallbacks fire only when running older elfeed: + + - Before elfeed commit =518e5bd3= (no =revert-buffer-function=), =gr= calls + =elfeed-search-update--force= instead of =revert-buffer=. + - Before elfeed commit =2ef14c92= (no =quit-window-hook= save), =q=, =ZQ=, + =ZZ= use =elfeed-search-quit-window= to persist the db on exit. diff --git a/.config/emacs/lisp/evil-collection/modes/elfeed/evil-collection-elfeed.el b/.config/emacs/lisp/evil-collection/modes/elfeed/evil-collection-elfeed.el new file mode 100644 index 0000000..c691575 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/elfeed/evil-collection-elfeed.el @@ -0,0 +1,139 @@ +;;; evil-collection-elfeed.el --- Evil bindings for elfeed -*- lexical-binding: t -*- + +;; Copyright (C) 2017 Pierre Neidhardt + +;; Author: Pierre Neidhardt +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, elfeed, tools + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: +;; Evil bindings for elfeed. + +;;; Code: +(require 'elfeed nil t) +(require 'evil-collection) + +(defvar elfeed-search-mode-map) +(defvar elfeed-show-mode-map) +(defvar elfeed-tree-mode-map) + +(defconst evil-collection-elfeed-maps '(elfeed-search-mode-map + elfeed-show-mode-map + elfeed-tree-mode-map)) + +;;;###autoload +(defun evil-collection-elfeed-setup () + "Set up `evil' bindings for `elfeed'." + + (evil-collection-set-readonly-bindings 'elfeed-search-mode-map) + (evil-set-initial-state 'elfeed-search-mode 'normal) + (evil-collection-define-key 'normal 'elfeed-search-mode-map + ;; open + (kbd "RET") 'elfeed-search-show-entry + (kbd "S-") 'elfeed-search-browse-url + "go" 'elfeed-search-browse-url + + "y" 'elfeed-search-yank + + (kbd "SPC") 'scroll-up-command + (kbd "S-SPC") 'scroll-down-command + + ;; filter + "s" 'elfeed-search-live-filter + "S" 'elfeed-search-set-filter + "c" 'elfeed-search-clear-filter + + ;; refresh + "gR" 'elfeed-search-fetch ; TODO: Which update function is more useful? + "gr" 'revert-buffer + + ;; quit -- `q'/`ZZ' default to `quit-window' via + ;; `evil-collection-set-readonly-bindings'. + "ZQ" 'quit-window) + + ;; Refresh fallback for elfeed before commit 518e5bd3, where + ;; `revert-buffer-function' is not wired up. + (unless (fboundp 'elfeed-search--update-force) + (evil-collection-define-key 'normal 'elfeed-search-mode-map + "gr" 'elfeed-search-update--force)) + + ;; Quit fallback for elfeed before commit 2ef14c92, where + ;; `quit-window-hook' does not run `elfeed-db-save'. + (when (and (fboundp 'elfeed-search-quit-window) + (not (eq (indirect-function 'elfeed-search-quit-window) + (symbol-function 'quit-window)))) + (evil-collection-define-key 'normal 'elfeed-search-mode-map + "q" 'elfeed-search-quit-window + "ZQ" 'elfeed-search-quit-window + "ZZ" 'elfeed-search-quit-window)) + + (evil-collection-define-key '(normal visual) 'elfeed-search-mode-map + "+" 'elfeed-search-tag-all + "-" 'elfeed-search-untag-all + "U" 'elfeed-search-tag-all-unread + "u" 'elfeed-search-untag-all-unread) + + (evil-collection-set-readonly-bindings 'elfeed-show-mode-map) + (evil-set-initial-state 'elfeed-show-mode 'normal) + (evil-collection-define-key 'normal 'elfeed-show-mode-map + (kbd "S-") 'elfeed-show-visit + "go" 'elfeed-show-visit + + (kbd "SPC") 'scroll-up-command + (kbd "S-SPC") 'scroll-down-command + (kbd "") 'elfeed-show-next-link + + ;; filter + "s" 'elfeed-show-new-live-search + + "+" 'elfeed-show-tag + "-" 'elfeed-show-untag + + "A" 'elfeed-show-add-enclosure-to-playlist + "P" 'elfeed-show-play-enclosure + "d" 'elfeed-show-save-enclosure + + "]]" 'elfeed-show-next + "[[" 'elfeed-show-prev + "gj" 'elfeed-show-next + "gk" 'elfeed-show-prev + (kbd "C-j") 'elfeed-show-next + (kbd "C-k") 'elfeed-show-prev + + ;; refresh + "gr" 'elfeed-show-refresh + + ;; quit + "q" 'elfeed-kill-buffer + "ZQ" 'elfeed-kill-buffer + "ZZ" 'elfeed-kill-buffer) + + ;; yu, like `eww' + (evil-collection-define-operator-key 'yank 'elfeed-show-mode-map + "u" 'elfeed-show-yank) + + (evil-collection-set-readonly-bindings 'elfeed-tree-mode-map) + (evil-set-initial-state 'elfeed-tree-mode 'normal) + (evil-collection-define-key 'normal 'elfeed-tree-mode-map + ;; open + (kbd "RET") 'elfeed-tree-search)) + +(provide 'evil-collection-elfeed) +;;; evil-collection-elfeed.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/elisp-mode/README.org b/.config/emacs/lisp/evil-collection/modes/elisp-mode/README.org new file mode 100644 index 0000000..1fbd2a9 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/elisp-mode/README.org @@ -0,0 +1,23 @@ +* elisp-mode + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/elisp/index.html][Emacs Lisp]] editing (=emacs-lisp-mode= and + =emacs-lisp-compilation-mode=). + +** Key bindings + + | Command | Original | Evil | + |-------------------------------------------------------+----------+------| + | =evil-collection-elisp-mode-ielm-repl= (=elisp-mode=) | n/a | =gz= | + | =emacs-lisp-compilation-recompile= | n/a | =gr= | + | =xref-find-references= (when find-usages enabled) | =M-?= | =gr= | + + In the =*Help*= printed-value overlay (=eval-print-last-sexp= output), =RET= + in normal/motion state calls =elisp-last-sexp-toggle-display=; in insert + state =RET= falls through to the global binding. + +** Notes + + - =elisp--eval-last-sexp= is advised so its output ends at point in + normal/motion state when =evil-move-beyond-eol= is nil. + - =last-sexp-setup-props= is overridden to install an evil-aware =C-m= + handler on the printed-value text properties. diff --git a/.config/emacs/lisp/evil-collection/modes/elisp-mode/evil-collection-elisp-mode.el b/.config/emacs/lisp/evil-collection/modes/elisp-mode/evil-collection-elisp-mode.el new file mode 100644 index 0000000..b92f262 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/elisp-mode/evil-collection-elisp-mode.el @@ -0,0 +1,99 @@ +;;; evil-collection-elisp-mode.el --- Bindings for `elisp-mode' -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, elisp, lisp + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for `elisp-mode'. + +;;; Code: +(require 'elisp-mode) +(require 'evil-collection) + +(defconst evil-collection-elisp-mode-maps '(emacs-lisp-mode-map + emacs-lisp-compilation-mode-map)) + +(defun evil-collection-elisp-mode-last-sexp-setup-props (beg end value alt1 alt2) + "Set up text properties for the output of `elisp--eval-last-sexp'. +BEG and END are the start and end of the output in current-buffer. +VALUE is the Lisp value printed, ALT1 and ALT2 are strings for the +alternative printed representations that can be displayed." + (let ((map (make-sparse-keymap))) + (define-key map (kbd "C-m") 'evil-collection-elisp-mode-return-or-last-sexp-toggle-display) + (define-key map [down-mouse-2] 'mouse-set-point) + (define-key map [mouse-2] 'elisp-last-sexp-toggle-display) + (add-text-properties + beg end + `(printed-value (,value ,alt1 ,alt2) + mouse-face highlight + keymap ,map + help-echo "RET, mouse-2: toggle abbreviated display" + rear-nonsticky (mouse-face keymap help-echo + printed-value))))) + +(defun evil-collection-elisp-mode-return-or-last-sexp-toggle-display () + "Trigger RET or call `elisp-last-sexp-toggle-display'." + (interactive) + (if (eq evil-state 'insert) + (call-interactively + (lookup-key (current-global-map) (kbd "C-m"))) + (call-interactively 'elisp-last-sexp-toggle-display))) + +(defun evil-collection-elisp-mode-last-sexp (command &rest args) + "In normal-state or motion-state, last sexp ends at point." + (if (and (not evil-move-beyond-eol) + (or (evil-normal-state-p) (evil-motion-state-p))) + (save-excursion + (unless (or (eobp) (eolp)) (forward-char)) + (apply command args)) + (apply command args))) + +(defun evil-collection-elisp-mode-ielm-repl () + "Open the Emacs Lisp REPL (`ielm')." + (interactive) + (pop-to-buffer (get-buffer-create "*ielm*")) + (ielm)) + +;;;###autoload +(defun evil-collection-elisp-mode-setup () + "Set up `evil' bindings for `elisp-mode'." + (add-hook 'emacs-lisp-compilation-mode-hook 'evil-normalize-keymaps) + + (unless evil-move-beyond-eol + (advice-add 'eval-print-last-sexp :around 'evil-collection-elisp-mode-last-sexp)) + (advice-add 'last-sexp-setup-props + :override 'evil-collection-elisp-mode-last-sexp-setup-props) + + (evil-set-initial-state 'emacs-lisp-mode 'normal) + (evil-collection-define-key 'normal 'emacs-lisp-mode-map + "gz" 'evil-collection-elisp-mode-ielm-repl) + + (evil-collection-define-key 'normal 'emacs-lisp-compilation-mode-map + "gr" 'emacs-lisp-compilation-recompile) + + (when evil-collection-want-find-usages-bindings + (evil-collection-define-key 'normal 'emacs-lisp-mode-map + "gr" 'xref-find-references))) + +(provide 'evil-collection-elisp-mode) +;;; evil-collection-elisp-mode.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/elisp-refs/README.org b/.config/emacs/lisp/evil-collection/modes/elisp-refs/README.org new file mode 100644 index 0000000..fe6eb22 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/elisp-refs/README.org @@ -0,0 +1,12 @@ +* elisp-refs + + Evil bindings for [[https://github.com/Wilfred/elisp-refs][elisp-refs]]. + +** Key bindings + + | Command | Original | Evil | + |--------------------------+--------------+----------------------| + | =elisp-refs-next-match= | =n=, =TAB= | =TAB=, =C-j=, =gj= | + | =elisp-refs-prev-match= | =p=, =S-TAB= | =S-TAB=, =C-k=, =gk= | + | =elisp-refs-visit-match= | =RET= | =RET= | + | =kill-current-buffer= | n/a | =q= | diff --git a/.config/emacs/lisp/evil-collection/modes/elisp-refs/evil-collection-elisp-refs.el b/.config/emacs/lisp/evil-collection/modes/elisp-refs/evil-collection-elisp-refs.el new file mode 100644 index 0000000..c146c04 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/elisp-refs/evil-collection-elisp-refs.el @@ -0,0 +1,52 @@ +;;; evil-collection-elisp-refs.el --- Evil bindings for Elisp Refs -*- lexical-binding: t -*- + +;; Copyright (C) 2017, 2024 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, elisp-refs, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; This package provides a sane set of defaults for `elisp-refs' when using +;; `evil-mode'. + +;;; Code: +(require 'evil-collection) +(require 'elisp-refs nil t) + +(defconst evil-collection-elisp-refs-maps '(elisp-refs-mode-map)) + +;;;###autoload +(defun evil-collection-elisp-refs-setup () + "Set up `evil' bindings for `elisp-refs'." + (evil-collection-define-key 'normal 'elisp-refs-mode-map + (kbd "") 'elisp-refs-next-match + (kbd "") 'elisp-refs-prev-match + (kbd "C-j") 'elisp-refs-next-match + (kbd "C-k") 'elisp-refs-prev-match + "gj" 'elisp-refs-next-match + "gk" 'elisp-refs-prev-match + (kbd "RET") 'elisp-refs-visit-match + + ;; quit + "q" 'kill-current-buffer)) + +(provide 'evil-collection-elisp-refs) +;;; evil-collection-elisp-refs.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/elisp-slime-nav/README.org b/.config/emacs/lisp/evil-collection/modes/elisp-slime-nav/README.org new file mode 100644 index 0000000..97a2d86 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/elisp-slime-nav/README.org @@ -0,0 +1,11 @@ +* elisp-slime-nav + + Evil bindings for [[https://github.com/purcell/elisp-slime-nav][elisp-slime-nav]]. + +** Key bindings + + | Command | Original | Evil | + |-------------------------------------------------+-----------------------------+-------| + | =elisp-slime-nav-find-elisp-thing-at-point= | =M-.= | =gd= | + | =pop-tag-mark= | =M-,= | =C-t= | + | =elisp-slime-nav-describe-elisp-thing-at-point= | =C-c C-d C-d= / =C-c C-d d= | =K= | diff --git a/.config/emacs/lisp/evil-collection/modes/elisp-slime-nav/evil-collection-elisp-slime-nav.el b/.config/emacs/lisp/evil-collection/modes/elisp-slime-nav/evil-collection-elisp-slime-nav.el new file mode 100644 index 0000000..c3d9f04 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/elisp-slime-nav/evil-collection-elisp-slime-nav.el @@ -0,0 +1,44 @@ +;;; evil-collection-elisp-slime-nav.el --- Bindings for `elisp-slime-nav' -*- lexical-binding: t -*- + +;; Copyright (C) 2019 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, elisp-slime-nav, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for `elisp-slime-nav'. + +;;; Code: +(require 'evil-collection) +(require 'elisp-slime-nav nil t) + +(defconst evil-collection-elisp-slime-nav-maps '(elisp-slime-nav-mode-map)) + +;;;###autoload +(defun evil-collection-elisp-slime-nav-setup () + "Set up `evil' bindings for `elisp-slime-nav'." + (evil-collection-define-key 'normal 'elisp-slime-nav-mode-map + "gd" 'elisp-slime-nav-find-elisp-thing-at-point + (kbd "C-t") 'pop-tag-mark + "K" 'elisp-slime-nav-describe-elisp-thing-at-point)) + +(provide 'evil-collection-elisp-slime-nav) +;;; evil-collection-elisp-slime-nav.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/elpaca/evil-collection-elpaca.el b/.config/emacs/lisp/evil-collection/modes/elpaca/evil-collection-elpaca.el new file mode 100644 index 0000000..c501f91 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/elpaca/evil-collection-elpaca.el @@ -0,0 +1,118 @@ +;;; evil-collection-elpaca.el --- Bindings for `elpaca' -*- lexical-binding: t -*- + +;; Copyright (C) 2023 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.2 +;; Package-Requires: ((emacs "27.1")) +;; Keywords: evil, emacs, convenience, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for `elpaca'. + +;;; Code: +(require 'evil-collection) +(require 'elpaca nil t) +(require 'elpaca-ui nil t) + +(defvar elpaca-info-mode-map) +(defvar elpaca-ui-mode-map) +(defvar elpaca-ui-view-map) +(declare-function elpaca-ui-search "elpaca-ui") +(declare-function elpaca-ui-visit "elpaca-ui") + + +(defconst evil-collection-elpaca-maps '(elpaca-info-mode-map + elpaca-ui-mode-map)) + +(defcustom evil-collection-elpaca-want-movement t + "When non nil, prioritize movement keys like \"h\", \"l\", \"b\", etc." + :group 'evil-collection + :type 'boolean) + +(defcustom evil-collection-elpaca-want-v t + "When non nil, use v for visual mode. +When this is true, move the `elpaca-visit' to gv and gd." + :group 'evil-collection + :type 'boolean) + +(defun evil-collection-elpaca-ui-visit-build-dir () + "Visit package's build-dir." + (interactive) + (elpaca-ui-visit 'build)) + +(defmacro evil-collection-elpaca-defsearch (name query) + "Return search command with NAME for QUERY." + (declare (indent 1) (debug t)) + `(defun ,(intern (format "elpaca-ui-search-%s" name)) () + ,(format "Search for %S" query) + (interactive) + (elpaca-ui-search ,query))) + +(defun evil-collection-elpaca-setup () + "Set up `evil' bindings for elpaca." + (evil-collection-define-key 'normal 'elpaca-ui-view-map + (kbd "a") (evil-collection-elpaca-defsearch marked "#unique #marked") + (kbd "i") (evil-collection-elpaca-defsearch installed "#unique #installed") + (kbd "l") 'elpaca-log + (kbd "m") 'elpaca-manager + (kbd "o") (evil-collection-elpaca-defsearch orphaned "#unique #orphan") + (kbd "r") 'elpaca-ui-search-refresh + (kbd "t") (evil-collection-elpaca-defsearch tried "#unique #installed !#declared") + (kbd "b") 'evil-collection-elpaca-ui-visit-build-dir) + + (evil-collection-define-key 'normal 'elpaca-info-mode-map + (kbd "TAB") 'forward-button + (kbd "") 'forward-button + (kbd "S-TAB") 'backward-button + (kbd "") 'backward-button + (kbd "i") 'elpaca-info + (kbd "s") 'elpaca-info) + + (evil-collection-define-key 'normal 'elpaca-ui-mode-map + (kbd "RET") 'elpaca-ui-info + (kbd "!") 'elpaca-ui-send-input + (kbd "+") 'elpaca-ui-show-hidden-rows + (kbd "c") 'elpaca-ui-copy + (kbd "d") 'elpaca-ui-mark-delete + (kbd "g") elpaca-ui-view-map + (kbd "i") 'elpaca-ui-mark-try + (kbd "m") 'elpaca-ui-mark-merge + (kbd "p") 'elpaca-ui-mark-pull + (kbd "r") 'elpaca-ui-mark-rebuild + (kbd "s") 'elpaca-ui-search + (kbd "u") 'elpaca-ui-unmark + (kbd "x") 'elpaca-ui-execute-marks) + + (if evil-collection-elpaca-want-v + (evil-collection-define-key 'normal 'elpaca-ui-view-map + (kbd "v") 'elpaca-ui-visit) + (evil-collection-define-key 'normal 'elpaca-ui-mode-map + (kbd "v") 'elpaca-ui-visit)) + + (if evil-collection-elpaca-want-movement + (evil-collection-define-key 'normal 'elpaca-ui-mode-map + (kbd "B") 'elpaca-ui-browse-package ;; b -> B + (kbd "F") 'elpaca-ui-mark-fetch ;; f -> F + ) + (evil-collection-define-key 'normal 'elpaca-ui-mode-map + (kbd "b") 'elpaca-ui-browse-package + (kbd "f") 'elpaca-ui-mark-fetch))) + +(provide 'evil-collection-elpaca) +;;; evil-collection-elpaca.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/embark/README.org b/.config/emacs/lisp/evil-collection/modes/embark/README.org new file mode 100644 index 0000000..3a76f32 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/embark/README.org @@ -0,0 +1,19 @@ +* embark + + Evil bindings for [[https://github.com/oantolin/embark][embark]]. Only + =embark-collect-mode-map= is touched -- the embark action keymaps + (=embark-general-map=, =embark-file-map=, ...) are left alone so embark's own + prefix UI keeps working. + +** embark-collect-mode-map + + Initial state is forced to normal. + + | Command | Original | Evil | + |-------------------------------------------+----------+-------| + | =embark-act= | =a= | =a= | + | =embark-act-all= | =A= | =A= | + | =embark-export= | =E= | =E= | + | =embark-select= | n/a | =m= | + | =embark-collect-direct-action-minor-mode= | =M-a= | =M-a= | + | =revert-buffer= | =g= | =gr= | diff --git a/.config/emacs/lisp/evil-collection/modes/embark/evil-collection-embark.el b/.config/emacs/lisp/evil-collection/modes/embark/evil-collection-embark.el new file mode 100644 index 0000000..c22d294 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/embark/evil-collection-embark.el @@ -0,0 +1,52 @@ +;;; evil-collection-embark.el --- Evil bindings for embark -*- lexical-binding: t -*- + +;; Copyright (C) 2021 Zhiwei Chen + +;; Author: Zhiwei Chen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for embark. + +;;; Code: + +(require 'evil-collection) +(require 'embark nil t) + +(defconst evil-collection-embark-maps '(embark-collect-mode-map)) + +;;;###autoload +(defun evil-collection-embark-setup () + "Set up `evil' bindings for `embark'." + (evil-set-initial-state 'embark-collect-mode 'normal) + (evil-collection-define-key 'normal 'embark-collect-mode-map + ;; embark specific commands. `isearch-forward' isn't defined, use + ;; `evil-search-forward' instead. + "a" 'embark-act + "A" 'embark-act-all + "E" 'embark-export ;; was e + "m" 'embark-select + (kbd "M-a") 'embark-collect-direct-action-minor-mode + + "gr" 'revert-buffer)) + +(provide 'evil-collection-embark) +;;; evil-collection-embark.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/ement/evil-collection-ement.el b/.config/emacs/lisp/evil-collection/modes/ement/evil-collection-ement.el new file mode 100644 index 0000000..a9c7a1b --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/ement/evil-collection-ement.el @@ -0,0 +1,138 @@ +;;; evil-collection-ement.el --- Evil integration for Ement.el -*- lexical-binding: t; -*- + +;; Copyright (C) 2023 Nicholas Vollmer + +;; Author: Nicholas Vollmer +;; Keywords: convenience +;; Maintainer: James Nguyen +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.0 +;; Package-Requires: ((emacs "27.1")) +;; Keywords: evil, emacs, convenience, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: + +;; Evil bindings for Ement.el + +;;; Code: +(require 'evil-collection) +(require 'ement nil t) +(require 'ement-room-list nil t) + +(defgroup evil-collection-ement nil + "Evil bindings for Ement.el." + :group 'evil-collection) + +(defcustom evil-collection-ement-want-auto-retro nil + "When non-nil, automatically run `ement-room-retro' when scrolled up at `bob'." + :type 'boolean) + +(defconst evil-collection-ement-maps '(ement-describe-room-mode-map + ement-directory-mode-map + ement-room-list-mode-map + ement-room-mode-map)) + +(declare-function ement-room-retro "ement-room") +(defun evil-collection-ement--auto-retro () + "Call `ement-room-retro' scroll requested from beginning of buffer hit." + (and (= (line-beginning-position) (point-min)) + (not (eq evil-state 'emacs)) + (member this-command '(previous-line evil-scroll-up)) + (call-interactively #'ement-room-retro) + (setq this-command 'ement-room-retro))) + +(defun evil-collection-ement--install-auto-retro () + "Install `evil-collection-ement--auto-retro'." + (add-hook 'post-command-hook #'evil-collection-ement--auto-retro nil t)) + +(defun evil-collection-ement-setup () + "Set up `evil' bindings for Ement.el." + (evil-collection-define-key 'normal 'ement-describe-room-mode-map + (kbd "q") 'quit-window) + + (evil-collection-define-key 'normal 'ement-directory-mode-map + (kbd "RET") 'ement-directory-RET + (kbd "") 'ement-directory-RET + (kbd "s") 'ement-directory-search + (kbd "q") 'quit-window) + + (evil-collection-define-key 'normal 'ement-room-list-mode-map + (kbd "d") 'ement-room-list-kill-buffer + (kbd "x") 'ement-room-leave + (kbd "X") 'ement-forget-room + (kbd "RET") 'ement-room-list-RET + (kbd "") 'ement-room-list-RET) + + (let* ((submit evil-collection-repl-submit-state) + (newline-state (if (eq submit 'normal) 'insert 'normal))) + (evil-collection-define-key submit 'ement-room-mode-map + (kbd "") 'ement-room-send-message + (kbd "RET") 'ement-room-send-message) + (evil-collection-define-key newline-state 'ement-room-mode-map + (kbd "") 'newline + (kbd "RET") 'newline)) + + (evil-collection-define-key '(normal motion) 'ement-room-mode-map + (kbd "<") 'ement-room-transient + (kbd "M-RET") 'ement-room-compose-message + (kbd "") 'ement-room-compose-message + (kbd "a") 'ement-room-send-message + (kbd "A") 'ement-room-compose-message + (kbd "d") 'ement-room-delete-message + (kbd "D") 'ement-room-delete-message + (kbd "J") 'ement-room-write-reply + (kbd "]]") 'ement-room-goto-next + (kbd "[[") 'ement-room-goto-prev + (kbd "gr") 'ement-room-sync + (kbd "gu") 'ement-room-goto-fully-read-marker + (kbd "gm") 'ement-room-mark-read + (kbd "gv") 'ement-room-view-event + (kbd "i") 'ement-room-edit-message + (kbd "q") 'quit-window + ;; Room prefix bindings + (kbd "r/") 'ement-room-occur + (kbd "rd") 'ement-room-describe + (kbd "rf") 'ement-room-set-message-format + (kbd "rl") 'ement-room-list + (kbd "rm") 'ement-list-members + (kbd "rn") 'ement-room-override-name + (kbd "rN") 'ement-room-set-notification-state + (kbd "rt") 'ement-room-set-topic + (kbd "rT") 'ement-tag-room + ;; Room membership + (kbd "Rc") 'ement-create-room + (kbd "Rj") 'ement-room-join + (kbd "Rl") 'ement-room-leave + (kbd "RF") 'ement-room-forget + (kbd "Rn") 'ement-room-set-display-name + (kbd "Rs") 'ement-room-toggle-space + ;; Send prefix bindings + (kbd "se") 'ement-room-send-emote + (kbd "sf") 'ement-room-send-file + (kbd "si") 'ement-room-send-image + (kbd "sr") 'ement-room-send-reaction + ;; User prefix bindings + (kbd "ui") 'ement-invite-user + (kbd "uI") 'ement-ignore-user + (kbd "u RET") 'ement-send-direct-message + (kbd "u ") 'ement-send-direct-message) + + (when evil-collection-ement-want-auto-retro + (add-hook 'ement-room-mode-hook #'evil-collection-ement--install-auto-retro)) + nil) + +(provide 'evil-collection-ement) +;;; evil-collection-ement.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/emms/README.org b/.config/emacs/lisp/evil-collection/modes/emms/README.org new file mode 100644 index 0000000..cd6d6af --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/emms/README.org @@ -0,0 +1,131 @@ +* emms + + Evil bindings for [[https://www.gnu.org/software/emms/][EMMS]]. + +** emms-browser-mode-map + + Insert state is inhibited; the browser is forced into normal state. + + | Command | Original | Evil | + |--------------------------------------------+-------------+-------------------| + | =emms-pause= | =P= | =x= | + | =emms-stop= | =s= | =X= | + | =emms-random= | =r= | =r= | + | =emms-seek-backward= | =<= | =<= | + | =emms-seek-forward= | =>= | =>= | + | =emms-browser-add-tracks= | =RET= | =RET= | + | =emms-browser-add-tracks-and-play= | =C-RET= | =C-RET= | + | =emms-volume-raise= | =+= | =+=, === | + | =emms-volume-lower= | =-= | =-= | + | =emms-playlist-mode-undo= | =C-/= | =u= | + | =emms-browser-prev-non-track= | == | =[[=, =C-k=, =gk= | + | =emms-browser-next-non-track= | n/a | =]]=, =C-j=, =gj= | + | =emms-browser-toggle-subitems-recursively= | n/a | =TAB=, =S-TAB= | + | =emms-browser-move-up-level= | =^= | =^= | + | =emms-browser-toggle-subitems= | =SPC= | =SPC= | + | =emms-browser-collapse-all= | =1= | =g1=, =zm=, =zc= | + | =emms-browser-expand-to-level-2= | =2= | =g2= | + | =emms-browser-expand-to-level-3= | =3= | =g3= | + | =emms-browser-expand-to-level-4= | =4= | =g4= | + | =emms-browser-expand-all= | =E= | =g0=, =zr= | + | =emms-browser-expand-one-level= | n/a | =zo= | + | =emms-browse-by-artist= | =b 1= | =ga= | + | =emms-browse-by-album= | =b 2= | =gA= | + | =emms-browse-by-genre= | =b 3= | =gb= | + | =emms-browse-by-year= | =b 4= | =gy= | + | =emms-browse-by-composer= | =b 5= | =gc= | + | =emms-browse-by-performer= | =b 6= | =gp= | + | =emms-isearch-buffer= | =/= | =/= | + | =isearch-repeat-forward= | n/a | =n= | + | =isearch-repeat-backward= | n/a | =N= | + | =emms-browser-clear-playlist= | =C= | =C= | + | =emms-browser-delete-files= | =D= | (default) | + | =emms-browser-remove-tracks= | n/a | =D= | + | =emms-browser-view-in-dired= | =d= | =d=, =gd= | + | (parent =W= prefix) | =W= | =g= | + | (parent =s= prefix) | =s= | =s= | + +** emms-playlist-mode-map + + Initial evil state is normal. + + | Command | Original | Evil | + |-----------------------------------------------------------+------------+-------------| + | =emms-pause= | =P= | =x= | + | =emms-stop= | =s= | =X= | + | =emms-random= | =r= | =r= | + | =emms-seek-backward= | =<= | =<= | + | =emms-seek-forward= | =>= | =>= | + | =emms-next= | =n= | =C-j=, =gj= | + | =emms-previous= | =p= | =C-k=, =gk= | + | =emms-playlist-mode-play-smart= | =RET= | =RET= | + | =emms-volume-raise= | =+= | =+=, === | + | =emms-volume-lower= | =-= | =-= | + | =emms-playlist-mode-undo= | =C-/= | =u= | + | =emms-playlist-mode-first= | =M-<= | =gg= | + | =emms-playlist-mode-last= | =M->= | =G= | + | =emms-playlist-mode-next= | =M-n= | =]]= | + | =emms-playlist-mode-previous= | =M-p= | =[[= | + | =emms-playlist-mode-kill-track= | =C-k=, =D= | =D= | + | =emms-playlist-clear= | =C= | =C= | + | =evil-collection-emms-playlist-mode-insert-newline-above= | n/a | =O= | + | =evil-collection-emms-playlist-mode-insert-newline-below= | n/a | =o= | + | =evil-collection-emms-playlist-mode-paste-before= | n/a | =P= | + | =evil-collection-emms-playlist-mode-paste-after= | n/a | =p= | + | =emms-tag-editor-edit= | n/a | =ze= | + | =emms-tag-editor-rename= | n/a | =R= | + | =emms-playlist-mode-center-current= | =c= | =.= | + | =emms-playlist-mode-goto-dired-at-point= | =d= | =d=, =gd= | + | =emms-show= | =f= | =zs= | + | =emms-playlist-mode-add-contents= | =a= | =a= | + | =emms-playlist-set-playlist-buffer= | =b= | =zp= | + | (parent =S= sort prefix) | =S= | =S= | + | (parent =/= filter prefix) | =/= | =s= | + | =emms-playlist-mode-yank-pop= | =M-y= | =M-y= | + | =emms-playlist-mode-kill= (visual) | =C-w= | =D= | + +** emms-browser-search-mode-map + + | Command | Original | Evil | + |----------------------------+----------+------| + | =emms-browser-kill-search= | n/a | =q= | + +** emms-metaplaylist-mode-map + + Initial evil state is normal. + + | Command | Original | Evil | + |-----------------------------------------+----------+-------| + | =emms-metaplaylist-mode-goto-current= | =RET= | =RET= | + | =emms-metaplaylist-mode-set-active= | =SPC= | =SPC= | + | =emms-metaplaylist-mode-update= | =g= | =gr= | + | =emms-metaplaylist-mode-new-buffer= | =C= | =C= | + | =emms-metaplaylist-mode-center-current= | =c= | =.= | + | =emms-metaplaylist-mode-kill-buffer= | =C-k= | =D= | + | =kill-current-buffer= | =q= | =q= | + +** emms-stream-mode-map + + Initial evil state is normal. + + | Command | Original | Evil | + |-------------------------------------+----------+----------| + | =emms-stream-play= | =RET= | =RET= | + | =emms-stream-next-line= | =n= | =j= | + | =emms-stream-previous-line= | =p= | =k= | + | =emms-stream-yank-bookmark= | =y= | =y= | + | =emms-stream-kill-bookmark= | =k= | =d= | + | =emms-stream-edit-bookmark= | =e= | =c=, =r= | + | =emms-stream-info-bookmark= | =i= | =i= | + | =emms-stream-save-bookmarks-file= | =s= | =s= | + | =emms-stream-toggle-default-action= | =t= | =x= | + | =emms-stream-quit= | =q= | =q= | + +** New commands + + | Command | Purpose | + |-----------------------------------------------------------+---------------------------------------------------------------| + | =evil-collection-emms-playlist-mode-insert-newline-above= | =O= equivalent that respects =emms-with-inhibit-read-only-t=. | + | =evil-collection-emms-playlist-mode-insert-newline-below= | =o= variant. | + | =evil-collection-emms-playlist-mode-paste-before= | =P= -- yank playlist items before point. | + | =evil-collection-emms-playlist-mode-paste-after= | =p= -- yank playlist items after point. | diff --git a/.config/emacs/lisp/evil-collection/modes/emms/evil-collection-emms.el b/.config/emacs/lisp/evil-collection/modes/emms/evil-collection-emms.el new file mode 100644 index 0000000..47b4e8d --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/emms/evil-collection-emms.el @@ -0,0 +1,266 @@ +;;; evil-collection-emms.el --- Evil bindings for EMMS -*- lexical-binding: t -*- + +;; Copyright (C) 2017, 2024 Pierre Neidhardt + +;; Author: Pierre Neidhardt +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, emms, tools + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: +;; Evil bindings for EMMS. + +;;; Code: +(require 'emms nil t) +(require 'evil-collection) + +(declare-function emms-with-inhibit-read-only-t "emms") +(declare-function emms-playlist-mode-correct-previous-yank "emms-playlist-mode") +(declare-function emms-playlist-mode-yank "emms-playlist-mode") + +(defvar emms-browser-mode-map) +(defvar emms-playlist-mode-map) + +(defconst evil-collection-emms-maps '(emms-browser-mode-map + emms-playlist-mode-map + emms-browser-search-mode-map + emms-metaplaylist-mode-map + emms-stream-mode-map)) + +(defun evil-collection-emms-playlist-mode-insert-newline-above () + "Insert a newline above point." + (interactive) + (emms-with-inhibit-read-only-t + (evil-insert-newline-above))) + +(defun evil-collection-emms-playlist-mode-insert-newline-below () + "Insert a newline below point." + (interactive) + (emms-with-inhibit-read-only-t + (evil-insert-newline-below))) + +(defun evil-collection-emms-playlist-mode-paste-before () + "Pastes the latest yanked playlist items before the cursor position. +The return value is the yanked text." + (interactive) + (emms-with-inhibit-read-only-t + (goto-char (line-beginning-position)) + (emms-playlist-mode-yank) + (emms-playlist-mode-correct-previous-yank) + (evil-previous-line) + (evil-beginning-of-line))) + +(defun evil-collection-emms-playlist-mode-paste-after () + "Pastes the latest yanked playlist items behind point. +The return value is the yanked text." + (interactive) + (unless (eobp) (evil-next-line)) + (evil-collection-emms-playlist-mode-paste-before)) + +;;;###autoload +(defun evil-collection-emms-browser-setup () + "Set up `evil' bindings for `emms-browser'." + ;; TODO: Why doesn't evil-set-initial-state work with emms-browser-mode? + + (evil-collection-inhibit-insert-state 'emms-browser-mode-map) + (add-hook 'emms-browser-mode-hook 'evil-normal-state) + (evil-collection-define-key 'normal 'emms-browser-mode-map + ;; The following overrides other "g-" and "s-" prefixed keys so we set it first. + "g" nil + "g" (lookup-key emms-browser-mode-map (kbd "W")) + "s" nil + "s" (lookup-key emms-browser-mode-map (kbd "s")) + + ;; playback controls + "x" 'emms-pause + "X" 'emms-stop + "r" 'emms-random + "<" 'emms-seek-backward + ">" 'emms-seek-forward + (kbd "RET") 'emms-browser-add-tracks + (kbd "C-") 'emms-browser-add-tracks-and-play + + ;; volume controls + "+" 'emms-volume-raise + "=" 'emms-volume-raise + "-" 'emms-volume-lower + + "u" 'emms-playlist-mode-undo + + ;; motion + "[[" 'emms-browser-prev-non-track + "]]" 'emms-browser-next-non-track + (kbd "C-k") 'emms-browser-prev-non-track + (kbd "C-j") 'emms-browser-next-non-track + "gk" 'emms-browser-prev-non-track + "gj" 'emms-browser-next-non-track + + (kbd "") 'emms-browser-toggle-subitems-recursively + (kbd "") 'emms-browser-toggle-subitems-recursively + "^" 'emms-browser-move-up-level + (kbd "SPC") 'emms-browser-toggle-subitems + "g1" 'emms-browser-collapse-all + "g2" 'emms-browser-expand-to-level-2 + "g3" 'emms-browser-expand-to-level-3 + "g4" 'emms-browser-expand-to-level-4 + "g0" 'emms-browser-expand-all + "ga" 'emms-browse-by-artist + "gA" 'emms-browse-by-album + "gb" 'emms-browse-by-genre + "gy" 'emms-browse-by-year + "gc" 'emms-browse-by-composer + "gp" 'emms-browse-by-performer + "zm" 'emms-browser-collapse-all + "zr" 'emms-browser-expand-all + "zo" 'emms-browser-expand-one-level + ;; TODO find a real replacement for zc + "zc" 'emms-browser-collapse-all + + ;; TODO find a way to integrate this with evil-collection-evil-search + "/" 'emms-isearch-buffer ; This shows hidden items during search. + "n" 'isearch-repeat-forward + "N" 'isearch-repeat-backward + + ;; filter + ;; "" 'emms-browser-previous-filter ; TODO: What does this do? + ;; "" 'emms-browser-next-filter + + + "C" 'emms-browser-clear-playlist + "D" 'emms-browser-remove-tracks + "d" 'emms-browser-view-in-dired + ;; "d" does the same, keep "gd" for consistency. + "gd" 'emms-browser-view-in-dired) + + (unless evil-collection-always-run-setup-hook-after-load + (run-hook-with-args 'evil-collection-setup-hook + 'emms '(emms-browser-mode-map)))) + +;;;###autoload +(defun evil-collection-emms-playlist-setup () + "Set up `evil' bindings for `emms-playlist'." + (evil-set-initial-state 'emms-playlist-mode 'normal) + (evil-collection-define-key 'normal 'emms-playlist-mode-map + ;; playback controls + "x" 'emms-pause + "X" 'emms-stop + "r" 'emms-random + "<" 'emms-seek-backward + ">" 'emms-seek-forward + (kbd "C-j") 'emms-next + (kbd "C-k") 'emms-previous + "gj" 'emms-next + "gk" 'emms-previous + (kbd "RET") 'emms-playlist-mode-play-smart + + ;; volume controls + "+" 'emms-volume-raise + "=" 'emms-volume-raise + "-" 'emms-volume-lower + + "u" 'emms-playlist-mode-undo + + ;; motion + "gg" 'emms-playlist-mode-first + "G" 'emms-playlist-mode-last + "]]" 'emms-playlist-mode-next + "[[" 'emms-playlist-mode-previous + + "D" 'emms-playlist-mode-kill-track ; emms-browser uses "D" + "C" 'emms-playlist-clear + "O" 'evil-collection-emms-playlist-mode-insert-newline-above + "o" 'evil-collection-emms-playlist-mode-insert-newline-below + "P" 'evil-collection-emms-playlist-mode-paste-before + "p" 'evil-collection-emms-playlist-mode-paste-after + + "u" 'emms-playlist-mode-undo + + "ze" 'emms-tag-editor-edit + "R" 'emms-tag-editor-rename + + "." 'emms-playlist-mode-center-current + "d" 'emms-playlist-mode-goto-dired-at-point + "gd" 'emms-playlist-mode-goto-dired-at-point ; "d" does the same, keep "gd" for consistency. + + "zs" 'emms-show + "a" 'emms-playlist-mode-add-contents + "zp" 'emms-playlist-set-playlist-buffer + + ;; filter + "S" (lookup-key emms-playlist-mode-map (kbd "S")) + "s" (lookup-key emms-playlist-mode-map (kbd "/")) + ;; "" 'emms-playlist-limit-to-all ; TODO: Test. + + (kbd "M-y") 'emms-playlist-mode-yank-pop) + + (evil-collection-define-key 'visual 'emms-playlist-mode-map + ;; "d" 'emms-playlist-mode-kill + "D" 'emms-playlist-mode-kill) + + (unless evil-collection-always-run-setup-hook-after-load + (run-hook-with-args 'evil-collection-setup-hook + 'emms '(emms-playlist-mode-map)))) + +;;;###autoload +(defun evil-collection-emms-setup () + "Set up `evil' bindings for `emms'." + ;; emms-browser and emms-playlist-mode must be set up after they are loaded + ;; because we need the mode map to be defined when we `(lookup-key + ;; ...-mode-map ...)'. + (with-eval-after-load 'emms-browser + (evil-collection-emms-browser-setup)) + (with-eval-after-load 'emms-playlist-mode + (evil-collection-emms-playlist-setup)) + + (evil-collection-define-key 'normal 'emms-browser-search-mode-map + "q" 'emms-browser-kill-search) + + (evil-set-initial-state 'emms-metaplaylist-mode 'normal) + (evil-collection-define-key 'normal 'emms-metaplaylist-mode-map + (kbd "RET") 'emms-metaplaylist-mode-goto-current + (kbd "") 'emms-metaplaylist-mode-set-active + "gr" 'emms-metaplaylist-mode-update + "C" 'emms-metaplaylist-mode-new-buffer + "." 'emms-metaplaylist-mode-center-current + "D" 'emms-metaplaylist-mode-kill-buffer + "q" 'kill-current-buffer) + + (evil-set-initial-state 'emms-stream-mode 'normal) + (evil-collection-define-key 'normal 'emms-stream-mode-map + (kbd "RET") 'emms-stream-play + "j" 'emms-stream-next-line + "k" 'emms-stream-previous-line + "y" 'emms-stream-yank-bookmark + "d" 'emms-stream-kill-bookmark + "c" 'emms-stream-edit-bookmark + "r" 'emms-stream-edit-bookmark + "i" 'emms-stream-info-bookmark + "s" 'emms-stream-save-bookmarks-file + "x" 'emms-stream-toggle-default-action + "q" 'emms-stream-quit) + + (unless evil-collection-always-run-setup-hook-after-load + (run-hook-with-args + 'evil-collection-setup-hook 'emms + '(emms-browser-search-mode-map + emms-metaplaylist-mode-map + emms-stream-mode-map)))) + +(provide 'evil-collection-emms) +;;; evil-collection-emms.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/emoji/README.org b/.config/emacs/lisp/evil-collection/modes/emoji/README.org new file mode 100644 index 0000000..5a3c09b --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/emoji/README.org @@ -0,0 +1,13 @@ +* emoji + + Evil bindings for =emoji-list-mode= (the buffer produced by =M-x emoji-list=). + +** Key bindings + + Read-only motion/quit bindings come from =evil-collection-set-readonly-bindings= + and are not repeated below. + + | Command | Original | Evil | + |---------------------+----------+-------| + | =emoji-list-select= | =RET= | =RET= | + | =emoji-list-help= | =h= | =gh= | diff --git a/.config/emacs/lisp/evil-collection/modes/emoji/evil-collection-emoji.el b/.config/emacs/lisp/evil-collection/modes/emoji/evil-collection-emoji.el new file mode 100644 index 0000000..0cb0972 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/emoji/evil-collection-emoji.el @@ -0,0 +1,44 @@ +;;; evil-collection-emoji.el --- Evil bindings for emoji -*- lexical-binding: t -*- + +;; Copyright (C) 2021 Zhiwei Chen + +;; Author: Zhiwei Chen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for emoji. + +;;; Code: +(require 'evil-collection) +(require 'emoji nil t) + +(defconst evil-collection-emoji-maps '(emoji-list-mode-map)) + +;;;###autoload +(defun evil-collection-emoji-setup () + "Set up `evil' bindings for `emoji'." + (evil-collection-set-readonly-bindings 'emoji-list-mode-map) + (evil-collection-define-key 'normal 'emoji-list-mode-map + (kbd "RET") 'emoji-list-select + "gh" 'emoji-list-help)) + +(provide 'evil-collection-emoji) +;;; evil-collection-emoji.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/epa/README.org b/.config/emacs/lisp/evil-collection/modes/epa/README.org new file mode 100644 index 0000000..52f4696 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/epa/README.org @@ -0,0 +1,34 @@ +* epa + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/epa/index.html][EasyPG Assistant]] (=epa-key-list-mode=, =epa-key-mode=, + =epa-info-mode=). + +** Key bindings + +*** epa-key-list-mode-map + + | Command | Original | Evil | + |--------------------+----------+-------| + | =widget-forward= | =TAB= | =TAB= | + | =revert-buffer= | =g= | =gr= | + | =epa-exit-buffer= | =q= | =q= | + | =quit-window= | n/a | =ZZ= | + | =evil-quit= | n/a | =ZQ= | + | =epa-decrypt-file= | =d= | =E= | + | =epa-delete-keys= | =r= | =d= | + | =epa-verify-file= | =v= | =V= | + | =epa-mark-key= | =m= | =m= | + | =epa-unmark-key= | =u= | =u= | + | =epa-sign-file= | =s= | =s= | + | =epa-encrypt-file= | =e= | =e= | + | =epa-import-keys= | =i= | =i= | + | =epa-export-keys= | =o= | =o= | + +*** epa-key-mode-map / epa-info-mode-map + + | Command | Original | Evil | + |-------------------+----------+------------| + | =epa-exit-buffer= | =q= | =q= | + | =delete-window= | n/a | =q= (info) | + | =quit-window= | n/a | =ZZ= | + | =evil-quit= | n/a | =ZQ= | diff --git a/.config/emacs/lisp/evil-collection/modes/epa/evil-collection-epa.el b/.config/emacs/lisp/evil-collection/modes/epa/evil-collection-epa.el new file mode 100644 index 0000000..04d818e --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/epa/evil-collection-epa.el @@ -0,0 +1,71 @@ +;;; evil-collection-epa.el --- Evil bindings for epa-mode -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: Maximiliano Sandoval +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, epa, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for `epa-mode'. + +;;; Code: + +(require 'evil-collection) +(require 'epa nil t) + +(defconst evil-collection-epa-maps '(epa-key-list-mode-map + epa-key-mode-map + epa-info-mode-map)) + +;;;###autoload +(defun evil-collection-epa-setup () + (evil-collection-define-key 'normal 'epa-key-list-mode-map + (kbd "") 'widget-forward + "gr" 'revert-buffer + "q" 'epa-exit-buffer + "E" 'epa-decrypt-file + "d" 'epa-delete-keys + "ZZ" 'quit-window + "ZQ" 'evil-quit + "V" 'epa-verify-file + + ;; mark + "m" 'epa-mark-key + "u" 'epa-unmark-key + + ;; Unchanged keybindings. + "s" 'epa-sign-file + "e" 'epa-encrypt-file + "i" 'epa-import-keys + "o" 'epa-export-keys) + + (evil-collection-define-key 'normal 'epa-key-mode-map + "q" 'epa-exit-buffer + "ZZ" 'quit-window + "ZQ" 'evil-quit) + + (evil-collection-define-key 'normal 'epa-info-mode-map + "q" 'delete-window + "ZZ" 'quit-window + "ZQ" 'evil-quit)) + +(provide 'evil-collection-epa) +;;; evil-collection-epa.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/ert/README.org b/.config/emacs/lisp/evil-collection/modes/ert/README.org new file mode 100644 index 0000000..c1f8a94 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/ert/README.org @@ -0,0 +1,24 @@ +* ert + + Evil bindings for =ert-results-mode=. + +** Key bindings + + | Command | Original | Evil | + |-------------------------------------------------------+----------+-------------------| + | =ert-results-next-test= | =n= | =gj=, =]]=, =C-j= | + | =ert-results-previous-test= | =p= | =gk=, =[[=, =C-k= | + | =ert-results-jump-between-summary-and-result= | =j= | =J= | + | =ert-results-toggle-printer-limits-for-test-at-point= | =L= | =L= | + | =ert-results-rerun-all-tests= | =R= | =gr=, =R= | + | =ert-results-rerun-test-at-point= | =r= | =r= | + | =ert-results-rerun-test-at-point-debugging-errors= | =d= | =d= | + | =ert-results-find-test-at-point-other-window= | =.= | =.=, =gd= | + | =ert-results-pop-to-backtrace-for-test-at-point= | =b= | =B= | + | =ert-results-pop-to-messages-for-test-at-point= | =m= | =M= | + | =ert-results-pop-to-should-forms-for-test-at-point= | =l= | =s= | + | =ert-results-describe-test-at-point= | =h= | =K=, =g?= | + | =ert-results-pop-to-timings= | =T= | =T= | + | =ert-delete-test= | =D= | =x= | + | =evil-next-line= / =evil-previous-line= | n/a | =j= / =k= | + | =evil-backward-char= / =evil-forward-char= | n/a | =h= / =l= | diff --git a/.config/emacs/lisp/evil-collection/modes/ert/evil-collection-ert.el b/.config/emacs/lisp/evil-collection/modes/ert/evil-collection-ert.el new file mode 100644 index 0000000..0e97f66 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/ert/evil-collection-ert.el @@ -0,0 +1,71 @@ +;;; evil-collection-ert.el --- Bindings for `ert' -*- lexical-binding: t -*- + +;; Copyright (C) 2018 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, emacs, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Bindings for `ert'. + +;;; Code: +(require 'ert) +(require 'evil-collection) + +(defconst evil-collection-ert-maps '(ert-results-mode-map)) + +;;;###autoload +(defun evil-collection-ert-setup () + "Set up `evil' bindings for `ert'." + (evil-collection-inhibit-insert-state 'ert-results-mode-map) + (evil-set-initial-state 'ert-results-mode 'normal) + + (evil-collection-define-key 'normal 'ert-results-mode-map + "j" 'evil-next-line + "k" 'evil-previous-line + "h" 'evil-backward-char + "l" 'evil-forward-char + ;; Stuff that's not in the menu. + "J" 'ert-results-jump-between-summary-and-result + "L" 'ert-results-toggle-printer-limits-for-test-at-point + "gj" 'ert-results-next-test + "gk" 'ert-results-previous-test + "]]" 'ert-results-next-test + "[[" 'ert-results-previous-test + (kbd "C-j") 'ert-results-next-test + (kbd "C-k") 'ert-results-previous-test + ;; Stuff that is in the menu. + "gr" 'ert-results-rerun-all-tests + "R" 'ert-results-rerun-all-tests + "r" 'ert-results-rerun-test-at-point + "d" 'ert-results-rerun-test-at-point-debugging-errors + "." 'ert-results-find-test-at-point-other-window + "gd" 'ert-results-find-test-at-point-other-window + "B" 'ert-results-pop-to-backtrace-for-test-at-point + "M" 'ert-results-pop-to-messages-for-test-at-point + "s" 'ert-results-pop-to-should-forms-for-test-at-point + "K" 'ert-results-describe-test-at-point + "g?" 'ert-results-describe-test-at-point + "x" 'ert-delete-test + "T" 'ert-results-pop-to-timings)) + +(provide 'evil-collection-ert) +;;; evil-collection-ert.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/eshell/README.org b/.config/emacs/lisp/evil-collection/modes/eshell/README.org new file mode 100644 index 0000000..0d4ab5f --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/eshell/README.org @@ -0,0 +1,36 @@ +* eshell + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/eshell/index.html][Eshell]]. + +** Key bindings + + Normal-state bindings added to =eshell-mode-map=. + + | Command | Original | Evil | + |---------------------------------------------------+-----------+-------------------| + | =eshell-previous-prompt= | =C-c C-p= | =[[=, =gk=, =C-k= | + | =eshell-next-prompt= | =C-c C-n= | =]]=, =gj=, =C-j= | + | =eshell-backward-argument= | =C-c C-b= | =M-h= | + | =eshell-forward-argument= | =C-c C-f= | =M-l= | + | =eshell-previous-matching-input-from-input= | =C-c M-p= | =C-p= | + | =eshell-next-matching-input-from-input= | =C-c M-n= | =C-n= | + | =eshell-bol= (Emacs < 30) | =C-a= | =0=, =^= | + | =eshell-kill-input= (when =evil-want-C-u-delete=) | =C-c C-u= | =C-u= (insert) | + + =RET= sends input in the state named by =evil-collection-repl-submit-state=, + and inserts a newline in the complementary state. + +** New commands + + | Command | Key | | + |--------------------------------------------+-----------+-----------------------------------------| + | =evil-collection-eshell-interrupt-process= | =C-c C-c= | interrupt process, then enter insert | + | =evil-collection-eshell-evil-change= | =c= | change, never touches prompt or history | + | =evil-collection-eshell-evil-change-line= | =C= | change to end-of-line | + | =evil-collection-eshell-evil-delete= | =d= | delete, never touches prompt or history | + | =evil-collection-eshell-evil-delete-line= | =D= | delete to end-of-line | + +** Notes + + - On entering insert/replace state, point jumps to the next prompt. + - On entering normal state, point stays put (no Vim-style backward step). diff --git a/.config/emacs/lisp/evil-collection/modes/eshell/evil-collection-eshell.el b/.config/emacs/lisp/evil-collection/modes/eshell/evil-collection-eshell.el new file mode 100644 index 0000000..30580d2 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/eshell/evil-collection-eshell.el @@ -0,0 +1,168 @@ +;;; evil-collection-eshell.el --- Evil bindings for Eshell -*- lexical-binding: t -*- + +;; Copyright (C) 2017, 2021 Pierre Neidhardt + +;; Author: Pierre Neidhardt +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, eshell, tools + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: +;; Evil bindings for Eshell. + +;;; Code: +(require 'em-prompt) +(require 'eshell) +(require 'evil-collection) + +(defconst evil-collection-eshell-maps '(eshell-mode-map)) + +(defun evil-collection-eshell-next-prompt () + "`evil' wrapper around `eshell-next-prompt'." + (when (get-text-property (point) 'read-only) + ;; If at end of prompt, `eshell-next-prompt' will not move, so go backward. + (beginning-of-line) + (eshell-next-prompt 1))) + +(defun evil-collection-eshell-next-prompt-on-insert () + "Go to next prompt on `evil' replace/insert enter." + (dolist (hook '(evil-replace-state-entry-hook evil-insert-state-entry-hook)) + (add-hook hook 'evil-collection-eshell-next-prompt nil t))) + +(defun evil-collection-eshell-interrupt-process () + "Interupt `eshell' process and enter insert state." + (interactive) + (eshell-interrupt-process) + (evil-insert 1)) + +(defun evil-collection-eshell-escape-stay () + "Go back to normal state but don't move cursor backwards. +Moving cursor backwards is the default Vim behavior but it is not +appropriate in some cases like terminals." + (setq-local evil-move-cursor-back nil)) + +;; Taken from Doom Emacs +(evil-define-operator evil-collection-eshell-evil-change (beg end type register yank-handler delete-func) + "Like `evil-change' but will not delete/copy the prompt." + (interactive "") + (save-restriction + (narrow-to-region eshell-last-output-end (point-max)) + (evil-change (max beg (point-min)) + (if (eq type 'line) (point-max) (min (or end (point-max)) (point-max))) + type register yank-handler delete-func))) + +;; Taken from Doom Emacs +(evil-define-operator evil-collection-eshell-evil-change-line (beg end type register yank-handler) + "Change to end of line." + :motion evil-end-of-line + (interactive "") + (evil-collection-eshell-evil-change beg end type register yank-handler #'evil-delete-line)) + +;; Taken from Doom Emacs +(evil-define-operator evil-collection-eshell-evil-delete (beg end type register yank-handler) + "Like `evil-delete' but will not delete/copy the prompt." + (interactive "") + (save-restriction + (narrow-to-region eshell-last-output-end (point-max)) + (evil-delete (if beg (max beg (point-min)) (point-min)) + (if (eq type 'line) (point-max) (min (or end (point-max)) (point-max))) + type register yank-handler))) + +;; Taken from Doom Emacs +;; +;; Although the BEG argument doesn't get used in any meaningful way, +;; `evil-define-operator' must access it nonetheless, so putting an underscore +;; in front will make the CI fail. +(evil-define-operator evil-collection-eshell-evil-delete-line (beg end type register yank-handler) + "Change to end of line." + :motion nil + :keep-visual t + (interactive "") + (evil-collection-eshell-evil-delete (point) end type register yank-handler)) + +;; `eshell-mode-map' is reset when Eshell is initialized in `eshell-mode'. We +;; need to add bindings to `eshell-first-time-mode-hook'. +(defun evil-collection-eshell-setup-keys () + "Set up `evil' bindings for `eshell'." + (evil-collection-define-key 'normal 'eshell-mode-map + ;; motion + "[[" 'eshell-previous-prompt + "]]" 'eshell-next-prompt + (kbd "C-k") 'eshell-previous-prompt + (kbd "C-j") 'eshell-next-prompt + "gk" 'eshell-previous-prompt + "gj" 'eshell-next-prompt + (kbd "M-h") 'eshell-backward-argument + (kbd "M-l") 'eshell-forward-argument + + (kbd "C-n") 'eshell-next-matching-input-from-input + (kbd "C-p") 'eshell-previous-matching-input-from-input + + (kbd "C-c C-c") 'evil-collection-eshell-interrupt-process + "c" 'evil-collection-eshell-evil-change + "C" 'evil-collection-eshell-evil-change-line + "d" 'evil-collection-eshell-evil-delete + "D" 'evil-collection-eshell-evil-delete-line) + + (let* ((submit evil-collection-repl-submit-state) + (newline-state (if (eq submit 'normal) 'insert 'normal))) + (evil-collection-define-key submit 'eshell-mode-map + (kbd "RET") 'eshell-send-input) + (evil-collection-define-key newline-state 'eshell-mode-map + (kbd "RET") 'newline)) + + (when (< emacs-major-version 30) + (evil-collection-define-key 'normal 'eshell-mode-map + "0" 'eshell-bol + "^" 'eshell-bol)) + + (when evil-want-C-u-delete + (evil-collection-define-key 'insert 'eshell-mode-map + (kbd "C-u") 'eshell-kill-input)) + + (evil-collection-define-key 'visual 'eshell-mode-map + ;; motion + ;; TODO: This does not work with `evil-visual-line'. + "[[" 'eshell-previous-prompt + "]]" 'eshell-next-prompt + (kbd "C-k") 'eshell-previous-prompt + (kbd "C-j") 'eshell-next-prompt + "gk" 'eshell-previous-prompt + "gj" 'eshell-next-prompt) + + (when (< emacs-major-version 30) + (evil-collection-define-key 'visual 'eshell-mode-map + "0" 'eshell-bol + "^" 'eshell-bol)) + + (evil-normalize-keymaps) + (unless evil-collection-always-run-setup-hook-after-load + (run-hook-with-args + 'evil-collection-setup-hook 'eshell evil-collection-eshell-maps))) + +;; TODO: Compare this setup procedure with evil-ediff. +;;;###autoload +(defun evil-collection-eshell-setup () + "Set up `evil' bindings for `eshell'." + (add-hook 'eshell-mode-hook 'evil-collection-eshell-escape-stay) + (add-hook 'eshell-mode-hook 'evil-collection-eshell-next-prompt-on-insert) + (add-hook 'eshell-first-time-mode-hook 'evil-collection-eshell-setup-keys)) + +(provide 'evil-collection-eshell) +;;; evil-collection-eshell.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/eval-sexp-fu/README.org b/.config/emacs/lisp/evil-collection/modes/eval-sexp-fu/README.org new file mode 100644 index 0000000..6563ec9 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/eval-sexp-fu/README.org @@ -0,0 +1,16 @@ +* eval-sexp-fu + + Evil compatibility for [[https://github.com/hchbaw/eval-sexp-fu.el][eval-sexp-fu]]. No key bindings. + + When =evil-move-beyond-eol= is nil, the setup advises + =ad-Advice-eval-last-sexp= so that =eval-last-sexp= treats the sexp under + point as ending at point (rather than one character earlier as evil's + normal-state cursor positioning would imply). This makes =C-x C-e= and + related commands work the way they do in evil's insert/emacs states. + +** New commands + + - =evil-collection-eval-sexp-fu-bounds-of-thing-at-point-sexp= - Advice + wrapper that fixes the sexp bounds in evil normal/motion state. + - =evil-collection-eval-sexp-fu-advise-bounds-of-thing-at-point= - Wraps + the advice around a single call to =eval-last-sexp=. diff --git a/.config/emacs/lisp/evil-collection/modes/eval-sexp-fu/evil-collection-eval-sexp-fu.el b/.config/emacs/lisp/evil-collection/modes/eval-sexp-fu/evil-collection-eval-sexp-fu.el new file mode 100644 index 0000000..b6743cb --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/eval-sexp-fu/evil-collection-eval-sexp-fu.el @@ -0,0 +1,61 @@ +;;; evil-collection-eval-sexp-fu.el --- Bindings for `eval-sexp-fu' -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, eval-sexp-fu, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for `eval-sexp-fu'. + +;;; Code: +(require 'evil-collection) +(require 'eval-sexp-fu nil t) + +(defconst evil-collection-eval-sexp-fu-maps nil) + +(defun evil-collection-eval-sexp-fu-bounds-of-thing-at-point-sexp (command &rest args) + "In normal-state or motion-state, last sexp ends at point." + (if (and (eq (nth 0 args) 'sexp) + (and (not evil-move-beyond-eol) + (or (evil-normal-state-p) (evil-motion-state-p)))) + (save-excursion + (unless (or (eobp) (eolp)) (forward-char)) + (apply command args)) + (apply command args))) + +(defun evil-collection-eval-sexp-fu-advise-bounds-of-thing-at-point (command &rest args) + "Advise `bounds-of-thing-at-point' to handle `evil's `evil-move-beyond-eol'." + (advice-add 'bounds-of-thing-at-point + :around 'evil-collection-eval-sexp-fu-bounds-of-thing-at-point-sexp) + (apply command args) + (advice-remove 'bounds-of-thing-at-point + 'evil-collection-eval-sexp-fu-bounds-of-thing-at-point-sexp)) + +;;;###autoload +(defun evil-collection-eval-sexp-fu-setup () + "Set up `evil' with `eval-sexp-fu'." + (unless evil-move-beyond-eol + (advice-add 'ad-Advice-eval-last-sexp + :around 'evil-collection-eval-sexp-fu-advise-bounds-of-thing-at-point))) + +(provide 'evil-collection-eval-sexp-fu) +;;; evil-collection-eval-sexp-fu.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/evil-mc/README.org b/.config/emacs/lisp/evil-collection/modes/evil-mc/README.org new file mode 100644 index 0000000..c23adfd --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/evil-mc/README.org @@ -0,0 +1,49 @@ +* evil-mc + + Evil bindings for [[https://github.com/gabesoft/evil-mc][evil-mc]], multiple cursors for evil. + + Upstream installs its cursors map under =gr= on top of the normal/visual + state. evil-collection clears both =evil-mc-key-map= and + =evil-mc-cursors-map= and re-installs the cursors map under =g.= so =gr= + stays free for =xref-find-references=. + +** Key bindings + +*** evil-mc-key-map + + | Command | Original | Evil | + |-----------------------+----------+------| + | =evil-mc-cursors-map= | =gr= | =g.= | + +*** evil-mc-cursors-map + + Prefix is =g.= in normal/visual state. + + | Command | Original | Evil | + |-----------------------------------------------+----------+---------| + | =evil-mc-make-all-cursors= | =m= | =a= | + | =evil-mc-undo-all-cursors= | =q= | =q= | + | =evil-mc-undo-last-added-cursor= | =u= | =u= | + | =evil-mc-pause-cursors= | =s= | =C-p= | + | =evil-mc-resume-cursors= | =r= | =C-r= | + | =evil-mc-make-cursor-here= | =h= | =C-m= | + | =evil-mc-make-and-goto-first-cursor= | =f= | =0= | + | =evil-mc-make-and-goto-last-cursor= | =l= | =$= | + | =evil-mc-make-cursor-in-visual-selection-beg= | =I= | =I= | + | =evil-mc-make-cursor-in-visual-selection-end= | =A= | =A= | + | =evil-mc-make-cursor-move-next-line= | =j= | =o= | + | =evil-mc-make-cursor-move-prev-line= | =k= | =O= | + | =evil-mc-make-and-goto-next-match= | =n= | =n= | + | =evil-mc-make-and-goto-prev-match= | =N= | =N= | + | =evil-mc-skip-and-goto-next-match= | =n= | =C-n= | + | =evil-mc-skip-and-goto-prev-match= | =p= | =C-S-n= | + | =evil-mc-make-and-goto-next-cursor= | =M-n= | =M-n= | + | =evil-mc-make-and-goto-prev-cursor= | =M-p= | =M-N= | + | =evil-mc-skip-and-goto-next-cursor= | =N= | =C-u= | + | =evil-mc-skip-and-goto-prev-cursor= | =P= | =C-S-u= | + +** Notes + + A hook on =evil-mc-after-cursors-deleted= sets + =evil-was-yanked-without-register= so paste after cursor deletion does + not clobber the unnamed register (see upstream issue #70). diff --git a/.config/emacs/lisp/evil-collection/modes/evil-mc/evil-collection-evil-mc.el b/.config/emacs/lisp/evil-collection/modes/evil-mc/evil-collection-evil-mc.el new file mode 100644 index 0000000..7de6405 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/evil-mc/evil-collection-evil-mc.el @@ -0,0 +1,79 @@ +;;; evil-collection-evil-mc.el --- Bindings for evil-mc -*- lexical-binding: t -*- + +;; Copyright (C) 2018 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.2 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, emacs, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for evil-mc. + +;;; Code: +(require 'evil-collection) +(require 'evil-mc nil t) +(eval-when-compile (require 'subr-x)) ; `if-let*' and `when-let*' + +(defvar evil-mc-key-map) +(defvar evil-mc-cursors-map) +(defconst evil-collection-evil-mc-maps '(evil-mc-key-map evil-mc-cursors-map)) + +;;;###autoload +(defun evil-collection-evil-mc-setup () + "Set up `evil' bindings for evil-mc." + + (setcdr evil-mc-cursors-map nil) + + (define-key evil-mc-cursors-map (kbd "a") 'evil-mc-make-all-cursors) + (define-key evil-mc-cursors-map (kbd "q") 'evil-mc-undo-all-cursors) + (define-key evil-mc-cursors-map (kbd "u") 'evil-mc-undo-last-added-cursor) + + (define-key evil-mc-cursors-map (kbd "C-p") 'evil-mc-pause-cursors) + (define-key evil-mc-cursors-map (kbd "C-r") 'evil-mc-resume-cursors) + (define-key evil-mc-cursors-map (kbd "C-m") 'evil-mc-make-cursor-here) + + (define-key evil-mc-cursors-map (kbd "0") 'evil-mc-make-and-goto-first-cursor) + (define-key evil-mc-cursors-map (kbd "$") 'evil-mc-make-and-goto-last-cursor) + + (define-key evil-mc-cursors-map (kbd "I") 'evil-mc-make-cursor-in-visual-selection-beg) + (define-key evil-mc-cursors-map (kbd "A") 'evil-mc-make-cursor-in-visual-selection-end) + + (define-key evil-mc-cursors-map (kbd "o") 'evil-mc-make-cursor-move-next-line) + (define-key evil-mc-cursors-map (kbd "O") 'evil-mc-make-cursor-move-prev-line) + + (define-key evil-mc-cursors-map (kbd "n") 'evil-mc-make-and-goto-next-match) + (define-key evil-mc-cursors-map (kbd "N") 'evil-mc-make-and-goto-prev-match) + (define-key evil-mc-cursors-map (kbd "C-n") 'evil-mc-skip-and-goto-next-match) + (define-key evil-mc-cursors-map (kbd "C-S-n") 'evil-mc-skip-and-goto-prev-match) + (define-key evil-mc-cursors-map (kbd "M-n") 'evil-mc-make-and-goto-next-cursor) + (define-key evil-mc-cursors-map (kbd "M-N") 'evil-mc-make-and-goto-prev-cursor) + (define-key evil-mc-cursors-map (kbd "C-u") 'evil-mc-skip-and-goto-next-cursor) + (define-key evil-mc-cursors-map (kbd "C-S-u") 'evil-mc-skip-and-goto-prev-cursor) + + (setcdr evil-mc-key-map nil) + (evil-collection-define-key '(normal visual) 'evil-mc-key-map (kbd "g.") evil-mc-cursors-map) + + ;; https://github.com/gabesoft/evil-mc/issues/70 + (add-hook 'evil-mc-after-cursors-deleted + (lambda () + (setq evil-was-yanked-without-register t)))) + +(provide 'evil-collection-evil-mc) +;;; evil-collection-evil-mc.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/eww/README.org b/.config/emacs/lisp/evil-collection/modes/eww/README.org new file mode 100644 index 0000000..2b0aaa4 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/eww/README.org @@ -0,0 +1,61 @@ +* eww + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/eww/index.html][EWW]] (Emacs Web Wowser). + +** eww-mode-map + + | Command | Original | Evil | + |------------------------------------+------------+--------------------| + | =eww-up-url= | =u= | =^=, =u= | + | =eww-top-url= | =t= | =U= | + | =eww-back-url= | =l=, =DEL= | =H=, =DEL= | + | =eww-forward-url= | =r= | =L= | + | =eww-view-source= | =v= | =gf= | + | =eww-browse-with-external-browser= | =&= | =&=, =S-RET=, =go= | + | =url-cookie-list= | =C= | =gc= | + | =eww-toggle-paragraph-direction= | =D= | =zd= | + | =eww-set-character-encoding= | =E= | =ze= | + | =eww-toggle-fonts= | =F= | =zf= | + | =eww-download= | =d= | =d= | + | =eww-add-bookmark= | =b= | =m= | + | =eww-readable= | =R= | =R=, =r= | + | =eww-next-url= | =n= | =]]=, =gj= | + | =eww-previous-url= | =p= | =[[=, =gk= | + | =eww= | =G= | =o= | + | =scroll-up-command= | n/a | =SPC= | + | =scroll-down-command= | n/a | =S-SPC= | + | =shr-next-link= | =TAB= | =TAB= | + | =shr-previous-link= | =S-TAB= | =S-TAB= | + | =eww-list-bookmarks= | =B= | =gb= | + | =eww-list-histories= | =H= | =gh= | + | =eww-list-buffers= | =S= | =gt= | + | =eww-reload= | =g= | =gr= | + | =eww-copy-page-url= (=y= operator) | =w= | =yu= | + | =quit-window= | n/a | =q=, =ZQ=, =ZZ= | + +** eww-history-mode-map + + | Command | Original | Evil | + |----------------------+----------+-------| + | =eww-history-browse= | =RET= | =RET= | + | =revert-buffer= | n/a | =gr= | + +** eww-buffers-mode-map + + | Command | Original | Evil | + |----------------------------+----------+------------| + | =eww-buffer-kill= | =D= | =D= | + | =eww-buffer-select= | =RET= | =RET= | + | =eww-buffer-show-next= | n/a | =]]=, =gj= | + | =eww-buffer-show-previous= | n/a | =[[=, =gk= | + | =revert-buffer= | n/a | =gr= | + +** eww-bookmark-mode-map + + | Command | Original | Evil | + |------------------------------------+----------+-------| + | =eww-bookmark-kill= | =D= | =D= | + | =eww-bookmark-yank= | =P= | =P= | + | =eww-bookmark-browse= | =RET= | =RET= | + | =revert-buffer= | n/a | =gr= | + | =eww-copy-page-url= (=y= operator) | n/a | =yu= | diff --git a/.config/emacs/lisp/evil-collection/modes/eww/evil-collection-eww.el b/.config/emacs/lisp/evil-collection/modes/eww/evil-collection-eww.el new file mode 100644 index 0000000..96a848e --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/eww/evil-collection-eww.el @@ -0,0 +1,128 @@ +;;; evil-collection-eww.el --- Evil bindings for EWW -*- lexical-binding: t -*- + +;; Copyright (C) 2017 Pierre Neidhardt + +;; Author: Pierre Neidhardt +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, eww, tools + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: +;; Evil bindings for EWW. + +;;; Code: +(require 'eww) +(require 'evil-collection) + +(defvar evil-collection-eww-maps '(eww-mode-map + eww-history-mode-map + eww-buffers-mode-map + eww-bookmark-mode-map)) + +;;;###autoload +(defun evil-collection-eww-setup () + "Set up `evil' bindings for `eww'." + + (evil-set-initial-state 'eww-mode 'normal) + (evil-collection-define-key 'normal 'eww-mode-map + "^" 'eww-up-url + "u" 'eww-up-url + "U" 'eww-top-url + (kbd "DEL") 'eww-back-url + "H" 'eww-back-url + "L" 'eww-forward-url + + "gf" 'eww-view-source ; Like qutebrowser. + + "&" 'eww-browse-with-external-browser + "gc" 'url-cookie-list + "zd" 'eww-toggle-paragraph-direction + "ze" 'eww-set-character-encoding + "zf" 'eww-toggle-fonts + "d" 'eww-download + "m" 'eww-add-bookmark + "R" 'eww-readable ; Default binding. + "r" 'eww-readable + + "]]" 'eww-next-url + "[[" 'eww-previous-url + "gj" 'eww-next-url + "gk" 'eww-previous-url + + ;; open + (kbd "S-") 'eww-browse-with-external-browser + "go" 'eww-browse-with-external-browser + "o" 'eww ; Like qutebrowser. + + (kbd "SPC") 'scroll-up-command + (kbd "S-SPC") 'scroll-down-command + (kbd "") 'shr-next-link + (kbd "") 'shr-previous-link + + ;; bookmarks + "gb" 'eww-list-bookmarks + + "gh" 'eww-list-histories + "gt" 'eww-list-buffers ; Like dwb, qutebrowser. + + ;; refresh + "gr" 'eww-reload + + ;; quit + "q" 'quit-window + "ZQ" 'quit-window + "ZZ" 'quit-window) + + (evil-collection-define-operator-key 'yank 'eww-mode-map + "u" 'eww-copy-page-url) + + (evil-collection-set-readonly-bindings 'eww-history-mode-map) + (evil-set-initial-state 'eww-history-mode 'normal) + (evil-collection-define-key 'normal 'eww-history-mode-map + (kbd "RET") 'eww-history-browse + ;; refresh + "gr" 'revert-buffer) + + (evil-collection-set-readonly-bindings 'eww-buffers-mode-map) + (evil-set-initial-state 'eww-buffers-mode 'normal) + (evil-collection-define-key 'normal 'eww-buffers-mode-map + "D" 'eww-buffer-kill + (kbd "RET") 'eww-buffer-select + "]]" 'eww-buffer-show-next + "[[" 'eww-buffer-show-previous + "gj" 'eww-buffer-show-next + "gk" 'eww-buffer-show-previous + ;; refresh + "gr" 'revert-buffer) + + (evil-collection-set-readonly-bindings 'eww-bookmark-mode-map) + (evil-set-initial-state 'eww-bookmark-mode 'normal) + (evil-collection-define-key 'normal 'eww-bookmark-mode-map + "D" 'eww-bookmark-kill + "P" 'eww-bookmark-yank + + (kbd "RET") 'eww-bookmark-browse + ;; refresh + "gr" 'revert-buffer) + + (evil-collection-define-operator-key 'yank 'eww-bookmark-mode-map + "u" 'eww-copy-page-url)) + +(provide 'evil-collection-eww) +;;; evil-collection-eww.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/explain-pause-mode/evil-collection-explain-pause-mode.el b/.config/emacs/lisp/evil-collection/modes/explain-pause-mode/evil-collection-explain-pause-mode.el new file mode 100644 index 0000000..fa5b43f --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/explain-pause-mode/evil-collection-explain-pause-mode.el @@ -0,0 +1,50 @@ +;;; evil-collection-explain-pause-mode.el --- Evil bindings for explain-pause-mode -*- lexical-binding: t -*- + +;; Copyright (C) 2020 Zhiwei Chen + +;; Author: Zhiwei Chen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for explain-pause-mode. + +;;; Code: +(require 'evil-collection) +(require 'explain-pause-mode nil t) + +(defconst evil-collection-explain-pause-mode-maps '(explain-pause-top-mode-map)) + +;;;###autoload +(defun evil-collection-explain-pause-mode-setup () + "Set up `evil' bindings for `explain-pause-mode'." + (evil-set-initial-state 'explain-pause-top-mode 'normal) + (evil-collection-define-key 'normal 'explain-pause-top-mode-map + "a" 'explain-pause-top-auto-refresh + "c" 'explain-pause-top-clear + "o" 'explain-pause-top-sort + + "q" 'quit-window + "ZZ" 'quit-window + "ZQ" 'quit-window)) + +(provide 'evil-collection-explain-pause-mode) + +;;; evil-collection-explain-pause-mode.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/fanyi/evil-collection-fanyi.el b/.config/emacs/lisp/evil-collection/modes/fanyi/evil-collection-fanyi.el new file mode 100644 index 0000000..69e589c --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/fanyi/evil-collection-fanyi.el @@ -0,0 +1,47 @@ +;;; evil-collection-fanyi.el --- Evil bindings for fanyi -*- lexical-binding: t -*- + +;; Copyright (C) 2021 Zhiwei Chen + +;; Author: Zhiwei Chen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for fanyi. + +;;; Code: +(require 'evil-collection) +(require 'fanyi nil t) + +(defconst evil-collection-fanyi-maps '(fanyi-mode-map)) + +;;;###autoload +(defun evil-collection-fanyi-setup () + "Set up `evil' bindings for `fanyi'." + (evil-collection-set-readonly-bindings 'fanyi-mode-map) + (evil-collection-define-key 'normal 'fanyi-mode-map + ;; tab + [tab] 'forward-button + [backtab] 'backward-button + + "s" 'fanyi-dwim)) + +(provide 'evil-collection-fanyi) +;;; evil-collection-fanyi.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/finder/README.org b/.config/emacs/lisp/evil-collection/modes/finder/README.org new file mode 100644 index 0000000..56562b9 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/finder/README.org @@ -0,0 +1,13 @@ +* finder + + Evil bindings for =finder-mode= (the package-keyword browser opened by + =M-x finder-by-keyword=). + +** Key bindings + + | Command | Original | Evil | + |------------------------+------------+--------------| + | =finder-select= | =RET=, =f= | =RET=, =SPC= | + | =finder-list-keywords= | =d= | =d= | + | =finder-summary= | =?= | =s= | + | =finder-exit= | =q= | =q= | diff --git a/.config/emacs/lisp/evil-collection/modes/finder/evil-collection-finder.el b/.config/emacs/lisp/evil-collection/modes/finder/evil-collection-finder.el new file mode 100644 index 0000000..3ec4f25 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/finder/evil-collection-finder.el @@ -0,0 +1,49 @@ +;;; evil-collection-finder.el --- Evil bindings for finder -*- lexical-binding: t -*- + +;; Copyright (C) 2020 Zhiwei Chen + +;; Author: Zhiwei Chen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, finder, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for finder. + +;;; Code: +(require 'evil-collection) +(require 'finder) + +(defconst evil-collection-finder-maps '(finder-mode-map)) + +;;;###autoload +(defun evil-collection-finder-setup () + "Set up `evil' bindings for `finder'." + (evil-set-initial-state 'finder-mode 'normal) + + (evil-collection-define-key 'normal 'finder-mode-map + (kbd "RET") 'finder-select + (kbd "SPC") 'finder-select + + "d" 'finder-list-keywords + "s" 'finder-summary + "q" 'finder-exit)) + +(provide 'evil-collection-finder) +;;; evil-collection-finder.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/flycheck/README.org b/.config/emacs/lisp/evil-collection/modes/flycheck/README.org new file mode 100644 index 0000000..04031fe --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/flycheck/README.org @@ -0,0 +1,18 @@ +* flycheck + + Evil bindings for the [[https://www.flycheck.org/][flycheck]] error list. + + Initial state for =flycheck-error-list-mode= is =normal=. + +** flycheck-error-list-mode-map (normal state) + + | Command | Original | Evil | + |--------------------------------------+----------+-------------------| + | =flycheck-error-list-next-error= | =n= | =gj=, =C-j=, =]]= | + | =flycheck-error-list-previous-error= | =p= | =gk=, =C-k=, =[[= | + | =flycheck-error-list-check-source= | =g= | =gr= | + | =flycheck-error-list-set-filter= | =f= | =s= | + | =flycheck-error-list-reset-filter= | =F= | =S= | + | =flycheck-error-list-explain-error= | =e= | =x= | + | =flycheck-error-list-goto-error= | =RET= | =RET= | + | =quit-window= | =q= | =q= | diff --git a/.config/emacs/lisp/evil-collection/modes/flycheck/evil-collection-flycheck.el b/.config/emacs/lisp/evil-collection/modes/flycheck/evil-collection-flycheck.el new file mode 100644 index 0000000..889ba32 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/flycheck/evil-collection-flycheck.el @@ -0,0 +1,56 @@ +;;; evil-collection-flycheck.el --- Evil bindings for flycheck -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, flycheck, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for `flycheck-mode'. + +;;; Code: +(require 'evil-collection) +(require 'flycheck nil t) + +(defvar flycheck-error-list-mode-map) + +(defconst evil-collection-flycheck-maps '(flycheck-error-list-mode-map)) + +;;;###autoload +(defun evil-collection-flycheck-setup () + "Set up `evil' bindings for `flycheck'." + (evil-set-initial-state 'flycheck-error-list-mode 'normal) + (evil-collection-define-key 'normal 'flycheck-error-list-mode-map + "gj" 'flycheck-error-list-next-error + "gk" 'flycheck-error-list-previous-error + (kbd "C-j") 'flycheck-error-list-next-error + (kbd "C-k") 'flycheck-error-list-previous-error + "]]" 'flycheck-error-list-next-error + "[[" 'flycheck-error-list-previous-error + "gr" 'flycheck-error-list-check-source + "s" 'flycheck-error-list-set-filter + "S" 'flycheck-error-list-reset-filter + "x" 'flycheck-error-list-explain-error + (kbd "RET") 'flycheck-error-list-goto-error + "q" 'quit-window)) + +(provide 'evil-collection-flycheck) +;;; evil-collection-flycheck.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/flymake/README.org b/.config/emacs/lisp/evil-collection/modes/flymake/README.org new file mode 100644 index 0000000..d46e8c2 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/flymake/README.org @@ -0,0 +1,15 @@ +* flymake + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/flymake/index.html][Flymake]]. + +** Key bindings + + Applied to both =flymake-diagnostics-buffer-mode-map= and + =flymake-project-diagnostics-mode-map=. + + | Command | Original | Evil | + |---------------------------+----------+------------------------------| + | =flymake-goto-next-error= | n/a | =C-j= | + | =flymake-goto-prev-error= | n/a | =C-k= | + | =flymake-goto-diagnostic= | =RET= | =RET= | + | =flymake-show-diagnostic= | =SPC= | =S-RET=, =M-RET=, =go=, =gO= | diff --git a/.config/emacs/lisp/evil-collection/modes/flymake/evil-collection-flymake.el b/.config/emacs/lisp/evil-collection/modes/flymake/evil-collection-flymake.el new file mode 100644 index 0000000..86ce75e --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/flymake/evil-collection-flymake.el @@ -0,0 +1,52 @@ +;;; evil-collection-flymake.el --- Evil Bindings for Flymake -*- lexical-binding: t -*- + +;; Copyright (C) 2018, 2022 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, flymake, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for `flymake-mode'. + +;;; Code: +(require 'flymake) +(require 'evil-collection) + +(defconst evil-collection-flymake-maps '(flymake-mode-map + flymake-project-diagnostics-mode-map + flymake-diagnostics-buffer-mode-map)) + +;;;###autoload +(defun evil-collection-flymake-setup () + "Set up `evil' bindings for `flymake'." + (dolist (map '(flymake-diagnostics-buffer-mode-map flymake-project-diagnostics-mode-map)) + (evil-collection-set-readonly-bindings map) + (evil-collection-define-key 'normal map + (kbd "C-j") 'flymake-goto-next-error + (kbd "C-k") 'flymake-goto-prev-error + (kbd "RET") 'flymake-goto-diagnostic + (kbd "S-RET") 'flymake-show-diagnostic + (kbd "M-RET") 'flymake-show-diagnostic + (kbd "go") 'flymake-show-diagnostic + (kbd "gO") 'flymake-show-diagnostic))) + +(provide 'evil-collection-flymake) +;;; evil-collection-flymake.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/forge/README.org b/.config/emacs/lisp/evil-collection/modes/forge/README.org new file mode 100644 index 0000000..b7cf5d5 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/forge/README.org @@ -0,0 +1,44 @@ +* forge + + Evil bindings for [[https://github.com/magit/forge][forge]]. + + Setup disables =forge-add-default-bindings= (which would clobber evil keys + on magit maps), then rebinds forge dispatch and remaps =magit-browse-thing= + on the relevant magit section maps. The state used is controlled by + =evil-collection-forge-state=. + +** Key bindings + +*** magit-mode-map + + | Command | Original | Evil | + |------------------+----------+------| + | =forge-dispatch= | (none) | =@= | + +*** magit-commit-section-map / magit-remote-section-map / magit-branch-section-map + + | Command | Original | Evil | + |---------------------------------------------------------+----------+---------------------------------| + | =forge-browse-dwim= / =forge-browse-remote= / =-branch= | n/a | (remap of =magit-browse-thing=) | + | =forge-visit-topic= | n/a | =C-c C-v= (commit / branch) | + +** Transient extensions + + The following are appended to magit transients: + + | Transient | Suffix | + |---------------------+-------------------------------------------| + | =magit-dispatch= | =@= Forge | + | =magit-fetch= | =n= forge topics, =N= forge notifications | + | =magit-pull= | =n= forge topics, =N= forge notifications | + | =magit-branch= | =f= pull-request, =F= from pull-request | + | =magit-worktree= | =n= pull-request worktree | + | =magit-status-jump= | =Np= pull-requests, =Ni= issues | + | =magit-merge= | =M= Merge using API | + +** Customization + + | Variable | Default | Purpose | + |----------------------------------------+----------------------+---------------------------------------------------| + | =evil-collection-forge-use-y-for-yank= | =t= | Keep =y= as yank; also adds visual state. | + | =evil-collection-forge-state= | =normal= or =motion= | Evil state used for forge bindings on magit maps. | diff --git a/.config/emacs/lisp/evil-collection/modes/forge/evil-collection-forge.el b/.config/emacs/lisp/evil-collection/modes/forge/evil-collection-forge.el new file mode 100644 index 0000000..1392c96 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/forge/evil-collection-forge.el @@ -0,0 +1,113 @@ +;;; evil-collection-forge.el --- Evil-based key bindings for forge -*- lexical-binding: t; -*- + +;; Copyright (C) 2021 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Package-Requires: ((emacs "26.3") (evil "1.2.3")) +;; Homepage: https://github.com/emacs-evil/evil-collection +;; Version: 0.4.1 + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: + +;; This library configures Magit and Evil to play well with each +;; other. For some background see: +;; https://github.com/emacs-evil/evil-collection/issues/543. + +;;; Code: + +(require 'evil-collection) +(require 'forge nil t) +(require 'transient nil t) + +(defcustom evil-collection-forge-use-y-for-yank t + "View `evil-collection-magit-state' for more information." + :group 'magit + :type 'boolean) + +(defcustom evil-collection-forge-state + (if evil-collection-forge-use-y-for-yank 'normal 'motion) + "State to use for forge." + :group 'magit + :type 'symbol) + +(defvar forge-add-default-bindings) + +;;;###autoload +(defun evil-collection-forge-setup () + "Set up `evil' bindings for `magit'." + ;; The latest release tag of forge doesn't include + ;; `forge-add-default-bindings' yet, it will throw an error: + ;; + ;; void-variable `forge-add-default-bindings' + ;; + ;; for GNU Guix and MELPA stable users. + (when (bound-and-true-p forge-add-default-bindings) + (message "Setting `forge-add-default-bindings' to nil in `evil-collection-forge-setup'. +To suppress this message you can set this variable to nil in your init.el file.") + (setq forge-add-default-bindings nil)) + (let ((states (if evil-collection-forge-use-y-for-yank + `(,evil-collection-forge-state visual) + `(,evil-collection-forge-state)))) + (dolist (state states) + (evil-collection-define-key state 'magit-mode-map "@" 'forge-dispatch) + + (evil-collection-define-key + state 'magit-commit-section-map + [remap magit-browse-thing] 'forge-browse-dwim) + (evil-collection-define-key + state 'magit-remote-section-map + [remap magit-browse-thing] 'forge-browse-remote) + (evil-collection-define-key + state 'magit-branch-section-map + [remap magit-browse-thing] 'forge-browse-branch) + + (evil-collection-define-key + state 'magit-commit-section-map (kbd "C-c C-v") 'forge-visit-topic) + (evil-collection-define-key + state 'magit-branch-section-map (kbd "C-c C-v") 'forge-visit-topic))) + + ;; https://github.com/magit/forge/blob/master/lisp/forge.el + + (transient-append-suffix 'magit-dispatch "!" + '("@" "Forge" forge-dispatch)) ;; N -> @ + + (transient-append-suffix 'magit-fetch "m" + '("n" "forge topics" forge-pull)) + (transient-append-suffix 'magit-fetch "n" + '("N" "forge notifications" forge-pull-notifications)) + (transient-append-suffix 'magit-pull "m" + '("n" "forge topics" forge-pull)) + (transient-append-suffix 'magit-pull "n" + '("N" "forge notifications" forge-pull-notifications)) + (transient-append-suffix 'magit-branch "w" + '("f" "pull-request" forge-checkout-pullreq)) + (transient-append-suffix 'magit-branch "W" + '("F" "from pull-request" forge-branch-pullreq)) + (transient-append-suffix 'magit-worktree "c" + '("n" "pull-request worktree" forge-checkout-worktree)) + (transient-append-suffix 'magit-status-jump "w" + '("Np" "pull-requests" forge-jump-to-pullreqs)) + (transient-append-suffix 'magit-status-jump "Np" + '("Ni" "issues" forge-jump-to-issues)) + (transient-append-suffix 'magit-merge "a" + '(7 "M" "Merge using API" forge-merge))) + +;;; evil-collection-forge.el ends soon +(provide 'evil-collection-forge) +;; Local Variables: +;; End: +;;; evil-collection-forge.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/free-keys/evil-collection-free-keys.el b/.config/emacs/lisp/evil-collection/modes/free-keys/evil-collection-free-keys.el new file mode 100644 index 0000000..b6a5f49 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/free-keys/evil-collection-free-keys.el @@ -0,0 +1,53 @@ +;;; evil-collection-free-keys.el --- Bindings for `free-keys' -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, emacs, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for `free-keys'. +(require 'evil-collection) +(require 'free-keys nil t) + +;;; Code: +(defvar free-keys-mode-map) + +(defconst evil-collection-free-keys-maps '(free-keys-mode-map)) + +(defun evil-collection-free-keys-set-header-line-format () + "Tweak `header-line-format' locally for `free-keys'." + (setq-local header-line-format + "Help: (c) change buffer (p) change prefix (q) quit")) + +;;;###autoload +(defun evil-collection-free-keys-setup () + "Set up `evil' bindings for `free-keys'." + (add-hook 'free-keys-mode-hook + #'evil-collection-free-keys-set-header-line-format) + (evil-set-initial-state 'free-keys-mode 'normal) + (evil-collection-define-key 'normal 'free-keys-mode-map + "c" 'free-keys-change-buffer + "p" 'free-keys-set-prefix + "q" 'quit-window)) + +(provide 'evil-collection-free-keys) +;;; evil-collection-free-keys.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/fzfa/README.org b/.config/emacs/lisp/evil-collection/modes/fzfa/README.org new file mode 100644 index 0000000..a093e2f --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/fzfa/README.org @@ -0,0 +1,19 @@ +* fzfa + + Evil bindings for [[https://github.com/jojojames/fzfa][fzfa]]. + + No keymap is rebound. Setup marks fzfa's jump-style commands as + non-repeatable and registers them as evil jumps so =C-o= / =C-i= work after + selection. + +** Jump commands + + The commands in =evil-collection-fzfa-jump-commands= are declared with + =:jump t= and =evil-declare-not-repeat=. This includes buffer-local jumps + (e.g. =fzfa-swiper=, =fzfa-imenu=, =fzfa-mark=, =fzfa-outline=, + =fzfa-evil-marks=) and cross-buffer / file jumps (e.g. =fzfa-buffer=, + =fzfa-recent-file=, =fzfa-find=, =fzfa-grep=, =fzfa-project-find-file=, + =fzfa-evil-jumps=, =fzfa-org-heading=, =fzfa-info=, etc.). + + Non-jumping commands like =fzfa-yank-pop=, =fzfa-register=, =fzfa-M-x= and + the various history pickers are intentionally excluded. diff --git a/.config/emacs/lisp/evil-collection/modes/fzfa/evil-collection-fzfa.el b/.config/emacs/lisp/evil-collection/modes/fzfa/evil-collection-fzfa.el new file mode 100644 index 0000000..ad54dbf --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/fzfa/evil-collection-fzfa.el @@ -0,0 +1,111 @@ +;;; evil-collection-fzfa.el --- Evil bindings for fzfa -*- lexical-binding: t -*- + +;; Copyright (C) 2026 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "29.1")) +;; Keywords: evil, fzfa, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for `fzfa'. +;; +;; The fzfa commands are autoloaded so no (require 'fzfa nil t) is needed. + +;;; Code: +(require 'evil-collection) + +(defvar evil-collection-fzfa-jump-commands + '(;; Buffer-local jumps. + fzfa-swiper + fzfa-imenu + fzfa-imenu-all-but-current + fzfa-mark + fzfa-outline + fzfa-evil-marks + ;; Cross-buffer / file jumps. + fzfa-swiper-all + fzfa-imenu-all + fzfa-global-mark + fzfa-recent-file + fzfa-buffer + fzfa-bookmark + fzfa-tramp + fzfa-evil-jumps + fzfa-find + fzfa-fd + fzfa-locate + fzfa-grep + fzfa-grep-current-file + fzfa-ugrep + fzfa-rg + fzfa-rg-files + fzfa-ag + fzfa-ag-files + fzfa-git-grep + fzfa-git-ls-files + fzfa-git-modified-locally + fzfa-git-added-files + fzfa-git-staged-for-commit + fzfa-git-modified-in-head + fzfa-git-log-grep + fzfa-hg-files + fzfa-hg-modified-locally + fzfa-hg-added-files + fzfa-hg-modified-in-head + fzfa-project-find-file + fzfa-project-find-dir + fzfa-project-buffer + fzfa-project-recentf + fzfa-project-switch-project + fzfa-compile-error + fzfa-flymake + fzfa-flymake-project + fzfa-org-heading + fzfa-org-heading-all + fzfa-org-agenda + fzfa-org-todo + fzfa-org-tags-view + fzfa-info + fzfa-info-emacs + fzfa-info-elisp + fzfa-info-org + fzfa-info-cl + fzfa-info-eieio + fzfa-info-magit + fzfa-info-at-point + fzfa-hungry-swiper + fzfa-hungry-find + fzfa-find-any + fzfa-find-some + fzfa-evil-any) + "List of `fzfa' commands that should be treated as evil jumps.") + +(defun evil-collection-fzfa-set-bindings () + "Set the bindings." + (dolist (cmd evil-collection-fzfa-jump-commands) + (evil-declare-not-repeat cmd) + (evil-set-command-property cmd :jump t))) + +;;;###autoload +(defun evil-collection-fzfa-setup () + "Set up `evil' bindings for `fzfa'." + (evil-collection-fzfa-set-bindings)) + +(provide 'evil-collection-fzfa) +;;; evil-collection-fzfa.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/geiser/README.org b/.config/emacs/lisp/evil-collection/modes/geiser/README.org new file mode 100644 index 0000000..d20565b --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/geiser/README.org @@ -0,0 +1,62 @@ +* geiser + + Evil bindings for [[https://www.nongnu.org/geiser/][Geiser]] (Scheme). + + Sets initial state to =normal= for =geiser-debug-mode= and + =geiser-doc-mode=. When =evil-move-beyond-eol= is nil, advises + =geiser-eval-last-sexp= and =geiser-eval-last-sexp-and-print= so the + last sexp is taken with point treated as one past EOL in normal/motion + state. + +** Key bindings + +*** geiser-mode-map + + | Command | Original | Evil | + |----------------------------------------+---------------+-------| + | =geiser-edit-symbol-at-point= | =M-.= | =gd= | + | =geiser-pop-symbol-stack= | =M-,= | =C-t= | + | =geiser-mode-switch-to-repl= | =C-c C-z= | =gz= | + | =geiser-mode-switch-to-repl-and-enter= | =C-c C-a= | =gZ= | + | =geiser-doc-symbol-at-point= | =C-c C-d C-d= | =K= | + +*** geiser-repl-mode-map + + | Command | Original | Evil | + |-----------------------------------+---------------+-------------------------------------| + | =geiser-edit-symbol-at-point= | =M-.= | =gd= | + | =geiser-pop-symbol-stack= | =M-,= | =C-t= | + | =geiser-repl-next-prompt= | =C-c C-n= | =gj=, =C-j=, =]]= | + | =geiser-repl-previous-prompt= | =C-c C-p= | =gk=, =C-k=, =[[= | + | =geiser-doc-symbol-at-point= | =C-c C-d C-d= | =K= | + | =geiser-repl-maybe-send= | =RET= | =RET= (submit state) | + | =geiser-repl--newline-and-indent= | =C-j= | =S-=, =RET= (newline state) | + + Whether =RET= submits depends on =evil-collection-repl-submit-state=: + in =insert= (default) =RET= submits, =S-= inserts a newline; + in =normal=, =RET= inserts a newline in insert state and submits in + normal state. + +*** geiser-doc-mode-map + + | Command | Original | Evil | + |-------------------------------+--------------+----------------------| + | =forward-button= | =TAB=, =n= | =TAB=, =gj=, =C-j= | + | =backward-button= | =S-TAB=, =p= | =S-TAB=, =gk=, =C-k= | + | =geiser-edit-symbol-at-point= | =.= | =gd= | + | =geiser-pop-symbol-stack= | =M-,= | =C-t= | + | =geiser-doc-refresh= | =g=, =r= | =gr= | + | =View-quit= | =q= (View) | =q= | + | =geiser-doc-switch-to-repl= | =z= | =gz= | + | =geiser-doc-next= | =f= | =>= | + | =geiser-doc-previous= | =b= | =<= | + | =geiser-doc-next-section= | =N= | =]]= | + | =geiser-doc-previous-section= | =P= | =[[= | + | =geiser-doc-kill-page= | =k= | =x= | + | =geiser-doc-clean-history= | =c= | =X= | + +*** geiser-debug-mode-map + + | Command | Original | Evil | + |---------------+----------+------| + | =quit-window= | | =q= | diff --git a/.config/emacs/lisp/evil-collection/modes/geiser/evil-collection-geiser.el b/.config/emacs/lisp/evil-collection/modes/geiser/evil-collection-geiser.el new file mode 100644 index 0000000..24fb46e --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/geiser/evil-collection-geiser.el @@ -0,0 +1,115 @@ +;;; evil-collection-geiser.el --- Bindings for `geiser' -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, geiser, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for `geiser'. + +;;; Code: +(require 'evil-collection) +(require 'geiser nil t) + +(defvar geiser-debug-mode-map) +(defvar geiser-doc-mode-map) + +(defconst evil-collection-geiser-maps '(geiser-debug-mode-map + geiser-doc-mode-map + geiser-repl-mode-map + geiser-mode-map)) + +(defun evil-collection-geiser-last-sexp (command &rest args) + "In normal-state or motion-state, last sexp ends at point." + (if (and (not evil-move-beyond-eol) + (or (evil-normal-state-p) (evil-motion-state-p))) + (save-excursion + (unless (or (eobp) (eolp)) (forward-char)) + (apply command args)) + (apply command args))) + +;;;###autoload +(defun evil-collection-geiser-setup () + "Set up bindings for `geiser'." + (unless evil-move-beyond-eol + (advice-add 'geiser-eval-last-sexp :around 'evil-collection-geiser-last-sexp) + (advice-add 'geiser-eval-last-sexp-and-print :around 'evil-collection-geiser-last-sexp)) + + (evil-set-initial-state 'geiser-debug-mode 'normal) + (evil-set-initial-state 'geiser-doc-mode 'normal) + + (evil-collection-define-key 'normal 'geiser-debug-mode-map + "q" 'quit-window) + + (evil-collection-define-key 'normal 'geiser-doc-mode-map + (kbd "") 'forward-button + (kbd "") 'backward-button + "gd" 'geiser-edit-symbol-at-point + (kbd "C-t") 'geiser-pop-symbol-stack + "gr" 'geiser-doc-refresh + "q" 'View-quit + "gz" 'geiser-doc-switch-to-repl + ">" 'geiser-doc-next + "<" 'geiser-doc-previous + "gj" 'forward-button + "gk" 'backward-button + (kbd "C-j") 'forward-button + (kbd "C-k") 'backward-button + "]]" 'geiser-doc-next-section + "[[" 'geiser-doc-previous-section + "x" 'geiser-doc-kill-page + "X" 'geiser-doc-clean-history) + + (evil-collection-define-key 'insert 'geiser-repl-mode-map + (kbd "S-") 'geiser-repl--newline-and-indent) + + (let* ((submit evil-collection-repl-submit-state) + (newline-state (if (eq submit 'normal) 'insert 'normal))) + (evil-collection-define-key submit 'geiser-repl-mode-map + (kbd "RET") 'geiser-repl-maybe-send + (kbd "\C-m") 'geiser-repl-maybe-send + [return] 'geiser-repl-maybe-send) + (evil-collection-define-key newline-state 'geiser-repl-mode-map + (kbd "RET") 'geiser-repl--newline-and-indent + (kbd "\C-m") 'geiser-repl--newline-and-indent + [return] 'geiser-repl--newline-and-indent)) + + (evil-collection-define-key 'normal 'geiser-repl-mode-map + "gd" 'geiser-edit-symbol-at-point + (kbd "C-t") 'geiser-pop-symbol-stack + "gj" 'geiser-repl-next-prompt + "gk" 'geiser-repl-previous-prompt + (kbd "C-j") 'geiser-repl-next-prompt + (kbd "C-k") 'geiser-repl-previous-prompt + "]]" 'geiser-repl-next-prompt + "[[" 'geiser-repl-previous-prompt + "K" 'geiser-doc-symbol-at-point) + + (evil-collection-define-key 'normal 'geiser-mode-map + "gd" 'geiser-edit-symbol-at-point + (kbd "C-t") 'geiser-pop-symbol-stack + "gZ" 'geiser-mode-switch-to-repl-and-enter + "gz" 'geiser-mode-switch-to-repl + "K" 'geiser-doc-symbol-at-point)) + +(provide 'evil-collection-geiser) +;;; evil-collection-geiser.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/ggtags/evil-collection-ggtags.el b/.config/emacs/lisp/evil-collection/modes/ggtags/evil-collection-ggtags.el new file mode 100644 index 0000000..1414255 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/ggtags/evil-collection-ggtags.el @@ -0,0 +1,104 @@ +;;; evil-collection-ggtags.el --- Evil bindings for ggtags -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, ggtags, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for `ggtags-mode'. + +;;; Code: +(require 'evil-collection) +(require 'ggtags nil t) + +(defvar ggtags-global-mode-map) +(defvar ggtags-mode-map) +(defvar ggtags-view-search-history-mode-map) +(defvar ggtags-view-tag-history-mode-map) +(defvar ggtags-navigation-map) + +(defconst evil-collection-ggtags-maps '(ggtags-mode-map + ggtags-view-search-history-mode-map + ggtags-view-tag-history-mode-map + ggtags-navigation-map)) + +;;;###autoload +(defun evil-collection-ggtags-setup () + "Set up `evil' bindings for `ggtags'." + (evil-set-initial-state 'ggtags-global-mode 'normal) + (evil-set-initial-state 'ggtags-view-search-history-mode 'normal) + (evil-set-initial-state 'ggtags-view-tag-history-mode 'normal) + + ;; `ggtags-navigation-mode' is global and will conflict with other bindings. + ;; https://github.com/leoliu/ggtags/issues/124 + (when (boundp 'ggtags-enable-navigation-keys) + (setq ggtags-enable-navigation-keys nil)) + + (evil-collection-define-key 'normal 'ggtags-mode-map + "gd" 'ggtags-find-tag-dwim + (kbd "C-t") 'ggtags-prev-mark + "gf" 'ggtags-find-file) + + (when evil-collection-want-find-usages-bindings + (evil-collection-define-key 'normal 'ggtags-mode-map + "gr" 'ggtags-find-reference)) + + (evil-collection-define-key 'normal 'ggtags-view-search-history-mode-map + "gj" 'ggtags-view-search-history-next + "gk" 'ggtags-view-search-history-prev + (kbd "C-j") 'ggtags-view-search-history-next + (kbd "C-k") 'ggtags-view-search-history-prev + "]]" 'ggtags-view-search-history-next + "[[" 'ggtags-view-search-history-prev + "x" 'ggtags-view-search-history-kill + "gr" 'ggtags-view-search-history-update + "r" 'ggtags-save-to-register + "R" 'ggtags-view-search-history-action + "q" 'ggtags-kill-window) + + (evil-collection-define-key 'normal 'ggtags-view-tag-history-mode-map + "gj" 'next-error-no-select + (kbd "C-j") 'next-error-no-select + "]]" 'next-error-no-select + "gk" 'previous-error-no-select + (kbd "C-k") 'previous-error-no-select + (kbd "[[") 'previous-error-no-select + "q" 'ggtags-kill-window) + + (evil-collection-define-key 'normal 'ggtags-navigation-map + ;; navigation + "gj" 'next-error + "gk" 'previous-error + (kbd "C-j") 'next-error + (kbd "C-k") 'previous-error + "]]" 'ggtags-navigation-next-file + "[[" 'ggtags-navigation-previous-file + + ;; search + "s" 'ggtags-navigation-isearch-forward + "S" 'ggtags-navigation-isearch-forward + + "go" 'ggtags-navigation-visible-mode ;; FIXME: This can be anything. + (kbd "RET") 'ggtags-navigation-mode-done)) + +(provide 'evil-collection-ggtags) +;;; evil-collection-ggtags.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/git-timemachine/README.org b/.config/emacs/lisp/evil-collection/modes/git-timemachine/README.org new file mode 100644 index 0000000..bfa19ae --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/git-timemachine/README.org @@ -0,0 +1,20 @@ +* git-timemachine + + Evil bindings for [[https://codeberg.org/pidu/git-timemachine][git-timemachine]]. + + Bindings are installed on =git-timemachine-mode= as minor-mode keys so + they apply in =normal= state in any buffer where the minor mode is + active. + +** Key bindings + + | Command | Original | Evil | + |---------------------------------------------+----------+-------| + | =git-timemachine-show-previous-revision= | =p= | =C-k= | + | =git-timemachine-show-next-revision= | =n= | =C-j= | + | =git-timemachine-quit= | =q= | =q= | + | =git-timemachine-show-nth-revision= | =g= | =gtg= | + | =git-timemachine-show-revision-fuzzy= | =t= | =gtt= | + | =git-timemachine-kill-abbreviated-revision= | =w= | =gty= | + | =git-timemachine-kill-revision= | =W= | =gtY= | + | =git-timemachine-blame= | =b= | =gtb= | diff --git a/.config/emacs/lisp/evil-collection/modes/git-timemachine/evil-collection-git-timemachine.el b/.config/emacs/lisp/evil-collection/modes/git-timemachine/evil-collection-git-timemachine.el new file mode 100644 index 0000000..3debd22 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/git-timemachine/evil-collection-git-timemachine.el @@ -0,0 +1,49 @@ +;;; evil-collection-git-timemachine.el --- Bindings for `git-timemachine' -*- lexical-binding: t -*- + +;; Author: William Carroll +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, git, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil keybindings for `git-timemachine' that conform to the principles +;; outlines in evil-collection + +;;; Code: +(require 'evil-collection) +(require 'git-timemachine nil t) + +(defvar git-timemachine-mode-map) +(defconst evil-collection-git-timemachine-map '(git-timemachine-mode-map)) + +;;;###autoload +(defun evil-collection-git-timemachine-setup () + "Setup `evil' keybindings for `git-timemachine'." + (evil-define-minor-mode-key 'normal 'git-timemachine-mode + "\C-k" 'git-timemachine-show-previous-revision + "\C-j" 'git-timemachine-show-next-revision + "q" 'git-timemachine-quit + "gtg" 'git-timemachine-show-nth-revision + "gtt" 'git-timemachine-show-revision-fuzzy + "gty" 'git-timemachine-kill-abbreviated-revision + "gtY" 'git-timemachine-kill-revision + "gtb" 'git-timemachine-blame)) + +(provide 'evil-collection-git-timemachine) +;;; evil-collection-git-timemachine.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/gited/evil-collection-gited.el b/.config/emacs/lisp/evil-collection/modes/gited/evil-collection-gited.el new file mode 100644 index 0000000..c68c48c --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/gited/evil-collection-gited.el @@ -0,0 +1,157 @@ +;;; evil-collection-gited.el --- Evil bindings for Gited -*- lexical-binding: t -*- + +;; Copyright (C) 2022 Earl Hyatt + +;; Author: Earl Hyatt +;; Maintainer: Earl Hyatt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3") (evil "1.2") (gited "0.6")) +;; Keywords: evil, git, tools, vc + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for Gited. + +;;; Code: +(require 'gited nil t) +(require 'evil-collection) +(declare-function gited-summary "gited") +(declare-function gited-hide-details-mode "gited") + +(defconst evil-collection-gited-maps '(gited-mode-map)) + +;;;###autoload +(defun evil-collection-gited-setup () + "Set up `evil' bindings for `gited'." + (evil-collection-set-readonly-bindings 'gited-mode-map) + (evil-collection-define-key 'normal 'gited-mode-map + "g?" 'gited-summary + "(" 'gited-hide-details-mode + "gr" 'gited-update + (kbd "C-c C-c") 'gited-commit + (kbd "C-c C-b") 'gited-list-branches + + ;; Movement + "j" 'gited-next-line + "k" 'gited-prev-line + (kbd "M-{") 'gited-prev-marked-branch + (kbd "M-}") 'gited-next-marked-branch + "G" 'gited-goto-last-branch + "gg" 'gited-goto-first-branch + "gj" 'gited-next-marked-branch + "gk" 'gited-prev-marked-branch + "gl" 'tabulated-list-next-column + "gh" 'tabulated-list-previous-column + "]]" 'gited-next-marked-branch + "[[" 'gited-prev-marked-branch + "<" 'gited-prev-marked-branch + ">" 'gited-next-marked-branch + " " 'gited-next-line + [?\S-\ ] 'gited-prev-line + [remap next-line] 'gited-next-line + [remap previous-line] 'gited-prev-line + "J" 'gited-goto-branch + + "gA" 'gited-move-to-end-of-author + "ga" 'gited-move-to-author + "gB" 'gited-move-to-end-of-branchname + "gb" 'gited-move-to-branchname + "gD" 'gited-move-to-end-of-date + "gd" 'gited-move-to-date + + ;; Operations on Things at Point + "=" 'gited-diff + "A" 'gited-add-patched-files + "a" 'gited-apply-patch + "B" 'gited-bisect + "C" 'gited-copy-branch + "c" 'gited-checkout-branch + "d" 'gited-flag-branch-deletion + "e" 'gited-extract-patches + "F" 'gited-pull ; Similar to Magit binding. Don't conflict with "f". + "gR" 'gited-change-current-remote-rep + + "gs" 'gited-status ; These "g"-prefixed operations open + "gL" 'gited-log ; new windows. + "gN" 'gited-log-last-n-commits ; + "gO" 'gited-origin ; Use "go" to visit branch source. + "gc" 'gited-show-commit ; + + "M" 'gited-merge-branch + "O" 'tabulated-list-sort + "o" 'tabulated-list-sort + "P" 'gited-push ; Only branches. + "p" 'gited-set-object-upstream ; Pushes branches and tags. + "R" 'gited-rename-branch + "r" 'gited-reset-branch + "s" nil ; Don't conflict with `tabulated-list-sort' on "S". + "ss" 'gited-stash + "sA" 'gited-stash-pop + "sa" 'gited-stash-apply + "sb" 'gited-stash-branch + "sD" 'gited-delete-all-stashes + "sd" 'gited-stash-drop + "Y" 'gited-copy-branchname-as-kill + + (kbd "RET") 'gited-visit-branch-sources + "go" 'gited-visit-branch-sources + + ;; Operations on Marked and Flagged Branches/Tags + "D" 'gited-do-delete + "K" 'gited-do-kill-lines + "T" 'gited-do-sync-with-trunk + "x" 'gited-do-flagged-delete + + ;; Marks + "*" nil + "*%" 'gited-mark-branches-regexp + "*m" 'gited-mark + "*u" 'gited-unmark + "*?" 'gited-unmark-all-branches + "*!" 'gited-unmark-all-marks + (kbd "* ") 'gited-unmark-backward + (kbd "* C-n") 'gited-next-marked-branch + (kbd "* C-p") 'gited-prev-marked-branch + "*t" 'gited-toggle-marks + "*l" 'gited-mark-local-tags + "*N" 'gited-number-marked + + "U" 'gited-unmark-all-marks + "m" 'gited-mark + "t" 'gited-toggle-marks + "~" 'gited-toggle-marks + "u" 'gited-unmark + (kbd "") 'gited-unmark-backward + + ;; Searching for marks + "%" nil + ;; "%d" No flag for deletion. + "%t" 'gited-mark-branches-by-date + "%c" 'gited-mark-branches-containing-commit + "%g" 'gited-mark-branches-containing-regexp + "%m" 'gited-mark-branches-regexp + "%M" 'gited-mark-merged-branches + "%U" 'gited-mark-unmerged-branches + + ;; Tags instead of thumbnails. Only usable when listing tags. Ideally, + ;; these would have a separate map that would be used when displaying tags. + (kbd "C-t a") 'gited-tag-add + (kbd "C-t d") 'gited-tag-delete + (kbd "C-t D") 'gited-remote-tag-delete + (kbd "C-t F") 'gited-fetch-remote-tags)) + +(provide 'evil-collection-gited) +;;; evil-collection-gited.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/gnus/README.org b/.config/emacs/lisp/evil-collection/modes/gnus/README.org new file mode 100644 index 0000000..d9a8ae2 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/gnus/README.org @@ -0,0 +1,274 @@ +* gnus + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/gnus/index.html][Gnus]]. Initial state is normal in every gnus mode below, + insert state is inhibited, and =zz= is bound to =gnus-recenter= everywhere. + Each map keeps the bulk of its upstream alphabetic prefixes (=A=, =B=, =G=, + =M=, =S=, =W=, =X=, =Y=, =Z=, =/=, etc.); the tables below cover only what + evil-collection relocates or adds. + +** Key bindings + +*** gnus-summary-mode-map + + | Command | Original | Evil | + |-----------------------------------------------+----------------+----------------| + | =gnus-summary-exit= | =q= | =q=, =ZZ= | + | =gnus-summary-exit-no-update= | =Q= | =Q=, =ZQ= | + | =gnus-summary-help-map= | =H= | =g?= | + | =gnus-summary-widget-forward= | n/a | =TAB= | + | =gnus-summary-widget-backward= | n/a | == | + | =gnus-summary-next-page= | =SPC= | =SPC= | + | =gnus-summary-prev-page= | =DEL=, =S-SPC= | =DEL=, =S-SPC= | + | =gnus-summary-scroll-up= | =RET= | =RET= | + | =gnus-summary-prev-unread-article= | =p= | =gk=, =[[= | + | =gnus-summary-next-unread-article= | =n= | =gj=, =]]= | + | =gnus-summary-prev-thread= | =M-b= | ={= | + | =gnus-summary-next-thread= | =M-f= | =}= | + | =gnus-summary-prev-article= | =P= | =C-k= | + | =gnus-summary-next-article= | =N= | =C-j= | + | =gnus-summary-mark-as-processable= | =#= | =m= | + | =gnus-uu-mark-buffer= | (M H b) | =M= | + | =gnus-summary-unmark-as-processable= | =M-#= | =u= | + | =gnus-summary-unmark-all-processable= | (M H U) | =U= | + | =gnus-uu-mark-by-regexp= | (M P r) | =%= | + | =gnus-summary-mail-other-window= | =m= | =C=, =cc= | + | =gnus-summary-news-other-window= | (S i) | =ci= | + | =gnus-summary-followup= | =f= | =f=, =cf= | + | =gnus-summary-followup-with-original= | =F= | =F=, =cF= | + | =gnus-summary-reply= | =r= | =r=, =cr= | + | =gnus-summary-reply-with-original= | =R= | =R=, =cR= | + | =gnus-summary-very-wide-reply= | (S W) | =cw= | + | =gnus-summary-very-wide-reply-with-original= | (S W) | =cW= | + | =gnus-summary-mail-forward= | =C-c C-f= | =C-c C-f= | + | =gnus-summary-first-unread-article= | (G f) | =.= | + | =gnus-summary-best-unread-article= | (G b) | =,= | + | =gnus-summary-mark-as-read-forward= | =d= | =!= | + | =gnus-summary-tick-article-forward= | =u=, =!= | === | + | =gnus-summary-goto-article= | =j= | =J= | + | =gnus-summary-rescan-group= | =M-g= | =gr= | + | =gnus-summary-edit-article= | =e= | =e= | + | =gnus-summary-mark-as-expirable= | =E= | =E= | + | =gnus-summary-limit-map= | =/= | =z/= | + | =gnus-summary-toggle-header= | =t= | =zt= | + | =gnus-summary-limit-to-unread= | =x= | =x= | + | =gnus-summary-browse-url= | =w= | =gX= | + | =gnus-summary-refer-parent-article= | =^= | =^= | + | =gnus-summary-refer-article= | =M-^= | =M-^= | + | =gnus-summary-kill-thread= | (T K) | =Tk= | + | =gnus-summary-lower-thread= | =M-l= | =Tl= | + | =gnus-summary-raise-thread= | (T I) | =Ti= | + | =gnus-uu-mark-thread= | (T #) | =Tm= | + | =gnus-uu-unmark-thread= | (T M-#) | =Tu= | + | =gnus-summary-toggle-threads= | =M-t= | =TT= | + | =gnus-summary-show-thread= | =M-s= | =Ts=, =zo= | + | =gnus-summary-hide-thread= | =M-h= | =Th=, =zc= | + | =gnus-summary-show-all-threads= | (T S) | =TS= | + | =gnus-summary-hide-all-threads= | (T H) | =TH= | + | =gnus-summary-rethread-current= | (T t) | =Tt= | + | =gnus-summary-reparent-thread= | (T ^) | =T^= | + | =gnus-summary-reparent-children= | (T M-^) | =T M-^= | + | =gnus-summary-next-thread= | =M-f= | =Tn= | + | =gnus-summary-prev-thread= | =M-b= | =Tp= | + | =gnus-summary-down-thread= | (T d) | =Td= | + | =gnus-summary-up-thread= | (T u) | =Ta= | + | =gnus-summary-top-thread= | (T o) | =To= | + | =gnus-summary-search-article-forward= | =M-s= | =M-s= | + | =gnus-summary-search-article-backward= | =M-r= | =M-r= | + | =gnus-summary-repeat-search-article-forward= | =M-S= | =M-S= | + | =gnus-summary-repeat-search-article-backward= | =M-R= | =M-R= | + | =gnus-summary-execute-command= | =&= | =&= | + | =gnus-summary-universal-argument= | =M-&= | =M-&= | + | =gnus-cache-enter-article= | =*= | =*= | + | =gnus-cache-remove-article= | =M-*= | =M-*= | + | =gnus-summary-increase-score= | =I= | =I= | + | =gnus-summary-lower-score= | =L= | =L= | + + Grouped relocations: + + - Sort (=o= prefix): =oa= author, =oc= chars, =od= date, =oi= score, =ol= + lines, =omd= most-recent-date, =omm= marks, =omn= most-recent-number, + =on= number, =oo= original, =or= random, =os= subject, =ot= recipient. + - Save (=O= prefix, was upstream =O=): =Oo= article, =Om= mail, =Or= rmail, + =Of= file, =OF= write-article-file, =Ob= body-file, =Oh= folder, =Ov= vm, + =Op= pipe-output, =OP= muttprint. =gnus-summary-pipe-output= is also on + the literal pipe key. + - Decode (=X= prefix): =Xu/XU/Xvu/XvU= uu, =Xs/XS/Xvs/XvS= unshar, + =Xp/XP/Xvp/XvP= postscript, =Xo= save, =Xb= binhex, =XY= yenc. + - Mail-group ops (=B= prefix): =Be= expire, =BE= expire-now, =Bd= delete, + =Bm= move, =Bc= copy, =Bb= crosspost, =Bi= import, =BI= create, =Br= + respool, =Bw= edit, =Bq= respool-query, =Bt= respool-trace, =Bp= + article-posted-p. + +*** gnus-article-mode-map + + Motion-state additions: + + | Command | Original | Evil | + |-----------------------------------------+----------+------| + | =gnus-article-followup-with-original= | =F= | =F= | + | =gnus-article-reply-with-original= | =R= | =R= | + | =gnus-article-wide-reply-with-original= | =W= | =W= | + + Normal-state: + + | Command | Original | Evil | + |-----------------------------------------+----------------+----------------------| + | =evil-window-delete= | n/a | =q=, =Q=, =ZZ=, =ZQ= | + | =forward-button= | =TAB= | =TAB= | + | =backward-button= | == | == | + | =gnus-article-goto-next-page= | =SPC= | =SPC= | + | =gnus-article-goto-prev-page= | =DEL=, =S-SPC= | =DEL=, =S-SPC= | + | =gnus-summary-reply= | =r= | =r=, =cr= | + | =gnus-article-reply-with-original= | =R= | =R= | + | =gnus-article-mail= | =C-c m= | =C=, =cc= | + | =gnus-summary-reply-with-original= | n/a | =cR= | + | =gnus-summary-followup= | n/a | =cf= | + | =gnus-summary-followup-with-original= | n/a | =cF= | + | =gnus-summary-very-wide-reply= | n/a | =cw= | + | =gnus-article-wide-reply-with-original= | n/a | =cW= | + | =gnus-summary-mail-forward= | =C-c C-f= | =C-c C-f= | + | =gnus-article-refer-article= | =C-c ^= | =C-]= | + | =gnus-article-show-summary= | =h=, =s= | =s= | + | =gnus-summary-show-article= | =g= | =gr= | + | =gnus-summary-browse-url= | n/a | =gX= | + + Washing commands move under the =zw= prefix: + + | Command | Original | Evil | + |-------------------------------------------+----------+--------| + | =gnus-summary-stop-page-breaking= | =W l= | =zwl= | + | =gnus-summary-caesar-message= | =W r= | =zwr= | + | =gnus-summary-morse-message= | =W m= | =zwm= | + | =gnus-summary-idna-message= | =W i= | =zwi= | + | =gnus-summary-toggle-header= | =t= | =zwt= | + | =gnus-summary-verbose-headers= | =W v= | =zwv= | + | =gnus-article-treat-overstrike= | =W o= | =zwo= | + | =gnus-article-treat-smartquotes= | =W d= | =zwd= | + | =gnus-article-treat-non-ascii= | =W U= | =zwu= | + | =gnus-article-outlook-deuglify-article= | =W Y f= | =zwyf= | + | =gnus-article-outlook-unwrap-lines= | =W Y u= | =zwyu= | + | =gnus-article-outlook-repair-attribution= | =W Y a= | =zwya= | + | =gnus-article-outlook-rearrange-citation= | =W Y c= | =zwyc= | + | =gnus-article-fill-cited-article= | =W w= | =zww= | + | =gnus-article-fill-long-lines= | =W Q= | =zwq= | + | =gnus-article-capitalize-sentences= | =W C= | =zwc= | + | =gnus-article-de-base64-unreadable= | =W 6= | =zw6= | + | =gnus-article-decode-HZ= | =W Z= | =zwz= | + | =gnus-article-treat-ansi-sequences= | =W A= | =zwa= | + | =gnus-article-add-buttons= | =W b= | =zwb= | + | =gnus-article-add-buttons-to-head= | =W B= | =zwB= | + | =gnus-article-verify-x-pgp-sig= | =W p= | =zwp= | + | =gnus-summary-force-verify-and-decrypt= | =W s= | =zws= | + +*** gnus-group-mode-map + + | Command | Original | Evil | + |------------------------------------------+-------------+------------| + | =gnus-group-exit= | =q= | =q=, =ZZ= | + | =gnus-group-quit= | =Q= | =Q=, =ZQ= | + | =gnus-group-prev-unread-group= | =p= | =gk=, =[[= | + | =gnus-group-next-unread-group= | =n= | =gj=, =]]= | + | =gnus-group-next-group= | =N= | =C-j= | + | =gnus-group-prev-group= | =P= | =C-k= | + | =gnus-group-mail= | =m= | =C=, =cc= | + | =gnus-group-news= | =i= | =ci= | + | =gnus-group-first-unread-group= | =.= | =.= | + | =gnus-group-best-unread-group= | =,= | =,= | + | =gnus-activate-all-groups= | =M-g M-a= | =A= | + | =gnus-group-browse-foreign-server= | =B= | =B= | + | =gnus-group-edit-group= | =M-e= | =E= | + | =gnus-group-find-new-groups= | =F= | =F= | + | =gnus-group-jump-to-group= | =j= | =J= | + | =gnus-group-rename-group= | (G r) | =R= | + | =gnus-group-expunge-group= | (G x) | =X= | + | =gnus-group-select-group= | =RET= | =RET= | + | =gnus-group-read-group= | =SPC= | =SPC= | + | =gnus-group-get-new-news-this-group= | =g= | =gr= | + | =gnus-group-get-new-news= | =g= | =gR= | + | =gnus-group-unsubscribe-current-group= | =u= | =gu= | + | =gnus-group-unsubscribe-group= | =U= | =gU= | + | =gnus-group-catchup-current= | =c= | =gc= | + | =gnus-group-catchup-current-all= | =C= | =gC= | + | =gnus-group-expire-articles= | =C-c M-x= | =ge= | + | =gnus-group-expire-all-groups= | =C-c M-C-x= | =gE= | + | =gnus-group-set-current-level= | (G S l) | =gl= | + | =gnus-group-kill-group= | =C-k= | =dd=, =D= | + | =gnus-group-yank-group= | =C-y= | =p=, =P= | + | =gnus-group-mark-group= | =#= | =m= | + | =gnus-group-unmark-group= | =M-#= | =u= | + | =gnus-group-unmark-all-groups= | (M U) | =U= | + | =gnus-group-mark-buffer= | (M b) | =M=, =*= | + | =gnus-group-mark-regexp= | (M r) | =%= | + | =gnus-group-apropos= | =C-c M-a= | =s= | + | =gnus-group-description-apropos= | =C-c M-A= | =S= | + | =gnus-group-read-ephemeral-search-group= | n/a | =M-s= | + | =gnus-group-enter-server-mode= | =^= | =^= | + | =gnus-group-prev-unread-group= | =DEL= | =DEL= | + | =gnus-group-help-map= | =H= | =g?= | + + Grouped relocations: + + - Sort (=o= prefix): =oa= alphabet, =ol= level, =om= method, =on= + real-name, =or= rank, =os= sort, =ou= unread, =ov= score. + - List (=L= prefix, was upstream =A=): =L!= ticked, =L/= limit-map, =L?= + dormant, =La= active, =Lc= cached, =Lf= flush-map, =Lk= killed, =Ll= + level, =Lm= matching, =LM= all-matching, =Lp= plus-map, =Ls= groups, + =Lu= all-groups, =Lz= zombies. + - Topic (=T= prefix): =Tn= create, =Tj= jump, =Tr= rename, =Td= delete; + =zo= / =zc= show/hide topic. Topic sort under =To{a,u,l,v,r,m,e,s}=. + +*** gnus-server-mode-map + + | Command | Original | Evil | + |--------------------------------------------+----------+----------------------| + | =gnus-server-exit= | =q= | =q=, =Q=, =ZZ=, =ZQ= | + | =gnus-server-read-server= | =RET= | =RET= | + | =gnus-server-read-server-in-server-buffer= | =SPC= | =SPC= | + | =gnus-server-close-server= | =C= | =C= | + | =gnus-server-deny-server= | =D= | =D= | + | =gnus-group-make-nnir-group= | =G= | =G= | + | =gnus-server-set-cloud-method-server= | =I= | =I= | + | =gnus-server-offline-server= | =L= | =L= | + | =gnus-server-open-server= | =O= | =O= | + | =gnus-server-remove-denials= | =R= | =R= | + | =gnus-server-show-server= | =S= | =S= | + | =gnus-server-add-server= | =a= | =a= | + | =gnus-server-copy-server= | =c= | =y= | + | =gnus-server-edit-server= | =e= | =e= | + | =gnus-server-regenerate-server= | =g= | =gr= | + | =gnus-server-toggle-cloud-server= | =i= | =i= | + | =gnus-server-kill-server= | =k= | =d= | + | =gnus-server-list-servers= | =l= | =L= | + | =gnus-server-scan-server= | =s= | =s= | + | =gnus-server-yank-server= | =y= | =p= | + | =gnus-server-compact-server= | =z= | =c= | + | =gnus-server-close-all-servers= | =M-c= | =M-c= | + | =gnus-server-open-all-servers= | =M-o= | =M-o= | + +*** gnus-browse-mode-map + + | Command | Original | Evil | + |-----------------------------------------+----------+----------------------| + | =gnus-browse-exit= | =q=, =l= | =q=, =Q=, =ZZ=, =ZQ= | + | =gnus-browse-unsubscribe-current-group= | =u= | =u= | + | =gnus-browse-read-group= | =SPC= | =SPC= | + | =gnus-browse-select-group= | =RET= | =RET= | + +*** gnus-bookmark-bmenu-mode-map + + | Command | Original | Evil | + |--------------------------------------------+----------+----------------------| + | =quit-window= | =q= | =q=, =Q=, =ZZ=, =ZQ= | + | =gnus-bookmark-bmenu-mark= | =m= | =m= | + | =gnus-bookmark-bmenu-unmark= | =u= | =u= | + | =gnus-bookmark-bmenu-backup-unmark= | =DEL= | =DEL= | + | =gnus-bookmark-bmenu-delete= | =d=, =k= | =d= | + | =gnus-bookmark-bmenu-execute-deletions= | =x= | =x= | + | =gnus-bookmark-bmenu-select= | =RET= | =RET= | + | =gnus-bookmark-bmenu-load= | =l= | =L= | + | =gnus-bookmark-bmenu-save= | =s= | =s= | + | =gnus-bookmark-bmenu-toggle-infos= | =t= | =t= | + | =gnus-bookmark-bmenu-show-details= | =a= | =a= | + | =gnus-bookmark-bmenu-show-all-annotations= | n/a | =A= | + | =gnus-bookmark-bmenu-edit-annotation= | n/a | =E= | + | =gnus-bookmark-bmenu-rename= | n/a | =R= | diff --git a/.config/emacs/lisp/evil-collection/modes/gnus/evil-collection-gnus.el b/.config/emacs/lisp/evil-collection/modes/gnus/evil-collection-gnus.el new file mode 100644 index 0000000..cc6b413 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/gnus/evil-collection-gnus.el @@ -0,0 +1,491 @@ +;;; evil-collection-gnus.el --- Bindings for `gnus' -*- lexical-binding: t -*- + +;; Copyright (C) 2019 Pierre Neidhardt + +;; Author: Pierre Neidhardt +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: emacs, tools, evil + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for `gnus'. + +;;; Code: +(require 'gnus nil t) +(require 'evil-collection) + +(defconst evil-collection-gnus-maps '(gnus-article-mode-map + gnus-bookmark-bmenu-mode-map + gnus-browse-mode-map + gnus-group-mode-map + gnus-server-mode-map + gnus-summary-mode-map)) + +(defvar evil-collection-gnus-common-normal-bindings + '("zz" gnus-recenter) + "Keybindings added to all gnus normal mode-maps. +Note that there is no gnus-common-mode-map") + +;;;###autoload +(defun evil-collection-gnus-setup () + "Set up `evil' bindings for `gnus'." + + ;; For all gnus modes: + ;; - Set the initial state to 'normal + ;; - Inhibit insert + ;; - Use `evil-collection-gnus-common-normal-bindings' + (dolist (map evil-collection-gnus-maps) + (let* ((map-string (symbol-name map)) + (mode-string (string-trim-right map-string "-map")) + (mode (intern mode-string))) + (evil-set-initial-state mode 'normal) + (evil-collection-inhibit-insert-state map) + (apply #'evil-collection-define-key 'normal map + evil-collection-gnus-common-normal-bindings))) + + (evil-collection-define-key 'normal 'gnus-summary-mode-map + ;; quit + "Q" 'gnus-summary-exit-no-update + "ZQ" 'gnus-summary-exit-no-update + "q" 'gnus-summary-exit + "ZZ" 'gnus-summary-exit + + "g?" 'gnus-summary-help-map + + ;; motion + (kbd "") 'gnus-summary-widget-forward + (kbd "") 'gnus-summary-widget-backward + (kbd "") 'gnus-summary-prev-page + (kbd "S-SPC") 'gnus-summary-prev-page + (kbd "SPC") 'gnus-summary-next-page + (kbd "RET") 'gnus-summary-scroll-up + "gk" 'gnus-summary-prev-unread-article + "gj" 'gnus-summary-next-unread-article + "[[" 'gnus-summary-prev-unread-article + "]]" 'gnus-summary-next-unread-article + "{" 'gnus-summary-prev-thread + "}" 'gnus-summary-next-thread + (kbd "C-j") 'gnus-summary-next-article + (kbd "C-k") 'gnus-summary-prev-article + + ;; Marking + "m" 'gnus-summary-mark-as-processable + "M" 'gnus-uu-mark-buffer + "u" 'gnus-summary-unmark-as-processable + "U" 'gnus-summary-unmark-all-processable + "%" 'gnus-uu-mark-by-regexp + + ;; Composing + "C" 'gnus-summary-mail-other-window + "cc" 'gnus-summary-mail-other-window + "ci" 'gnus-summary-news-other-window + "f" 'gnus-summary-followup + "F" 'gnus-summary-followup-with-original + "cf" 'gnus-summary-followup + "cF" 'gnus-summary-followup-with-original + + ;; Reply + "r" 'gnus-summary-reply + "R" 'gnus-summary-reply-with-original + "cr" 'gnus-summary-reply + "cR" 'gnus-summary-reply-with-original + "cw" 'gnus-summary-very-wide-reply + "cW" 'gnus-summary-very-wide-reply-with-original + (kbd "C-c C-f") 'gnus-summary-mail-forward + + ;; Actions, like mu4e + ;; Keep the following two bindings consistent with group's + "." 'gnus-summary-first-unread-article + "," 'gnus-summary-best-unread-article + "!" 'gnus-summary-mark-as-read-forward + "=" 'gnus-summary-tick-article-forward + "J" 'gnus-summary-goto-article + "gr" 'gnus-summary-rescan-group + "e" 'gnus-summary-edit-article + "E" 'gnus-summary-mark-as-expirable + "z/" 'gnus-summary-limit-map + "zt" 'gnus-summary-toggle-header + "x" 'gnus-summary-limit-to-unread + "gX" 'gnus-summary-browse-url + + ;; Finding the parent + "^" 'gnus-summary-refer-parent-article + (kbd "M-^") 'gnus-summary-refer-article + + ;; Sorting + "oa" 'gnus-summary-sort-by-author + "oc" 'gnus-summary-sort-by-chars + "od" 'gnus-summary-sort-by-date + "oi" 'gnus-summary-sort-by-score + "ol" 'gnus-summary-sort-by-lines + "omd" 'gnus-summary-sort-by-most-recent-date + "omm" 'gnus-summary-sort-by-marks + "omn" 'gnus-summary-sort-by-most-recent-number + "on" 'gnus-summary-sort-by-number + "oo" 'gnus-summary-sort-by-original + "or" 'gnus-summary-sort-by-random + "os" 'gnus-summary-sort-by-subject + "ot" 'gnus-summary-sort-by-recipient + + ;; Threads commands + "Tk" 'gnus-summary-kill-thread + "Tl" 'gnus-summary-lower-thread + "Ti" 'gnus-summary-raise-thread + "Tm" 'gnus-uu-mark-thread ;; was T # + "Tu" 'gnus-uu-unmark-thread ;; was T M-# + "TT" 'gnus-summary-toggle-threads + "Ts" 'gnus-summary-show-thread + "Th" 'gnus-summary-hide-thread + ;; show/hide can be mapped to zo/zc + "zo" 'gnus-summary-show-thread + "zc" 'gnus-summary-hide-thread + "TS" 'gnus-summary-show-all-threads + "TH" 'gnus-summary-hide-all-threads + "Tt" 'gnus-summary-rethread-current + "T^" 'gnus-summary-reparent-thread + (kbd "T M-^") 'gnus-summary-reparent-children + "Tn" 'gnus-summary-next-thread + "Tp" 'gnus-summary-prev-thread + "Td" 'gnus-summary-down-thread ;; descend + "Ta" 'gnus-summary-up-thread ;; was T u, ascend also makes sense + "To" 'gnus-summary-top-thread + + ;; Saving + "Oo" 'gnus-summary-save-article + "Om" 'gnus-summary-save-article-mail + "Or" 'gnus-summary-save-article-rmail + "Of" 'gnus-summary-save-article-file + "OF" 'gnus-summary-write-article-file + "Ob" 'gnus-summary-save-article-body-file + "Oh" 'gnus-summary-save-article-folder + "Ov" 'gnus-summary-save-article-vm + "Op" 'gnus-summary-pipe-output + "|" 'gnus-summary-pipe-output + "OP" 'gnus-summary-muttprint + + ;; Decoding with marked articles + "Xu" 'gnus-uu-decode-uu + "XU" 'gnus-uu-decode-uu-and-save + "Xvu" 'gnus-uu-decode-uu-view + "XvU" 'gnus-uu-decode-uu-and-save-view + ;; Shell archives + "Xs" 'gnus-uu-decode-unshar + "XS" 'gnus-uu-decode-unshar-and-save + "Xvs" 'gnus-uu-decode-unshar-view + "XvS" 'gnus-uu-decode-unshar-and-save-view + ;; PostScript files + "Xp" 'gnus-uu-decode-postscript + "XP" 'gnus-uu-decode-postscript-and-save + "Xvp" 'gnus-uu-decode-postscript-view + "XvP" 'gnus-uu-decode-postscript-and-save-view + ;; Other files + "Xo" 'gnus-uu-decode-save + "Xb" 'gnus-uu-decode-binhex + "XY" 'gnus-uu-decode-yenc + + ;; Mail group commands + "Be" 'gnus-summary-expire-articles + "BE" 'gnus-summary-expire-articles-now ;; was B C-M-e + "Bd" 'gnus-summary-delete-article ;; was B DEL + "Bm" 'gnus-summary-move-article + "Bc" 'gnus-summary-copy-article + "Bb" 'gnus-summary-crosspost-article ;; was B B + "Bi" 'gnus-summary-import-article + "BI" 'gnus-summary-create-article + "Br" 'gnus-summary-respool-article + "Bw" 'gnus-summary-edit-article + "Bq" 'gnus-summary-respool-query + "Bt" 'gnus-summary-respool-trace + "Bp" 'gnus-summary-article-posted-p + + ;; Searching + (kbd "M-s") 'gnus-summary-search-article-forward + (kbd "M-r") 'gnus-summary-search-article-backward + (kbd "M-S") 'gnus-summary-repeat-search-article-forward + (kbd "M-R") 'gnus-summary-repeat-search-article-backward + "&" 'gnus-summary-execute-command + (kbd "M-&") 'gnus-summary-universal-argument + + [mouse-2] 'gnus-mouse-pick-article + [follow-link] 'mouse-face + + ;; Rest of the bindings "as is". + "*" 'gnus-cache-enter-article + (kbd "M-*") 'gnus-cache-remove-article + (kbd "M-i") 'gnus-symbolic-argument + "I" 'gnus-summary-increase-score + "L" 'gnus-summary-lower-score) + + (evil-collection-define-key 'motion 'gnus-article-mode-map + "F" 'gnus-article-followup-with-original + "R" 'gnus-article-reply-with-original + "W" 'gnus-article-wide-reply-with-original) + (evil-collection-define-key 'normal 'gnus-article-mode-map + ;; quit + "Q" 'evil-window-delete + "ZQ" 'evil-window-delete + "q" 'evil-window-delete + "ZZ" 'evil-window-delete + + ;; Movement + (kbd "TAB") 'forward-button + (kbd "") 'backward-button + (kbd "SPC") 'gnus-article-goto-next-page + (kbd "DEL") 'gnus-article-goto-prev-page + (kbd "S-SPC") 'gnus-article-goto-prev-page + + ;; Reply + "r" 'gnus-summary-reply + "R" 'gnus-article-reply-with-original ;; override `evil-replace-state' + + ;; Composing + "C" 'gnus-article-mail + "cc" 'gnus-article-mail + "cr" 'gnus-summary-reply + "cR" 'gnus-summary-reply-with-original + "cf" 'gnus-summary-followup + "cF" 'gnus-summary-followup-with-original + "cw" 'gnus-summary-very-wide-reply + "cW" 'gnus-article-wide-reply-with-original + (kbd "C-c C-f") 'gnus-summary-mail-forward + + ;; Washing + ;; + ;; List of unbound commands: + ;; - `gnus-article-remove-cr' + ;; - `gnus-article-de-quoted-unreadable' + ;; - `gnus-article-unsplit-urls' + ;; - `gnus-article-wash-html' + ;; - `gnus-article-strip-leading-blank-lines' + ;; - `gnus-article-strip-multiple-blank-lines' + ;; - `gnus-article-remove-trailing-blank-lines' + ;; - `gnus-article-strip-blank-lines' + ;; - `gnus-article-strip-all-blank-lines' + ;; - `gnus-article-strip-leading-space' + ;; - `gnus-article-strip-trailing-space' + "zwl" 'gnus-summary-stop-page-breaking + "zwr" 'gnus-summary-caesar-message + "zwm" 'gnus-summary-morse-message + "zwi" 'gnus-summary-idna-message + "zwt" 'gnus-summary-toggle-header + "zwv" 'gnus-summary-verbose-headers + "zwo" 'gnus-article-treat-overstrike + "zwd" 'gnus-article-treat-smartquotes + "zwu" 'gnus-article-treat-non-ascii ;; was W U + "zwyf" 'gnus-article-outlook-deuglify-article + "zwyu" 'gnus-article-outlook-unwrap-lines + "zwya" 'gnus-article-outlook-repair-attribution + "zwyc" 'gnus-article-outlook-rearrange-citation + "zww" 'gnus-article-fill-cited-article + "zwq" 'gnus-article-fill-long-lines ;; was W Q + "zwc" 'gnus-article-capitalize-sentences ;; was W C + "zw6" 'gnus-article-de-base64-unreadable + "zwz" 'gnus-article-decode-HZ ;; was W Z + "zwa" 'gnus-article-treat-ansi-sequences ;; was W A + "zwb" 'gnus-article-add-buttons + "zwB" 'gnus-article-add-buttons-to-head + "zwp" 'gnus-article-verify-x-pgp-sig + "zws" 'gnus-summary-force-verify-and-decrypt + + ;; Actions + (kbd "C-]") 'gnus-article-refer-article + "s" 'gnus-article-show-summary + "gr" 'gnus-summary-show-article + "gX" 'gnus-summary-browse-url) + + (evil-collection-define-key 'normal 'gnus-group-mode-map + ;; quit + "Q" 'gnus-group-quit + "ZQ" 'gnus-group-quit + "q" 'gnus-group-exit + "ZZ" 'gnus-group-exit + + ;; Movement + "[[" 'gnus-group-prev-unread-group + "]]" 'gnus-group-next-unread-group + "gk" 'gnus-group-prev-unread-group + "gj" 'gnus-group-next-unread-group + (kbd "C-j") 'gnus-group-next-group + (kbd "C-k") 'gnus-group-prev-group + + ;; Composing, like mu4e + "C" 'gnus-group-mail + "cc" 'gnus-group-mail + "ci" 'gnus-group-news + + ;; Actions + "." 'gnus-group-first-unread-group + "," 'gnus-group-best-unread-group + "A" 'gnus-activate-all-groups + "B" 'gnus-group-browse-foreign-server + "E" 'gnus-group-edit-group + "F" 'gnus-group-find-new-groups + "J" 'gnus-group-jump-to-group + "R" 'gnus-group-rename-group + "X" 'gnus-group-expunge-group + (kbd "RET") 'gnus-group-select-group + (kbd "SPC") 'gnus-group-read-group + "gr" 'gnus-group-get-new-news-this-group + "gR" 'gnus-group-get-new-news + "gu" 'gnus-group-unsubscribe-current-group + "gU" 'gnus-group-unsubscribe-group + "gc" 'gnus-group-catchup-current + "gC" 'gnus-group-catchup-current-all + "ge" 'gnus-group-expire-articles + "gE" 'gnus-group-expire-all-groups + "gl" 'gnus-group-set-current-level + + ;; Deleting & Pasting + "dd" 'gnus-group-kill-group + "D" 'gnus-group-kill-group + "p" 'gnus-group-yank-group + "P" 'gnus-group-yank-group + + ;; Marking + "m" 'gnus-group-mark-group + "u" 'gnus-group-unmark-group + "U" 'gnus-group-unmark-all-groups + "M" 'gnus-group-mark-buffer + "*" 'gnus-group-mark-buffer + "%" 'gnus-group-mark-regexp + + ;; Searching + "s" 'gnus-group-apropos + "S" 'gnus-group-description-apropos + (kbd "M-s") 'gnus-group-read-ephemeral-search-group + + ;; Sorting + "oa" 'gnus-group-sort-groups-by-alphabet + "ol" 'gnus-group-sort-groups-by-level + "om" 'gnus-group-sort-groups-by-method + "on" 'gnus-group-sort-groups-by-real-name + "or" 'gnus-group-sort-groups-by-rank + "os" 'gnus-group-sort-groups + "ou" 'gnus-group-sort-groups-by-unread + "ov" 'gnus-group-sort-groups-by-score + + ;; Listing + "L!" 'gnus-group-list-ticked + "L/" 'gnus-group-list-limit-map + "L?" 'gnus-group-list-dormant + "La" 'gnus-group-list-active ;; was A A + "Lc" 'gnus-group-list-cached + "Lf" 'gnus-group-list-flush-map + "Lk" 'gnus-group-list-killed + "Ll" 'gnus-group-list-level + "Lm" 'gnus-group-list-matching + "LM" 'gnus-group-list-all-matching + "Lp" 'gnus-group-list-plus-map + "Ls" 'gnus-group-list-groups + "Lu" 'gnus-group-list-all-groups + "Lz" 'gnus-group-list-zombies + + ;; Topic commands + ;; `gnus-topic-move-group' can be done through dd then p + "Tn" 'gnus-topic-create-topic + "Tj" 'gnus-topic-jump-to-topic + "Tr" 'gnus-topic-rename + "Td" 'gnus-topic-delete + "zc" 'gnus-topic-hide-topic + "zo" 'gnus-topic-show-topic + + ;; Topic sorting + "Toa" 'gnus-topic-sort-groups-by-alphabet + "Tou" 'gnus-topic-sort-groups-by-unread + "Tol" 'gnus-topic-sort-groups-by-level + "Tov" 'gnus-topic-sort-groups-by-score + "Tor" 'gnus-topic-sort-groups-by-rank + "Tom" 'gnus-topic-sort-groups-by-method + "Toe" 'gnus-group-sort-groups-by-server + "Tos" 'gnus-group-sort-groups + + "^" 'gnus-group-enter-server-mode + + (kbd "DEL") 'gnus-group-prev-unread-group + [mouse-2] 'gnus-mouse-pick-group + "g?" 'gnus-group-help-map) + + (evil-collection-define-key 'normal 'gnus-server-mode-map + ;; quit + "Q" 'gnus-server-exit + "ZQ" 'gnus-server-exit + "q" 'gnus-server-exit + "ZZ" 'gnus-server-exit + + (kbd "RET") 'gnus-server-read-server + (kbd "SPC") 'gnus-server-read-server-in-server-buffer + "C" 'gnus-server-close-server + "D" 'gnus-server-deny-server + "G" 'gnus-group-make-nnir-group + "I" 'gnus-server-set-cloud-method-server + "L" 'gnus-server-offline-server + "O" 'gnus-server-open-server + "R" 'gnus-server-remove-denials + "S" 'gnus-server-show-server + "a" 'gnus-server-add-server + "y" 'gnus-server-copy-server + "e" 'gnus-server-edit-server + "gr" 'gnus-server-regenerate-server + "i" 'gnus-server-toggle-cloud-server + "d" 'gnus-server-kill-server + "L" 'gnus-server-list-servers + "s" 'gnus-server-scan-server + "p" 'gnus-server-yank-server + "c" 'gnus-server-compact-server + "M-c" 'gnus-server-close-all-servers + "M-o" 'gnus-server-open-all-servers) + + (evil-collection-define-key 'normal 'gnus-browse-mode-map + ;; quit + "Q" 'gnus-browse-exit + "ZQ" 'gnus-browse-exit + "q" 'gnus-browse-exit + "ZZ" 'gnus-browse-exit + + "u" 'gnus-browse-unsubscribe-current-group + (kbd "SPC") 'gnus-browse-read-group + (kbd "RET") 'gnus-browse-select-group) + + (evil-collection-define-key 'normal 'gnus-bookmark-bmenu-mode-map + ;; quit + "Q" 'quit-window + "ZQ" 'quit-window + "q" 'quit-window + "ZZ" 'quit-window + + ;; mark and execution + "m" 'gnus-bookmark-bmenu-mark + "u" 'gnus-bookmark-bmenu-unmark + (kbd "DEL") 'gnus-bookmark-bmenu-backup-unmark + "d" 'gnus-bookmark-bmenu-delete + "x" 'gnus-bookmark-bmenu-execute-deletions + + (kbd "RET") 'gnus-bookmark-bmenu-select + [mouse-2] 'gnus-bookmark-bmenu-select-by-mouse + "L" 'gnus-bookmark-bmenu-load + "s" 'gnus-bookmark-bmenu-save + "t" 'gnus-bookmark-bmenu-toggle-infos + "a" 'gnus-bookmark-bmenu-show-details + ;; not implemented yet + "A" 'gnus-bookmark-bmenu-show-all-annotations + "E" 'gnus-bookmark-bmenu-edit-annotation + "R" 'gnus-bookmark-bmenu-rename)) + +(provide 'evil-collection-gnus) +;;; evil-collection-gnus.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/go-mode/README.org b/.config/emacs/lisp/evil-collection/modes/go-mode/README.org new file mode 100644 index 0000000..2b102d6 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/go-mode/README.org @@ -0,0 +1,19 @@ +* go-mode + + Evil bindings for [[https://github.com/dominikh/go-mode.el][go-mode]] and =godoc-mode=. + +** Key bindings + +*** go-mode-map + + | Command | Original | Evil | + |------------------+-----------+------| + | =godef-jump= | =C-c C-j= | =gd= | + | =godef-describe= | =C-c C-d= | =K= | + +*** godoc-mode-map + + | Command | Original | Evil | + |-----------------+----------+------| + | =quit-window= | =q= | =q= | + | =describe-mode= | =h m= | =g?= | diff --git a/.config/emacs/lisp/evil-collection/modes/go-mode/evil-collection-go-mode.el b/.config/emacs/lisp/evil-collection/modes/go-mode/evil-collection-go-mode.el new file mode 100644 index 0000000..b423f7b --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/go-mode/evil-collection-go-mode.el @@ -0,0 +1,47 @@ +;;; evil-collection-go-mode.el --- Bindings for `go-mode' -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, emacs, tools, golang + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Bindings for `go-mode'. + +;;; Code: +(require 'evil-collection) +(require 'go-mode nil t) + +(defconst evil-collection-go-mode-maps '(go-mode-map + godoc-mode-map)) + +;;;###autoload +(defun evil-collection-go-mode-setup () + "Set up `evil' bindings for `go-mode'." + (evil-collection-define-key 'normal 'go-mode-map + "gd" 'godef-jump + "K" 'godef-describe) + (evil-collection-define-key 'normal 'godoc-mode-map + "q" 'quit-window + "g?" 'describe-mode)) + +(provide 'evil-collection-go-mode) +;;; evil-collection-go-mode.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/gptel/README.org b/.config/emacs/lisp/evil-collection/modes/gptel/README.org new file mode 100644 index 0000000..903e622 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/gptel/README.org @@ -0,0 +1,47 @@ +* gptel + + Evil bindings for [[https://github.com/karthink/gptel][gptel]]. + + =RET= submission follows =evil-collection-repl-submit-state=: in the submit + state, =RET= sends; in the other state (insert when submit is normal, normal + when submit is insert), =RET= inserts a newline. =S-RET= behavior is + controlled by two customs. + +** Key bindings + +*** gptel-mode-map + + Upstream only binds =C-c RET= to =gptel-send=; =RET= itself is unchanged + on the buffer's major mode. Evil-collection layers state-aware =RET= / + =S-RET= behavior on top. + + | Command | Original | Evil | + |--------------+-----------+------------------------------------------------------------------| + | =gptel-send= | =C-c RET= | =C-c RET= | + | =gptel-send= | n/a | =RET=, == in submit state | + | =newline= | n/a | =S-RET=, =S-= in submit state; all four in newline state | + | =gptel-menu= | n/a | =S-RET=, == in normal / visual (default) | + | =gptel-send= | =C-c RET= | =S-RET=, == in normal / visual (when menu custom nil) | + +*** gptel-context-buffer-mode-map (normal state) + + | Command | Original | Evil | + |-------------------------------+-----------+-----------| + | =gptel-context-next= | =n= | =j= | + | =gptel-context-previous= | =p= | =k= | + | =gptel-context-flag-deletion= | =d= | =d= | + | =gptel-context-quit= | =C-c C-k= | =q=, =ZQ= | + | =gptel-context-confirm= | =C-c C-c= | =ZZ= | + | =gptel-context-visit= | =RET= | =RET= | + +** Customization + + | Variable | Default | Purpose | + |------------------------------------------------+---------+-----------------------------------------------------------------------------| + | =evil-collection-gptel-want-shift-ret-to-send= | =t= | Bind =S-RET= in normal / visual to =gptel-send=. | + | =evil-collection-gptel-want-shift-ret-menu= | =t= | Bind =S-RET= in normal / visual to =gptel-menu=. Wins over the send custom. | + +** Integrations + + =gptel-context=: bindings for the context buffer (above) are wired via + =with-eval-after-load 'gptel-context=. diff --git a/.config/emacs/lisp/evil-collection/modes/gptel/evil-collection-gptel.el b/.config/emacs/lisp/evil-collection/modes/gptel/evil-collection-gptel.el new file mode 100644 index 0000000..6be9535 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/gptel/evil-collection-gptel.el @@ -0,0 +1,82 @@ +;;; evil-collection-gptel.el --- Bindings for gptel -*- lexical-binding: t -*- + +;; Copyright (C) 2024 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen , Zhiwei Chen +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: emacs + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for gptel. + +;;; Code: +(require 'evil-collection) +(require 'gptel nil t) + + +(defconst evil-collection-gptel-maps + '(gptel-mode-map gptel-context-buffer-mode-map)) + +(defcustom evil-collection-gptel-want-shift-ret-to-send t + "When non nil, S-RET sends query to LLM." + :group 'evil-collection + :type 'boolean) + +(defcustom evil-collection-gptel-want-shift-ret-menu t + "When non nil, S-RET opens calls `gptel-menu'. This takes priority over + `evil-collection-gptel-want-shift-ret-to-send'." + :group 'evil-collection + :type 'boolean) + +;;;###autoload +(defun evil-collection-gptel-setup () + "Set up `evil' bindings for gptel." + (let* ((submit evil-collection-repl-submit-state) + (newline-state (if (eq submit 'normal) 'insert 'normal))) + (evil-collection-define-key submit 'gptel-mode-map + (kbd "RET") 'gptel-send + (kbd "") 'gptel-send + (kbd "S-RET") 'newline + (kbd "S-") 'newline) + (evil-collection-define-key newline-state 'gptel-mode-map + (kbd "RET") 'newline + (kbd "") 'newline + (kbd "S-RET") 'newline + (kbd "S-") 'newline)) + (if evil-collection-gptel-want-shift-ret-menu + (evil-collection-define-key '(normal visual) 'gptel-mode-map + (kbd "S-RET") 'gptel-menu + (kbd "") 'gptel-menu) + (when evil-collection-gptel-want-shift-ret-to-send + (evil-collection-define-key '(normal visual) 'gptel-mode-map + (kbd "S-RET") 'gptel-send + (kbd "") 'gptel-send))) + + (with-eval-after-load 'gptel-context + (evil-collection-define-key 'normal 'gptel-context-buffer-mode-map + "j" 'gptel-context-next + "k" 'gptel-context-previous + "d" 'gptel-context-flag-deletion + "q" 'gptel-context-quit + "ZQ" 'gptel-context-quit + "ZZ" 'gptel-context-confirm + (kbd "RET") 'gptel-context-visit))) + +(provide 'evil-collection-gptel) +;;; evil-collection-gptel.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/grep/README.org b/.config/emacs/lisp/evil-collection/modes/grep/README.org new file mode 100644 index 0000000..cc8cc0c --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/grep/README.org @@ -0,0 +1,15 @@ +* grep + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Grep-Searching.html][grep]]. + +** Key bindings + + | Command | Original | Evil | + |----------------------------+----------+-------| + | =evil-search-next= | n/a | =n= | + | =next-error-no-select= | =n= | =C-j= | + | =previous-error-no-select= | =p= | =C-k= | + +** Integrations + + - wgrep: =i= → =wgrep-change-to-wgrep-mode= when =wgrep= is available. diff --git a/.config/emacs/lisp/evil-collection/modes/grep/evil-collection-grep.el b/.config/emacs/lisp/evil-collection/modes/grep/evil-collection-grep.el new file mode 100644 index 0000000..bfd3eff --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/grep/evil-collection-grep.el @@ -0,0 +1,49 @@ +;;; evil-collection-grep.el --- Bindings for `grep' -*- lexical-binding: t -*- + +;; Copyright (C) 2018 James Nguyen + +;; Author: Fredrik Bergroth +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, emacs, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Bindings for `grep'. + +;;; Code: +(require 'evil-collection) +(require 'grep) + +(defconst evil-collection-grep-maps '(grep-mode-map)) + +;;;###autoload +(defun evil-collection-grep-setup () + "Set up `evil' bindings for `grep'." + (evil-collection-define-key 'normal 'grep-mode-map + "n" 'evil-search-next + "\C-j" 'next-error-no-select + "\C-k" 'previous-error-no-select) + + ;; `wgrep' integration + (when (fboundp 'wgrep-setup) + (evil-collection-define-key 'normal 'grep-mode-map + "i" 'wgrep-change-to-wgrep-mode))) + +(provide 'evil-collection-grep) +;;; evil-collection-grep.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/guix/evil-collection-guix.el b/.config/emacs/lisp/evil-collection/modes/guix/evil-collection-guix.el new file mode 100644 index 0000000..a18b2ac --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/guix/evil-collection-guix.el @@ -0,0 +1,217 @@ +;;; evil-collection-guix.el --- Evil bindings for Guix -*- lexical-binding: t -*- + +;; Copyright (C) 2018 Pierre Neidhardt + +;; Author: Pierre Neidhardt +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, guix, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for `guix'. + +;;; Code: +(require 'evil-collection) +(require 'guix nil t) + +(defconst evil-collection-guix-maps '(guix-output-list-mode-map + guix-package-info-mode-map + guix-profile-list-mode-map + guix-profile-info-mode-map + guix-generation-list-mode-map + guix-generation-info-mode-map + guix-license-list-mode-map + guix-license-info-mode-map + guix-location-list-mode-map + guix-hydra-build-list-mode-map + guix-hydra-build-info-mode-map + guix-build-log-mode-map + guix-service-list-mode-map)) + +(defmacro evil-collection-guix-set (map) + "Set common bindings in MAP." + `(progn + (evil-collection-set-readonly-bindings ',map) + (evil-collection-define-key 'normal ',map + ;; motion + (kbd "SPC") 'scroll-up-command + (kbd "S-SPC") 'scroll-down-command + (kbd "") 'forward-button + (kbd "") 'backward-button + + "gm" 'guix-apply-manifest + + ;; sort + "o" 'bui-list-sort + + ;; filter + "ss" 'bui-enable-filter + "sd" 'bui-disable-filter + + ;; mark + "m" 'bui-list-mark + "M" 'bui-list-mark-all + "u" 'bui-list-unmark + "U" 'bui-list-unmark-all + + (kbd "C-o") 'bui-history-back + (kbd "C-i") 'bui-history-forward + + "g?" 'bui-show-hint + "gr" 'revert-buffer + "gR" 'bui-redisplay + + ;; repl + "gz" 'guix-switch-to-repl))) + +;;;###autoload +(defun evil-collection-guix-setup () + "Set up `evil' bindings for `guix'." + (evil-collection-guix-set guix-ui-map) ; Covers output-list and generation-list. + + (evil-collection-define-key 'normal 'guix-output-list-mode-map + (kbd "RET") 'bui-list-describe + + "gb" 'guix-package-list-latest-builds + "gG" 'guix-output-list-graph + "gl" 'guix-output-list-lint + "gs" 'guix-package-list-size + + "a" 'guix-output-list-mark-upgrade + "A" 'guix-output-list-mark-upgrades + "d" 'guix-output-list-mark-delete + "gd" 'guix-output-list-edit + "i" 'guix-output-list-mark-install + + ;; mark + "x" 'guix-output-list-execute) + + (evil-collection-guix-set guix-package-info-mode-map) + (evil-collection-define-key 'normal 'guix-package-info-mode-map + "gG" 'guix-package-info-graph + "gl" 'guix-package-info-lint + "gs" 'guix-package-info-size + + "a" 'guix-package-info-upgrade + "d" 'guix-package-info-delete + "gd" 'guix-package-info-edit + "i" 'guix-package-info-install) + + (evil-collection-guix-set guix-profile-list-mode-map) + (evil-collection-define-key 'normal 'guix-profile-list-mode-map + (kbd "RET") 'bui-list-describe + + "c" 'guix-profile-list-set-current ; TODO: Bind to "." as per the rationale? + "p" 'guix-profile-list-show-packages + "a" 'guix-profile-list-show-generations + "P" 'guix-profile-list-show-search-paths) + + (evil-collection-guix-set guix-profile-info-mode-map) + (evil-collection-define-key 'normal 'guix-profile-info-mode-map + "gm" 'guix-profile-info-apply-manifest + + "p" 'guix-profile-info-show-packages + "a" 'guix-profile-info-show-generations + "P" 'guix-profile-info-show-search-paths + "c" 'guix-profile-info-set-current) + + (evil-collection-define-key 'normal 'guix-generation-list-mode-map + (kbd "RET") 'bui-list-describe + + "p" 'guix-generation-list-show-packages + "D" 'guix-generation-list-mark-delete + "P" 'guix-generation-list-show-search-paths + "c" 'guix-generation-list-set-current + "d" 'guix-generation-list-ediff + + "+" 'guix-generation-list-show-added-packages + "-" 'guix-generation-list-show-removed-packages + "=" 'guix-generation-list-diff + + ;; mark + "x" 'guix-generation-list-execute) + + (evil-collection-guix-set guix-license-list-mode-map) + (evil-collection-define-key 'normal 'guix-license-list-mode-map + (kbd "") 'forward-button ; Why isn't this binding inhibited? + (kbd "RET") 'bui-list-describe + + "p" 'guix-license-list-show-packages + "gd" 'guix-license-list-edit) + + (evil-collection-guix-set guix-license-info-mode-map) + + (evil-collection-guix-set guix-location-list-mode-map) + (evil-collection-define-key 'normal 'guix-location-list-mode-map + (kbd "RET") 'guix-location-list-show-packages ; In Emacs state, it seems to be overriden by `push-button'. + + "p" 'guix-location-list-show-packages + "gd" 'guix-location-list-edit) + + (evil-collection-guix-set guix-store-item-list-mode-map) + (evil-collection-define-key 'normal 'guix-store-item-list-mode-map + (kbd "RET") 'bui-list-describe + "d" 'guix-store-item-list-mark-delete + "gd" 'guix-store-item-list-edit + "x" 'guix-store-item-list-execute) + + (evil-collection-guix-set guix-store-item-info-mode-map) + + (evil-collection-guix-set guix-hydra-build-list-mode-map) + (evil-collection-define-key 'normal 'guix-hydra-build-list-mode-map + (kbd "RET") 'bui-list-describe + + "gb" 'guix-hydra-build-list-latest-builds + "gl" 'guix-hydra-build-list-view-log) + + (evil-collection-guix-set guix-hydra-build-info-mode-map) + + (evil-collection-set-readonly-bindings 'guix-build-log-mode-map) + (evil-collection-define-key 'normal 'guix-build-log-mode-map + ;; motion + (kbd "SPC") 'scroll-up-command + (kbd "S-SPC") 'scroll-down-command + (kbd "") 'guix-build-log-phase-toggle + (kbd "") 'guix-build-log-phase-toggle-all + + "gk" 'guix-build-log-previous-phase + "gj" 'guix-build-log-next-phase + "[[" 'guix-build-log-previous-phase + "]]" 'guix-build-log-next-phase + (kbd "C-k") 'guix-build-log-previous-phase + (kbd "C-j") 'guix-build-log-next-phase + + "gr" 'revert-buffer + + ;; repl + "gz" 'guix-switch-to-repl) + + (evil-collection-guix-set guix-service-list-mode-map) + (evil-collection-define-key 'normal 'guix-service-list-mode-map + (kbd "") 'forward-button + (kbd "RET") 'bui-list-describe + + "gd" 'guix-service-list-edit) + + (evil-collection-define-key 'normal 'guix-devel-mode-map + ;; repl + "gz" 'guix-switch-to-repl)) + +(provide 'evil-collection-guix) +;;; evil-collection-guix.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/hackernews/evil-collection-hackernews.el b/.config/emacs/lisp/evil-collection/modes/hackernews/evil-collection-hackernews.el new file mode 100644 index 0000000..2be994b --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/hackernews/evil-collection-hackernews.el @@ -0,0 +1,63 @@ +;;; evil-collection-hackernews.el --- Evil bindings for hackernews-mode -*- lexical-binding: t -*- + +;; Copyright (C) 2018 Pierre Neidhardt + +;; Author: Pierre Neidhardt +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, news, tools + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: +;; Evil bindings for hackernews. + +;;; Code: +(require 'evil-collection) +(require 'hackernews nil t) + +(defconst evil-collection-hackernews-maps '(hackernews-mode-map + hackernews-button-map)) + +;;;###autoload +(defun evil-collection-hackernews-setup () + "Set up `evil' bindings for `hackernews-mode'." + (evil-collection-set-readonly-bindings 'hackernews-mode-map) + (evil-collection-define-key 'normal 'hackernews-mode-map + "]]" 'hackernews-next-item + "[[" 'hackernews-previous-item + "gj" 'hackernews-next-item + "gk" 'hackernews-previous-item + (kbd "C-j") 'hackernews-next-item + (kbd "C-k") 'hackernews-previous-item + + "+" 'hackernews-load-more-stories + + "gr" 'hackernews-reload + "gf" 'hackernews-switch-feed + + (kbd "") 'hackernews-next-comment + (kbd "S-") 'hackernews-previous-comment + + "!" 'hackernews-button-mark-as-visited ; like mu4e + "?" 'hackernews-button-mark-as-unvisited + + (kbd "RET") 'hackernews-button-browse-internal + (kbd "S-") 'push-button)) + +(provide 'evil-collection-hackernews) +;;; evil-collection-hackernews.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/helm/README.org b/.config/emacs/lisp/evil-collection/modes/helm/README.org new file mode 100644 index 0000000..95a3946 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/helm/README.org @@ -0,0 +1,107 @@ +* helm + + Evil bindings for [[https://emacs-helm.github.io/helm/][helm]]. + + =M-= modifiers are preferred over =C-= so the help prefix (=C-h=) is left + alone. =h= and =l= are reserved for minibuffer editing in =helm-find-files= + and =helm-read-file-map=. + +** Key bindings + +*** helm-map (insert and normal state unless noted) + + | Command | Original | Evil | + |----------------------------------+----------+--------------| + | =helm-previous-source= | =C-o= | =M-[= | + | =helm-next-source= | =C-o= | =M-]=, =C-o= | + | =helm-execute-persistent-action= | =C-j= | =M-l= | + | =helm-next-line= | =C-n= | =M-j=, =C-n= | + | =helm-previous-line= | =C-p= | =M-k=, =C-p= | + | =helm-next-page= | =C-v= | =C-f=, =C-v= | + | =helm-previous-page= | =M-v= | =C-b=, =M-v= | + | =helm-maybe-exit-minibuffer= | =RET= | =RET= | + +*** helm-map (normal state only) + + | Command | Original | Evil | + |--------------------------------+-----------+-------------------------------------| + | =helm-select-action= | =TAB= | == | + | =helm-previous-source= | =C-o= | =[[=, =gk= | + | =helm-next-source= | =C-o= | =]]=, =gj= | + | =helm-prev-visible-mark= | =M-(= | =(= | + | =helm-next-visible-mark= | =M-)= | =)= | + | =helm-next-line= | =C-n= | =j= | + | =helm-previous-line= | =C-p= | =k= | + | =helm-beginning-of-buffer= | =M-<= | =gg= | + | =helm-end-of-buffer= | =M->= | =G= | + | =helm-quit-and-find-file= | =C-x C-f= | =/= | + | =helm-refresh= | =C-c C-u= | =gr= | + | =helm-yank-selection= | =C-c C-y= | =yp= | + | =helm-copy-to-buffer= | n/a | =yP= | + | =helm-kill-selection-and-quit= | =C-c C-k= | =yy= | + | =helm-toggle-visible-mark= | =C-SPC= | =SPC= | + | =helm-previous-page= | =M-v= | =C-u= (when =evil-want-C-u-scroll=) | + | =helm-next-page= | =C-v= | =C-d= (when =evil-want-C-d-scroll=) | + +*** helm-find-files-map / helm-read-file-map + + | Command | State | Original | Evil | + |-----------------------------------+----------------+----------+--------------| + | =helm-ff-run-switch-other-window= | normal | =C-c o= | =go= | + | =helm-ff-run-switch-other-window= | insert, normal | =C-c o= | =S-= | + | =helm-ff-run-find-sh-command= | normal | =C-c /= | =/= | + | =helm-find-files-up-one-level= | insert, normal | =C-l= | =M-h= | + +*** helm-find-files-map (normal state) + + | Command | Original | Evil | + |------------------------------------+----------+------| + | =helm-ff-run-ediff-file= | =C-c = | === | + | =helm-ff-run-query-replace-regexp= | =M-%= | =%= | + | =helm-ff-run-delete-file= | =M-D= | =D= | + +*** helm-generic-files-map + + | Command | State | Original | Evil | + |-----------------------------------+----------------+----------+--------------| + | =helm-ff-run-switch-other-window= | insert, normal | =C-c o= | =S-= | + | =helm-ff-run-switch-other-window= | normal | =C-c o= | =go= | + +*** helm-buffer-map + + | Command | State | Original | Evil | + |----------------------------------------+----------------+----------+--------------| + | =helm-buffer-switch-other-window= | insert, normal | =C-c o= | =S-= | + | =display-buffer= | insert, normal | n/a | =M-= | + | =helm-buffer-switch-other-window= | normal | =C-c o= | =go= | + | =display-buffer= | normal | n/a | =gO= | + | =helm-buffer-run-ediff= | normal | =C-c = | === | + | =helm-buffer-run-query-replace-regexp= | normal | =M-%= | =%= | + | =helm-buffer-run-kill-persistent= | normal | =C-c d= | =D= | + +*** helm-occur-map / helm-grep-map + + | Command | State | Original | Evil | + |---------------------------------------------------------------------+----------------+----------+--------------| + | =helm-occur-run-goto-line-ow= / =helm-grep-run-other-window-action= | insert, normal | =C-c o= | =S-= | + | same as above | normal | =C-c o= | =go= | + +*** helm-occur-mode-map / helm-grep-mode-map (normal state) + + | Command | Original | Evil | + |-----------------------------------------------------+----------+-------------| + | =helm-occur-mode-goto-line= / =helm-grep-mode-jump= | =RET= | =RET= | + | =...-goto-line-ow= / =...-jump-other-window= | =C-o= | =C-o=, =go= | + | =...-forward= variant | =M-n= | =M-n=, =gj= | + | =...-backward= variant | =M-p= | =M-p=, =gk= | + | =helm-gm-next-file= | =M-N= | =M-N= | + | =helm-gm-precedent-file= | =M-P= | =M-P= | + +** Notes + + - =helm-minibuffer-history-key= is set to =M-p= via =custom-set-variables=. + - =helm-default-prompt-display-function= is set so the evil cursor renders + correctly in helm's header line when =helm-echo-input-in-header-line= is + non-nil. + - =evil-collection-helm-hide-minibuffer-maybe= is added to + =helm-minibuffer-set-up-hook= to hide the minibuffer cursor in that case. diff --git a/.config/emacs/lisp/evil-collection/modes/helm/evil-collection-helm.el b/.config/emacs/lisp/evil-collection/modes/helm/evil-collection-helm.el new file mode 100644 index 0000000..0e82ee8 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/helm/evil-collection-helm.el @@ -0,0 +1,238 @@ +;;; evil-collection-helm.el --- Evil bindings for Helm -*- lexical-binding: t -*- + +;; Copyright (C) 2017 Pierre Neidhardt + +;; Author: Pierre Neidhardt +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, helm, tools + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: +;; Evil bindings for Helm. + +;;; Code: +(require 'evil-collection) +(require 'helm-files nil t) ; TODO: Check if this is the ideal requirement and if we are not loading too much. + +;; To navigate Helm entries with in insert state, we need a modifier. +;; Using the C- modifier would conflict with the help prefix "C-h". So we use +;; M- prefixed bindings instead. + +;; Helm-find-files: We cannot use "h" and "l" in normal state to navigate up and +;; down the file system hierarchy since we need them to use it to edit the +;; minibuffer content. + +(defvar helm-map) +(defvar helm-find-files-map) +(defvar helm-generic-files-map) +(defvar helm-buffer-map) +(defvar helm-occur-map) +(defvar helm-grep-map) +(defvar helm-read-file-map) +(defvar helm-occur-mode-map) +(defvar helm-grep-mode-map) +(defvar helm-echo-input-in-header-line) +(defvar helm--prompt) +(defvar helm--action-prompt) +(defvar helm-header-line-space-before-prompt) +(defvar helm-default-prompt-display-function) + +(declare-function helm-window "helm-lib") + +(defconst evil-collection-helm-maps '(help-map + help-find-files-map + helm-read-file-map + helm-generic-files-map + helm-buffer-map + helm-occur-map + helm-grep-map)) + +;; From https://github.com/emacs-helm/helm/issues/362. +;; Also see https://emacs.stackexchange.com/questions/17058/change-cursor-type-in-helm-header-line#17097. +;; TODO: With Evil, the cursor type is not right in the header line and the evil +;; cursor remains in the minibuffer. Visual selections also reveal overlayed +;; text. +(with-no-warnings + (defun evil-collection-helm-hide-minibuffer-maybe () + "Hide text in minibuffer when `helm-echo-input-in-header-line' is non-nil." + (when (with-current-buffer (helm-buffer-get) helm-echo-input-in-header-line) + (let ((ov (make-overlay (point-min) (point-max) nil nil t))) + (overlay-put ov 'window (selected-window)) + (overlay-put ov 'face (let ((bg-color (face-background 'default nil))) + `(:background ,bg-color :foreground ,bg-color))) + (setq-local cursor-type nil))))) + +(defun evil-collection-helm--set-prompt-display (pos) + (let (beg state region-active m) + (with-selected-window (minibuffer-window) + (setq beg (save-excursion (vertical-motion 0 (helm-window)) (point)) + state evil-state + region-active (region-active-p) + m (mark t))) + (when region-active + (setq m (- m beg)) + ;; Increment pos to handle the space before prompt (i.e `pref'). + (put-text-property (1+ (min m pos)) (+ 2 (max m pos)) + 'face + (list :background (face-background 'region)) + header-line-format)) + (put-text-property + ;; Increment pos to handle the space before prompt (i.e `pref'). + (+ 1 pos) (+ 2 pos) + 'face + (if (eq state 'insert) + 'underline + ;; Don't just use 'cursor, this can hide the current character. + (list :inverse-video t + :foreground (face-background 'cursor) + :background (face-background 'default))) + header-line-format))) + + +;;;###autoload +(defun evil-collection-helm-setup () + "Set up `evil' bindings for `helm'." + (add-hook 'helm-minibuffer-set-up-hook 'evil-collection-helm-hide-minibuffer-maybe) + (setq helm-default-prompt-display-function 'evil-collection-helm--set-prompt-display) + (custom-set-variables + '(helm-minibuffer-history-key "M-p")) + + (evil-collection-define-key '(insert normal) 'helm-map + (kbd "M-[") 'helm-previous-source + (kbd "M-]") 'helm-next-source + (kbd "M-l") 'helm-execute-persistent-action + (kbd "M-j") 'helm-next-line + (kbd "M-k") 'helm-previous-line + (kbd "C-f") 'helm-next-page + (kbd "C-b") 'helm-previous-page) + + (dolist (map '(helm-find-files-map helm-read-file-map)) + (evil-collection-define-key 'normal map + "go" 'helm-ff-run-switch-other-window + "/" 'helm-ff-run-find-sh-command) + (evil-collection-define-key '(insert normal) map + (kbd "S-") 'helm-ff-run-switch-other-window + (kbd "M-h") 'helm-find-files-up-one-level)) + + ;; TODO: Change the Helm header to display "M-l" instead of "C-l". We don't + ;; want to modify the Emacs Helm map. + + (evil-collection-define-key '(insert normal) 'helm-generic-files-map + (kbd "S-") 'helm-ff-run-switch-other-window) + + (evil-collection-define-key '(insert normal) 'helm-buffer-map + (kbd "S-") 'helm-buffer-switch-other-window + (kbd "M-") 'display-buffer) + + (evil-collection-define-key '(insert normal) 'helm-occur-map + (kbd "S-") 'helm-occur-run-goto-line-ow) + + (evil-collection-define-key '(insert normal) 'helm-grep-map + (kbd "S-") 'helm-grep-run-other-window-action) + + (evil-collection-define-key 'normal 'helm-generic-files-map + "go" 'helm-ff-run-switch-other-window) + + (evil-collection-define-key 'normal 'helm-buffer-map + "go" 'helm-buffer-switch-other-window + "gO" 'display-buffer + "=" 'helm-buffer-run-ediff + "%" 'helm-buffer-run-query-replace-regexp + "D" 'helm-buffer-run-kill-persistent ; Ivy has "D". + ) + + (evil-collection-define-key 'normal 'helm-occur-map + "go" 'helm-occur-run-goto-line-ow) + + (evil-collection-define-key 'normal 'helm-grep-map + "go" 'helm-grep-run-other-window-action) + + (evil-collection-define-key 'normal 'helm-find-files-map + "=" 'helm-ff-run-ediff-file + "%" 'helm-ff-run-query-replace-regexp + "D" 'helm-ff-run-delete-file) ; Ivy has "D". + + ;; These helm bindings should always exist, the evil equivalents do + ;; nothing useful in the minibuffer (error or pure failure). + ;; RET can't do a second line in the minibuffer. + ;; The C-n/C-p completions error with 'helm in helm' session. + ;; C-o switches to evil state (again, not useful). + (evil-collection-define-key '(insert normal) 'helm-map + (kbd "RET") 'helm-maybe-exit-minibuffer + (kbd "M-v") 'helm-previous-page + (kbd "C-v") 'helm-next-page + (kbd "C-p") 'helm-previous-line + (kbd "C-n") 'helm-next-line + (kbd "C-o") 'helm-next-source) + + (when evil-want-C-u-scroll + (evil-collection-define-key 'normal 'helm-map + (kbd "C-u") 'helm-previous-page)) + + (when evil-want-C-d-scroll + (evil-collection-define-key 'normal 'helm-map + (kbd "C-d") 'helm-next-page)) + + (evil-collection-define-key 'normal 'helm-map + (kbd "") 'helm-select-action ; TODO: Ivy has "ga". + (kbd "[[") 'helm-previous-source + (kbd "]]") 'helm-next-source + "gk" 'helm-previous-source + "gj" 'helm-next-source + (kbd "(") 'helm-prev-visible-mark + (kbd ")") 'helm-next-visible-mark + "j" 'helm-next-line + "k" 'helm-previous-line + "gg" 'helm-beginning-of-buffer + "G" 'helm-end-of-buffer + + "/" 'helm-quit-and-find-file + + ;; refresh + "gr" 'helm-refresh + + "yp" 'helm-yank-selection + "yP" 'helm-copy-to-buffer + "yy" 'helm-kill-selection-and-quit + (kbd "SPC") 'helm-toggle-visible-mark) + + (evil-collection-define-key 'normal 'helm-occur-mode-map + (kbd "RET") 'helm-occur-mode-goto-line + (kbd "C-o") 'helm-occur-mode-goto-line-ow + (kbd "M-n") 'helm-occur-mode-goto-line-ow-forward + (kbd "M-p") 'helm-occur-mode-goto-line-ow-backward + "go" 'helm-occur-mode-goto-line-ow + "gj" 'helm-occur-mode-goto-line-ow-forward + "gk" 'helm-occur-mode-goto-line-ow-backward + (kbd "M-N") 'helm-gm-next-file + (kbd "M-P") 'helm-gm-precedent-file) + + (evil-collection-define-key 'normal 'helm-grep-mode-map + (kbd "RET") 'helm-grep-mode-jump + (kbd "C-o") 'helm-grep-mode-jump-other-window + (kbd "M-n") 'helm-grep-mode-jump-other-window-forward + (kbd "M-p") 'helm-grep-mode-jump-other-window-backward + "go" 'helm-grep-mode-jump-other-window + "gj" 'helm-grep-mode-jump-other-window-forward + "gk" 'helm-grep-mode-jump-other-window-backward + (kbd "M-N") 'helm-gm-next-file + (kbd "M-P") 'helm-gm-precedent-file)) + +(provide 'evil-collection-helm) +;;; evil-collection-helm.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/help/README.org b/.config/emacs/lisp/evil-collection/modes/help/README.org new file mode 100644 index 0000000..ab65337 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/help/README.org @@ -0,0 +1,23 @@ +* help + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Help-Mode.html][help-mode]]. + +** Key bindings + + | Command | Original | Evil | + |-----------------------+----------------+----------------------| + | =scroll-up-command= | =SPC= | =SPC=, =C-f= | + | =scroll-down-command= | =S-SPC=, =DEL= | =S-SPC=, =C-b= | + | =forward-button= | =TAB= | =TAB=, =g TAB=, =g]= | + | =backward-button= | =S-TAB= | =S-TAB=, =g[= | + | =help-go-back= | =l= | =C-o=, =<= | + | =help-go-forward= | =r= | =C-i=, =>= | + | =push-button= | n/a | =go=, =gO= | + | =describe-mode= | =h=, =?= | =g?= | + | =revert-buffer= | =g= | =gr= | + | =help-follow= | n/a | =r= | + | =help-view-source= | =s= | =s= | + | =help-goto-info= | =i= | =i= | + | =help-customize= | =c= | =c= | + + The last three require Emacs 28+. diff --git a/.config/emacs/lisp/evil-collection/modes/help/evil-collection-help.el b/.config/emacs/lisp/evil-collection/modes/help/evil-collection-help.el new file mode 100644 index 0000000..6616bac --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/help/evil-collection-help.el @@ -0,0 +1,80 @@ +;;; evil-collection-help.el --- Evil bindings for help-mode -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, help, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for `help-mode'. + +;;; Code: +(require 'evil-collection) +(require 'help-mode) + +(defconst evil-collection-help-maps '(help-mode-map)) + +;;;###autoload +(defun evil-collection-help-setup () + "Set up `evil' bindings for `help'." + (evil-set-initial-state 'help-mode 'normal) + (evil-collection-set-readonly-bindings 'help-mode-map) + (evil-collection-define-key 'normal 'help-mode-map + ;; motion + (kbd "SPC") 'scroll-up-command + (kbd "S-SPC") 'scroll-down-command + (kbd "C-f") 'scroll-up-command + (kbd "C-b") 'scroll-down-command + (kbd "") 'forward-button + (kbd "") 'backward-button + ;; This exists because is recognized as C-i on terminals. + (kbd "g TAB") 'forward-button + "g]" 'forward-button + "g[" 'backward-button + + (kbd "C-o") 'help-go-back + (kbd "C-i") 'help-go-forward + + ;; TODO: Enable more help-go-* bindings? + ;; "gj" 'help-go-forward + ;; "gk" 'help-go-back + ;; "\C-j" 'help-go-forward + ;; "\C-k" 'help-go-back + + ;; The following bindings don't do what they are supposed to. "go" should open + ;; in the same window and "gO" should open in a different one. + "go" 'push-button + "gO" 'push-button + + "g?" 'describe-mode + "gr" 'revert-buffer + "<" 'help-go-back + ">" 'help-go-forward + "r" 'help-follow) + + (when (>= emacs-major-version 28) + (evil-collection-define-key 'normal 'help-mode-map + "s" 'help-view-source + "i" 'help-goto-info + "c" 'help-customize))) + +(provide 'evil-collection-help) +;;; evil-collection-help.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/helpful/README.org b/.config/emacs/lisp/evil-collection/modes/helpful/README.org new file mode 100644 index 0000000..8d41b3d --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/helpful/README.org @@ -0,0 +1,19 @@ +* helpful + + Evil bindings for [[https://github.com/Wilfred/helpful][helpful]]. + + Standard motion / quit bindings come from =evil-collection-set-readonly-bindings= + and are not repeated below. + +** Key bindings + +*** helpful-mode-map (normal state) + + | Command | Original | Evil | + |---------------------------+-------------+-------------| + | =forward-button= | =TAB=, =n= | == | + | =backward-button= | == | == | + | =helpful-visit-reference= | =RET= | =RET= | + | =push-button= | n/a | =go=, =gO= | + | =describe-mode= | n/a | =g?= | + | =helpful-update= | =g= | =gr= | diff --git a/.config/emacs/lisp/evil-collection/modes/helpful/evil-collection-helpful.el b/.config/emacs/lisp/evil-collection/modes/helpful/evil-collection-helpful.el new file mode 100644 index 0000000..58b8af7 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/helpful/evil-collection-helpful.el @@ -0,0 +1,54 @@ +;;; evil-collection-helpful.el --- Evil bindings for helpful-mode -*- lexical-binding: t -*- + +;; Copyright (C) 2018 Pierre Neidhardt + +;; Author: Pierre Neidhardt +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, help, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for `helpful-mode'. + +;;; Code: +(require 'evil-collection) +(require 'helpful nil t) + +(defconst evil-collection-helpful-maps '(helpful-mode-map)) + +;;;###autoload +(defun evil-collection-helpful-setup () + "Set up `evil' bindings for `helpful'." + (evil-collection-set-readonly-bindings 'helpful-mode-map) + (evil-collection-define-key 'normal 'helpful-mode-map + ;; motion + (kbd "") 'forward-button + (kbd "") 'backward-button + (kbd "RET") 'helpful-visit-reference + + ;; The following bindings don't do what they are supposed to. "go" should open + ;; in the same window and "gO" should open in a different one. + "go" 'push-button + "gO" 'push-button + + "g?" 'describe-mode + "gr" 'helpful-update)) + +(provide 'evil-collection-helpful) +;;; evil-collection-helpful.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/hg-histedit/evil-collection-hg-histedit.el b/.config/emacs/lisp/evil-collection/modes/hg-histedit/evil-collection-hg-histedit.el new file mode 100644 index 0000000..6ee6f74 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/hg-histedit/evil-collection-hg-histedit.el @@ -0,0 +1,49 @@ +;;; evil-collection-hg-histedit.el --- Bindings for `hg-histedit' -*- lexical-binding: t -*- + +;; Copyright (C) 2019 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: emacs, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for `hg-histedit'. + +;;; Code: +(require 'evil-collection) +(require 'hg-histedit nil t) + +(defconst evil-collection-hg-histedit-maps '(hg-histedit-mode-map)) + +;;;###autoload +(defun evil-collection-hg-histedit-setup () + "Set up `evil' bindings for `hg-histedit'." + (evil-collection-define-key 'normal 'hg-histedit-mode-map + "e" 'hg-histedit-modify-commit-with-edit + "m" 'hg-histedit-modify-commit-with-mess + "p" 'hg-histedit-modify-commit-with-pick + "b" 'hg-histedit-modify-commit-with-base + "d" 'hg-histedit-modify-commit-with-drop + "f" 'hg-histedit-modify-commit-with-fold + "r" 'hg-histedit-modify-commit-with-roll + "u" 'hg-histedit-undo)) + +(provide 'evil-collection-hg-histedit) +;;; evil-collection-hg-histedit.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/hideshow/README.org b/.config/emacs/lisp/evil-collection/modes/hideshow/README.org new file mode 100644 index 0000000..5599606 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/hideshow/README.org @@ -0,0 +1,11 @@ +* hideshow + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Hideshow.html][hideshow]] (=hs-minor-mode=). Standard fold operations + (=zo=, =zc=, =zr=, =zm=, =zR=, =zM=, =za=) are provided by evil itself via + =evil-fold-list=; this module adds the missing level-hide binding. + +** Key bindings + + | Command | Original | Evil | + |-----------------+-------------+------| + | =hs-hide-level= | =C-c @ C-l= | =zL= | diff --git a/.config/emacs/lisp/evil-collection/modes/hideshow/evil-collection-hideshow.el b/.config/emacs/lisp/evil-collection/modes/hideshow/evil-collection-hideshow.el new file mode 100644 index 0000000..ba27d84 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/hideshow/evil-collection-hideshow.el @@ -0,0 +1,45 @@ +;;; evil-collection-hideshow --- Bindings for `hideshow' -*- lexical-binding: t; -*- + +;; Copyright (C) 2025 Julian Hoch + +;; Author: Julian Hoch +;; Maintainer: Julian Hoch +;; Created: 2025-09-27 +;; Keywords: evil, emacs, tools +;; URL: https://github.com/emacs-evil/evil-collection + +;; This file is not part of GNU Emacs. + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for `hideshow'. + +;;; Code: +(require 'evil-collection) +(require 'hideshow nil t) + +(declare-function hs-hide-level "hideshow") +(defvar hs-minor-mode-map) +(defconst evil-collection-hideshow-maps '(hs-minor-mode-map)) + +;;;###autoload +(defun evil-collection-hideshow-setup () + "Set up `evil' bindings for `hideshow'." + (evil-set-initial-state 'hs-minor-mode 'normal) + (evil-collection-define-key 'normal 'hs-minor-mode-map + "zL" 'hs-hide-level)) + +(provide 'evil-collection-hideshow) +;;; evil-collection-hideshow.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/hungry-delete/evil-collection-hungry-delete.el b/.config/emacs/lisp/evil-collection/modes/hungry-delete/evil-collection-hungry-delete.el new file mode 100644 index 0000000..10b9b4c --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/hungry-delete/evil-collection-hungry-delete.el @@ -0,0 +1,60 @@ +;;; evil-collection-hungry-delete.el --- Bindings for `hungry-delete' -*- lexical-binding: t -*- + +;; Copyright (C) 2019 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, hungry-delete, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for `hungry-delete'. + +;;; Code: +(require 'evil-collection) +(require 'hungry-delete nil t) + +(defconst evil-collection-hungry-delete-maps '(hungry-delete-mode-map)) + +(defun evil-collection-hungry-delete (f &rest args) + "Wrapper function to run `hungry-delete-backward' if +`hungry-delete-mode' is on." + (if (and (bound-and-true-p hungry-delete-mode) + (fboundp 'hungry-delete-backward)) + (hungry-delete-backward 1) + (apply f args))) + +(defun evil-collection-hungry-delete-for-join (f &rest args) + "Wrapper function to run `hungry-delete-backward' if +`hungry-delete-mode' is on." + (if (and (bound-and-true-p hungry-delete-mode) + (fboundp 'hungry-delete-backward)) + (hungry-delete-backward 1) + (funcall f args))) + +;;;###autoload +(defun evil-collection-hungry-delete-setup () + "Set up `evil' bindings for `hungry-delete'." + (advice-add 'evil-delete-backward-char + :around #'evil-collection-hungry-delete) + (advice-add 'evil-delete-backward-char-and-join + :around #'evil-collection-hungry-delete-for-join)) + +(provide 'evil-collection-hungry-delete) +;;; evil-collection-hungry-delete.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/hyrolo/evil-collection-hyrolo.el b/.config/emacs/lisp/evil-collection/modes/hyrolo/evil-collection-hyrolo.el new file mode 100644 index 0000000..2dd0033 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/hyrolo/evil-collection-hyrolo.el @@ -0,0 +1,32 @@ +;;; evil-collection-hyrolo.el --- Bindings for `hyrolo' -*- lexical-binding: t -*- + +;;; Commentary: +;;; Bindings for hyrolo. + +;;; Code: +(require 'evil-collection) +(require 'hyperbole nil t) + +(defvar hyrolo-mode-map) +(defconst evil-collection-hyrolo-maps '(hyrolo-mode-map)) + +(declare-function hyrolo-to-previous-loc "hyrolo") +(declare-function hyrolo-to-next-loc "hyrolo") +(declare-function hyrolo-overview "hyrolo") +(declare-function hyrolo-outline-show-all "hyrolo") + +(defun evil-collection-hyrolo-setup () + "Set up `evil' bindings for hyrolo." + (evil-collection-define-key 'normal 'hyrolo-mode-map + (kbd "[[") #'hyrolo-to-previous-loc + (kbd "]]") #'hyrolo-to-next-loc + (kbd "C-k") #'hyrolo-to-previous-loc + (kbd "C-j") #'hyrolo-to-next-loc + (kbd "gk") #'hyrolo-to-previous-loc + (kbd "gj") #'hyrolo-to-next-loc + (kbd "zo") #'hyrolo-outline-show-all + (kbd "zc") #'hyrolo-overview) + (evil-set-initial-state 'hyrolo-mode 'normal)) + +(provide 'evil-collection-hyrolo) +;;; evil-collection-hyrolo.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/ibuffer/README.org b/.config/emacs/lisp/evil-collection/modes/ibuffer/README.org new file mode 100644 index 0000000..b4f7fc5 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/ibuffer/README.org @@ -0,0 +1,60 @@ +* ibuffer + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Ibuffer.html][IBuffer]]. + +** Key bindings + + Most marking, filtering, and operate-on-marked commands keep their default + ibuffer keys. The table below covers what evil-collection relocates. + + | Command | Original | Evil | + |----------------------------------------------+-----------------+--------------------------------------------| + | =ibuffer-forward-line= | =n= | (default) | + | =ibuffer-backward-line= | =p= | (default) | + | =ibuffer-forward-line= (g-prefix) | n/a | =gj= | + | =ibuffer-backward-line= (g-prefix) | n/a | =gk= | + | =ibuffer-update= | =g= | =gr= | + | =ibuffer-redisplay= | =l= | =gR= | + | =ibuffer-jump-to-buffer= | =j=, =M-g= | =J=, =M-g= | + | =ibuffer-visit-buffer= | =RET=, =e=, =f= | =RET= | + | =ibuffer-visit-buffer-other-window= | =o= | =go= | + | =ibuffer-visit-buffer-other-window-noselect= | =C-o= | =C-o= | + | =ibuffer-visit-buffer-1-window= | =M-o= | =M-o= | + | =ibuffer-do-view= | =A=, =v= | =A=, =gv= | + | =ibuffer-do-view-horizontally= | =C-x v= | =gV= | + | =ibuffer-mark-forward= | =m= | =m= | + | =ibuffer-unmark-forward= | =u= | =u= | + | =ibuffer-unmark-backward= | =DEL= | =DEL= | + | =ibuffer-toggle-marks= | =t= | =t=, =~= | + | =ibuffer-unmark-all-marks= | =U= | =U= | + | =ibuffer-unmark-all= | =M-DEL= | =M-DEL= | + | =ibuffer-mark-for-delete= | =d= | =d= | + | =ibuffer-mark-for-delete-backwards= | =C-d= | =C-d= (when =evil-want-C-d-scroll= is nil) | + | =ibuffer-do-kill-on-deletion-marks= | =x= | =x= | + | =ibuffer-do-kill-lines= | =k= | =K= | + | =ibuffer-bury-buffer= | =b= | =X= | + | =ibuffer-kill-line= | =C-k= | =gx= | + | =ibuffer-yank= | =C-y= | =C-y= | + | =ibuffer-copy-filename-as-kill= | =w= | =yf= | + | =ibuffer-copy-buffername-as-kill= | =B= | =yb= | + | =ibuffer-diff-with-file= | === | === | + | =ibuffer-toggle-sorting-mode= | =,= | =,= | + | =ibuffer-invert-sorting= | =s i= | =o i= | + | =ibuffer-do-sort-by-alphabetic= | =s a= | =o a= | + | =ibuffer-do-sort-by-recency= | =s v= | =o v= | + | =ibuffer-do-sort-by-size= | =s s= | =o s= | + | =ibuffer-do-sort-by-filename/process= | =s f= | =o f= | + | =ibuffer-do-sort-by-major-mode= | =s m= | =o m= | + | =ibuffer-forward-filter-group= | =M-n=, =TAB= | =C-j=, =M-n=, =]]=, =TAB= | + | =ibuffer-backward-filter-group= | =M-p=, =S-TAB= | =C-k=, =M-p=, =[[=, =S-TAB= | + | =ibuffer-jump-to-filter-group= | =M-j= | =M-j= | + | =ibuffer-forward-next-marked= | =M-}= | =}=, =M-}= | + | =ibuffer-backwards-next-marked= | =M-{= | ={=, =M-{= | + | =ibuffer-switch-format= | =`= | =`= | + | =ibuffer-add-to-tmp-show= | =+= | =+= | + | =ibuffer-add-to-tmp-hide= | =-= | =-= | + | =quit-window= | =q= | =q=, =ZZ=, =ZQ= | + + Operate-on-marked uppercase keys (=D=, =E=, =F=, =H=, =I=, =M=, =N=, =O=, + =P=, =Q=, =R=, =S=, =T=, =V=, =W=), the =% =, =* =, =s = (filter) and + =/ = prefixes keep their default ibuffer behavior. diff --git a/.config/emacs/lisp/evil-collection/modes/ibuffer/evil-collection-ibuffer.el b/.config/emacs/lisp/evil-collection/modes/ibuffer/evil-collection-ibuffer.el new file mode 100644 index 0000000..ccca359 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/ibuffer/evil-collection-ibuffer.el @@ -0,0 +1,197 @@ +;;; evil-collection-ibuffer.el --- Evil bindings for IBuffer -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, ibuffer, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for IBuffer. + +;;; Code: +(require 'evil-collection) +(require 'ibuffer) + +(defconst evil-collection-ibuffer-maps '(ibuffer-mode-map)) + +;;;###autoload +(defun evil-collection-ibuffer-setup () + "Set up `evil' bindings for `ibuffer'." + (evil-set-initial-state 'ibuffer-mode 'normal) + + (evil-collection-define-key 'normal 'ibuffer-mode-map + (kbd "C-d") (if evil-want-C-d-scroll + 'evil-scroll-down + 'ibuffer-mark-for-delete-backwards)) + + (evil-collection-define-key 'normal 'ibuffer-mode-map + (kbd "=") 'ibuffer-diff-with-file + (kbd "J") 'ibuffer-jump-to-buffer + (kbd "M-g") 'ibuffer-jump-to-buffer + (kbd "M-s a C-s") 'ibuffer-do-isearch + (kbd "M-s a M-C-s") 'ibuffer-do-isearch-regexp + (kbd "M-s a C-o") 'ibuffer-do-occur + + ;; mark + (kbd "m") 'ibuffer-mark-forward + (kbd "~") 'ibuffer-toggle-marks + (kbd "u") 'ibuffer-unmark-forward + (kbd "DEL") 'ibuffer-unmark-backward + (kbd "M-DEL") 'ibuffer-unmark-all + (kbd "* *") 'ibuffer-mark-special-buffers + (kbd "* c") 'ibuffer-change-marks + (kbd "U") 'ibuffer-unmark-all-marks + (kbd "* M") 'ibuffer-mark-by-mode + (kbd "* m") 'ibuffer-mark-modified-buffers + (kbd "* u") 'ibuffer-mark-unsaved-buffers + (kbd "* s") 'ibuffer-mark-special-buffers + (kbd "* r") 'ibuffer-mark-read-only-buffers + (kbd "* /") 'ibuffer-mark-dired-buffers + (kbd "* e") 'ibuffer-mark-dissociated-buffers + (kbd "* h") 'ibuffer-mark-help-buffers + (kbd "* z") 'ibuffer-mark-compressed-file-buffers + (kbd ".") 'ibuffer-mark-old-buffers + + (kbd "d") 'ibuffer-mark-for-delete + (kbd "x") 'ibuffer-do-kill-on-deletion-marks + + ;; immediate operations + (kbd "gj") 'ibuffer-forward-line + (kbd "gk") 'ibuffer-backward-line + + (kbd "}") 'ibuffer-forward-next-marked + (kbd "{") 'ibuffer-backwards-next-marked + (kbd "M-}") 'ibuffer-forward-next-marked + (kbd "M-{") 'ibuffer-backwards-next-marked + + (kbd "gR") 'ibuffer-redisplay + (kbd "gr") 'ibuffer-update + + "`" 'ibuffer-switch-format + "-" 'ibuffer-add-to-tmp-hide + "+" 'ibuffer-add-to-tmp-show + "X" 'ibuffer-bury-buffer + (kbd ",") 'ibuffer-toggle-sorting-mode + (kbd "o i") 'ibuffer-invert-sorting + (kbd "o a") 'ibuffer-do-sort-by-alphabetic + (kbd "o v") 'ibuffer-do-sort-by-recency + (kbd "o s") 'ibuffer-do-sort-by-size + (kbd "o f") 'ibuffer-do-sort-by-filename/process + (kbd "o m") 'ibuffer-do-sort-by-major-mode + + (kbd "s RET") 'ibuffer-filter-by-mode + (kbd "s m") 'ibuffer-filter-by-used-mode + (kbd "s M") 'ibuffer-filter-by-derived-mode + (kbd "s n") 'ibuffer-filter-by-name + (kbd "s *") 'ibuffer-filter-by-starred-name + (kbd "s f") 'ibuffer-filter-by-filename + (kbd "s b") 'ibuffer-filter-by-basename + (kbd "s .") 'ibuffer-filter-by-file-extension + (kbd "s <") 'ibuffer-filter-by-size-lt + (kbd "s >") 'ibuffer-filter-by-size-gt + (kbd "s i") 'ibuffer-filter-by-modified + (kbd "s v") 'ibuffer-filter-by-visiting-file + (kbd "s c") 'ibuffer-filter-by-content + (kbd "s e") 'ibuffer-filter-by-predicate + + (kbd "s r") 'ibuffer-switch-to-saved-filters + (kbd "s a") 'ibuffer-add-saved-filters + (kbd "s x") 'ibuffer-delete-saved-filters + (kbd "s d") 'ibuffer-decompose-filter + (kbd "s s") 'ibuffer-save-filters + (kbd "s p") 'ibuffer-pop-filter + (kbd "s ") 'ibuffer-pop-filter + (kbd "s !") 'ibuffer-negate-filter + (kbd "s t") 'ibuffer-exchange-filters + (kbd "s TAB") 'ibuffer-exchange-filters + (kbd "s o") 'ibuffer-or-filter + (kbd "s |") 'ibuffer-or-filter + (kbd "s &") 'ibuffer-and-filter + (kbd "s g") 'ibuffer-filters-to-filter-group + (kbd "s P") 'ibuffer-pop-filter-group + (kbd "s S-") 'ibuffer-pop-filter-group + (kbd "s D") 'ibuffer-decompose-filter-group + (kbd "s /") 'ibuffer-filter-disable + + (kbd "C-j") 'ibuffer-forward-filter-group + (kbd "M-n") 'ibuffer-forward-filter-group + (kbd "]]") 'ibuffer-forward-filter-group + "\t" 'ibuffer-forward-filter-group + (kbd "M-p") 'ibuffer-backward-filter-group + (kbd "C-k") 'ibuffer-backward-filter-group + (kbd "[[") 'ibuffer-backward-filter-group + [backtab] 'ibuffer-backward-filter-group + (kbd "M-j") 'ibuffer-jump-to-filter-group + (kbd "gx") 'ibuffer-kill-line + (kbd "C-y") 'ibuffer-yank + (kbd "s S") 'ibuffer-save-filter-groups + (kbd "s R") 'ibuffer-switch-to-saved-filter-groups + (kbd "s X") 'ibuffer-delete-saved-filter-groups + (kbd "s \\") 'ibuffer-clear-filter-groups + + (kbd "% n") 'ibuffer-mark-by-name-regexp + (kbd "% m") 'ibuffer-mark-by-mode-regexp + (kbd "% f") 'ibuffer-mark-by-file-name-regexp + (kbd "% g") 'ibuffer-mark-by-content-regexp + (kbd "% L") 'ibuffer-mark-by-locked + + (kbd "C-t") 'ibuffer-visit-tags-table + + (kbd "|") 'ibuffer-do-shell-command-pipe + (kbd "!") 'ibuffer-do-shell-command-file + (kbd "t") 'ibuffer-toggle-marks + ;; marked operations + (kbd "A") 'ibuffer-do-view + (kbd "D") 'ibuffer-do-delete + (kbd "E") 'ibuffer-do-eval + (kbd "F") 'ibuffer-do-shell-command-file + (kbd "I") 'ibuffer-do-query-replace-regexp + (kbd "H") 'ibuffer-do-view-other-frame + (kbd "N") 'ibuffer-do-shell-command-pipe-replace + (kbd "M") 'ibuffer-do-toggle-modified + (kbd "O") 'ibuffer-do-occur + (kbd "P") 'ibuffer-do-print + (kbd "Q") 'ibuffer-do-query-replace + (kbd "R") 'ibuffer-do-rename-uniquely + (kbd "S") 'ibuffer-do-save + (kbd "T") 'ibuffer-do-toggle-read-only + (kbd "r") 'ibuffer-do-replace-regexp + (kbd "V") 'ibuffer-do-revert + (kbd "W") 'ibuffer-do-view-and-eval + + (kbd "K") 'ibuffer-do-kill-lines + (kbd "yf") 'ibuffer-copy-filename-as-kill + (kbd "yb") 'ibuffer-copy-buffername-as-kill + + (kbd "RET") 'ibuffer-visit-buffer + (kbd "go") 'ibuffer-visit-buffer-other-window + (kbd "C-o") 'ibuffer-visit-buffer-other-window-noselect + (kbd "M-o") 'ibuffer-visit-buffer-1-window + (kbd "gv") 'ibuffer-do-view + (kbd "gV") 'ibuffer-do-view-horizontally + + ;; Quit + "q" 'quit-window + "ZZ" 'quit-window + "ZQ" 'quit-window)) + +(provide 'evil-collection-ibuffer) +;;; evil-collection-ibuffer.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/ielm/README.org b/.config/emacs/lisp/evil-collection/modes/ielm/README.org new file mode 100644 index 0000000..f7ce241 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/ielm/README.org @@ -0,0 +1,22 @@ +* ielm + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Lisp-Interaction.html][IELM]] (Inferior Emacs Lisp Mode). + + Initial state is =insert=. =RET= sends input in the state named by + =evil-collection-repl-submit-state=. + +** Key bindings + + | Command | Original | Evil | + |---------------+----------+----------------------| + | =ielm-return= | =RET= | =RET= (submit state) | + +** Customization + + | Variable | Default | Purpose | + |-----------------------------------------+---------+--------------------------------------------------------| + | =evil-collection-ielm-move-cursor-back= | =nil= | Move cursor back one column when leaving insert state. | + +** Notes + + - On entering normal state, point stays put (no Vim-style backward step). diff --git a/.config/emacs/lisp/evil-collection/modes/ielm/evil-collection-ielm.el b/.config/emacs/lisp/evil-collection/modes/ielm/evil-collection-ielm.el new file mode 100644 index 0000000..0883bb6 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/ielm/evil-collection-ielm.el @@ -0,0 +1,60 @@ +;;; evil-collection-ielm.el --- Bindings for `ielm' -*- lexical-binding: t -*- + +;; Copyright (C) 2026 Ian Pan + +;; Author: Ian Pan +;; Maintainer: Ian Pan +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, ielm, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for `ielm' (Inferior Emacs Lisp Mode). + +;;; Code: +(require 'evil-collection) +(require 'ielm nil t) + +(defvar inferior-emacs-lisp-mode-map) +(defconst evil-collection-ielm-maps '(inferior-emacs-lisp-mode-map)) + +(defcustom evil-collection-ielm-move-cursor-back nil + "Whether the cursor is moved backwards when exiting insert state." + :type 'boolean + :group 'ielm) + +(defun evil-collection-ielm-escape-stay () + "Go back to normal state but don't move cursor backwards. +Moving cursor backwards is the default vim behavior but +it is not intuitive for some cases like REPL buffers." + (setq-local evil-move-cursor-back + evil-collection-ielm-move-cursor-back)) + +;;;###autoload +(defun evil-collection-ielm-setup () + "Set up `evil' bindings for `ielm'." + (evil-set-initial-state 'inferior-emacs-lisp-mode 'insert) + + (add-hook 'ielm-mode-hook #'evil-collection-ielm-escape-stay) + + (let* ((submit evil-collection-repl-submit-state)) + (evil-collection-define-key submit 'inferior-emacs-lisp-mode-map + (kbd "RET") #'ielm-return + (kbd "") #'ielm-return))) + +(provide 'evil-collection-ielm) +;;; evil-collection-ielm.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/image+/evil-collection-image+.el b/.config/emacs/lisp/evil-collection/modes/image+/evil-collection-image+.el new file mode 100644 index 0000000..2ff9511 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/image+/evil-collection-image+.el @@ -0,0 +1,54 @@ +;;; evil-collection-image+.el --- Evil bindings for image-mode with image+ -*- lexical-binding: t -*- + +;; Copyright (C) 2017 Pierre Neidhardt + +;; Author: Pierre Neidhardt +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, image, tools + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: +;; Evil bindings for image-mode with image+. + +;;; Code: +(require 'evil-collection) +(require 'image+ nil t) + +(defconst evil-collection-image+-maps '(image-mode-map)) + +;;;###autoload +(defun evil-collection-image+-setup () + "Set up `evil' bindings for `image+'." + (evil-collection-define-key 'normal 'image-mode-map + ;; zoom + "+" 'imagex-sticky-zoom-in + "=" 'imagex-sticky-zoom-in + "-" 'imagex-sticky-zoom-out + "O" 'imagex-sticky-restore-original + + "M" 'imagex-sticky-maximize + "m" 'imagex-auto-adjust-mode + "S" 'imagex-sticky-save-image + "r" 'imagex-sticky-rotate-right + "R" 'imagex-sticky-rotate-left + "<" 'imagex-sticky-rotate-left ; like sxiv + ">" 'imagex-sticky-rotate-right)) ; like sxiv + +(provide 'evil-collection-image+) +;;; evil-collection-image+.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/image-dired/README.org b/.config/emacs/lisp/evil-collection/modes/image-dired/README.org new file mode 100644 index 0000000..e9f6a05 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/image-dired/README.org @@ -0,0 +1,31 @@ +* image-dired + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Image_002dDired.html][image-dired-thumbnail-mode]]. + +** Key bindings + + | Command | Original | Evil | + |---------------------------------------------------+-----------+-----------| + | =image-dired-backward-image= | == | =h= | + | =image-dired-forward-image= | == | =l= | + | =image-dired-next-line= | == | =j= | + | =image-dired-previous-line= | == | =k= | + | =image-dired-display-next-thumbnail-original= | =SPC= | =SPC= | + | =image-dired-display-previous-thumbnail-original= | =DEL= | =S-SPC= | + | =image-dired-display-thumbnail-original-image= | =RET= | =RET= | + | =image-dired-comment-thumbnail= | =c= | =c= | + | =image-dired-thumbnail-set-image-description= | =D= | =d= | + | =image-dired-mark-thumb-original-file= | =m= | =m= | + | =image-dired-unmark-thumb-original-file= | =u= | =u= | + | =image-dired-delete-char= | =C-d= | =D= | + | =image-dired-rotate-thumbnail-right= | n/a | =r= | + | =image-dired-rotate-thumbnail-left= | n/a | =R= | + | =image-dired-rotate-original-left= | =L= | =<= | + | =image-dired-rotate-original-right= | =R= | =>= | + | =image-dired-tag-thumbnail= | =t t= | =tt= | + | =image-dired-tag-thumbnail-remove= | =t r= | =tr= | + | =image-dired-line-up= | =g f= | =ff= | + | =image-dired-line-up-dynamic= | =g g= | =fd= | + | =image-dired-line-up-interactive= | =g i= | =fi= | + | =quit-window= | =q= | =q=, =ZZ= | + | =evil-quit= | n/a | =ZQ= | diff --git a/.config/emacs/lisp/evil-collection/modes/image-dired/evil-collection-image-dired.el b/.config/emacs/lisp/evil-collection/modes/image-dired/evil-collection-image-dired.el new file mode 100644 index 0000000..4e009ac --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/image-dired/evil-collection-image-dired.el @@ -0,0 +1,74 @@ +;;; evil-collection-image-dired.el --- Evil bindings for image-dired-thumbnail-mode -*- lexical-binding: t -*- + +;; Copyright (C) 2018 Pierre Neidhardt + +;; Author: Pierre Neidhardt +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, dired, image, tools + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: +;; Evil bindings for `image-dired-thumbnail-mode'. + +;;; Code: +(require 'evil-collection) +(require 'image-dired) + +(defconst evil-collection-image-dired-maps '(image-dired-thumbnail-mode-map)) + +;;;###autoload +(defun evil-collection-image-dired-setup () + "Set up `evil' bindings for `image-dired-thumbnail-mode'." + (evil-collection-define-key 'normal 'image-dired-thumbnail-mode-map + ;; motion + "h" 'image-dired-backward-image + "l" 'image-dired-forward-image + "j" 'image-dired-next-line + "k" 'image-dired-previous-line + + (kbd "SPC") 'image-dired-display-next-thumbnail-original + (kbd "S-SPC") 'image-dired-display-previous-thumbnail-original + (kbd "RET") 'image-dired-display-thumbnail-original-image + + "c" 'image-dired-comment-thumbnail + "d" 'image-dired-thumbnail-set-image-description + "m" 'image-dired-mark-thumb-original-file + "u" 'image-dired-unmark-thumb-original-file + "D" 'image-dired-delete-char + + ;; See image+. + "r" 'image-dired-rotate-thumbnail-right + "R" 'image-dired-rotate-thumbnail-left + "<" 'image-dired-rotate-original-left ; like sxiv + ">" 'image-dired-rotate-original-right ; like sxiv + + "tr" 'image-dired-tag-thumbnail-remove + "tt" 'image-dired-tag-thumbnail + + "ff" 'image-dired-line-up + "fd" 'image-dired-line-up-dynamic + "fi" 'image-dired-line-up-interactive + + ;; quit + "q" 'quit-window + "ZQ" 'evil-quit + "ZZ" 'quit-window)) + +(provide 'evil-collection-image-dired) +;;; evil-collection-image-dired.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/image/README.org b/.config/emacs/lisp/evil-collection/modes/image/README.org new file mode 100644 index 0000000..7824491 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/image/README.org @@ -0,0 +1,36 @@ +* image + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Image-Mode.html][image-mode]]. + +** Key bindings + + | Command | Original | Evil | + |------------------------------------+------------------+---------------------| + | =image-bob= | =<= | =gg= | + | =image-eob= | =>= | =G= | + | =image-forward-hscroll= | =C-f=, == | =l= | + | =image-backward-hscroll= | =C-b=, == | =h= | + | =image-next-line= | =C-n=, == | =j= | + | =image-previous-line= | =C-p=, == | =k= | + | =image-bol= | =C-a= | =0=, =^= | + | =image-eol= | =C-e= | =$= | + | =image-scroll-up= | =SPC= | =SPC=, =C-d= | + | =image-scroll-down= | =S-SPC=, =DEL= | =S-SPC=, == | + | =image-scroll-down= (=C-u-scroll=) | n/a | =C-u= | + | =image-toggle-animation= | =RET= | =RET= | + | =image-reset-speed= | =a 0= | =a0= | + | =image-reverse-speed= | =a r= | =ar= | + | =image-goto-frame= | =F= | =F= | + | =image-previous-frame= | =b= | =,= | + | =image-next-frame= | =f= | =.=, =;= | + | =image-decrease-speed= | n/a | ={= | + | =image-increase-speed= | n/a | =}= | + | =image-transform-fit-to-height= | =s h= | =H= | + | =image-transform-fit-to-width= | =s i= | =W= | + | =image-increase-size= | =i += | =+=, === | + | =image-decrease-size= | =i -= | =-= | + | =image-previous-file= | =p= | =[[=, =gk=, =C-k= | + | =image-next-file= | =n= | =]]=, =gj=, =C-j= | + | =image-toggle-display= | =C-c C-c= | =C-c C-c= | + | =quit-window= | =q= | =q=, =ZZ= | + | =evil-quit= | n/a | =ZQ= | diff --git a/.config/emacs/lisp/evil-collection/modes/image/evil-collection-image.el b/.config/emacs/lisp/evil-collection/modes/image/evil-collection-image.el new file mode 100644 index 0000000..c8da183 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/image/evil-collection-image.el @@ -0,0 +1,93 @@ +;;; evil-collection-image.el --- Evil bindings for Image -*- lexical-binding: t -*- + +;; Copyright (C) 2017 Pierre Neidhardt + +;; Author: Pierre Neidhardt +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, bookmark, tools + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: +;; Evil bindings for `image-mode'. + +;;; Code: +(require 'evil-collection) +(require 'image-mode) + +(defconst evil-collection-image-maps '(image-mode-map)) + +;;;###autoload +(defun evil-collection-image-setup () + "Set up `evil' bindings for `image-mode'." + (evil-set-initial-state 'image-mode 'normal) + + (evil-collection-define-key 'normal 'image-mode-map + ;; motion + "gg" 'image-bob + "G" 'image-eob + [remap evil-forward-char] 'image-forward-hscroll + [remap evil-backward-char] 'image-backward-hscroll + [remap evil-next-line] 'image-next-line + [remap evil-previous-line] 'image-previous-line + "0" 'image-bol + "^" 'image-bol + "$" 'image-eol + (kbd "C-d") 'image-scroll-up + (kbd "SPC") 'image-scroll-up + (kbd "S-SPC") 'image-scroll-down + (kbd "") 'image-scroll-down + ;; animation + (kbd "RET") 'image-toggle-animation + "a0" 'image-reset-speed + "ar" 'image-reverse-speed + "F" 'image-goto-frame + "," 'image-previous-frame ; mplayer/mpv style + "." 'image-next-frame ; mplayer/mpv style + ";" 'image-next-frame ; Evil style + "{" 'image-decrease-speed ; mplayer/mpv style + "}" 'image-increase-speed ; mplayer/mpv style + + "H" 'image-transform-fit-to-height + "W" 'image-transform-fit-to-width + + "+" 'image-increase-size + "=" 'image-increase-size + "-" 'image-decrease-size + + "[[" 'image-previous-file + "]]" 'image-next-file + "gk" 'image-previous-file + "gj" 'image-next-file + (kbd "C-k") 'image-previous-file + (kbd "C-j") 'image-next-file + + (kbd "C-c C-c") 'image-toggle-display + + ;; quit + "q" 'quit-window + "ZQ" 'evil-quit + "ZZ" 'quit-window) + + ;; TODO: What if the user changes `evil-want-C-u-scroll' after this is run? + (when evil-want-C-u-scroll + (evil-collection-define-key 'normal 'image-mode-map + (kbd "C-u") 'image-scroll-down))) + +(provide 'evil-collection-image) +;;; evil-collection-image.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/imenu-list/evil-collection-imenu-list.el b/.config/emacs/lisp/evil-collection/modes/imenu-list/evil-collection-imenu-list.el new file mode 100644 index 0000000..21a54e3 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/imenu-list/evil-collection-imenu-list.el @@ -0,0 +1,47 @@ +;;; evil-collection-imenu-list.el --- Bindings for `imenu-list' -*- lexical-binding: t -*- + +;; Copyright (C) 2018 James Nguyen + +;; Author: Fredrik Bergroth +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, emacs, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Bindings for `imenu-list'. + +;;; Code: +(require 'evil-collection) +(require 'imenu-list nil t) + +(defconst evil-collection-imenu-list-maps '(imenu-list-major-mode-map)) + +;;;###autoload +(defun evil-collection-imenu-list-setup () + "Set up `evil' bindings for `imenu-list'." + (evil-collection-define-key 'normal 'imenu-list-major-mode-map + (kbd "RET") 'imenu-list-goto-entry + (kbd "TAB") 'hs-toggle-hiding + "d" 'imenu-list-display-entry + "gr" 'imenu-list-refresh + "q" 'imenu-list-quit-window)) + + +(provide 'evil-collection-imenu-list) +;;; evil-collection-imenu-list.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/imenu/README.org b/.config/emacs/lisp/evil-collection/modes/imenu/README.org new file mode 100644 index 0000000..b34a65d --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/imenu/README.org @@ -0,0 +1,11 @@ +* imenu + + Evil integration for [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Imenu.html][imenu]]. No keymap is touched; the setup only marks + =imenu= as a non-repeatable jump command for evil's jump list and dot-repeat + machinery. + +** Notes + + - =imenu= is declared with =evil-declare-not-repeat=. + - =imenu= is given the =:jump t= command property so it integrates with + =C-o= / =C-i= and =evil-set-jump=. diff --git a/.config/emacs/lisp/evil-collection/modes/imenu/evil-collection-imenu.el b/.config/emacs/lisp/evil-collection/modes/imenu/evil-collection-imenu.el new file mode 100644 index 0000000..ac3e905 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/imenu/evil-collection-imenu.el @@ -0,0 +1,39 @@ +;;; evil-collection-imenu.el --- Evil integration for `imenu' -*- lexical-binding: t -*- + +;; Copyright (C) 2020 Jacob First + +;; Author: Jacob First +;; Maintainer: James Nguyen +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, emacs, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil conveniences for `imenu'. + +;;; Code: +(require 'imenu) +(require 'evil-collection) + +;;;###autoload +(defun evil-collection-imenu-setup () + "Set up Evil integration for `imenu'." + (evil-declare-not-repeat 'imenu) + (evil-add-command-properties 'imenu :jump t)) + +(provide 'evil-collection-imenu) +;;; evil-collection-imenu.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/indent/README.org b/.config/emacs/lisp/evil-collection/modes/indent/README.org new file mode 100644 index 0000000..480e6d9 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/indent/README.org @@ -0,0 +1,15 @@ +* indent + + Evil bindings for the transient =indent-rigidly-map= used after + =indent-rigidly= (=C-x TAB=). + +** Key bindings + + | Command | Original | Evil | + |------------------------------------+-------------+------| + | =indent-rigidly-left= | == | =h= | + | =indent-rigidly-right= | == | =l= | + | =indent-rigidly-left-to-tab-stop= | =S-= | =H= | + | =indent-rigidly-right-to-tab-stop= | =S-= | =L= | + + The arrow-key bindings remain available alongside the hjkl additions. diff --git a/.config/emacs/lisp/evil-collection/modes/indent/evil-collection-indent.el b/.config/emacs/lisp/evil-collection/modes/indent/evil-collection-indent.el new file mode 100644 index 0000000..87a8e00 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/indent/evil-collection-indent.el @@ -0,0 +1,48 @@ +;;; evil-collection-indent.el --- Evil bindings for indentation -*- lexical-binding: t -*- + +;; Copyright (C) 2020 Zhiwei Chen + +;; Author: Zhiwei Chen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for indentation. + +;;; Commentary: +;; + +;;; Code: +(require 'evil-collection) + +(defconst evil-collection-indent-maps '(indent-rigidly-map)) + +;;;###autoload +(defun evil-collection-indent-setup () + "Set up `evil' bindings for autoloaded files." + (evil-collection-define-key nil 'indent-rigidly-map + "h" 'indent-rigidly-left + "l" 'indent-rigidly-right + "H" 'indent-rigidly-left-to-tab-stop + "L" 'indent-rigidly-right-to-tab-stop)) + + +(provide 'evil-collection-indent) +;;; evil-collection-indent.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/indium/evil-collection-indium.el b/.config/emacs/lisp/evil-collection/modes/indium/evil-collection-indium.el new file mode 100644 index 0000000..943fd40 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/indium/evil-collection-indium.el @@ -0,0 +1,110 @@ +;;; evil-collection-indium.el --- Bindings for `indium' -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: emacs, indium, javascript, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Bindings for `indium'. + +;;; Code: +(require 'evil-collection) +(require 'indium nil t) + +(defconst evil-collection-indium-maps '(indium-debugger-mode-map + indium-inspector-mode-map + indium-debugger-locals-mode-map + indium-debugger-frames-mode-map + indium-interaction-mode-map + indium-repl-mode-map)) + +;;;###autoload +(defun evil-collection-indium-setup () + "Set up `evil' bindings for `indium'." + (when evil-collection-setup-debugger-keys + (evil-collection-define-key 'normal 'indium-debugger-mode-map + "n" 'indium-debugger-step-over + "i" 'indium-debugger-step-into + "o" 'indium-debugger-step-out + "c" 'indium-debugger-resume + "L" 'indium-debugger-locals + "s" 'indium-debugger-stack-frames + "q" 'indium-debugger-resume + "H" 'indium-debugger-here + "e" 'indium-debugger-evaluate + ">" 'indium-debugger-next-frame + "<" 'indium-debugger-previous-frame) + + (add-hook 'indium-debugger-mode-hook #'evil-normalize-keymaps)) + + (evil-collection-define-key 'normal 'indium-inspector-mode-map + "q" 'quit-window + (kbd "RET") 'indium-follow-link + [mouse-1] 'indium-follow-link + "L" 'indium-inspector-pop + "gr" 'indium-inspector-refresh + "gj" 'indium-inspector-next-reference + "gk" 'indium-inspector-previous-reference + (kbd "C-j") 'indium-inspector-next-reference + (kbd "C-k") 'indium-inspector-previous-reference + [tab] 'indium-inspector-next-reference + [backtab] 'indium-inspector-previous-reference) + + (evil-collection-define-key 'normal 'indium-debugger-locals-mode-map + "q" 'quit-window + "L" nil + "gr" nil) + + (evil-collection-define-key 'normal 'indium-debugger-frames-mode-map + "q" 'quit-window + [return] 'indium-follow-link + (kbd "RET") 'indium-follow-link + (kbd "gj") 'indium-debugger-frames-next-frame + (kbd "gk") 'indium-debugger-frames-previous-frame + (kbd "C-j") 'indium-debugger-frames-next-frame + (kbd "C-k") 'indium-debugger-frames-previous-frame + [tab] 'indium-debugger-frames-next-frame + [backtab] 'indium-debugger-frames-previous-frame) + + (evil-collection-define-key 'normal 'indium-interaction-mode-map + "gr" 'indium-update-script-source + "gz" 'indium-switch-to-repl-buffer) + + (when evil-collection-setup-debugger-keys + (evil-collection-define-key 'normal 'indium-interaction-mode-map + [left-fringe mouse-1] 'indium-mouse-toggle-breakpoint + [left-margin mouse-1] 'indium-mouse-toggle-breakpoint + [f5] 'indium-debugger-resume + [S-f5] 'indium-debugger-resume + [f9] 'indium-toggle-breakpoint + [f10] 'indium-debugger-step-over + [f11] 'indium-debugger-step-into + [S-f11] 'indium-debugger-step-out)) + + (evil-collection-define-key 'normal 'indium-repl-mode-map + (kbd "gj") 'indium-repl-next-input + (kbd "gk") 'indium-repl-previous-input + (kbd "C-j") 'indium-repl-next-input + (kbd "C-k") 'indium-repl-previous-input)) + +(provide 'evil-collection-indium) +;;; evil-collection-indium.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/info/README.org b/.config/emacs/lisp/evil-collection/modes/info/README.org new file mode 100644 index 0000000..f8d168b --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/info/README.org @@ -0,0 +1,40 @@ +* info + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/info/index.html][Info]]. + + Uses normal state instead of motion state and rebinds movement to standard + evil keys. + +** Key bindings + + | Command | Original | Evil | + |----------------------------------------------+----------------+----------------------| + | =Info-next-reference= | =TAB= | =TAB=, =g TAB=, =g]= | + | =Info-prev-reference= | =S-TAB= | =S-TAB=, =g[= | + | =Info-help= | =h= | =M-h= | + | =Info-history-back= | =l= | =C-t=, =C-o= | + | =Info-history-forward= | =r= | =C-i= | + | =Info-scroll-up= | =SPC= | =SPC= | + | =Info-scroll-down= | =DEL=, =S-SPC= | =DEL= | + | =Info-follow-nearest-node= | =RET= | =RET=, =C-]= | + | =Info-directory= | =d= | =d= | + | =Info-up= | =^=, =u= | =u= | + | =Info-history= | =L= | =gL= | + | =Info-search= | =s= | =s= | + | =Info-search-case-sensitively= | =S= | =S= | + | =Info-index= | =i= | =i= | + | =Info-virtual-index= | =I= | =I= | + | =info-apropos= | n/a | =a= | + | =Info-nth-menu-item= | =1..9= | =g1..g9= | + | =Info-menu= | =m= | =J=, =gm= | + | =Info-goto-node= | =g= | =gG= | + | =Info-top-node= | =t=, =<= | =gt= | + | =Info-toc= | =T= | =gT= | + | =Info-follow-reference= | =f= | =gf= | + | =Info-forward-node= | =]= | =C-j= | + | =Info-backward-node= | =[= | =C-k= | + | =Info-next= | =n= | =gj= | + | =Info-prev= | =p= | =gk= | + | =Info-index-next= | =,= | =g,= | + | =Info-summary= | =?= | =g?= | + | =Info-copy-current-node-name= (=y= operator) | =c=, =w= | =yu= | diff --git a/.config/emacs/lisp/evil-collection/modes/info/evil-collection-info.el b/.config/emacs/lisp/evil-collection/modes/info/evil-collection-info.el new file mode 100644 index 0000000..5f4332e --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/info/evil-collection-info.el @@ -0,0 +1,110 @@ +;;; evil-collection-info.el --- Evil bindings for Info-mode -*- lexical-binding: t -*- + +;; Copyright (C) 2017 Pierre Neidhardt + +;; Author: Pierre Neidhardt +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, info, tools + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: +;; The default bindings in motion state override the standard movement keys. +;; This package uses normal state and redefines everything. + +;;; Code: +(require 'evil-collection) +(require 'info) + +(defconst evil-collection-info-maps '(Info-mode-map)) + +;;;###autoload +(defun evil-collection-info-setup () + "Set up `evil' bindings for `info-mode'." + (evil-collection-set-readonly-bindings 'Info-mode-map) + (evil-set-initial-state 'Info-mode 'normal) + (evil-collection-define-key 'normal 'Info-mode-map + (kbd "") 'Info-next-reference + (kbd "S-") 'Info-prev-reference + ;; This exists because is recognized as C-i on terminals. + (kbd "g TAB") 'Info-next-reference + "g]" 'Info-next-reference + "g[" 'Info-prev-reference + + ;; From evil-integration.el. + (kbd "M-h") 'Info-help ; "h" + (kbd "C-t") 'Info-history-back ; "l" + (kbd "C-o") 'Info-history-back + " " 'Info-scroll-up + (kbd "RET") 'Info-follow-nearest-node + (kbd "C-]") 'Info-follow-nearest-node + (kbd "DEL") 'Info-scroll-down + (kbd "C-i") 'Info-history-forward + + "d" 'Info-directory + "u" 'Info-up + "gL" 'Info-history ; "L" + "s" 'Info-search + "S" 'Info-search-case-sensitively + "i" 'Info-index + "I" 'Info-virtual-index + "a" 'info-apropos + + ;; mouse integration + [mouse-2] 'Info-mouse-follow-nearest-node + [follow-link] 'mouse-face + ;; make mac user happy + [double-wheel-left] 'Info-history-back + [double-wheel-right] 'Info-history-forward + + ;; digit arguments + "g1" 'Info-nth-menu-item + "g2" 'Info-nth-menu-item + "g3" 'Info-nth-menu-item + "g4" 'Info-nth-menu-item + "g5" 'Info-nth-menu-item + "g6" 'Info-nth-menu-item + "g7" 'Info-nth-menu-item + "g8" 'Info-nth-menu-item + "g9" 'Info-nth-menu-item + + ;; goto + "J" 'Info-menu + + "gG" 'Info-goto-node + "gm" 'Info-menu + "gt" 'Info-top-node + "gT" 'Info-toc + "gf" 'Info-follow-reference + ;; TODO: "[" and "]" are Emacs default for fine-grained browsing. + ;; We usually use "C-j"/"C-k" for that. + (kbd "C-j") 'Info-forward-node + (kbd "C-k") 'Info-backward-node + "gj" 'Info-next + "gk" 'Info-prev + + "g," 'Info-index-next + + "g?" 'Info-summary) + + ;; yu, Like eww. + (evil-collection-define-operator-key 'yank 'Info-mode-map + "u" 'Info-copy-current-node-name)) + +(provide 'evil-collection-info) +;;; evil-collection-info.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/ivy/README.org b/.config/emacs/lisp/evil-collection/modes/ivy/README.org new file mode 100644 index 0000000..e6b0bea --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/ivy/README.org @@ -0,0 +1,51 @@ +* ivy + + Evil bindings for [[https://github.com/abo-abo/swiper][ivy]]. + +** Key bindings + +*** ivy-minibuffer-map + + Minibuffer bindings only take effect when =evil-collection-setup-minibuffer= + is non-nil (the global == → =minibuffer-keyboard-quit= always applies). + + | Command | Original | Evil | + |----------------------------+----------+------------------------------| + | =minibuffer-keyboard-quit= | =C-g= | == (any) | + | =abort-recursive-edit= | n/a | == (normal) | + | =exit-minibuffer= | =RET= | =RET= (normal) | + | =ivy-done= | =RET= | =C-m= (normal) | + | =ivy-next-line= | =C-n= | =j= (normal), =C-n= (insert) | + | =ivy-previous-line= | =C-p= | =k= (normal), =C-p= (insert) | + | =ivy-backward-delete-char= | =DEL= | =DEL= (insert) | + | =ivy-reverse-i-search= | =C-r= | =C-r= (insert) | + +*** ivy-occur-mode-map (normal state) + + | Command | Original | Evil | + |------------------------------+------------+-----------| + | =ivy-occur-next-line= | =n= | =j= | + | =ivy-occur-previous-line= | =p= | =k= | + | =evil-backward-char= | n/a | =h= | + | =evil-forward-char= | n/a | =l= | + | =evil-goto-first-line= | n/a | =gg= | + | =ivy-occur-press= | =RET=, =f= | =gf= | + | =ivy-occur-press-and-switch= | =o= | =RET= | + | =ivy-occur-read-action= | =M-o= | =ga= | + | =ivy-occur-dispatch= | =C-c C-o= | =go= | + | =ivy-occur-toggle-calling= | =C-c C-p= | =gc= | + | =ivy-occur-revert-buffer= | =g= | =gr= | + | =ivy-occur-click= | =mouse-1= | =mouse-1= | + | =quit-window= | =q= | =q= | + +*** ivy-occur-grep-mode-map (normal state) + + Inherits the above plus: + + | Command | Original | Evil | + |--------------------------------------------+-----------+-------------------------------------| + | =ivy-occur-delete-candidate= | =C-d= | =d=, =gd= | + | =ivy-occur-delete-candidate= | =C-d= | =D= (when =evil-want-C-d-scroll=) | + | =evil-scroll-down= | n/a | =C-d= (when =evil-want-C-d-scroll=) | + | =ivy-wgrep-change-to-wgrep-mode= | =C-x C-q= | =i=, =C-x C-q= | + | =evil-digit-argument-or-beginning-of-line= | n/a | =0= | diff --git a/.config/emacs/lisp/evil-collection/modes/ivy/evil-collection-ivy.el b/.config/emacs/lisp/evil-collection/modes/ivy/evil-collection-ivy.el new file mode 100644 index 0000000..95334ff --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/ivy/evil-collection-ivy.el @@ -0,0 +1,111 @@ +;;; evil-collection-ivy.el --- Evil bindings for ivy -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, ivy, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for `ivy-mode'. + +;;; Code: +(require 'evil-collection) +(require 'ivy nil t) + +(defconst evil-collection-ivy-maps '(ivy-occur-mode-map + ivy-occur-grep-mode-map + ivy-minibuffer-map)) + +;;;###autoload +(defun evil-collection-ivy-setup () + "Set up `evil' bindings for `ivy-mode'." + (evil-collection-define-key nil 'ivy-minibuffer-map + (kbd "") 'minibuffer-keyboard-quit) + (evil-collection-define-key 'normal 'ivy-occur-mode-map + [mouse-1] 'ivy-occur-click + (kbd "RET") 'ivy-occur-press-and-switch + "j" 'ivy-occur-next-line + "k" 'ivy-occur-previous-line + "h" 'evil-backward-char + "l" 'evil-forward-char + "g" nil + "gg" 'evil-goto-first-line + "gf" 'ivy-occur-press + "ga" 'ivy-occur-read-action + "go" 'ivy-occur-dispatch + "gc" 'ivy-occur-toggle-calling + + ;; refresh + "gr" 'ivy-occur-revert-buffer + + ;; quit + "q" 'quit-window) + + (when evil-want-C-d-scroll + (evil-collection-define-key 'normal 'ivy-occur-grep-mode-map + "D" 'ivy-occur-delete-candidate + (kbd "C-d") 'evil-scroll-down)) + + (evil-collection-define-key 'visual 'ivy-occur-grep-mode-map + "j" 'evil-next-line + "k" 'evil-previous-line) + + (evil-collection-define-key 'normal 'ivy-occur-grep-mode-map + "d" 'ivy-occur-delete-candidate + (kbd "C-x C-q") 'ivy-wgrep-change-to-wgrep-mode + "i" 'ivy-wgrep-change-to-wgrep-mode + "gd" 'ivy-occur-delete-candidate + [mouse-1] 'ivy-occur-click + (kbd "RET") 'ivy-occur-press-and-switch + "j" 'ivy-occur-next-line + "k" 'ivy-occur-previous-line + "h" 'evil-backward-char + "l" 'evil-forward-char + "g" nil + "gg" 'evil-goto-first-line + "gf" 'ivy-occur-press + "gr" 'ivy-occur-revert-buffer + "ga" 'ivy-occur-read-action + "go" 'ivy-occur-dispatch + "gc" 'ivy-occur-toggle-calling + + "0" 'evil-digit-argument-or-evil-beginning-of-line + + ;; quit + "q" 'quit-window) + + (defvar evil-collection-setup-minibuffer) + (when evil-collection-setup-minibuffer + (evil-collection-define-key 'normal 'ivy-minibuffer-map + (kbd "") 'abort-recursive-edit + (kbd "RET") 'exit-minibuffer + (kbd "C-m") 'ivy-done + "j" 'ivy-next-line + "k" 'ivy-previous-line) + + (evil-collection-define-key 'insert 'ivy-minibuffer-map + (kbd "DEL") 'ivy-backward-delete-char + (kbd "C-r") 'ivy-reverse-i-search + (kbd "C-n") 'ivy-next-line + (kbd "C-p") 'ivy-previous-line))) + +(provide 'evil-collection-ivy) +;;; evil-collection-ivy.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/js2-mode/README.org b/.config/emacs/lisp/evil-collection/modes/js2-mode/README.org new file mode 100644 index 0000000..3639801 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/js2-mode/README.org @@ -0,0 +1,12 @@ +* js2-mode + + Evil compatibility for [[https://github.com/mooz/js2-mode][js2-mode]]. No key bindings. + + Adds a hook to =js2-mode-hook= and =js2-jsx-mode-hook= that sets the + buffer-local =evil-shift-width= to match =js-indent-level=, so =>>= and + =<<= indent by the same amount js2-mode does. + +** New commands + + - =evil-collection-js2-set-evil-shift-width= - Sync =evil-shift-width= + with =js-indent-level= in the current buffer. diff --git a/.config/emacs/lisp/evil-collection/modes/js2-mode/evil-collection-js2-mode.el b/.config/emacs/lisp/evil-collection/modes/js2-mode/evil-collection-js2-mode.el new file mode 100644 index 0000000..fe29237 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/js2-mode/evil-collection-js2-mode.el @@ -0,0 +1,46 @@ +;;; evil-collection-js2-mode.el --- Bindings for `js2-mode' -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, emacs, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for `js2-mode' + +;;; Code: +(require 'evil-collection) +(require 'js2-mode nil t) + +(defvar js-indent-level) + +(defun evil-collection-js2-set-evil-shift-width () + "Set `evil-shift-width' according to `js-indent-level'." + (setq-local evil-shift-width js-indent-level)) + +;;;###autoload +(defun evil-collection-js2-mode-setup () + "Set up `evil' bindings for `js2-mode'." + (add-hook 'js2-mode-hook #'evil-collection-js2-set-evil-shift-width) + (add-hook 'js2-jsx-mode-hook #'evil-collection-js2-set-evil-shift-width)) + +(provide 'evil-collection-js2-mode) +;;; evil-collection-js2-mode.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/kmacro/README.org b/.config/emacs/lisp/evil-collection/modes/kmacro/README.org new file mode 100644 index 0000000..5c05d82 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/kmacro/README.org @@ -0,0 +1,22 @@ +* kmacro + + Evil bindings for the [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Keyboard-Macros.html][kmacro]] menu. + +** Key bindings + + Bindings applied to =kmacro-menu-mode-map=. Initial state is normal. + + | Command | Original | Evil | + |---------------------------------+----------+-------| + | =kmacro-menu-edit-column= | =RET= | =RET= | + | =kmacro-menu-edit-position= | =#= | =#= | + | =kmacro-menu-edit-counter= | =c= | =c= | + | =kmacro-menu-edit-format= | =f= | =f= | + | =kmacro-menu-edit-keys= | =e= | =e= | + | =kmacro-menu-flag-for-deletion= | =d= | =d= | + | =kmacro-menu-mark= | =m= | =m= | + | =kmacro-menu-unmark= | =u= | =u= | + | =kmacro-menu-unmark-all= | =U= | =U= | + | =kmacro-menu-do-flagged-delete= | =x= | =x= | + | =kmacro-menu-do-copy= | =C= | =C= | + | =kmacro-menu-do-delete= | =D= | =D= | diff --git a/.config/emacs/lisp/evil-collection/modes/kmacro/evil-collection-kmacro.el b/.config/emacs/lisp/evil-collection/modes/kmacro/evil-collection-kmacro.el new file mode 100644 index 0000000..b7c7aff --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/kmacro/evil-collection-kmacro.el @@ -0,0 +1,58 @@ +;;; evil-collection-kmacro.el --- Evil bindings for kmacro menu -*- lexical-binding: t -*- + +;; Copyright (C) 2024 Zhiwei Chen + +;; Author: Zhiwei Chen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "30")) +;; Keywords: evil, kmacro, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for kmacro menu. + +;;; Code: + +(require 'evil-collection) +(require 'kmacro) + +(defconst evil-collection-kmacro-maps '(kmacro-menu-mode-map)) + +(defun evil-collection-kmacro-setup () + "Set up `evil' bindings to `tab-bar'." + (evil-set-initial-state 'kmacro-menu-mode 'normal) + (evil-collection-define-key 'normal 'kmacro-menu-mode-map + ;; Edit + (kbd "RET") 'kmacro-menu-edit-column + "#" 'kmacro-menu-edit-position + "c" 'kmacro-menu-edit-counter + "f" 'kmacro-menu-edit-format + "e" 'kmacro-menu-edit-keys + + ;; Mark + "d" 'kmacro-menu-flag-for-deletion + "m" 'kmacro-menu-mark + "u" 'kmacro-menu-unmark + "U" 'kmacro-menu-unmark-all + + "x" 'kmacro-menu-do-flagged-delete + "C" 'kmacro-menu-do-copy + "D" 'kmacro-menu-do-delete)) + +(provide 'evil-collection-kmacro) +;;; evil-collection-kmacro.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/kotlin-mode/evil-collection-kotlin-mode.el b/.config/emacs/lisp/evil-collection/modes/kotlin-mode/evil-collection-kotlin-mode.el new file mode 100644 index 0000000..8d8d454 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/kotlin-mode/evil-collection-kotlin-mode.el @@ -0,0 +1,42 @@ +;;; evil-collection-kotlin-mode.el --- Bindings for `kotlin-mode' -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: emacs, evil, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for `kotlin-mode'. + +;;; Code: +(require 'evil-collection) +(require 'kotlin-mode nil t) + +(defconst evil-collection-kotlin-maps '(kotlin-mode-map)) + +;;;###autoload +(defun evil-collection-kotlin-mode-setup () + "Set up `evil' bindings for `kotlin-mode'." + (evil-collection-define-key 'normal 'kotlin-mode-map + "gz" 'kotlin-repl)) + +(provide 'evil-collection-kotlin-mode) +;;; evil-collection-kotlin-mode.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/leetcode/evil-collection-leetcode.el b/.config/emacs/lisp/evil-collection/modes/leetcode/evil-collection-leetcode.el new file mode 100644 index 0000000..e198f63 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/leetcode/evil-collection-leetcode.el @@ -0,0 +1,46 @@ +;;; evil-collection-leetcode.el --- Bindings for `leetcode' -*- lexical-binding: t -*- + +;; Copyright (C) 2019 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: emacs, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for `leetcode'. + +;;; Code: +(require 'evil-collection) +(require 'leetcode nil t) + +(defconst evil-collection-leetcode-maps + '(leetcode--problems-mode-map + leetcode--problem-description-mode-map)) + +;;;###autoload +(defun evil-collection-leetcode-setup () + "Set up `evil' bindings for `leetcode'." + (evil-collection-define-key 'normal 'leetcode--problems-mode-map + (kbd "RET") 'leetcode-show-current-problem + "gr" 'leetcode-problems-refresh + "q" 'quit-window)) + +(provide 'evil-collection-leetcode) +;;; evil-collection-leetcode.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/lispy/README.org b/.config/emacs/lisp/evil-collection/modes/lispy/README.org new file mode 100644 index 0000000..1123fc2 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/lispy/README.org @@ -0,0 +1,140 @@ +* lispy + + Evil bindings for [[https://github.com/abo-abo/lispy][lispy]], the short-key mode for editing s-expressions. + + Installs two additional themes into =lispy-set-key-theme=: ='special-evil' + and ='evil'. The setup function applies both, advising + =lispy-set-key-theme= so the original themes (=special=, =paredit=, etc.) + are bypassed in favour of the evil-flavored variants. + +** Key bindings + +*** Special state (point on a paren) + + Lispy's "special" state is rebound to mirror vim motions. Keys come from + =evil-collection-lispy-mode-map-special=. + + | Command | Original (lispy) | Evil | + |-----------------------------------------------------+------------------+----------| + | =lispy-right= | =l= | =l= | + | =lispy-left= | =h= | =h= | + | =lispy-down= | =j= | =j= | + | =lispy-up= | =k= | =k= | + | =lispy-different= | =o= | =o= | + | =lispy-ace-paren= | =f= | =f= | + | =lispy-flow= | =n= | =n= | + | =lispy-ace-char= | =t= | =t= | + | =lispy-teleport= | =T= | =T= | + | =lispy-new-copy= | =y= | =y= | + | =lispy-paste= | =P= | =p= | + | =lispy-eval-other-window= | =P= | =P= | + | =lispy-mark-list= | =v= | =v= | + | =lispy-view= | =V= | =z= | + | =lispy-x= | =x= | =q= | + | =lispy-other-mode= | =Q= | =Q= | + | =lispy-occur= | =/= | =/= | + | =lispy-splice= | =/= | =x= | + | =lispy-comment= | =;= | =;= | + | =evil-collection-lispy-delete= | n/a | =d= | + | =lispy-join= | =+= | =+=, =J= | + | =lispy-describe= | =h= | =K= | + | =lispy-outline-goto-child= | =L= | =L= | + | =lispy-slurp-or-barf-right= | =>= | =>= | + | =lispy-slurp-or-barf-left= | =<= | =<= | + | =lispy-raise= | =r= | =r= | + | =lispy-raise-some= | =R= | =R= | + | =lispy-convolute= | =C= | =C= | + | =lispy-convolute-left= | =X= | =X= | + | =lispy-move-up= | =w= | =w= | + | =lispy-move-down= | =s= | =s= | + | =lispy-oneline= | =O= | =O= | + | =lispy-alt-multiline= | =M= | =M= | + | =lispy-stringify= | =S= | =S= | + | =lispy-ace-symbol= | =a= | =a= | + | =lispy-ace-symbol-replace= | =H= | =H= | + | =lispy-eval= | =e= | =e= | + | =lispy-eval-and-insert= | =E= | =E= | + | =end-of-defun= | n/a | =G= | + | =g-knight/body= | n/a | =g= | + | =evil-collection-lispy-insert-at-end-of-list= | n/a | =A= | + | =evil-collection-lispy-insert-at-beginning-of-list= | n/a | =I= | + | =lispy-follow= | =F= | =F= | + | =pop-tag-mark= | =D= | =D= | + | =lispy-underscore= | =_= | =_= | + | =lispy-space= | =SPC= | =SPC= | + | =lispy-tab-hydra/body= | n/a | =TAB= | + | =lispy-narrow= | =N= | =N= | + | =lispy-widen= | =W= | =W= | + | =lispy-clone= | =c= | =c= | + | =lispy-undo= | =u= | =u= | + | =lispy-back= | =b= | =b= | + | =lispy-ediff-regions= | =B= | =B= | + | =lispy-edebug-stop= | =Z= | =Z= | + | =lispy-visit= | =V= | =V= | + | =lispy-ace-subword= | =-= | =-= | + | =lispy-repeat= | =.= | =.= | + | =lispy-tilde= | =~= | =~= | + | =lispy-forward= | =]= | =]= | + | =lispy-backward= | =[= | =[= | + | =lispy-brackets= | ={= | ={= | + | =lispy-outline-next= | =J= | =C-J= | + | =lispy-outline-prev= | =K= | =C-K= | + | =lispy-splice-sexp-killing-backward= | =^= | =^= | + | =lispy-splice-sexp-killing-forward= | =$= | =$= | + | =lispy-move-down= | =M-j= | =M-j= | + | =lispy-move-up= | =M-k= | =M-k= | + +*** Evil normal state + + These bindings live in =evil-collection-lispy-mode-map= and are active in + evil normal state. + + | Command | Original | Evil | + |--------------------------------------+------------+--------------| + | =lispy-left= | =C-M-u= | =M-n= | + | =lispy-kill-word= | =M-d= | =M-d= | + | =lispy-backward-kill-word= | =M-DEL= | =M-DEL= | + | =lispy-parens= | =(= | =(= | + | =lispy-comment= | =;= | =;= | + | =lispy-goto-symbol= | =M-.= | =gd= | + | =pop-tag-mark= | =M-,= | =C-t= | + | =lispy-wrap-round= | =M-(= | =M-(=, =M-)= | + | =lispy-wrap-braces= | =M-{= | =M-{=, =M-}= | + | =lispy-splice= | =M-s= | =M-s= | + | =lispy-splice-sexp-killing-backward= | =M-= | =M-= | + | =lispy-splice-sexp-killing-forward= | =M-= | =M-= | + | =lispy-raise-sexp= | =M-r= | =M-r= | + | =lispy-raise-some= | =M-R= | =M-R= | + | =lispy-convolute-sexp= | =M-C= | =M-C= | + | =lispy-split= | =M-S= | =M-S= | + | =lispy-join= | =M-J= | =M-J= | + | =lispy-forward= | =C-M-n= | =]= | + | =lispy-backward= | =C-M-p= | =[= | + | =lispy-slurp-or-barf-left= | n/a | =<= | + | =lispy-slurp-or-barf-right= | n/a | =>= | + | =lispy-new-copy= | =M-y= | =M-y= | + | =lispy-open-line= | =C-RET= | =C-RET= | + | =lispy-meta-return= | =M-RET= | =M-RET= | + | =lispy-move-up= | =M-k= | =M-k= | + | =lispy-move-down= | =M-j= | =M-j= | + | =lispy-string-oneline= | =M-o= | =M-o= | + | =lispy-clone= | =M-p= | =M-p= | + | =evil-collection-lispy-delete= | n/a | =M-d= | + +** New commands + + | Command | Notes | + |-----------------------------------------------------+--------------------------------------------------| + | =evil-collection-lispy-insert-at-beginning-of-list= | Enter insert/emacs state at start of list (=I=). | + | =evil-collection-lispy-insert-at-end-of-list= | Enter insert/emacs state at end of list (=A=). | + | =evil-collection-lispy-delete= | Copy and delete the current sexp. | + | =evil-collection-lispy-action-then-next-sexp= | Helper to wrap a lispy action with =lispy-down=. | + | =evil-collection-lispy--out-forward= | Helper around =lispy--out-forward=. | + | =evil-collection-lispy-set-key-theme= | Replacement for =lispy-set-key-theme= adding the | + | | ='special-evil' and ='evil' themes. | + +** Customization + + - =evil-collection-lispy-preferred-lispy-state= - The evil state + (=insert= or =emacs=) entered by =A= and =I= for using lispy. Defaults + to =insert=. diff --git a/.config/emacs/lisp/evil-collection/modes/lispy/evil-collection-lispy.el b/.config/emacs/lisp/evil-collection/modes/lispy/evil-collection-lispy.el new file mode 100644 index 0000000..895137e --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/lispy/evil-collection-lispy.el @@ -0,0 +1,659 @@ +;;; evil-collection-lispy.el --- Evil Bindings for Lispy -*- lexical-binding: t; -*- + +;; Copyright (C) 2019 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, lispy, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for `lispy-mode'. + +;;; Code: +(require 'lispy nil t) +(require 'evil-collection) + +(defconst evil-collection-lispy-maps '(lispy-mode-map + evil-collection-lispy-mode-map)) + +(defvar lispy-mode-map-base) +(defvar lispy-mode-map-special) +(defvar lispy-mode-map-lispy) +(defvar lispy-mode-map-paredit) +(defvar lispy-mode-map-parinfer) +(defvar lispy-mode-map-evilcp) +(defvar lispy-mode-map-c-digits) +(defvar lispy-mode-map-oleh) +(defvar lispy-mode-map) +(defvar lispy-outline) +(defvar lispy-outline-header) +(defvar hydra-curr-body-fn) + +(declare-function lispy--out-backward "lispy") +(declare-function lispy--out-forward "lispy") +(declare-function hydra-default-pre "lispy") +(declare-function hydra-keyboard-quit "lispy") +(declare-function hydra--call-interactively-remap-maybe "lispy") +(declare-function lispy-knight-down "lispy") +(declare-function lispy-knight-up "lispy") +(declare-function lispy-beginning-of-defun "lispy") +(declare-function lispy-goto "lispy") +(declare-function lispy-goto-local "lispy") +(declare-function hydra-idle-message "lispy") +(declare-function hydra-set-transient-map "lispy") +(declare-function lispy-tab "lispy") +(declare-function lispy-shifttab "lispy") +(declare-function lispy-left-p "lispy") +(declare-function lispy-right-p "lispy") +(declare-function lispy-bolp "lispy") +(declare-function lispy-down "lispy") +(declare-function lispy-new-copy "lispy") +(declare-function lispy-delete "lispy") +(declare-function lispy-delete-backward "lispy") +(declare-function lispy-define-key "lispy") +(declare-function lispy-set-key-theme "lispy") + +;; ------------------------------- LISPYVILLE ---------------------------------- +;; Copied from `lispyville'. +;; -> `lispyville-preferred-lispy-state' +(defcustom evil-collection-lispy-preferred-lispy-state 'insert + "The preferred evil state for insertion and using lispy. +This is used by any command that should enter special to determine the correct +state." + :type '(choice + (const :tag "Use insert state to get into special." insert) + (const :tag "Use emacs state to get into special." emacs)) + :group 'evil-collection) + +;; -> `lispyville-insert-at-beginning-of-list' +(evil-define-command evil-collection-lispy-insert-at-beginning-of-list (count) + "Enter `evil-collection-lispy-preferred-lispy-state' at the start of the list. + +With COUNT, move backward/out COUNT lists first. This is the +lispyville equivalent of `evil-cp-insert-at-beginning-of-form' except for lists +only." + (interactive "") + (when (lispy--out-backward (or count 1)) + (forward-char) + (evil-change-state evil-collection-lispy-preferred-lispy-state))) + +;; -> `lispyville-insert-at-end-of-list' +(evil-define-command evil-collection-lispy-insert-at-end-of-list (count) + "Enter `lispyville-preferred-state' at the end of the list. +With COUNT, move forward/out COUNT lists first. This is the lispyville +equivalent of `evil-cp-insert-at-end-of-form' except for lists only." + (interactive "") + (when (evil-collection-lispy--out-forward (or count 1)) + (backward-char) + (evil-change-state evil-collection-lispy-preferred-lispy-state))) + +;; -> `lispyville--out-forward' +(defun evil-collection-lispy--out-forward (count) + "Like `lispyville--out-forward' but don't return nil if move at least once. +COUNT is passed to `lispy--out-forward'." + (let ((orig-pos (point))) + (lispy--out-forward count) + (not (= (point) orig-pos)))) + +;; ------------------------------- LISPYVILLE ---------------------------------- + +;; ------------------------------- HYDRA --------------------------------------- +(when (featurep 'hydra) + ;; (defhydra g-knight (:color blue :hint nil :idle .3 :columns 3) + ;; "g knight" + ;; ("j" lispy-knight-down "Down") + ;; ("k" lispy-knight-up "Up") + ;; ("g" lispy-beginning-of-defun "Beginning") + ;; ("d" lispy-goto "Goto") + ;; ("l" lispy-goto-local "Goto Local")) + + ;; Macroexpanded from g-knight hydra. + (progn + (set + (defvar g-knight/params nil "Params of g-knight.") + '(nil nil :columns 3 :exit t :foreign-keys nil :hint nil :idle 0.3)) + (set + (defvar g-knight/docstring nil "Docstring of g-knight.") + "g knight") + (set + (defvar g-knight/heads nil "Heads for g-knight.") + '(("j" lispy-knight-down "Down" :exit t) + ("k" lispy-knight-up "Up" :exit t) + ("g" lispy-beginning-of-defun "Beginning" :exit t) + ("d" lispy-goto "Goto" :exit t) + ("l" lispy-goto-local "Goto Local" :exit t))) + (set + (defvar g-knight/keymap nil "Keymap for g-knight.") + '(keymap + (108 . g-knight/lispy-goto-local-and-exit) + (100 . g-knight/lispy-goto-and-exit) + (103 . g-knight/lispy-beginning-of-defun-and-exit) + (107 . g-knight/lispy-knight-up-and-exit) + (106 . g-knight/lispy-knight-down-and-exit) + (kp-subtract . hydra--negative-argument) + (kp-9 . hydra--digit-argument) + (kp-8 . hydra--digit-argument) + (kp-7 . hydra--digit-argument) + (kp-6 . hydra--digit-argument) + (kp-5 . hydra--digit-argument) + (kp-4 . hydra--digit-argument) + (kp-3 . hydra--digit-argument) + (kp-2 . hydra--digit-argument) + (kp-1 . hydra--digit-argument) + (kp-0 . hydra--digit-argument) + (57 . hydra--digit-argument) + (56 . hydra--digit-argument) + (55 . hydra--digit-argument) + (54 . hydra--digit-argument) + (53 . hydra--digit-argument) + (52 . hydra--digit-argument) + (51 . hydra--digit-argument) + (50 . hydra--digit-argument) + (49 . hydra--digit-argument) + (48 . hydra--digit-argument) + (45 . hydra--negative-argument) + (21 . hydra--universal-argument))) + (set + (defvar g-knight/hint nil "Dynamic hint for g-knight.") + '(format + #("g knight: +j: Down k: Up g: Beginning +d: Goto l: Goto Local" 10 11 +(face hydra-face-blue) +24 25 +(face hydra-face-blue) +38 39 +(face hydra-face-blue) +51 52 +(face hydra-face-blue) +65 66 +(face hydra-face-blue)))) + (defun g-knight/lispy-knight-down-and-exit nil "Call the head `lispy-knight-down' in the \"g-knight\" hydra. + +The heads for the associated hydra are: + +\"j\": `lispy-knight-down', +\"k\": `lispy-knight-up', +\"g\": `lispy-beginning-of-defun', +\"d\": `lispy-goto', +\"l\": `lispy-goto-local' + +The body can be accessed via `g-knight/body'." + (interactive) + (require 'hydra) + (hydra-default-pre) + (hydra-keyboard-quit) + (setq hydra-curr-body-fn 'g-knight/body) + (progn + (setq this-command 'lispy-knight-down) + (hydra--call-interactively-remap-maybe + (function lispy-knight-down)))) + (defun g-knight/lispy-knight-up-and-exit nil "Call the head `lispy-knight-up' in the \"g-knight\" hydra. + +The heads for the associated hydra are: + +\"j\": `lispy-knight-down', +\"k\": `lispy-knight-up', +\"g\": `lispy-beginning-of-defun', +\"d\": `lispy-goto', +\"l\": `lispy-goto-local' + +The body can be accessed via `g-knight/body'." + (interactive) + (require 'hydra) + (hydra-default-pre) + (hydra-keyboard-quit) + (setq hydra-curr-body-fn 'g-knight/body) + (progn + (setq this-command 'lispy-knight-up) + (hydra--call-interactively-remap-maybe + (function lispy-knight-up)))) + (defun g-knight/lispy-beginning-of-defun-and-exit nil "Call the head `lispy-beginning-of-defun' in the \"g-knight\" hydra. + +The heads for the associated hydra are: + +\"j\": `lispy-knight-down', +\"k\": `lispy-knight-up', +\"g\": `lispy-beginning-of-defun', +\"d\": `lispy-goto', +\"l\": `lispy-goto-local' + +The body can be accessed via `g-knight/body'." + (interactive) + (require 'hydra) + (hydra-default-pre) + (hydra-keyboard-quit) + (setq hydra-curr-body-fn 'g-knight/body) + (progn + (setq this-command 'lispy-beginning-of-defun) + (hydra--call-interactively-remap-maybe + (function lispy-beginning-of-defun)))) + (defun g-knight/lispy-goto-and-exit nil "Call the head `lispy-goto' in the \"g-knight\" hydra. + +The heads for the associated hydra are: + +\"j\": `lispy-knight-down', +\"k\": `lispy-knight-up', +\"g\": `lispy-beginning-of-defun', +\"d\": `lispy-goto', +\"l\": `lispy-goto-local' + +The body can be accessed via `g-knight/body'." + (interactive) + (require 'hydra) + (hydra-default-pre) + (hydra-keyboard-quit) + (setq hydra-curr-body-fn 'g-knight/body) + (progn + (setq this-command 'lispy-goto) + (hydra--call-interactively-remap-maybe + (function lispy-goto)))) + (defun g-knight/lispy-goto-local-and-exit nil "Call the head `lispy-goto-local' in the \"g-knight\" hydra. + +The heads for the associated hydra are: + +\"j\": `lispy-knight-down', +\"k\": `lispy-knight-up', +\"g\": `lispy-beginning-of-defun', +\"d\": `lispy-goto', +\"l\": `lispy-goto-local' + +The body can be accessed via `g-knight/body'." + (interactive) + (require 'hydra) + (hydra-default-pre) + (hydra-keyboard-quit) + (setq hydra-curr-body-fn 'g-knight/body) + (progn + (setq this-command 'lispy-goto-local) + (hydra--call-interactively-remap-maybe + (function lispy-goto-local)))) + (defun g-knight/body nil "Call the body in the \"g-knight\" hydra. + +The heads for the associated hydra are: + +\"j\": `lispy-knight-down', +\"k\": `lispy-knight-up', +\"g\": `lispy-beginning-of-defun', +\"d\": `lispy-goto', +\"l\": `lispy-goto-local' + +The body can be accessed via `g-knight/body'." + (interactive) + (require 'hydra) + (hydra-default-pre) + (let + ((hydra--ignore nil)) + ;; Unfortunate, but this ignore has to be manually placed here + ;; after macroexpanding. + (ignore hydra--ignore) + (hydra-keyboard-quit) + (setq hydra-curr-body-fn 'g-knight/body)) + (hydra-idle-message 0.3 g-knight/hint 'g-knight) + (hydra-set-transient-map g-knight/keymap + (lambda nil + (hydra-keyboard-quit) + nil) + nil) + (setq prefix-arg current-prefix-arg))) + + ;; (defhydra lispy-tab-hydra (:color blue :hint nil :idle .3) + ;; "Tab" + ;; ("i" lispy-tab "Tab") + ;; ("s" lispy-shifttab "Shifttab")) + + ;; Macroexpanded from lispy-tab-hydra. + (progn + (set + (defvar lispy-tab-hydra/params nil "Params of lispy-tab-hydra.") + '(nil nil :exit t :foreign-keys nil :hint nil :idle 0.3)) + (set + (defvar lispy-tab-hydra/docstring nil "Docstring of lispy-tab-hydra.") + "Tab") + (set + (defvar lispy-tab-hydra/heads nil "Heads for lispy-tab-hydra.") + '(("i" lispy-tab "Tab" :exit t) + ("s" lispy-shifttab "Shifttab" :exit t))) + (set + (defvar lispy-tab-hydra/keymap nil "Keymap for lispy-tab-hydra.") + '(keymap + (115 . lispy-tab-hydra/lispy-shifttab-and-exit) + (105 . lispy-tab-hydra/lispy-tab-and-exit) + (kp-subtract . hydra--negative-argument) + (kp-9 . hydra--digit-argument) + (kp-8 . hydra--digit-argument) + (kp-7 . hydra--digit-argument) + (kp-6 . hydra--digit-argument) + (kp-5 . hydra--digit-argument) + (kp-4 . hydra--digit-argument) + (kp-3 . hydra--digit-argument) + (kp-2 . hydra--digit-argument) + (kp-1 . hydra--digit-argument) + (kp-0 . hydra--digit-argument) + (57 . hydra--digit-argument) + (56 . hydra--digit-argument) + (55 . hydra--digit-argument) + (54 . hydra--digit-argument) + (53 . hydra--digit-argument) + (52 . hydra--digit-argument) + (51 . hydra--digit-argument) + (50 . hydra--digit-argument) + (49 . hydra--digit-argument) + (48 . hydra--digit-argument) + (45 . hydra--negative-argument) + (21 . hydra--universal-argument))) + (set + (defvar lispy-tab-hydra/hint nil "Dynamic hint for lispy-tab-hydra.") + '(format + #("Tab: [i]: Tab, [s]: Shifttab." 6 7 + (face hydra-face-blue) + 16 17 + (face hydra-face-blue)))) + (defun lispy-tab-hydra/lispy-tab-and-exit nil "Call the head `lispy-tab' in the \"lispy-tab-hydra\" hydra. + +The heads for the associated hydra are: + +\"i\": `lispy-tab', +\"s\": `lispy-shifttab' + +The body can be accessed via `lispy-tab-hydra/body'." + (interactive) + (require 'hydra) + (hydra-default-pre) + (hydra-keyboard-quit) + (setq hydra-curr-body-fn 'lispy-tab-hydra/body) + (progn + (setq this-command 'lispy-tab) + (hydra--call-interactively-remap-maybe + (function lispy-tab)))) + (defun lispy-tab-hydra/lispy-shifttab-and-exit nil "Call the head `lispy-shifttab' in the \"lispy-tab-hydra\" hydra. + +The heads for the associated hydra are: + +\"i\": `lispy-tab', +\"s\": `lispy-shifttab' + +The body can be accessed via `lispy-tab-hydra/body'." + (interactive) + (require 'hydra) + (hydra-default-pre) + (hydra-keyboard-quit) + (setq hydra-curr-body-fn 'lispy-tab-hydra/body) + (progn + (setq this-command 'lispy-shifttab) + (hydra--call-interactively-remap-maybe + (function lispy-shifttab)))) + (defun lispy-tab-hydra/body nil "Call the body in the \"lispy-tab-hydra\" hydra. + +The heads for the associated hydra are: + +\"i\": `lispy-tab', +\"s\": `lispy-shifttab' + +The body can be accessed via `lispy-tab-hydra/body'." + (interactive) + (require 'hydra) + (hydra-default-pre) + (let + ((hydra--ignore nil)) + ;; Unfortunate, but this ignore has to be manually placed here + ;; after macroexpanding. + (ignore hydra--ignore) + (hydra-keyboard-quit) + (setq hydra-curr-body-fn 'lispy-tab-hydra/body)) + (hydra-idle-message 0.3 lispy-tab-hydra/hint 'lispy-tab-hydra) + (hydra-set-transient-map lispy-tab-hydra/keymap + (lambda nil + (hydra-keyboard-quit) + nil) + nil) + (setq prefix-arg current-prefix-arg)))) + +;; ------------------------------- HYDRA --------------------------------------- + +(defun evil-collection-lispy-action-then-next-sexp (lispy-action) + "Return function that triggers LISPY-ACTION and then moves to next sexp." + (defalias (intern (format "%S-then-next-sexp" lispy-action)) + (lambda () + (interactive) + (call-interactively lispy-action) + (unless (or (lispy-left-p) + (lispy-right-p) + (and (lispy-bolp) + (or (looking-at lispy-outline-header) + (looking-at lispy-outline)))) + (call-interactively #'lispy-down))))) + +(defun evil-collection-lispy-delete (arg) + "Copy and delete current sexp. +Passes ARG to `lispy-delete' or `lispy-delete-back'. + +Copy of `noc:lispy-delete'." + (interactive "p") + (cond ((or (lispy-left-p) + (region-active-p)) + (lispy-new-copy) + (lispy-delete arg)) + ((lispy-right-p) + (lispy-new-copy) + (lispy-delete-backward arg)))) + +(defvar evil-collection-lispy-mode-map-special + (let ((map (make-sparse-keymap))) + (lispy-define-key map + ";" (evil-collection-lispy-action-then-next-sexp + 'lispy-comment)) + + ;; navigation + (lispy-define-key map "l" 'lispy-right) + (lispy-define-key map "h" 'lispy-left) + (lispy-define-key map "f" 'lispy-ace-paren + :override '(cond ((bound-and-true-p view-mode) + (View-quit)))) ;; `lispy-flow' -> w + (lispy-define-key map "j" 'lispy-down) + (lispy-define-key map "k" 'lispy-up) + + (lispy-define-key map + "d" (evil-collection-lispy-action-then-next-sexp + 'evil-collection-lispy-delete)) ;; `lispy-different' -> o + + (lispy-define-key map "o" 'lispy-different) ;; `lispy-other-mode' -> Q + (lispy-define-key map "p" 'lispy-paste) ;; `lispy-eval-other-window' -> P + (lispy-define-key map "P" 'lispy-eval-other-window) ;; `lispy-paste' -> p + (lispy-define-key map "y" 'lispy-new-copy) ;; `lispy-occur' -> / + (lispy-define-key map "z" 'lispy-view) ;; `lispy-mark-list' -> v + + ;; outline + (lispy-define-key map "J" 'lispy-join) ;; `lispy-outline-next' + (lispy-define-key map "K" 'lispy-describe) ;; `lispy-outline-prev' + (lispy-define-key map "L" 'lispy-outline-goto-child) + + ;; Paredit transformations + (lispy-define-key map ">" 'lispy-slurp-or-barf-right) ;; `lispy-slurp' + (lispy-define-key map "<" 'lispy-slurp-or-barf-left) ;; `lispy-barf' + + ;; FIXME: This doesn't work for me for some reason... + (lispy-define-key map "/" 'lispy-occur) ;; `lispy-x' -> q + + (lispy-define-key map "r" 'lispy-raise) + (lispy-define-key map "R" 'lispy-raise-some) + + (lispy-define-key map "+" 'lispy-join) ;; Hmnn this can be something else. + + ;; more transformations + (lispy-define-key map "C" 'lispy-convolute) + (lispy-define-key map "X" 'lispy-convolute-left) + (lispy-define-key map "w" 'lispy-move-up) + (lispy-define-key map "s" 'lispy-move-down) + (lispy-define-key map "O" 'lispy-oneline) + (lispy-define-key map "M" 'lispy-alt-multiline) + (lispy-define-key map "S" 'lispy-stringify) + + ;; marking + (lispy-define-key map "a" 'lispy-ace-symbol + :override '(cond ((looking-at lispy-outline) + (lispy-meta-return)))) + (lispy-define-key map "H" 'lispy-ace-symbol-replace) + + ;; dialect-specific + (lispy-define-key map "e" 'lispy-eval) + (lispy-define-key map "E" 'lispy-eval-and-insert) + + ;; Hmnn, not sure why there's no `lispy-end-of-defun'. + ;; `end-of-defun' doesn't work quite right yet. It exits the list + ;; which would exit lispy state. + (lispy-define-key map "G" 'end-of-defun) ;; `lispy-goto-local' -> gl + (lispy-define-key map "g" 'g-knight/body) ;; `lispy-goto' -> gd + + (lispy-define-key map "A" 'evil-collection-lispy-insert-at-end-of-list) ;; `lispy-beginning-of-defun' -> gg + (lispy-define-key map "I" 'evil-collection-lispy-insert-at-beginning-of-list) ;; `lispy-shifttab' -> zs + + (lispy-define-key map "F" 'lispy-follow t) + (lispy-define-key map "D" 'pop-tag-mark) + (lispy-define-key map "_" 'lispy-underscore) + + ;; miscellanea + (define-key map (kbd "SPC") 'lispy-space) + (lispy-define-key map "TAB" 'lispy-tab-hydra/body) ;; `lh-knight/body' -> g + + (lispy-define-key map "N" 'lispy-narrow) + (lispy-define-key map "W" 'lispy-widen) + (lispy-define-key map "c" 'lispy-clone) + (lispy-define-key map "u" 'lispy-undo) + + (lispy-define-key map "q" 'lispy-x) ;; `lispy-ace-paren' -> f + (lispy-define-key map "Q" 'lispy-other-mode) ;; `lispy-ace-char' -> t + (lispy-define-key map "v" 'lispy-mark-list) ;; `lispy-view' -> z + (lispy-define-key map "t" 'lispy-ace-char) ;; `lispy-teleport' -> T + (lispy-define-key map "n" 'lispy-flow) ;; `lispy-new-copy' -> y + (lispy-define-key map "b" 'lispy-back) + + (lispy-define-key map "B" 'lispy-ediff-regions) + (lispy-define-key map "x" 'lispy-splice) ;; `lispy-x' -> q + + (lispy-define-key map "Z" 'lispy-edebug-stop) + (lispy-define-key map "V" 'lispy-visit) + (lispy-define-key map "-" 'lispy-ace-subword) + (lispy-define-key map "." 'lispy-repeat) + (lispy-define-key map "~" 'lispy-tilde) + ;; digit argument + (mapc (lambda (x) (lispy-define-key map (format "%d" x) 'digit-argument)) + (number-sequence 0 9)) + + ;; additional + (lispy-define-key map "T" 'lispy-teleport + :override '(cond ((looking-at lispy-outline) + (end-of-line)))) + (lispy-define-key map "]" 'lispy-forward) + (lispy-define-key map "[" 'lispy-backward) + (lispy-define-key map "{" 'lispy-brackets) + + ;; Experimental + (lispy-define-key map "C-J" 'lispy-outline-next) + (lispy-define-key map "C-K" 'lispy-outline-prev) + (lispy-define-key map "^" 'lispy-splice-sexp-killing-backward) + (lispy-define-key map "$" 'lispy-splice-sexp-killing-forward) + (lispy-define-key map "M-j" 'lispy-move-down) ;; `lispy-split' + (lispy-define-key map "M-k" 'lispy-move-up) ;; `lispy-kill-sentence' + map) + "`evil' flavored `lispy' bindings when in special state.") + +(defvar evil-collection-lispy-mode-map (make-sparse-keymap) + "`evil' flavored `lispy-mode' bindings.") + +(defun evil-collection-lispy-set-key-theme (theme) + "Set `lispy-mode-map' for according to THEME. +THEME is a list of choices: \='special', \='lispy', \='paredit', \='evilcp', + \='c-digits', \='special-evil', \='evil'. + +This is an exact copy of `lispy-set-key-theme' except with the additions of + \='special-evil' and \='evil' themes." + (setq lispy-mode-map + (make-composed-keymap + (delq nil + (list + (when (memq 'special-evil theme) evil-collection-lispy-mode-map-special) + (when (memq 'evil theme) evil-collection-lispy-mode-map) + (when (memq 'special theme) lispy-mode-map-special) + (when (memq 'lispy theme) lispy-mode-map-lispy) + (when (memq 'paredit theme) lispy-mode-map-paredit) + (when (memq 'parinfer theme) lispy-mode-map-parinfer) + (when (memq 'evilcp theme) lispy-mode-map-evilcp) + (when (memq 'c-digits theme) lispy-mode-map-c-digits) + (when (memq 'oleh theme) lispy-mode-map-oleh))))) + (setcdr + (assq 'lispy-mode minor-mode-map-alist) + lispy-mode-map)) + +;;;###autoload +(defun evil-collection-lispy-setup () + "Set up `evil' bindings for `lispy'." + (advice-add 'lispy-set-key-theme :override 'evil-collection-lispy-set-key-theme) + (lispy-set-key-theme '(special-evil evil)) + (evil-collection-define-key 'normal 'evil-collection-lispy-mode-map + ;; Instead of inheriting, explicitly define keys from `lispy-mode-map-base'. + ;; navigation. + ;; Commented out define-keys are from the original map that we're not using. + ;; -- Begin Inheritance + ;; (define-key map (kbd "C-a") 'lispy-move-beginning-of-line) + ;; (define-key map (kbd "C-e") 'lispy-move-end-of-line) + (kbd "M-n") 'lispy-left + ;; killing + ;; (define-key map (kbd "C-k") 'lispy-kill) + (kbd "M-d") 'lispy-kill-word + (kbd "M-DEL") 'lispy-backward-kill-word + ;; misc + "(" 'lispy-parens + ";" 'lispy-comment + ;; (kbd "M-q") 'lispy-fill + ;; (define-key map (kbd "C-j") 'lispy-newline-and-indent) + ;; (define-key map (kbd "RET") 'lispy-newline-and-indent-plain) + ;; tags + "gd" 'lispy-goto-symbol + (kbd "C-t") 'pop-tag-mark + ;; -- End Inheritance. + + (kbd "M-)") 'lispy-wrap-round + (kbd "M-s") 'lispy-splice + (kbd "M-") 'lispy-splice-sexp-killing-backward + (kbd "M-") 'lispy-splice-sexp-killing-forward + (kbd "M-r") 'lispy-raise-sexp + (kbd "M-R") 'lispy-raise-some + (kbd "M-C") 'lispy-convolute-sexp + (kbd "M-S") 'lispy-split + (kbd "M-J") 'lispy-join + "]" 'lispy-forward + "[" 'lispy-backward + (kbd "M-(") 'lispy-wrap-round + (kbd "M-{") 'lispy-wrap-braces + (kbd "M-}") 'lispy-wrap-braces + "<" 'lispy-slurp-or-barf-left + ">" 'lispy-slurp-or-barf-right + (kbd "M-y") 'lispy-new-copy + (kbd "") 'lispy-open-line + (kbd "") 'lispy-meta-return + (kbd "M-k") 'lispy-move-up + (kbd "M-j") 'lispy-move-down + (kbd "M-o") 'lispy-string-oneline + (kbd "M-p") 'lispy-clone + (kbd "M-d") 'evil-collection-lispy-delete)) + +(provide 'evil-collection-lispy) +;;; evil-collection-lispy.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/lms/evil-collection-lms.el b/.config/emacs/lisp/evil-collection/modes/lms/evil-collection-lms.el new file mode 100644 index 0000000..19ebf37 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/lms/evil-collection-lms.el @@ -0,0 +1,404 @@ +;;; evil-collection-lms.el --- Evil bindings for lms.el -*- lexical-binding: t -*- +;; Copyright (C) 2021-2023 Edgar Vincent + +;; Author: Edgar Vincent +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "25.1")) +;; Keywords: evil, multimedia, music, logitechmediaserver, squeezebox + +;; This file is not part of GNU Emacs. +;; +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: +;; Evil bindings for lms.el. +;; +;;; Code: +(require 'lms nil t) +(require 'evil-collection) + +(defvar lms-ui-docs) +(defvar lms-ui-playing-now-mode-map) +(defvar lms-ui-players-mode-map) +(defvar lms-ui-playlist-mode-map) +(defvar lms-ui-track-info-mode-map) +(defvar lms-ui-tracks-list-mode-map) +(defvar lms--ui-editing-p) +(defvar lms--ui-pl-tracks) + +(declare-function lms-ui-playing-now-refresh "lms") + +(defconst evil-collection-lms-maps '(lms-ui-players-mode-map + lms-ui-playing-now-mode-map + lms-ui-playlist-mode-map + lms-ui-track-info-mode-map + lms-ui-tracks-list-mode-map + lms-ui-year-album-artist-list-mode-map)) + +(defconst evil-collection-lms-modes '(lms-players-mode + lms-ui-playing-now-mode + lms-ui-track-info-mode + lms-ui-players-mode + lms-ui-playlist-mode + lms-ui-tracks-list-mode + lms-ui-year-album-artist-list-mode)) + +(defun evil-collection-lms-ui-track-info-mode-quit () + "Exit `lms-ui-track-info-mode'." + (interactive) + (kill-buffer "*LMS: Track Information*") + (lms-ui-playing-now-refresh)) + +(defun evil-collection-lms-ui-players-mode-quit () + "Exit `lms-ui-players-mode'." + (interactive) + (kill-buffer (format "*LMS: Players*")) + (lms-ui-playing-now-refresh)) + +(defun evil-collection-lms-ui-playlist-mode-quit () + "Exit `lms-ui-playlist-mode'." + (interactive) + (kill-buffer (format "*LMS: Playlist [%d tracks]*" (length lms--ui-pl-tracks))) + (lms-ui-playing-now-refresh)) + +(defun evil-collection-lms-ui-tracks-list-mode-quit () + "Exit `lms-ui-tracks-list-mode'." + (interactive) + (kill-buffer) + (lms-ui-playing-now-refresh)) + +(defalias 'evil-collection-lms-ui-year-album-artist-list-mode-quit + 'evil-collection-lms-ui-tracks-list-mode-quit + "Exit lms-ui-tracks-list-mode.") + +(defun evil-collection-lms-goto-line (count) + "Move the point to line COUNT. By default the penultimate line." + (interactive "P") + (evil-goto-line count) + (unless count + (forward-line -1))) + +(defun evil-collection-lms-next-line () + "Move the point to the next line, except if it is at the end of the buffer." + (interactive) + (forward-line 1) + (when (eobp) (forward-line -1))) + +(defun evil-collection-lms-ui-playing-now () + "Modify the *LMS: Playing Now* buffer to reflect evil keybinding changes." + (setq-local buffer-read-only nil) + (setq lms--ui-editing-p t) + (while (search-forward-regexp "Press 'h' for help" nil 'noerror) + (replace-match "") + (insert (propertize "Press 'gh' or 'g?' for help" 'face '(variable-pitch (:height 0.85 :slant italic :foreground "gray40"))))) + (setq-local buffer-read-only t) + (setq lms--ui-editing-p nil)) + +(defvar evil-collection-lms-ui-docs + "#+TITLE: lms.el Documentation +#+AUTHOR: Iñigo Serna +#+DATE: 2020/06/14 + +* Introduction +This is an *emacs* frontend to interact with Squeezebox Server / Logitech Media Server. +Released under GPL version 3 license or later. + +It requires emacs version 25 or higher. + +More information on what a *squeezebox controller* is at https://inigo.katxi.org/blog/2017/07/31/lms_el.html. + +Quick instructions: customize some basic parameters such as 'lms-url' and run it with *lms* or *lms-ui*. +From there, you could read complete documentation after pressing *gh* or *g?*. +You can also run 'emacsclient -e \"(lms-float)\"' to display an independent small frame. + +Package should appear in [[https://melpa.org][MELPA repository]], and the code is in [[https://hg.serna.eu/emacs/lms][the code repository]] as well. + +* Features +This is Squeezebox controller, i.e. a program which can handle your local music library. + +Some of the features: +- Display song: title, artist, album, year, cover… +- Play, pause, stop, select next / previous song +- Control players: select player, power on/off, volume, repeat and shuffle modes +- Playlist control: list, select song, delete track, clear +- Show track information and change rating + +It is not aimed to be a complete controller, as it can't - and won't - manage external sources such us BBC, Deezer, Pandora, Spotify, or TuneIn Radio. + +* Configuration +There are some parameters you could customize: +|--------------------------+-----------------------------------------------+------------------------------------| +| Parameter | Description | Default | +|--------------------------+-----------------------------------------------+------------------------------------| +| lms-url | Logitech Media Server hostname or ip and port | http://lms_server:9000 | +| lms-default-player | Name of default player | nil (1) | +| lms-ui-cover-width | Cover image width | 500 (2) | +| lms-ui-update-interval | Time in seconds between UI updates | 1 (3) | +| lms-number-recent-albums | Number of recent albums to show | 25 | +| lms-number-random-albums | Number of random albums to show | 25 | +| lms-number-random-songs | Number of random songs to show | 50 | +| lms-set-rating-function | Function to use to set song rating | lms--set-rating-with-trackstat (4) | +|--------------------------+-----------------------------------------------+------------------------------------| +Notes: +(1) If *lms-default-player* is not defined or a player with that name does not exist, it will ask for one at start. +(2) It's recomendable not to change *lms-ui-cover-width*. +(3) Note that small values in *lms-ui-update-interval* could freeze your Emacs use while refreshing window. +(4) LMS does not have any means to set the rating of a song by itself, so it depends on an external plugin. + TrackStat (function *lms--set-rating-with-trackstat*) is a popular one, and RatingsLight (function *lms--set-rating-with-ratingslight*) is another option. +** Faces +The colors and font attributes of text can be customized in some views: +|----------------------------+-------------------------------+---------------------| +| Face name | Description | Default | +|----------------------------+-------------------------------+---------------------| +| lms-playing-face | Playing symbol | DarkTurquoise, bold | +| lms-title-face | Song title | SlateGray, italic | +| lms-artist-face | Artist | RosyBrown, bold | +| lms-year-face | Song year | SteelBlue | +| lms-album-face | Album | CadetBlue | +| lms-tracknum-face | Track number | gray40 | +| lms-duration-face | Song duration | gray60 | +| lms-players-selected-face | Selected icon in players list | SteelBlue | +| lms-players-isplaying-face | Isplaying in players list | RosyBrown | +| lms-players-name-face | Player name in players list | CadetBlue | +| lms-players-model-face | Player model in players list | SlateGray | +| lms-players-playerid-face | Player id in players list | gray60 | +| lms-players-ip-face | Player IP in players list | gray40 | +| lms-players-power-face | Ispower in players list | Maroon | +|----------------------------+-------------------------------+---------------------| + +* Playing now +Main window showing information about current track and player status. +The actions triggered by pressing keys refer to the current track. +** Key bindings +|-----------------+--------------------------------| +| Ctrl-p | select player | +| t | change player power state | +| R | change track rating | +| Ctrl-= | set volume | +| x, | toggle play/pause | +| p | play | +| s | stop playing | +| Ctrl-k, | play previous song in playlist | +| Ctrl-j, | play next song in playlist | +| m | toggle mute volume | +| +, = | volume up +5 | +| - | volume down -5 | +| r | cycle repeat mode | +| S | cycle shuffle mode | +| gr | update window contents | +| i | display track information | +| P | display playlist | +| T | show all albums by artist | +| L | show all tracks of album | +| Y | show all albums of this year | +| M | browse music libray | +| gh, g? | show this documentation | +| q | quit LMS | +|-----------------+--------------------------------| + +* Track information +Display track information. +Previous/next track only works when *Track information* window was called from a list, but not from *Playing now*. +** Key bindings +|-----------------+-------------------------| +| R | change track rating | +| Ctrl-k, | show previous track | +| Ctrl-j, | show next track | +| gh, g? | show this documentation | +| q | close window | +|-----------------+-------------------------| + +* Players list +Players list. +** Key bindings +|--------------------+--------------------------------| +| k, , j, | move cursor | +| | select player and close window | +| x | toggle player play/pause | +| t | toggle player power state | +| gh, g? | show this documentation | +| q | close window | +|--------------------+--------------------------------| + +* Playlist +Playlist view. +The actions triggered by pressing keys refer to the track under cursor. +** Key bindings +|--------------------+------------------------------------| +| k, , j, | move cursor | +| | play track | +| i | show track information | +| C | jump to current track | +| d, | remove track from playlist | +| c c | clear playlist | +| c u | remove tracks from start to cursor | +| c f | remove tracks from cursor to end | +| u | update window contents | +| A | show all albums by artist | +| T | show all tracks of album | +| Y | show all albums of this year | +| gh, g? | show this documentation | +| q | close window | +|--------------------+------------------------------------| + +* Year - Album - Artist list +View all albums of an artist, sorted by date/year. +The actions triggered by pressing keys refer to the album under cursor. +** Key bindings +|--------------------+------------------------------| +| k, , j, | move cursor | +| , a | show all tracks of album | +| A | show all albums by artist | +| Y | show all albums of this year | +| p | add album to playlist | +| gh, g? | show this documentation | +| q | close window | +|--------------------+------------------------------| + +* Tracks list +View list of tracks. +The actions triggered by pressing keys refer to the track under cursor. +** Key bindings +|--------------------+------------------------------| +| j, , k, | move cursor | +| , i | display track information | +| A | show all albums by artist | +| Y | show all albums of this year | +| p | add song to playlist | +| P | add all songs to playlist | +| gh, g? | show this documentation | +| q | close window | +|--------------------+------------------------------| +" + "LMS documentation.") + +;;;###autoload +(defun evil-collection-lms-setup () + "Set up `evil' bindings for `lms'." + + (dolist (map evil-collection-lms-maps) + (evil-collection-inhibit-insert-state map)) + + (dolist (mode evil-collection-lms-modes) + (evil-set-initial-state mode 'normal)) + + (evil-collection-define-key 'normal 'lms-ui-playing-now-mode-map + "t" 'lms-ui-playing-now-change-player-power-state + (kbd "C-p") 'lms-ui-playing-now-players-list + "R" 'lms-ui-playing-now-change-rating + (kbd "C-=") 'lms-ui-playing-now-set-volume + (kbd "RET") 'lms-ui-playing-now-play-pause + "x" 'lms-ui-playing-now-play-pause + "p" 'lms-ui-playing-now-play + "s" 'lms-ui-playing-now-stop + (kbd "C-j") 'lms-ui-playing-now-next + (kbd "") 'lms-ui-playing-now-next + (kbd "C-k") 'lms-ui-playing-now-prev + (kbd "") 'lms-ui-playing-now-prev + "+" 'lms-ui-playing-now-volume-up + "=" 'lms-ui-playing-now-volume-up + "-" 'lms-ui-playing-now-volume-down + "m" 'lms-ui-playing-now-volume-mute + "r" 'lms-ui-playing-now-cycle-repeat + "S" 'lms-ui-playing-now-cycle-shuffle + "gr" 'lms-ui-playing-now-refresh + "i" 'lms-ui-playing-now-show-track-info + "P" 'lms-ui-playing-now-show-playlist + "T" 'lms-ui-playing-now-album-tracks-list + "A" 'lms-ui-playing-now-artist-albums-list + "Y" 'lms-ui-playing-now-year-albums-list + "M" 'lms-ui-playing-now-browse-music-library + "g?" 'lms-ui-playing-now-help + "gh" 'lms-ui-playing-now-help + "q" 'lms-ui-playing-now-quit) + + (evil-collection-define-key 'normal 'lms-ui-track-info-mode-map + "R" 'lms-ui-track-info-change-rating + (kbd "C-k") 'lms-ui-track-info-prev + (kbd "") 'lms-ui-track-info-prev + (kbd "C-j") 'lms-ui-track-info-next + (kbd "") 'lms-ui-track-info-next + "g?" 'lms-ui-playing-now-help + "gh" 'lms-ui-playing-now-help + "q" 'evil-collection-lms-ui-track-info-mode-quit) + + (evil-collection-define-key 'normal 'lms-ui-players-mode-map + [remap evil-goto-line] 'evil-collection-lms-goto-line + [remap end-of-defun] 'evil-collection-lms-goto-line + [remap evil-forward-paragraph] 'evil-collection-lms-goto-line + [remap evil-next-line] 'evil-collection-lms-next-line + (kbd "RET") 'lms-ui-players-select + "x" 'lms-ui-players-playpause + "t" 'lms-ui-players-toggle-power + "g?" 'lms-ui-playing-now-help + "gh" 'lms-ui-playing-now-help + "q" 'evil-collection-lms-ui-players-mode-quit) + + (evil-collection-define-key 'normal 'lms-ui-playlist-mode-map + [remap evil-goto-line] 'evil-collection-lms-goto-line + [remap end-of-defun] 'evil-collection-lms-goto-line + [remap evil-forward-paragraph] 'evil-collection-lms-goto-line + [remap evil-next-line] 'evil-collection-lms-next-line + (kbd "RET") 'lms-ui-playlist-play + "i" 'lms-ui-playlist-track-info + "C" 'lms-ui-playlist-jump-to-current + "d" 'lms-ui-playlist-delete-track + (kbd "") 'lms-ui-playlist-delete-track + "cc" 'lms-ui-playlist-clear + "ct" 'lms-ui-playlist-clear-until-track + "cf" 'lms-ui-playlist-clear-from-track + "u" 'lms-ui-playlist + "A" 'lms-ui-playlist-artist-albums-list + "T" 'lms-ui-playlist-album-tracks-list + "Y" 'lms-ui-playlist-year-albums-list + "g?" 'lms-ui-playing-now-help + "gh" 'lms-ui-playing-now-help + "q" 'evil-collection-lms-ui-playlist-mode-quit) + + (evil-collection-define-key 'normal 'lms-ui-tracks-list-mode-map + [remap evil-goto-line] 'evil-collection-lms-goto-line + [remap end-of-defun] 'evil-collection-lms-goto-line + [remap evil-forward-paragraph] 'evil-collection-lms-goto-line + [remap evil-next-line] 'evil-collection-lms-next-line + "i" 'lms-ui-tl-track-info + (kbd "RET") 'lms-ui-tl-track-info + "p" 'lms-ui-tl-to-playlist + "P" 'lms-ui-tl-all-to-playlist + "Y" 'lms-ui-tl-by-year + "A" 'lms-ui-tl-by-artist + "g?" 'lms-ui-playing-now-help + "gh" 'lms-ui-playing-now-help + "q" 'evil-collection-lms-ui-tracks-list-mode-quit) + + (evil-collection-define-key 'normal 'lms-ui-year-album-artist-list-mode-map + [remap evil-goto-line] 'evil-collection-lms-goto-line + [remap end-of-defun] 'evil-collection-lms-goto-line + [remap evil-forward-paragraph] 'evil-collection-lms-goto-line + [remap evil-next-line] 'evil-collection-lms-next-line + "Y" 'lms-ui-yaal-by-year + "A" 'lms-ui-yaal-by-artist + (kbd "RET") 'lms-ui-yaal-by-album + "a" 'lms-ui-yaal-by-album + "p" 'lms-ui-yaal-to-playlist + "g?" 'lms-ui-playing-now-help + "gh" 'lms-ui-playing-now-help + "q" 'evil-collection-lms-ui-year-album-artist-list-mode-quit) + + ;; Reflect help keybinding changes in the lms.el UI. + (advice-add 'lms-ui-playing-now :after 'evil-collection-lms-ui-playing-now) + (setq lms-ui-docs evil-collection-lms-ui-docs)) + +(provide 'evil-collection-lms) +;;; evil-collection-lms.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/log-edit/README.org b/.config/emacs/lisp/evil-collection/modes/log-edit/README.org new file mode 100644 index 0000000..6046f21 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/log-edit/README.org @@ -0,0 +1,17 @@ +* log-edit + + Evil bindings for =log-edit-mode=, the VC commit-message buffer. + +** Key bindings + + | Command | Original | Evil | + |-----------------------------+-----------+-------------------| + | =log-edit-done= | =C-c C-c= | =ZZ= (remap) | + | =log-edit-kill-buffer= | =C-c C-k= | =ZQ= (remap) | + | =log-edit-mode-help= | =C-c ?= | =g?= | + | =log-edit-next-comment= | =M-n= | =]]=, =gj=, =C-j= | + | =log-edit-previous-comment= | =M-p= | =[[=, =gk= | + | =quit-window= | n/a | =ZZ=, =ZQ= | + + The remaps target =evil-save-and-close=, =evil-save-modified-and-close=, + and =evil-quit= so =:wq= / =:q= behave correctly. diff --git a/.config/emacs/lisp/evil-collection/modes/log-edit/evil-collection-log-edit.el b/.config/emacs/lisp/evil-collection/modes/log-edit/evil-collection-log-edit.el new file mode 100644 index 0000000..3d774c0 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/log-edit/evil-collection-log-edit.el @@ -0,0 +1,57 @@ +;;; evil-collection-log-edit.el --- Evil bindings for log-edit -*- lexical-binding: t -*- + +;; Copyright (C) 2019 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen , Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, log-edit, tools + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: +;; Evil bindings for log-edit. + +;;; Code: +(require 'evil-collection) +(require 'log-edit nil t) + +(defvar log-edit-mode-map) + +(defconst evil-collection-log-edit-maps '(log-edit-mode-map)) + +;;;###autoload +(defun evil-collection-log-edit-setup () + "Set up `evil' bindings for `log-edit'." + (evil-collection-define-key nil 'log-edit-mode-map + [remap evil-save-and-close] 'log-edit-done + [remap evil-save-modified-and-close] 'log-edit-done + [remap evil-quit] 'log-edit-kill-buffer) + + (evil-collection-define-key 'normal 'log-edit-mode-map + "g?" 'log-edit-mode-help + "]]" 'log-edit-next-comment + "[[" 'log-edit-previous-comment + "gj" 'log-edit-next-comment + "gk" 'log-edit-previous-comment + (kbd "C-j") 'log-edit-next-comment + (kbd "C-k") 'log-edit-next-comment + + "ZQ" 'quit-window + "ZZ" 'quit-window)) + +(provide 'evil-collection-log-edit) +;;; evil-collection-log-edit.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/log-view/README.org b/.config/emacs/lisp/evil-collection/modes/log-view/README.org new file mode 100644 index 0000000..c8363f4 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/log-view/README.org @@ -0,0 +1,20 @@ +* log-view + + Evil bindings for =log-view-mode= (VC log buffers for git, hg, svn, etc.). + +** Key bindings + + | Command | Original | Evil | + |----------------------------------+--------------+-----------------| + | =log-view-toggle-entry-display= | =RET=, =TAB= | =TAB= | + | =log-view-diff= | =d=, === | =RET=, =d=, === | + | =log-view-diff-changeset= | =D= | =D= | + | =log-view-toggle-mark-entry= | =m= | =m= | + | =log-view-modify-change-comment= | =e= | =c= | + | =log-view-annotate-version= | =a= | =a= | + | =log-view-find-revision= | =f= | =F= | + | =log-view-msg-next= | =n=, =TAB= | =gj=, =]]= | + | =log-view-msg-prev= | =p= | =gk=, =[[= | + | =log-view-file-next= | n/a | =C-j= | + | =log-view-file-prev= | n/a | =C-k= | + | =quit-window= | =q= | =q= | diff --git a/.config/emacs/lisp/evil-collection/modes/log-view/evil-collection-log-view.el b/.config/emacs/lisp/evil-collection/modes/log-view/evil-collection-log-view.el new file mode 100644 index 0000000..fbd7520 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/log-view/evil-collection-log-view.el @@ -0,0 +1,63 @@ +;;; evil-collection-log-view.el --- Bindings for `log-view' -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, emacs, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Bindings for `log-view'. + +;;; Code: +(require 'evil-collection) +(require 'log-view) + +(defconst evil-collection-log-view-maps '(log-view-mode-map)) + +;;;###autoload +(defun evil-collection-log-view-setup () + "Set up `evil' bindings for `log-view'." + + ;; Currently vc has these various log-view modes + (evil-set-initial-state 'vc-hg-log-view-mode 'normal) + (evil-set-initial-state 'vc-git-log-view-mode 'normal) + (evil-set-initial-state 'vc-svn-log-view-mode 'normal) + + (evil-collection-define-key 'normal 'log-view-mode-map + "q" 'quit-window + (kbd "TAB") 'log-view-toggle-entry-display + "m" 'log-view-toggle-mark-entry + "c" 'log-view-modify-change-comment + (kbd "RET") 'log-view-diff + "d" 'log-view-diff + "=" 'log-view-diff + "D" 'log-view-diff-changeset + "a" 'log-view-annotate-version + "F" 'log-view-find-revision + "gj" 'log-view-msg-next + "gk" 'log-view-msg-prev + "]]" 'log-view-msg-next + "[[" 'log-view-msg-prev + (kbd "C-j") 'log-view-file-next + (kbd "C-k") 'log-view-file-prev)) + +(provide 'evil-collection-log-view) +;;; evil-collection-log-view.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/lsp-ui-imenu/evil-collection-lsp-ui-imenu.el b/.config/emacs/lisp/evil-collection/modes/lsp-ui-imenu/evil-collection-lsp-ui-imenu.el new file mode 100644 index 0000000..473169a --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/lsp-ui-imenu/evil-collection-lsp-ui-imenu.el @@ -0,0 +1,47 @@ +;;; evil-collection-lsp-ui-imenu.el --- Bindings for `lsp-ui-imenu-mode' -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: Felix Dick +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, lsp-ui-imenu, convenience + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for `lsp-ui-imenu-mode'. + +;;; Code: +(require 'lsp-ui-imenu nil t) +(require 'evil-collection) + +(defconst evil-collection-lsp-ui-imenu-mode-maps '(lsp-ui-imenu-mode-map)) + +;;;###autoload +(defun evil-collection-lsp-ui-imenu-setup () + "Set up `evil' bindings for `lsp-ui-imenu'." + (evil-set-initial-state 'lsp-ui-imenu-mode 'normal) + (evil-collection-define-key 'normal 'lsp-ui-imenu-mode-map + (kbd "C-k") 'lsp-ui-imenu--prev-kind + (kbd "C-j") 'lsp-ui-imenu--next-kind + (kbd "q") 'lsp-ui-imenu--kill + (kbd "RET") 'lsp-ui-imenu--view + (kbd "") 'lsp-ui-imenu--visit)) + +(provide 'evil-collection-lsp-ui-imenu) +;;; evil-collection-lsp-ui-imenu.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/lua-mode/README.org b/.config/emacs/lisp/evil-collection/modes/lua-mode/README.org new file mode 100644 index 0000000..922ca73 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/lua-mode/README.org @@ -0,0 +1,18 @@ +* lua-mode + + Evil bindings for [[https://github.com/immerrr/lua-mode][lua-mode]]. + +** Key bindings + + | Command | Original | Evil | + |----------------------------+-----------+------| + | =lua-search-documentation= | =C-c C-f= | =K= | + | =run-lua= | | =gz= | + + Also installs a hook that sets =evil-shift-width= to =lua-indent-level= + in =lua-mode= buffers. + +** New commands + + - =evil-collection-lua-mode-set-evil-shift-width= — sync + =evil-shift-width= with =lua-indent-level= (added to =lua-mode-hook=). diff --git a/.config/emacs/lisp/evil-collection/modes/lua-mode/evil-collection-lua-mode.el b/.config/emacs/lisp/evil-collection/modes/lua-mode/evil-collection-lua-mode.el new file mode 100644 index 0000000..1345fe7 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/lua-mode/evil-collection-lua-mode.el @@ -0,0 +1,50 @@ +;;; evil-collection-lua-mode.el --- Bindings for `lua-mode' -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, emacs, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for `lua-mode'. + +;;; Code: +(require 'evil-collection) +(require 'lua-mode nil t) + +(defvar lua-indent-level) +(defconst evil-collection-lua-mode-maps '(lua-mode-map)) + +(defun evil-collection-lua-mode-set-evil-shift-width () + "Set `evil-shift-width' according to `lua-indent-level'." + (setq-local evil-shift-width lua-indent-level)) + +;;;###autoload +(defun evil-collection-lua-mode-setup () + "Set up `evil' bindings for `lua-mode'." + (add-hook 'lua-mode-hook #'evil-collection-lua-mode-set-evil-shift-width) + + (evil-collection-define-key 'normal 'lua-mode-map + "K" 'lua-search-documentation + "gz" 'run-lua)) + +(provide 'evil-collection-lua-mode) +;;; evil-collection-lua-mode.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/macrostep/README.org b/.config/emacs/lisp/evil-collection/modes/macrostep/README.org new file mode 100644 index 0000000..0a0f543 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/macrostep/README.org @@ -0,0 +1,13 @@ +* macrostep + + Evil bindings for [[https://github.com/emacsorphanage/macrostep][macrostep]], the interactive macro expander. + +** Key bindings + + | Command | Original | Evil | + |--------------------------+--------------+-------------| + | =macrostep-expand= | =e= | =e= | + | =macrostep-collapse= | =c= | =u= | + | =macrostep-collapse-all= | =C-c C-c= | =q= | + | =macrostep-next-macro= | =n=, =TAB= | =gj=, =C-j= | + | =macrostep-prev-macro= | =p=, =M-TAB= | =gk=, =C-k= | diff --git a/.config/emacs/lisp/evil-collection/modes/macrostep/evil-collection-macrostep.el b/.config/emacs/lisp/evil-collection/modes/macrostep/evil-collection-macrostep.el new file mode 100644 index 0000000..58ff339 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/macrostep/evil-collection-macrostep.el @@ -0,0 +1,52 @@ +;;; evil-collection-macrostep.el --- Evil Integration for Macrostep -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, macrostep, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for `macrostep-mode'. + +;;; Code: +(require 'evil-collection) +(require 'macrostep nil t) + +(defconst evil-collection-macrostep-maps '(macrostep-keymap)) + +;;;###autoload +(defun evil-collection-macrostep-setup () + "Set up `evil' bindings for `macrostep'." + ;; Keymaps don't seem to be populated on first try. + ;; Force `evil' to normalize keymaps. + (add-hook 'macrostep-mode-hook #'evil-normalize-keymaps) + + (evil-collection-define-key 'normal 'macrostep-keymap + "q" 'macrostep-collapse-all + "e" 'macrostep-expand + "u" 'macrostep-collapse + "gj" 'macrostep-next-macro + "gk" 'macrostep-prev-macro + (kbd "C-j") 'macrostep-next-macro + (kbd "C-k") 'macrostep-prev-macro)) + +(provide 'evil-collection-macrostep) +;;; evil-collection-macrostep.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/magit-repos/README.org b/.config/emacs/lisp/evil-collection/modes/magit-repos/README.org new file mode 100644 index 0000000..babd311 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/magit-repos/README.org @@ -0,0 +1,17 @@ +* magit-repos + + Evil bindings for [[https://magit.vc/][magit-repos]] (=magit-list-repositories=). + + Initial state for =magit-repolist-mode= is set to =normal=. + +** Key bindings + +*** magit-repolist-mode-map (normal state) + + | Command | Original | Evil | + |---------------------------+----------+-------| + | =magit-repolist-mark= | =m= | =m= | + | =magit-repolist-unmark= | =u= | =u= | + | =magit-repolist-fetch= | =f= | =f= | + | =magit-repolist-status= | =RET= | =RET= | + | =magit-list-repositories= | =g= | =gr= | diff --git a/.config/emacs/lisp/evil-collection/modes/magit-repos/evil-collection-magit-repos.el b/.config/emacs/lisp/evil-collection/modes/magit-repos/evil-collection-magit-repos.el new file mode 100644 index 0000000..6bd91ec --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/magit-repos/evil-collection-magit-repos.el @@ -0,0 +1,49 @@ +;;; evil-collection-magit-repos.el --- Bindings for magit-repos -*- lexical-binding: t -*- + +;; Copyright (C) 2015-2016, 2021 Justin Burkett + +;; Author: Justin Burkett +;; Maintainer: Justin Burkett +;; James Nguyen +;; Pierre Neidhardt +;; Package-Requires: ((emacs "26.3") (evil "1.2.3") (magit "2.6.0")) +;; Homepage: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: +;;; Bindings for magit-repos. + +;;; Code: +(require 'evil-collection) +(require 'magit-repos nil t) + +(defvar magit-repolist-mode-map) +(defconst evil-collection-magit-repos-maps '(magit-repolist-mode-map)) + +;;;###autoload +(defun evil-collection-magit-repos-setup () + "Set up `evil' bindings for `magit-repos'." + (evil-set-initial-state 'magit-repolist-mode 'normal) + (evil-collection-define-key 'normal 'magit-repolist-mode-map + "m" 'magit-repolist-mark + "u" 'magit-repolist-unmark + "f" 'magit-repolist-fetch + (kbd "RET") 'magit-repolist-status + (kbd "gr") 'magit-list-repositories) + (add-hook 'magit-repolist-mode-hook 'evil-normalize-keymaps)) + +(provide 'evil-collection-magit-repos) +;;; evil-collection-magit-repos.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/magit-section/README.org b/.config/emacs/lisp/evil-collection/modes/magit-section/README.org new file mode 100644 index 0000000..807238d --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/magit-section/README.org @@ -0,0 +1,47 @@ +* magit-section + + Evil bindings for [[https://github.com/magit/magit][magit-section]], the foldable section UI used by magit, forge, + and several other packages. + +** Key bindings + + | Command | Original | Evil | + |----------------------------------+-----------+-----------| + | =magit-section-toggle= | =TAB= | =TAB= | + | =magit-section-cycle= | =C-= | =C-= | + | =magit-section-cycle= | =M-= | =M-= | + | =magit-section-cycle-global= | =backtab= | =backtab= | + | =magit-section-up= | =^= | =gh= | + | =magit-section-backward= | =p= | =C-k= | + | =magit-section-forward= | =n= | =C-j= | + | =magit-section-backward-sibling= | =M-p= | =gk=, =[= | + | =magit-section-forward-sibling= | =M-n= | =gj=, =]= | + | =magit-section-show-level-1= | =1= | =1= | + | =magit-section-show-level-2= | =2= | =2= | + | =magit-section-show-level-3= | =3= | =3= | + | =magit-section-show-level-4= | =4= | =4= | + | =magit-section-show-level-1-all= | =M-1= | =M-1= | + | =magit-section-show-level-2-all= | =M-2= | =M-2= | + | =magit-section-show-level-3-all= | =M-3= | =M-3= | + | =magit-section-show-level-4-all= | =M-4= | =M-4= | + + When =evil-collection-magit-section-use-z-for-folds= is non-nil, the + following vim-style fold bindings replace the =M-= variants: + + | Command | Evil | + |----------------------------------+------| + | =magit-section-show-level-1-all= | =z1= | + | =magit-section-show-level-2-all= | =z2= | + | =magit-section-show-level-3-all= | =z3= | + | =magit-section-show-level-4-all= | =z4= | + | =magit-section-show-level-4-all= | =zr= | + | =magit-section-toggle= | =za= | + | =magit-section-show= | =zo= | + | =magit-section-show-children= | =zO= | + | =magit-section-hide= | =zc= | + | =magit-section-hide-children= | =zC= | + +** Customization + + - =evil-collection-magit-section-use-z-for-folds= - When non-nil, use =z= as + a prefix for vim-style fold commands. The stash popup then moves to =Z=. diff --git a/.config/emacs/lisp/evil-collection/modes/magit-section/evil-collection-magit-section.el b/.config/emacs/lisp/evil-collection/modes/magit-section/evil-collection-magit-section.el new file mode 100644 index 0000000..2310393 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/magit-section/evil-collection-magit-section.el @@ -0,0 +1,91 @@ +;;; evil-collection-magit-section.el --- Bindings for magit-section -*- lexical-binding: t -*- + +;; Copyright (C) 2022 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.2 +;; Package-Requires: ((emacs "27.1")) +;; Keywords: evil, emacs, convenience, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for magit-section. + +;;; Code: +(require 'evil-collection) +(require 'magit-section nil t) + +(defvar magit-section-mode-map) +(defconst evil-collection-magit-section-maps '(magit-section-mode-map)) + +(defcustom evil-collection-magit-section-use-z-for-folds nil + "When non nil, use \"z\" as a prefix for common vim fold commands, such as + - z1 Reset visibility to level 1 for all sections + - z2 Reset visibility to level 2 for all sections + - z3 Reset visibility to level 3 for all sections + - z4 Reset visibility to level 4 for all sections + - za Toggle a section + - zo Show section + - zO Show sections recursively + - zc Hide section + - zC Hide sections recursively + - zr Same as z4. + +When this option is enabled, the stash popup is available on \"Z\"." + :group 'magit + :type 'boolean) + +(defun evil-collection-magit-section-setup () + "Set up `evil' bindings for magit-section." + (if evil-collection-magit-section-use-z-for-folds + (evil-collection-define-key 'normal 'magit-section-mode-map + "z1" 'magit-section-show-level-1-all + "z2" 'magit-section-show-level-2-all + "z3" 'magit-section-show-level-3-all + "z4" 'magit-section-show-level-4-all + "za" 'magit-section-toggle + "zc" 'magit-section-hide + "zC" 'magit-section-hide-children + "zo" 'magit-section-show + "zO" 'magit-section-show-children + "zr" 'magit-section-show-level-4-all) + (evil-collection-define-key 'normal 'magit-section-mode-map + (kbd "M-1") 'magit-section-show-level-1-all + (kbd "M-2") 'magit-section-show-level-2-all + (kbd "M-3") 'magit-section-show-level-3-all + (kbd "M-4") 'magit-section-show-level-4-all)) + + (evil-collection-define-key 'normal 'magit-section-mode-map + (kbd "TAB") 'magit-section-toggle + [C-tab] 'magit-section-cycle + [M-tab] 'magit-section-cycle + ;; [backtab] is the most portable binding for Shift+Tab. + [backtab] 'magit-section-cycle-global + "gh" 'magit-section-up + (kbd "C-k") 'magit-section-backward + (kbd "C-j") 'magit-section-forward + "gk" 'magit-section-backward-sibling + "[" 'magit-section-backward-sibling + "gj" 'magit-section-forward-sibling + "]" 'magit-section-forward-sibling + (kbd "1") 'magit-section-show-level-1 + (kbd "2") 'magit-section-show-level-2 + (kbd "3") 'magit-section-show-level-3 + (kbd "4") 'magit-section-show-level-4)) + +(provide 'evil-collection-magit-section) +;;; evil-collection-magit-section.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/magit-todos/README.org b/.config/emacs/lisp/evil-collection/modes/magit-todos/README.org new file mode 100644 index 0000000..17a94d1 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/magit-todos/README.org @@ -0,0 +1,32 @@ +* magit-todos + + Evil bindings for [[https://github.com/alphapapa/magit-todos][magit-todos]]. + + Setup clears =j= and =k= on the todos section maps (older =magit-todos= + versions bound them, blocking evil's vertical motion through todos + sections) and adds a jump key on =magit-status=. + +** Key bindings + +*** magit-todos-section-map / magit-todos-item-section-map + + | Key | Original | Evil | + |-----+------------------------------------+---------| + | =j= | =magit-todos-...= (older versions) | unbound | + | =k= | =magit-todos-...= (older versions) | unbound | + + The current upstream uses =B= / =b= on these maps (branch list set + commit / toggle); those are untouched. + +*** magit-status-mode-map (normal state) + + | Command | Original | Evil | + |-----------------------------+----------+------| + | =magit-todos-jump-to-todos= | =j T= | =gT= | + + Bound only when =magit-todos-mode= is enabled. + +** Notes + + =magit-todos-mode= emits a warning about the =jT= key when these + rebindings take effect. Setup advises the mode to silence that warning. diff --git a/.config/emacs/lisp/evil-collection/modes/magit-todos/evil-collection-magit-todos.el b/.config/emacs/lisp/evil-collection/modes/magit-todos/evil-collection-magit-todos.el new file mode 100644 index 0000000..891904b --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/magit-todos/evil-collection-magit-todos.el @@ -0,0 +1,62 @@ +;;; evil-collection-magit-todos.el --- Bindings for `magit-todos' -*- lexical-binding: t -*- + +;; Copyright (C) 2018 James Nguyen + +;; Author: Fredrik Bergroth +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, emacs, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Bindings for `magit-todos'. + +;;; Code: +(require 'evil-collection) +(require 'magit-todos nil t) + +(defconst evil-collection-magit-todos-maps '(magit-todos-section-map + magit-todos-item-section-map + magit-status-mode-map)) + +(defun evil-collection-magit-todos-setup-jump-key () + "Add keybinding to jump to todos section." + (evil-collection-define-key 'normal 'magit-status-mode-map + "gT" (and (bound-and-true-p magit-todos-mode) 'magit-todos-jump-to-todos))) + +(defun evil-collection-magit-todos-supress-warning (func &rest args) + "Supress the jT keybinding warning." + (cl-letf* (((symbol-function 'message) #'ignore)) + (apply func args))) + +;;;###autoload +(defun evil-collection-magit-todos-setup () + "Set up `evil' bindings for `magit-todos'." + ;; magit-todos binds jT and k which prevents evil users from stepping into the section + (dolist (key '("j" "k")) + (evil-collection-define-key nil 'magit-todos-section-map key nil) + (evil-collection-define-key nil 'magit-todos-item-section-map key nil)) + + ;; No need to tell me that jT isn't bound + (advice-add 'magit-todos-mode :around 'evil-collection-magit-todos-supress-warning) + + (add-hook 'magit-todos-mode-hook 'evil-collection-magit-todos-setup-jump-key)) + + +(provide 'evil-collection-magit-todos) +;;; evil-collection-magit-todos.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/magit/README.org b/.config/emacs/lisp/evil-collection/modes/magit/README.org new file mode 100644 index 0000000..c20db58 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/magit/README.org @@ -0,0 +1,212 @@ +* Black magic + + This library configures Magit and Evil to play well with each other. For some + background see [[https://github.com/justbur/evil-magit/issues/1][Issue #1]]. + + *Note*: I intend to track the latest commits to the master branch of the [[https://github.com/magit/magit][magit + repo]], meaning the keybindings here are potentially ahead of the last stable + release of magit. Once the code in evil-collection-magit stabilizes, I may switch to + primarily tracking the stable release of magit and secondarily track the latest + commits to master. Any help is welcomed. + +* Recent Changes (most recent first) + + 1. [2019-09-04] Don't use =evil-next-visual-line= and + =evil=previous-visual-line=. See [[https://github.com/emacs-evil/evil-magit/issues/70][Issue #70]]. + 1. [2019-06-16] Added =evil-collection-magit-stage-untracked-file-with-intent= at + =I=. See [[https://github.com/emacs-evil/evil-magit/issues/67][Issue #67]]. + 2. [2019-02-15] Added =forge-dispatch= at =@=. + 3. [2018-05-22] Added =evil-collection-magit-use-z-for-folds=. See docstring for more + information. + 4. [2018-03-13] Added basic evil support for =magit-list-repositories=. + 5. [2016-07-27] Moved submodules popup to ' and added the new subtree popup at + ". This is not mnemonic in any way but easy to reach and keeps the two keys + together. + 6. [2016-03-24] Moved =magit-diff-less-context= to = to fix conflict with + moved revert. + 7. [2016-03-21] Moved revert commands from =o= and =O= to =-= and + =_=. Rationale is that you are subtracting a commit. This makes room for + =o= and =O= to be reset and the new reset popup command. Think of resetting + to an "old" state. =¯\_(ツ)_/¯= + 8. Added =evil-collection-magit-want-horizontal-movement=. Use =h= and =l= for movement + like vim, moving =h= to =H=, =l= to =L=, and =L= to =C-l=. + 9. Added =evil-collection-magit-toggle-text-mode= on =C-t=. This is a quick way to enter + text mode in a magit buffer, which allows arbitrary movement, copying, etc. + Use =C-t= to return to the previous magit mode. + 10. When =evil-collection-magit-use-y-for-yank= is non nil, =C-w= will prefix the evil + window switching functions from magit buffers. + 11. =evil-collection-magit-use-y-for-yank= is now the default. It has worked well for me so + far, and I've had good feedback, but please let me know if you see issues. + You can use the original behavior with =(setq evil-collection-magit-use-y-for-yank + nil)=. See the table below for a summary of differences. + + +* Installation and Use + + Evil and Magit are both required. After requiring those packages, the following + will setup the new key bindings for you. + + #+BEGIN_SRC emacs-lisp + ;; optional: this is the evil state that evil-collection-magit will use + ;; (setq evil-collection-magit-state 'normal) + ;; optional: disable additional bindings for yanking text + ;; (setq evil-collection-magit-use-y-for-yank nil) + (evil-collection-init) + #+END_SRC emacs-lisp + +** Note on Evil usage + + This package assumes that you either use the global variant of evil mode (e.g., + through =(evil-mode 1)=), or at least have =evil-local-mode= (the local variant) + enabled in the magit buffers you want these bindings to take effect in. When + evil is disabled in a magit buffer, this package will not affect the default key + bindings (with one minor exception). + +** Note on =evil-collection-magit-use-y-for-yank= + + =evil-collection-magit-use-y-for-yank= enables evil's visual state for linewise selection, + and as a consequnce =y= will yank text from the buffer. + + With this enabled which it is by default evil-collection-magit uses =v= and =V= to select + by line. Selection in magit occurs linewise, so this choice is to avoid + confusion that might arise if someone thought they could stage part of a line + with =v= for example. + +** Text mode + + Text mode can be toggled with =evil-collection-magit-toggle-text-mode= (triggered with + =C-t= or =\=). This takes nearly any magit buffer out of the related magit mode + and puts it into =text-mode=. This allows free movement in the buffer using the + standard evil movement and selection commands, making it easy to for example + copy arbitrary text in the buffer. It also effectively prevents magit keys from + shadowing evil ones, so =f= runs =evil-find-char= instead of + =magit-fetch-popup=, allowing all vim related movement commands to be used in + magit buffers. You can think of this if you like as another state for evil-collection-magit + to be in. + + Several requests have been made to allow selecting and copying arbitrary text in + the magit buffers, but there are many conflicts between evil bindings and magit + bindings and there is no elegant solution to this problem in my opinion. Text + mode is the best that I have come up with. + +* Key Bindings + + The basic key binding scheme for evil-collection-magit (EM) is described in the following + tables. Blank columns indicate that the key is carried over from the left. + + | Category | Default | EM w/o yank opt | w/ yank opt (default) | w/ horiz move | w/ folds | + |------------------------+---------+------------------------+-----------------------+---------------+----------| + | cherry pick | =a/A= | | | | | + | branch | =b= | | | | | + | bisect | =B= | | | | | + | commit | =c= | | | | | + | diff | =d/D= | | | | | + | ediff | =e/E= | | | | | + | fetch | =f= | | | | | + | pull | =F= | | | | | + | refresh | =g= | =gr/gR= (=g= in popup) | | | | + | help | =h/?= | | | =H/?= | | + | ignore | =i/I= | | | | | + | intent to stage | =I= | | | | | + | jump | =j= | =g= | | | | + | delete | =k= | =x= | | | | + | untrack | =K= | =X= | | | | + | log | =l/L= | | | =L/C-l= | | + | merge | =m= | | | | | + | remote | =M= | | | | | + | next section | =n= | =C-j= | | | | + | next section sibling | =M-n= | =M-j=, =gj=, or =]= | | | | + | submodule | =o= | ' | | | | + | subtree | =O= | " | | | | + | prev section | =p= | =C-k= | | | | + | prev section sibling | =M-p= | =M-k=, =gk=, or =[= | | | | + | push | =P= | =P= or =p= | | | | + | quit | =q= | =q= or =ESC= | | | | + | rebase | =r= | | | | | + | rename | =R= | | | | | + | stage | =s/S= | | | | | + | tag | =t= | | | | | + | notes | =T= | | | | | + | unstage | =u/U= | | | | | + | revert | =v/V= | =-/_= | | | | + | am | =w= | | | | | + | patch | =W= | | | | | + | reset | =x/X= | =o/O= | | | | + | show-refs | =y= | | =yr= (=y= in popup) | | | + | cherry | =Y= | | | | | + | worktree | =Z/%= | | | | =%= | + | stash | =z/Z= | | | | =Z= | + | git-cmd | =:= | =¦= | | | | + | run | =!= | | | | | + | forge | =@= | | | | | + | diff less/more context | =-/+= | = / + | | | | + | copy section info | =C-w= | | =ys= | | | + | copy buffer info | =M-w= | | =yb= | | | + +** New Commands + + | Command | EM w/o yank opt | EM w/ yank opt (default) | w/ horiz move | + |----------------------------------------+--------------------------+--------------------------+---------------| + | evil-goto-line | =G= | | | + | evil-next-visual-line | =j= | | | + | evil-previous-visual-line | =k= | | | + | evil-backward-char | under =M-x= | | =h= | + | evil-forward-char | under =M-x= | | =l= | + | evil-search-next | =n= | | | + | evil-search-previous | =N= | | | + | set-mark-command | =v= or =V= | =C-SPC= | | + | evil-visual-line | under =M-x= | =v= or =V= | | + | evil-ex | =:= | | | + | evil-search-forward | =/= | | | + | evil-scroll-page-up | =C-b= | | | + | evil-scroll-down | =C-d= | | | + | evil-scroll-page-down | =C-f= | | | + | evil-scroll-up | =C-u= (if =C-u= scrolls) | | | + | evil-emacs-state | =C-z= | | | + | evil-yank-line | under =M-x= | =yy= | | + | evil-window-map | under =M-x= | =C-w= | | + | evil-collection-magit-toggle-text-mode | =C-t/\= | | | + + + Any other bindings are meant to be consistent with these. + + Use =evil-collection-magit-revert= to revert changes made by evil-collection-magit to the default + evil+magit behavior. + +** To add other common evil commands + + Some may want =?= to search backward instead of launching the popup which is + also bound to =h=. To get this behavior, add the following line after + =(evil-collection-init)= in your configuration. + + #+BEGIN_SRC emacs-lisp +(evil-define-key evil-collection-magit-state magit-mode-map "?" 'evil-search-backward) + #+END_SRC + + Most (but not all) magit bindings are in =magit-mode-map=, so other commands can + be bound in this way too. + +** To remove commands + + Typically, to prevent evil-collection-magit from overriding the default behavior with evil + and magit loaded, you should bind the respective key to =nil= after loading + evil-collection-magit. For example, to make =escape= behave as default: + + #+BEGIN_SRC emacs-lisp +(evil-define-key* evil-collection-magit-state magit-mode-map [escape] nil) + #+END_SRC + +* Known Conflicts + + These are the third-party packages that conflict with these bindings and will + probably need to be disabled in magit buffers for evil-collection-magit to work properly. + + 1. [[https://github.com/hlissner/evil-snipe][evil-snipe]] + 2. [[https://github.com/syl20bnr/evil-escape][evil-escape]] with [[https://github.com/justbur/evil-magit/issues/4][certain escape sequences]] + +* Disclaimer + + Given the complexity of magit key bindings combined with the complexity of git + itself, it is possible that there are some rough edges where the current binding + is not the expected one in a buffer. It will be very helpful for you to report + any such instances. diff --git a/.config/emacs/lisp/evil-collection/modes/magit/evil-collection-magit.el b/.config/emacs/lisp/evil-collection/modes/magit/evil-collection-magit.el new file mode 100644 index 0000000..533eae0 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/magit/evil-collection-magit.el @@ -0,0 +1,747 @@ +;;; evil-collection-magit.el --- Evil-based key bindings for magit -*- lexical-binding: t; -*- + +;; Copyright (C) 2015-2016, 2021 Justin Burkett + +;; Author: Justin Burkett +;; Maintainer: Justin Burkett +;; James Nguyen +;; Pierre Neidhardt +;; Package-Requires: ((emacs "26.3") (evil "1.2.3") (magit "2.6.0")) +;; Homepage: https://github.com/emacs-evil/evil-collection +;; Version: 0.4.1 + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: + +;; This library configures Magit and Evil to play well with each +;; other. For some background see https://github.com/magit/evil-magit/issues/1. + +;; See the README at +;; https://github.com/emacs-evil/evil-collection/tree/master/modes/magit +;; for a table describing the key binding changes. + +;;; Code: + +(require 'evil-collection) +(require 'magit nil t) + +(defvar magit-blame-mode-map) +(defvar magit-blame-read-only-mode-map) +(defvar magit-blob-mode-map) +(defvar magit-cherry-mode-map) +(defvar magit-diff-mode-map) +(defvar magit-file-section-map) +(defvar magit-hunk-section-map) +(defvar magit-log-mode-map) +(defvar magit-log-read-revs-map) +(defvar magit-log-select-mode-map) +(defvar magit-process-mode-map) +(defvar magit-reflog-mode-map) +(defvar magit-refs-mode-map) +(defvar magit-status-mode-map) +(defvar magit-submodule-list-mode-map) + +(defconst evil-collection-magit-maps + '(evil-collection-magit-toggle-text-minor-mode-map + magit-log-mode-map ; -> parent: `magit-mode-map' + magit-status-mode-map ; -> parent: `magit-mode-map' + magit-blame-mode-map + magit-blame-read-only-mode-map + magit-blob-mode-map + magit-submodule-list-mode-map ; -> parent: `magit-repolist-mode-map' + magit-mode-map)) + +(defcustom evil-collection-magit-use-y-for-yank t + "When non nil (Default is t), +replace \"y\" for `magit-show-refs' with +\"yy\" for `evil-collection-magit-yank-whole-line', +\"ys\" for `magit-copy-section-value', +\"yb\" for `magit-copy-buffer-revision' and +\"yr\" for `magit-show-refs'. +This keeps \"y\" for `magit-show-refs', +in the help popup (`magit-dispatch')." + :group 'magit + :type 'boolean) + +(defcustom evil-collection-magit-want-horizontal-movement nil + "When non nil, use \"h\" and \"l\" for horizontal movement in +most magit buffers. The old \"h\" for help is moved to \"H\" and +similarly for the old \"l\" for the log popup. The old \"L\" is +then put on \"C-l\"." + :group 'magit + :type 'boolean) + +(defcustom evil-collection-magit-use-z-for-folds nil + "When non nil, use \"z\" as a prefix for common vim fold commands, such as + - z1 Reset visibility to level 1 for all sections + - z2 Reset visibility to level 2 for all sections + - z3 Reset visibility to level 3 for all sections + - z4 Reset visibility to level 4 for all sections + - za Toggle a section + - zo Show section + - zO Show sections recursively + - zc Hide section + - zC Hide sections recursively + - zr Same as z4. + +When this option is enabled, the stash popup is available on \"Z\"." + :group 'magit + :type 'boolean) + +(defcustom evil-collection-magit-use-v-for-visual-line nil + "When non nil, use \"v\" for `evil-visual-line' (old behavior). +When nil (default), \"v\" uses `evil-visual-char'." + :group 'magit + :type 'boolean) + +(defcustom evil-collection-magit-use-$-for-end-of-line t + "When non nil, use \"$\" for `evil-end-of-line'. + +Move `magit-process-buffer' to \"`\"." + :group 'magit + :type 'boolean) + +(defcustom evil-collection-magit-use-0-for-beginning-of-line t + "When non nil, use \"0\" for `evil-beginning-of-line'. + +Move `magit-diff-default-context' to \"~\"." + :group 'magit + :type 'boolean) + +(defcustom evil-collection-magit-state (if evil-collection-magit-use-y-for-yank 'normal 'motion) + "State to use for most magit buffers." + :group 'magit + :type 'symbol) + +;; without this set-mark-command activates visual-state which is just annoying +;; and introduces possible bugs +(defun evil-collection-magit-remove-visual-activate-hook () + (when (derived-mode-p 'magit-mode) + (remove-hook 'activate-mark-hook 'evil-visual-activate-hook t))) +(add-hook 'evil-local-mode-hook 'evil-collection-magit-remove-visual-activate-hook) + +(defun evil-collection-magit-maybe-deactivate-mark () + "Deactivate mark if region is active. Used for ESC binding." + (interactive) + (when (region-active-p) (deactivate-mark))) + +(defvar evil-collection-magit-emacs-to-default-state-modes + '(git-commit-mode) + "Modes that should be in the default evil state.") + +(defvar evil-collection-magit-emacs-to-evil-collection-magit-state-modes + '(git-rebase-mode + magit-mode + magit-cherry-mode + magit-diff-mode + magit-log-mode + magit-log-select-mode + magit-process-mode + magit-reflog-mode + magit-refs-mode + magit-revision-mode + magit-stash-mode + magit-stashes-mode + magit-status-mode) + "Modes that switch from Emacs state to `evil-collection-magit-state'.") + +(defvar evil-collection-magit-default-to-evil-collection-magit-state-modes + '(magit-blob-mode + magit-gitflow-mode) + "Modes that switch from default state to `evil-collection-magit-state'.") + +(defvar evil-collection-magit-untouched-modes + ;; TODO do something here + '(git-popup-mode + magit-blame-mode + magit-blame-read-only-mode) + "Modes whose evil states are unchanged.") + +(defvar evil-collection-magit-ignored-modes + '(git-commit-major-mode + magit-auto-revert-mode + magit-blame-put-keymap-before-view-mode + magit-diff-mode + magit-merge-preview-mode + transient-resume-mode + magit-rebase-mode + magit-wip-after-save-mode + magit-wip-after-save-local-mode-major-mode + magit-wip-after-save-local-mode + magit-wip-after-apply-mode + magit-wip-before-change-mode + magit-wip-initial-backup-mode + magit-wip-mode + ;; gh + magit-gh-pulls-mode + ;; git-gutter + git-gutter-mode + git-gutter-mode-major-mode + git-gutter+-commit-mode + git-gutter+-mode + git-gutter+-enable-fringe-display-mode + git-gutter+-enable-default-display-mode) + "Currently ignored modes. They are collected here for testing purposes.") + +(defun evil-collection-magit-set-initial-states () + "Set the initial state for relevant modes." + (dolist (mode (append evil-collection-magit-emacs-to-evil-collection-magit-state-modes + evil-collection-magit-default-to-evil-collection-magit-state-modes)) + (evil-set-initial-state mode evil-collection-magit-state)) + (dolist (mode evil-collection-magit-emacs-to-default-state-modes) + (evil-set-initial-state mode evil-default-state))) + +(defun evil-collection-magit-revert-initial-states () + "Revert the initial state for modes to their values before +evil-collection-magit was loaded." + (dolist (mode (append evil-collection-magit-emacs-to-evil-collection-magit-state-modes + evil-collection-magit-emacs-to-default-state-modes)) + (evil-set-initial-state mode 'emacs)) + (dolist (mode evil-collection-magit-default-to-evil-collection-magit-state-modes) + (evil-set-initial-state mode evil-default-state))) + +(defvar evil-collection-magit-section-maps + '(magit-branch-section-map + magit-commit-section-map + magit-commit-message-section-map + magit-error-section-map + magit-file-section-map + magit-hunk-section-map + magit-module-commit-section-map + magit-remote-section-map + magit-staged-section-map + magit-stash-section-map + magit-stashes-section-map + magit-tag-section-map + magit-unpulled-section-map + magit-unpushed-section-map + magit-unstaged-section-map + magit-untracked-section-map + + ;; new ones that I haven't looked at yet + magit-button-section-map + magit-commitbuf-section-map + magit-diff-section-map + magit-diffbuf-section-map + magit-diffstat-section-map + magit-headers-section-map + magit-log-section-map + magit-message-section-map + ;; FIXME: deal with new bindings in this one + magit-module-section-map + magit-modules-section-map + magit-processbuf-section-map + magit-process-section-map + magit-pulls-section-map + magit-unmerged-section-map + magit-status-section-map + magit-worktree-section-map) + "All magit section maps. For testing purposes only at the moment.") + +;; Old way of excluding newlines +;; (when evil-collection-magit-use-y-for-yank +;; (dolist (map evil-collection-magit-section-maps) +;; (when (and map (keymapp (symbol-value map))) +;; (map-keymap +;; (lambda (_ def) +;; (when (commandp def) +;; (evil-set-command-property def :exclude-newline t))) +;; (symbol-value map))))) + +(defvar evil-collection-magit-in-visual-pre-command) + +(defun evil-collection-magit--around-visual-pre-command (orig-func &rest args) + (let ((evil-collection-magit-in-visual-pre-command t)) + (apply orig-func args))) + +(defun evil-collection-magit--filter-args-visual-expand-region (arglist) + ;; pretend that the command has the :exclude-newline property by rewriting the + ;; EXCLUDE-NEWLINE arg to this function + (cons (or (car arglist) + (and (bound-and-true-p evil-collection-magit-in-visual-pre-command) + (eq (evil-visual-type) 'line) + (derived-mode-p 'magit-mode))) + ;; shouldn't be necessary, but this will prevent it from failing if an + ;; arg is added. + (cdr arglist))) + +(when (and (fboundp 'advice-add) evil-collection-magit-use-y-for-yank) + (advice-add 'evil-visual-pre-command + :around #'evil-collection-magit--around-visual-pre-command) + (advice-add 'evil-visual-expand-region + :filter-args #'evil-collection-magit--filter-args-visual-expand-region)) + +;; keep visual state for magit-section movement commands +(dolist (cmd '(magit-section-forward-sibling + magit-section-forward + magit-section-backward-sibling + magit-section-backward + magit-section-up)) + (evil-set-command-property cmd :keep-visual t)) + +(defvar evil-collection-magit-mode-map-bindings + (let ((states (if evil-collection-magit-use-y-for-yank + `(,evil-collection-magit-state visual) + `(,evil-collection-magit-state)))) + (append + `((,states magit-mode-map "g") + (,states magit-mode-map "\C-j" magit-section-forward "n") + (,states magit-mode-map "\M-j" magit-section-forward-sibling "M-n") + (,states magit-mode-map "gj" magit-section-forward-sibling "M-n") + (,states magit-mode-map "]" magit-section-forward-sibling "M-n") + (,states magit-mode-map "\C-k" magit-section-backward "p") + (,states magit-mode-map "\M-k" magit-section-backward-sibling "M-p") + (,states magit-mode-map "gk" magit-section-backward-sibling "M-p") + (,states magit-mode-map "[" magit-section-backward-sibling "M-p") + (,states magit-mode-map "gr" magit-refresh "g") + (,states magit-mode-map "gR" magit-refresh-all "G") + (,states magit-mode-map "x" magit-delete-thing "k") + (,states magit-mode-map "X" magit-file-untrack "K") + (,states magit-mode-map "-" magit-revert-no-commit "v") + (,states magit-mode-map "_" magit-revert "V") + (,states magit-mode-map "p" magit-push "P") + (,states magit-mode-map "o" magit-reset-quickly "x") + (,states magit-mode-map "O" magit-reset "X") + (,states magit-mode-map "|" magit-git-command ":") + (,states magit-mode-map "'" magit-submodule "o") + (,states magit-mode-map "\"" magit-subtree "O") + (,states magit-mode-map "=" magit-diff-less-context "-") + (,states magit-mode-map "j" evil-next-line) + (,states magit-mode-map "k" evil-previous-line) + (,states magit-mode-map "gg" evil-goto-first-line) + (,states magit-mode-map "G" evil-goto-line) + (,states magit-mode-map "\C-d" evil-scroll-down) + (,states magit-mode-map "\C-f" evil-scroll-page-down) + (,states magit-mode-map "\C-b" evil-scroll-page-up) + (,states magit-mode-map ":" evil-ex) + (,states magit-mode-map "q" magit-mode-bury-buffer) + + ;; these are to fix the priority of the log mode map and the magit mode map + ;; FIXME: Conflict between this and revert. Revert seems more important here + ;; (,states magit-log-mode-map "-" magit-log-half-commit-limit "-") + (,states magit-log-mode-map "=" magit-log-toggle-commit-limit "=") + + ;; https://github.com/emacs-evil/evil-collection/issues/406 + ;; Use kbd here for S-SPC and S-DEL so evil-collection-define-key can + ;; parse definition correctly;. + (,states magit-mode-map ,(kbd "S-SPC") magit-diff-show-or-scroll-up "SPC") + (,states magit-mode-map ,(kbd "S-DEL") magit-diff-show-or-scroll-down "DEL") + + ((,evil-collection-magit-state) magit-mode-map ,(kbd evil-toggle-key) evil-emacs-state)) + + (if (eq evil-search-module 'evil-search) + `((,states magit-mode-map "/" evil-ex-search-forward) + (,states magit-mode-map "n" evil-ex-search-next) + (,states magit-mode-map "N" evil-ex-search-previous) + (,states magit-blame-read-only-mode-map "n" evil-ex-search-next) + (,states magit-blame-read-only-mode-map "N" evil-ex-search-previous)) + `((,states magit-mode-map "/" evil-search-forward) + (,states magit-mode-map "n" evil-search-next) + (,states magit-mode-map "N" evil-search-previous) + (,states magit-blame-read-only-mode-map "n" evil-search-next) + (,states magit-blame-read-only-mode-map "N" evil-search-previous))) + + `((,states magit-status-mode-map "gz" magit-jump-to-stashes) + (,states magit-status-mode-map "gt" magit-jump-to-tracked) + (,states magit-status-mode-map "gn" magit-jump-to-untracked) + (,states magit-status-mode-map "gu" magit-jump-to-unstaged) + (,states magit-status-mode-map "gs" magit-jump-to-staged) + (,states magit-status-mode-map "gfu" magit-jump-to-unpulled-from-upstream) + (,states magit-status-mode-map "gfp" magit-jump-to-unpulled-from-pushremote) + (,states magit-status-mode-map "gpu" magit-jump-to-unpushed-to-upstream) + (,states magit-status-mode-map "gpp" magit-jump-to-unpushed-to-pushremote) + (,states magit-status-mode-map "gh" magit-section-up "^") + (,states magit-diff-mode-map "gd" magit-jump-to-diffstat-or-diff "j") + ((visual) magit-diff-mode-map "y" magit-copy-section-value) + ;; NOTE This is now transient-map and the binding is C-g. + ;; ((emacs) magit-popup-mode-map "" "q") + ) + + (when evil-collection-magit-want-horizontal-movement + `((,states magit-mode-map "H" magit-dispatch "h") + (,states magit-mode-map "L" magit-log "l") + (,states magit-mode-map "\C-l" magit-log-refresh "L") + (,states magit-mode-map "h" evil-backward-char) + (,states magit-mode-map "l" evil-forward-char))) + + (when evil-want-C-u-scroll + `((,states magit-mode-map "\C-u" evil-scroll-up))) + + (if evil-collection-magit-use-y-for-yank + `((,states magit-mode-map "v" ,(if evil-collection-magit-use-v-for-visual-line + 'evil-visual-line + 'evil-visual-char)) + (,states magit-mode-map "V" evil-visual-line) + (,states magit-mode-map "\C-w" evil-window-map) + (,states magit-mode-map "y") + (,states magit-mode-map "yy" evil-collection-magit-yank-whole-line) + (,states magit-mode-map "yr" magit-show-refs "y") + (,states magit-mode-map "ys" magit-copy-section-value "C-w") + (,states magit-mode-map "yb" magit-copy-buffer-revision "M-w") + ((visual) magit-mode-map "y" magit-copy-section-value)) + `((,states magit-mode-map "v" set-mark-command) + (,states magit-mode-map "V" set-mark-command) + (,states magit-mode-map ,(kbd "") evil-collection-magit-maybe-deactivate-mark))) + + (when evil-collection-magit-use-$-for-end-of-line + `((,states magit-mode-map "$" evil-end-of-line) + (,states magit-mode-map "`" magit-process-buffer))) + + (when evil-collection-magit-use-0-for-beginning-of-line + `((,states magit-mode-map "0" evil-beginning-of-line) + (,states magit-mode-map "~" magit-diff-default-context))) + + (when evil-collection-magit-use-z-for-folds + `((,states magit-mode-map "Z" magit-stash) + (,states magit-mode-map "z") + (,states magit-mode-map "z1" magit-section-show-level-1-all) + (,states magit-mode-map "z2" magit-section-show-level-2-all) + (,states magit-mode-map "z3" magit-section-show-level-3-all) + (,states magit-mode-map "z4" magit-section-show-level-4-all) + (,states magit-mode-map "za" magit-section-toggle) + (,states magit-mode-map "zc" magit-section-hide) + (,states magit-mode-map "zC" magit-section-hide-children) + (,states magit-mode-map "zo" magit-section-show) + (,states magit-mode-map "zO" magit-section-show-children) + (,states magit-mode-map "zr" magit-section-show-level-4-all))))) + "evil-collection-magit bindings for major modes. Each element of this list +takes the form + +\(EVIL-STATE MAGIT-MAP NEW-KEY DEF ORIG-KEY\). + +ORIG-KEY is only used for testing purposes, and +denotes the original magit key for this command.") + +(dolist (binding evil-collection-magit-mode-map-bindings) + (when binding + (dolist (state (nth 0 binding)) + (evil-collection-define-key + state (nth 1 binding) (nth 2 binding) (nth 3 binding))))) + +(defvar evil-collection-magit-minor-mode-map-bindings + `(((,evil-collection-magit-state visual) magit-blob-mode-map "gj" magit-blob-next "n") + ((,evil-collection-magit-state visual) magit-blob-mode-map "gk" magit-blob-previous "p") + ((,evil-collection-magit-state visual) git-commit-mode-map "\M-k" git-commit-prev-message "M-p") + ((,evil-collection-magit-state visual) git-commit-mode-map "gk" git-commit-prev-message "M-p") + ((,evil-collection-magit-state visual) git-commit-mode-map "\M-j" git-commit-next-message "M-n") + ((,evil-collection-magit-state visual) git-commit-mode-map "gj" git-commit-next-message "M-n") + ((normal) magit-blame-read-only-mode-map "j" evil-next-line) + ((normal) magit-blame-read-only-mode-map "\C-j" magit-blame-next-chunk "n") + ((normal) magit-blame-read-only-mode-map "gj" magit-blame-next-chunk "n") + ((normal) magit-blame-read-only-mode-map "gJ" magit-blame-next-chunk-same-commit "N") + ((normal) magit-blame-read-only-mode-map "k" evil-previous-line) + ((normal) magit-blame-read-only-mode-map "\C-k" magit-blame-previous-chunk "p") + ((normal) magit-blame-read-only-mode-map "gk" magit-blame-previous-chunk "p") + ((normal) magit-blame-read-only-mode-map "gK" magit-blame-previous-chunk-same-commit "P")) + "evil-collection-magit bindings for minor modes. Each element of +this list takes the form + +\(EVIL-STATE MAGIT-MAP NEW-KEY DEF ORIG-KEY)\. + +ORIG-KEY is only used for testing purposes, and +denotes the original magit key for this command.") + +(dolist (binding evil-collection-magit-minor-mode-map-bindings) + (when binding + (dolist (state (nth 0 binding)) + ;; TODO: Maybe switch to `evil-define-minor-mode-key' + (evil-collection-define-key + state (nth 1 binding) (nth 2 binding) (nth 3 binding))))) + +;; Make relevant maps into overriding maps so that they shadow the global evil +;; maps by default +(dolist (map (list magit-mode-map + magit-cherry-mode-map + magit-mode-map + magit-blob-mode-map + magit-diff-mode-map + magit-log-mode-map + magit-log-select-mode-map + magit-reflog-mode-map + magit-status-mode-map + magit-log-read-revs-map + magit-process-mode-map + magit-refs-mode-map)) + (evil-make-overriding-map map (if evil-collection-magit-use-y-for-yank + 'all + evil-collection-magit-state))) + +(evil-make-overriding-map magit-blame-read-only-mode-map 'normal) + +(eval-after-load 'magit-gh-pulls + `(evil-make-overriding-map magit-gh-pulls-mode-map ',evil-collection-magit-state)) + +;; Need to refresh evil keymaps when blame/blob mode is entered. +(add-hook 'magit-blame-mode-hook 'evil-normalize-keymaps) +(add-hook 'magit-blob-mode-hook 'evil-normalize-keymaps) + + +(evil-set-initial-state 'magit-submodule-list-mode 'normal) +(evil-collection-define-key 'normal 'magit-submodule-list-mode-map + (kbd "RET") 'magit-repolist-status + (kbd "gr") 'magit-list-submodules) +(add-hook 'magit-submodule-list-mode-hook 'evil-normalize-keymaps) + + +(eval-after-load 'git-rebase + `(progn + ;; for the compiler + (defvar git-rebase-mode-map) + (defvar evil-collection-magit-rebase-commands-w-descriptions + ;; nil in the first element means don't bind here + '(("p" git-rebase-pick "pick = use commit") + ("r" git-rebase-reword "reword = use commit, but edit the commit message") + ("e" git-rebase-edit "edit = use commit, but stop for amending") + ("s" git-rebase-squash "squash = use commit, but meld into previous commit") + ("f" git-rebase-fixup "fixup = like \"squash\", but discard this commit's log message") + ("x" git-rebase-exec "exec = run command (the rest of the line) using shell") + ("d" git-rebase-kill-line "drop = remove commit" "k") + ("u" git-rebase-undo "undo last change") + ("ZZ" with-editor-finish "tell Git to make it happen") + ("ZQ" with-editor-cancel "tell Git that you changed your mind, i.e. abort") + ("k" evil-previous-line "move point to previous line" "p") + ("j" evil-next-line "move point to next line" "n") + ("M-k" git-rebase-move-line-up "move the commit at point up" "\M-p") + ("M-j" git-rebase-move-line-down "move the commit at point down" "\M-n") + (nil git-rebase-show-commit "show the commit at point in another buffer"))) + + (dolist (cmd evil-collection-magit-rebase-commands-w-descriptions) + (when (car cmd) + (evil-collection-define-key evil-collection-magit-state 'git-rebase-mode-map + (kbd (car cmd)) (nth 1 cmd)))) + + (evil-make-overriding-map git-rebase-mode-map evil-collection-magit-state) + + (defun evil-collection-magit-add-rebase-messages () + "Remove evil-state annotations and reformat git-rebase buffer." + (goto-char (point-min)) + (let ((inhibit-read-only t) + (state-regexp (format "<%s-state> " evil-collection-magit-state)) + (aux-map (evil-get-auxiliary-keymap git-rebase-mode-map evil-collection-magit-state))) + (save-excursion + (save-match-data + (goto-char (point-min)) + (when (and (boundp 'git-rebase-show-instructions) + git-rebase-show-instructions + (re-search-forward + (concat "^" (regexp-quote comment-start) "\\s-+p, pick") nil t)) + (goto-char (line-beginning-position)) + (flush-lines (concat "^" (regexp-quote comment-start) ".+ = ")) + (dolist (cmd evil-collection-magit-rebase-commands-w-descriptions) + (insert + (format "%s %-8s %s\n" + comment-start + (if (and (car cmd) + (eq (nth 1 cmd) + (lookup-key aux-map (kbd (car cmd))))) + (car cmd) + (replace-regexp-in-string + state-regexp "" + (substitute-command-keys + (format "\\[%s]" (nth 1 cmd))))) + (nth 2 cmd))))))))) + (remove-hook 'git-rebase-mode-hook 'git-rebase-mode-show-keybindings) + (add-hook 'git-rebase-mode-hook 'evil-collection-magit-add-rebase-messages t))) + +;; section maps: evil's auxiliary maps don't work here, because these maps are +;; text overlays + +(defun evil-collection-magit-stage-untracked-file-with-intent () + "Call `magit-stage-untracked' with optional arg." + (interactive) + (when (and (derived-mode-p 'magit-mode) + (magit-apply--get-selection) + (eq (magit-diff-type) 'untracked)) + (magit-stage-untracked t))) + +(defcustom evil-collection-magit-visit-worktree-file-on-return t + "When non-nil (default), RET visits the file in the worktree +\(`magit-diff-visit-worktree-file') and S- visits the file +in the current diff context (`magit-diff-visit-file'). + +When nil, the bindings are swapped: RET uses `magit-diff-visit-file' +and S- uses `magit-diff-visit-worktree-file'." + :group 'magit + :type 'boolean) + +(defvar evil-collection-magit-original-section-bindings + `((,(copy-keymap magit-file-section-map) "\C-j" magit-diff-visit-worktree-file) + (,(copy-keymap magit-hunk-section-map) "\C-j" magit-diff-visit-worktree-file)) + "For testing purposes only. The original magit keybindings that +evil-collection-magit affects.") + +(defun evil-collection-magit-adjust-section-bindings () + "Adjust bindings in section maps for evil-collection-magit." + (define-key magit-file-section-map "I" + 'evil-collection-magit-stage-untracked-file-with-intent) + (define-key magit-file-section-map "\C-j" nil) ; breaking change + (define-key magit-hunk-section-map "\C-j" nil) ; breaking change + (let ((return-cmd (if evil-collection-magit-visit-worktree-file-on-return + 'magit-diff-visit-worktree-file + 'magit-diff-visit-file)) + (s-return-cmd (if evil-collection-magit-visit-worktree-file-on-return + 'magit-diff-visit-file + 'magit-diff-visit-worktree-file))) + (define-key magit-file-section-map (kbd "RET") return-cmd) + (define-key magit-hunk-section-map (kbd "RET") return-cmd) + (define-key magit-file-section-map (kbd "S-") s-return-cmd) + (define-key magit-hunk-section-map (kbd "S-") s-return-cmd))) + +(defun evil-collection-magit-revert-section-bindings () + "Revert changed bindings in section maps generated by evil-collection-magit." + (define-key magit-file-section-map "I" nil) + (define-key magit-file-section-map "\C-j" 'magit-diff-visit-file-worktree) + (define-key magit-hunk-section-map "\C-j" 'magit-diff-visit-file-worktree) + (define-key magit-file-section-map (kbd "RET") 'magit-diff-visit-file) + (define-key magit-hunk-section-map (kbd "RET") 'magit-diff-visit-file) + (define-key magit-file-section-map (kbd "S-") nil) + (define-key magit-hunk-section-map (kbd "S-") nil)) + +;; Popups + +(defvar evil-collection-magit-dispatch-popup-backup + (copy-tree (get 'magit-dispatch 'transient--layout) t)) +(defvar evil-collection-magit-popup-keys-changed nil) + +(defvar evil-collection-magit-popup-changes + (append + (when evil-collection-magit-use-z-for-folds + '((magit-dispatch "Z" "%" magit-worktree) + (magit-dispatch "z" "Z" magit-stash))) + (when evil-collection-magit-want-horizontal-movement + '((magit-dispatch "L" "C-l" magit-log-refresh) + (magit-dispatch "l" "L" magit-log))) + '((magit-branch "x" "X" magit-branch-reset) + (magit-branch "k" "x" magit-branch-delete) + (magit-dispatch "o" "'" magit-submodule) + (magit-dispatch "O" "\"" magit-subtree) + (magit-dispatch "V" "_" magit-revert) + (magit-dispatch "X" "O" magit-reset) + (magit-dispatch "v" "-" magit-reverse) + (magit-dispatch "k" "x" magit-discard) + (magit-remote "k" "x" magit-remote-remove) + ;; FIXME: how to properly handle a popup with a key that appears twice (in + ;; `transient-define-prefix' definition)? Currently we rely on: + ;; 1. first call to `evil-collection-magit-change-popup-key' changes the first "V" + ;; entry of `magit-revert' (the first entry in `transient-define-prefix' + ;; definition of `magit-revert'), second call changes the second "V". + ;; 2. the remapping here are in the same order as in `magit-revert' + ;; definition + (magit-revert "V" "_" magit-revert-and-commit) + (magit-revert "V" "_" magit-sequencer-continue) + (magit-tag "k" "x" magit-tag-delete))) + "Changes to popup keys") + +(defun evil-collection-magit-change-popup-key (popup from to &rest _args) + "Wrap `magit-change-popup-key'." + (transient-suffix-put popup from :key to)) + +(defun evil-collection-magit-adjust-popups () + "Adjust popup keys to match evil-collection-magit." + (unless evil-collection-magit-popup-keys-changed + (dolist (change evil-collection-magit-popup-changes) + (apply #'evil-collection-magit-change-popup-key change)) + (setq evil-collection-magit-popup-keys-changed t))) + +(defun evil-collection-magit-revert-popups () + "Revert popup keys changed by evil-collection-magit." + (put 'magit-dispatch 'transient--layout evil-collection-magit-dispatch-popup-backup) + (setq evil-collection-magit-popup-keys-changed nil)) + +;;;###autoload +(defun evil-collection-magit-init () + "This function completes the setup of evil-collection-magit. It is called +automatically when evil-collection-magit-setup is called.. The only reason to +use this function is if you've called `evil-collection-magit-revert' and wish +to go back to evil-collection-magit behavior." + (interactive) + (evil-collection-magit-adjust-section-bindings) + (evil-collection-magit-adjust-popups) + (evil-collection-magit-set-initial-states)) + +;;;###autoload +(defun evil-collection-magit-revert () + "Revert changes by evil-collection-magit that affect default evil+magit behavior." + (interactive) + (evil-collection-magit-revert-section-bindings) + (evil-collection-magit-revert-popups) + (evil-collection-magit-revert-initial-states) + (message "evil-collection-magit reverted")) + +(define-minor-mode evil-collection-magit-toggle-text-minor-mode + "Minor mode used to enabled toggle key in `text-mode' after +using `evil-collection-magit-toggle-text-mode'" + :keymap (make-sparse-keymap)) + +(evil-collection-define-key 'normal + 'evil-collection-magit-toggle-text-minor-mode-map + "\C-t" 'evil-collection-magit-toggle-text-mode + "\\" 'evil-collection-magit-toggle-text-mode) +(evil-collection-define-key evil-collection-magit-state 'magit-mode-map + "\C-t" 'evil-collection-magit-toggle-text-mode + "\\" 'evil-collection-magit-toggle-text-mode) +(evil-collection-define-key evil-collection-magit-state 'git-rebase-mode-map + "\C-t" 'evil-collection-magit-toggle-text-mode + "\\" 'evil-collection-magit-toggle-text-mode) + +(defvar evil-collection-magit-last-mode nil + "Used to store last magit mode before entering text mode using +`evil-collection-magit-toggle-text-mode'.") + +(defun evil-collection-magit-toggle-text-mode () + "Switch to `text-mode' and back from magit buffers." + (interactive) + (cond ((derived-mode-p 'magit-mode 'git-rebase-mode) + (setq evil-collection-magit-last-mode major-mode) + (message "Switching to text-mode") + (text-mode) + (read-only-mode -1) + (evil-collection-magit-toggle-text-minor-mode 1) + (evil-normalize-keymaps)) + ((and (eq major-mode 'text-mode) + (functionp evil-collection-magit-last-mode)) + (message "Switching to %s" evil-collection-magit-last-mode) + (evil-collection-magit-toggle-text-minor-mode -1) + (evil-normalize-keymaps) + (funcall evil-collection-magit-last-mode) + (magit-refresh) + (evil-change-state evil-collection-magit-state)) + (t + (user-error "evil-collection-magit-toggle-text-mode unexpected state")))) + +(evil-define-operator evil-collection-magit-yank-whole-line + (beg end type register yank-handler) + "Yank whole line." + :motion evil-line-or-visual-line + (interactive "") + (evil-yank beg end type register yank-handler)) + +;;;###autoload +(defun evil-collection-magit-setup () + "Set up `evil' bindings for `magit'." + + (evil-collection-define-key 'normal 'magit-blame-mode-map + "q" 'magit-blame-quit) + (evil-collection-define-key 'normal 'magit-blame-read-only-mode-map + "q" 'magit-blame-quit) + + (evil-collection-magit-init)) + +;;; evil-collection-magit.el ends soon +(provide 'evil-collection-magit) +;; Local Variables: +;; indent-tabs-mode: nil +;; End: +;;; evil-collection-magit.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/man/README.org b/.config/emacs/lisp/evil-collection/modes/man/README.org new file mode 100644 index 0000000..70ca48c --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/man/README.org @@ -0,0 +1,22 @@ +* man + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Man-Page.html][Man]]. + +** Key bindings + + | Command | Original | Evil | + |-------------------------------+----------------+-----------------| + | =scroll-up-command= | =SPC= | =SPC= | + | =scroll-down-command= | =DEL=, =S-SPC= | =S-SPC= | + | =forward-button= | =TAB= | =TAB= | + | =backward-button= | =S-TAB= | =S-TAB= | + | =Man-next-manpage= | =M-n= | =]]=, =gj= | + | =Man-previous-manpage= | =M-p= | =[[=, =gk= | + | =Man-next-section= | =n= | =C-j= | + | =Man-previous-section= | =p= | =C-k= | + | =man= | =m= | =gm= | + | =Man-goto-section= | =g= | =gd= | + | =Man-follow-manual-reference= | =r= | =gR= | + | =Man-goto-see-also-section= | =s= | =gs= | + | =Man-update-manpage= | =u= | =gr= | + | =quit-window= | =q= | =q=, =ZQ=, =ZZ= | diff --git a/.config/emacs/lisp/evil-collection/modes/man/evil-collection-man.el b/.config/emacs/lisp/evil-collection/modes/man/evil-collection-man.el new file mode 100644 index 0000000..a4eddd0 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/man/evil-collection-man.el @@ -0,0 +1,68 @@ +;;; evil-collection-man.el --- Evil bindings for Man-mode -*- lexical-binding: t -*- + +;; Copyright (C) 2017 Pierre Neidhardt + +;; Author: Pierre Neidhardt +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, man, tools + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: +;; Evil bindings for `man'. + +;;; Code: +(require 'evil-collection) +(require 'man) + +(defconst evil-collection-man-maps '(Man-mode-map)) + +;;;###autoload +(defun evil-collection-man-setup () + "Set up `evil' bindings for `man'." + (evil-set-initial-state 'Man-mode 'normal) + (evil-collection-define-key 'normal 'Man-mode-map + ;; motion + (kbd "SPC") 'scroll-up-command + (kbd "S-SPC") 'scroll-down-command + (kbd "") 'forward-button + (kbd "") 'backward-button + + (kbd "]]") 'Man-next-manpage + (kbd "[[") 'Man-previous-manpage + (kbd "gj") 'Man-next-manpage + (kbd "gk") 'Man-previous-manpage + (kbd "C-j") 'Man-next-section + (kbd "C-k") 'Man-previous-section + + ;; goto + "gm" 'man + "gd" 'Man-goto-section ; TODO: "gd" does not match the rationale of "go to definition". Change? + "gR" 'Man-follow-manual-reference ; TODO: Make this match Info-follow-reference? + "gs" 'Man-goto-see-also-section + + ;; refresh + "gr" 'Man-update-manpage + + ;; quit + "q" 'quit-window + "ZQ" 'quit-window + "ZZ" 'quit-window)) + +(provide 'evil-collection-man) +;;; evil-collection-man.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/markdown-mode/README.org b/.config/emacs/lisp/evil-collection/modes/markdown-mode/README.org new file mode 100644 index 0000000..8c93de5 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/markdown-mode/README.org @@ -0,0 +1,14 @@ +* markdown-mode + + Basic evil bindings for [[https://github.com/jrblevin/markdown-mode][markdown-mode]]. Not intended to supersede + [[https://github.com/Somelauw/evil-markdown][evil-markdown]]. + +** Key bindings (normal state) + + | Command | Original | Evil | + |-------------------------------+-------------+-------------| + | =markdown-backward-paragraph= | =M-{= | ={= | + | =markdown-forward-paragraph= | =M-}= | =}= | + | =markdown-cycle= | =TAB= | =TAB= | + | =markdown-shifttab= | == | == | + | =markdown-do= | =C-c C-d= | =RET= | diff --git a/.config/emacs/lisp/evil-collection/modes/markdown-mode/evil-collection-markdown-mode.el b/.config/emacs/lisp/evil-collection/modes/markdown-mode/evil-collection-markdown-mode.el new file mode 100644 index 0000000..83f24a6 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/markdown-mode/evil-collection-markdown-mode.el @@ -0,0 +1,50 @@ +;;; evil-collection-markdown-mode.el --- Evil bindings for markdown-mode -*- lexical-binding: t -*- + +;; Copyright (C) 2021 Zhiwei Chen + +;; Author: Zhiwei Chen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; +;; Evil basic bindings for markdown-mode. It's NOT intended to supersede +;; `evil-markdown'. +;; + +;;; Code: +(require 'evil-collection) +(require 'markdown-mode nil t) + +(defconst evil-collection-markdown-mode-maps '(markdown-mode-map)) + +;;;###autoload +(defun evil-collection-markdown-mode-setup () + "Set up `evil' bindings for `markdown-mode'." + (evil-collection-define-key 'normal 'markdown-mode-map + "{" 'markdown-backward-paragraph + "}" 'markdown-forward-paragraph + [tab] 'markdown-cycle + [S-tab] 'markdown-shifttab + ;; `evil-markdown' doesn't bind but spacemacs does. + (kbd "RET") 'markdown-do)) + +(provide 'evil-collection-markdown-mode) +;;; evil-collection-markdown-mode.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/message/README.org b/.config/emacs/lisp/evil-collection/modes/message/README.org new file mode 100644 index 0000000..3ef74ce --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/message/README.org @@ -0,0 +1,18 @@ +* message + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/message/index.html][message-mode]], the Gnus / mail composition buffer. + + Initial state is insert. Normal-state =Z= bindings provide quick send / kill + without leaving the keyboard home row. + +** Key bindings + + | Command | Original | Evil | + |-------------------------+-----------+------| + | =message-send-and-exit= | =C-c C-c= | =ZZ= | + | =message-kill-buffer= | =C-c C-k= | =ZQ= | + | =message-dont-send= | =C-c C-d= | =ZD= | + | =mml-attach-file= | =C-c C-a= | =ZF= | + + All other =C-c= prefix bindings (goto-field, insert-signature, attach, etc.) + remain at their upstream keys. diff --git a/.config/emacs/lisp/evil-collection/modes/message/evil-collection-message.el b/.config/emacs/lisp/evil-collection/modes/message/evil-collection-message.el new file mode 100644 index 0000000..3adc543 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/message/evil-collection-message.el @@ -0,0 +1,46 @@ +;;; evil-collection-message.el --- Bindings for `message' -*- lexical-binding: t -*- + +;; Copyright (C) 2026 jessy836 + +;; Author: jessy836 +;; Maintainer: jessy836 +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, emacs, convenience, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for message. + +;;; Code: +(require 'evil-collection) +(require 'message nil t) + +(defvar message-mode-map) +(defconst evil-collection-message-maps '(message-mode-map)) + +;;;###autoload +(defun evil-collection-message-setup () + "Set up `evil' bindings for `message-mode'." + (evil-set-initial-state 'message-mode 'insert) + (evil-collection-define-key 'normal 'message-mode-map + "ZZ" 'message-send-and-exit + "ZQ" 'message-kill-buffer + "ZD" 'message-dont-send + "ZF" 'mml-attach-file)) + +(provide 'evil-collection-message) +;;; evil-collection-message.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/minesweeper/evil-collection-minesweeper.el b/.config/emacs/lisp/evil-collection/modes/minesweeper/evil-collection-minesweeper.el new file mode 100644 index 0000000..1792948 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/minesweeper/evil-collection-minesweeper.el @@ -0,0 +1,53 @@ +;;; evil-collection-minesweeper.el --- Bindings for `minesweeper' -*- lexical-binding: t -*- + +;; Copyright (C) 2025 StrawberryTea + +;; Author: StrawberryTea +;; Maintainer: StrawberryTea +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, games + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + + +;;; Commentary: +;; Bindings for `minesweeper'. + +;;; Code: + +(require 'evil-collection) +(require 'minesweeper nil t) + +(defconst evil-collection-minesweeper-maps '(minesweeper-mode-map)) + +;;;###autoload +(defun evil-collection-minesweeper-setup () + "Set up `evil' bindings for `minesweeper'." + (evil-set-initial-state 'minesweeper-mode 'normal) + (evil-collection-define-key 'normal 'minesweeper-mode-map + "RET" 'minesweeper-choose + "m" 'minesweeper-toggle-mark + "c" 'minesweeper-choose-around + "s" 'minesweeper-toggle-show-neighbors + "j" 'minesweeper-next-line + "h" 'minesweeper-backward-char + "l" 'minesweeper-forward-char + "$" 'minesweeper-move-end-of-field + "e" 'minesweeper-move-end-of-field)) + +(provide 'evil-collection-minesweeper) + +;;; evil-collection-minesweeper.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/minibuffer/README.org b/.config/emacs/lisp/evil-collection/modes/minibuffer/README.org new file mode 100644 index 0000000..30121f6 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/minibuffer/README.org @@ -0,0 +1,47 @@ +* minibuffer + + Evil bindings for the minibuffer and =evil-ex= prompt. + + The minibuffer has no major mode, so the package hooks =minibuffer-setup-hook= + to enter insert state on open. + +** Affected keymaps + + - =minibuffer-local-map= + - =minibuffer-local-ns-map= + - =minibuffer-local-completion-map= + - =minibuffer-local-must-match-map= + - =minibuffer-local-isearch-map= + - =evil-ex-search-keymap= + - =evil-ex-completion-map= + +** Key bindings + + Normal-state bindings added to every map above. + + | Command | Key | + |----------------------------------------+------------| + | =evil-collection-change-in-minibuffer= | =c= | + | =abort-recursive-edit= | == | + | =exit-minibuffer= | =RET= | + + Extra bindings on =evil-ex-completion-map= for history navigation: + + | Command | State | Key | + |-------------------------------------+--------+------------| + | =previous-complete-history-element= | insert | =C-p= | + | =next-complete-history-element= | insert | =C-n= | + | =previous-history-element= | normal | =C-p= | + | =next-history-element= | normal | =C-n= | + | =abort-recursive-edit= | normal | == | + +** New commands + + | Command | Key | | + |----------------------------------------+-----+--------------------------------------------------------------------------------------| + | =evil-collection-change-in-minibuffer= | =c= | =evil-change= variant that avoids inserting a stray newline when the buffer had none | + +** Notes + + - =evil-echo-state= is locally disabled so the minibuffer prompt is not + overwritten by the state indicator. diff --git a/.config/emacs/lisp/evil-collection/modes/minibuffer/evil-collection-minibuffer.el b/.config/emacs/lisp/evil-collection/modes/minibuffer/evil-collection-minibuffer.el new file mode 100644 index 0000000..ed81b9c --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/minibuffer/evil-collection-minibuffer.el @@ -0,0 +1,85 @@ +;;; evil-collection-minibuffer.el --- Evil bindings for the minibuffer -*- lexical-binding: t -*- + +;; Copyright (C) 2017 Pierre Neidhardt + +;; Author: Pierre Neidhardt +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, minibuffer, tools + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: +;; Evil bindings for the minibuffer. + +;;; Code: +(require 'evil-collection) + +(defconst evil-collection-minibuffer-maps '(minibuffer-local-map + minibuffer-local-ns-map + minibuffer-local-completion-map + minibuffer-local-must-match-map + minibuffer-local-isearch-map + evil-ex-search-keymap + evil-ex-completion-map)) + +(defun evil-collection-minibuffer-insert () + "Switch to insert state. + +This function is meant to be hooked in the minibuffer: + + (add-hook \='minibuffer-setup-hook \='evil-collection-minibuffer-insert) + +`evil-set-initial-state' can not be used for the minibuffer since +it does not have a mode." + (set (make-local-variable 'evil-echo-state) nil) + ;; (evil-set-initial-state 'mode 'insert) is the evil-proper + ;; way to do this, but the minibuffer doesn't have a mode. + ;; The alternative is to create a minibuffer mode (here), but + ;; then it may conflict with other packages' if they do the same. + (evil-insert 1)) + +(evil-define-operator evil-collection-change-in-minibuffer + (beg end type register yank-handler delete-func) + "A version of `evil-change' that won't insert a new line on buffers without one." + (interactive "") + ;; If there was no new line before the change, there should be none after. + ;; Delete any new line that might have been inserted and ignore an error if + ;; one wasn't. + (let ((new-inserted (and (eq type 'line) (/= ?\n (char-before end))))) + (evil-change beg end type register yank-handler delete-func) + (when new-inserted (ignore-errors (delete-char 1))))) + +;;;###autoload +(defun evil-collection-minibuffer-setup () + "Initialize minibuffer for `evil'." + ;; https://www.gnu.org/software/emacs/manual/html_node/elisp/Text-from-Minibuffer.html + (dolist (map evil-collection-minibuffer-maps) + (evil-collection-define-key 'normal map "c" 'evil-collection-change-in-minibuffer) + (evil-collection-define-key 'normal map (kbd "") 'abort-recursive-edit) + (evil-collection-define-key 'normal map (kbd "RET") 'exit-minibuffer)) + + (add-hook 'minibuffer-setup-hook 'evil-collection-minibuffer-insert) + ;; Because of the above minibuffer-setup-hook, some evil-ex bindings need be reset. + (evil-collection-define-key 'normal 'evil-ex-completion-map (kbd "") 'abort-recursive-edit) + (evil-collection-define-key 'insert 'evil-ex-completion-map (kbd "C-p") 'previous-complete-history-element) + (evil-collection-define-key 'insert 'evil-ex-completion-map (kbd "C-n") 'next-complete-history-element) + (evil-collection-define-key 'normal 'evil-ex-completion-map (kbd "C-p") 'previous-history-element) + (evil-collection-define-key 'normal 'evil-ex-completion-map (kbd "C-n") 'next-history-element)) + +(provide 'evil-collection-minibuffer) +;;; evil-collection-minibuffer.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/monky/evil-collection-monky.el b/.config/emacs/lisp/evil-collection/modes/monky/evil-collection-monky.el new file mode 100644 index 0000000..5c87d7a --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/monky/evil-collection-monky.el @@ -0,0 +1,129 @@ +;;; evil-collection-monky.el --- Bindings for `monky' -*- lexical-binding: t -*- + +;; Copyright (C) 2019 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: emacs, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for `monky'. + +;;; Code: +(require 'evil-collection) +(require 'monky nil t) + +(defconst evil-collection-monky-maps '(monky-mode-map + monky-status-mode-map + monky-log-mode-map + monky-blame-mode-map + monky-branches-mode-map + monky-commit-mode-map + monky-queue-mode-map + monky-log-edit-mode-map)) + +;;;###autoload +(defun evil-collection-monky-setup () + "Set up `evil' bindings for `monky'." + (evil-set-initial-state 'monky-mode 'normal) + (add-hook 'monky-mode-hook 'evil-normalize-keymaps) + (add-hook 'monky-status-mode-hook 'evil-normalize-keymaps) + + (evil-collection-define-key 'normal 'monky-mode-map + "]]" 'monky-goto-next-section + "gj" 'monky-goto-next-section + (kbd "C-j") 'monky-goto-next-section + "[[" 'monky-goto-previous-section + "gk" 'monky-goto-previous-section + (kbd "C-k") 'monky-goto-previous-section + (kbd "RET") 'monky-visit-item + (kbd "TAB") 'monky-toggle-section + (kbd "SPC") 'monky-show-item-or-scroll-up + (kbd "DEL") 'monky-show-item-or-scroll-down + "gr" 'monky-refresh + "`" 'monky-display-process + "!" 'monky-hg-command + "Ll" 'monky-log-current-branch + "La" 'monky-log-all + "LL" 'monky-log-all + "Lr" 'monky-log-revset + "b" 'monky-branches + "Q" 'monky-queue + "q" 'monky-quit-window) + + (evil-collection-define-key 'normal 'monky-status-mode-map + "s" 'monky-stage-item + "S" 'monky-stage-all + "u" 'monky-unstage-item + "U" 'monky-unstage-all + "a" 'monky-commit-amend + "c" 'monky-log-edit + "e" 'monky-ediff-item + "Y" 'monky-bookmark-create + "C" 'monky-checkout + "M" 'monky-merge + "B" 'monky-backout + "P" 'monky-push + "F" 'monky-pull + "x" 'monky-discard-item + "m" 'monky-resolve-item + "K" 'monky-unresolve-item ;; Not the best... + "o" 'monky-reset-tip + "A" 'monky-addremove-all + "R" 'monky-rollback) + + (evil-collection-define-key 'normal 'monky-log-mode-map + "+" 'monky-log-show-more-entries + "b" 'monky-checkout-item ;; Like `magit-branch'. + "m" 'monky-merge-item ;; Like `magit-merge'. + "B" 'monky-backout-item + "i" 'monky-qimport-item) + + (evil-collection-define-key 'normal 'monky-branches-mode-map + "b" 'monky-checkout-item ;; Like `magit-branch'. + "m" 'monky-merge-item ;; Like `magit-merge'. + ) + + ;; FIXME: Haven't used this mode yet so not sure if these are appropriate... + (evil-collection-define-key 'normal 'monky-queue-mode-map + "u" 'monky-qpop-item + "U" 'monky-qpop-all + "s" 'monky-qpush-item + "S" 'monky-qpush-all + "r" 'monky-qrefresh + "R" 'monky-qrename-item + "k" 'monky-qremove-item + "N" 'monky-qnew + "f" 'monky-qfinish-item + "F" 'monky-qfinish-applied + "d" 'monky-qfold-item + "G" 'monky-qguard-item + "o" 'monky-qreorder + "A" 'monky-addremove-all) + + (evil-collection-define-key 'normal 'monky-log-edit-mode-map + (kbd "C-c C-c") 'monky-log-edit-commit + [remap evil-save-and-close] 'monky-log-edit-commit + [remap evil-save-modified-and-close] 'monky-log-edit-commit + (kbd "C-c C-k") 'monky-log-edit-cancel-log-message + [remap evil-quit] 'monky-log-edit-cancel-log-message)) + +(provide 'evil-collection-monky) +;;; evil-collection-monky.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/mpc/README.org b/.config/emacs/lisp/evil-collection/modes/mpc/README.org new file mode 100644 index 0000000..8416a2a --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/mpc/README.org @@ -0,0 +1,44 @@ +* mpc + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Music.html][mpc-mode]], the Emacs front-end to the Music Player Daemon. + +** Key bindings + + Bindings applied to =mpc-mode-map=. + + | Command | Original | Evil | + |---------------------------------+----------+--------------| + | =evil-collection-mpc-move-down= | n/a | =C-j= | + | =evil-collection-mpc-move-up= | n/a | =C-k= | + | =mpc-toggle-play= | =s= | =t= | + | =mpc-stop= | n/a | =T= | + | =mpc-toggle-repeat= | n/a | =r= | + | =mpc-toggle-shuffle= | n/a | =s= | + | =mpc-toggle-consume= | n/a | =c= | + | =mpc-playlist= | n/a | =gp= | + | =mpc-playlist-add= | n/a | =a= | + | =mpc-next= | =>= | =J= | + | =mpc-prev= | =<= | =K= | + | =mpc-play-at-point= | n/a | =x= | + | =mpc-play= | n/a | =X= | + | =mpc-select= | =RET= | =RET= | + | =mpc-select-toggle= | =S-RET= | =S-= | + | =mpc-select-extend= | n/a | =C-= | + | =mpc-goto-playing-song= | =o= | =go= | + | =mpc-describe-song= | n/a | =gd= | + | =mpc-pause= | =p= | =p= | + | =mpc-resume= | n/a | =P= | + | =mpc-seek-current= | =g= | =gs= | + | =mpc-tagbrowser= | n/a | =gb= | + | =mpc-songs-search= | n/a | =g/= | + | =mpc-songs-kill-search= | n/a | =g_= | + | =mpc-update= | n/a | =gR= | + | =mpc-playlist-delete= | n/a | =D= | + | =mpc-quit= | =q= | =q= | + +** New commands + + | Command | Key | | + |---------------------------------+-------+----------------------------------------| + | =evil-collection-mpc-move-down= | =C-j= | move cursor down and call =mpc-select= | + | =evil-collection-mpc-move-up= | =C-k= | move cursor up and call =mpc-select= | diff --git a/.config/emacs/lisp/evil-collection/modes/mpc/evil-collection-mpc.el b/.config/emacs/lisp/evil-collection/modes/mpc/evil-collection-mpc.el new file mode 100644 index 0000000..94f3a9b --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/mpc/evil-collection-mpc.el @@ -0,0 +1,80 @@ +;;; evil-collection-mpc.el --- Bindings for `mpc-mode' -*- lexical-binding: t -*- +;; Copyright (C) 2021, 2022 pspiagicw + +;; Author: pspiagicw +;; Maintainer: pspiagicw +;; pspiagicw +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, mpc, processes , mpd + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for `mpc-mode'. + +;;; Code: +(require 'mpc) +(require 'evil-collection) + +(defconst evil-collection-mpc-mode-maps '(mpc-mode-map)) + +(defun evil-collection-mpc-move-down () + "Move the cursor down along with selecting the element." + (interactive) + (evil-next-visual-line) + (mpc-select)) + +(defun evil-collection-mpc-move-up () + "Move the cursor up along with selecting the element." + (interactive) + (evil-previous-visual-line) + (mpc-select)) + +;;;###autoload +(defun evil-collection-mpc-setup () + "Setup up `evil' bindings for `mpc-mode'." + (evil-collection-define-key 'normal 'mpc-mode-map + (kbd "C-j") 'evil-collection-mpc-move-down + (kbd "C-k") 'evil-collection-mpc-move-up + "t" 'mpc-toggle-play + "T" 'mpc-stop + "r" 'mpc-toggle-repeat + "s" 'mpc-toggle-shuffle + "c" 'mpc-toggle-consume + "gp" 'mpc-playlist + "a" 'mpc-playlist-add + "J" 'mpc-next + "K" 'mpc-prev + "x" 'mpc-play-at-point + "X" 'mpc-play + (kbd "RET") 'mpc-select + (kbd "S-") 'mpc-select-toggle + (kbd "C-") 'mpc-select-extend + "go" 'mpc-goto-playing-song + "gd" 'mpc-describe-song + "p" 'mpc-pause + "P" 'mpc-resume + "gs" 'mpc-seek-current + "gb" 'mpc-tagbrowser + "g/" 'mpc-songs-search + "g_" 'mpc-songs-kill-search + "gd" 'mpc-songs-jump-to + "gR" 'mpc-update + "D" 'mpc-playlist-delete + "q" 'mpc-quit)) + +(provide 'evil-collection-mpc) +;;; evil-collection-mpc.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/mpdel/evil-collection-mpdel.el b/.config/emacs/lisp/evil-collection/modes/mpdel/evil-collection-mpdel.el new file mode 100644 index 0000000..d842899 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/mpdel/evil-collection-mpdel.el @@ -0,0 +1,96 @@ +;;; evil-collection-mpdel.el --- Evil bindings for mpdel -*- lexical-binding: t -*- + +;; Copyright (C) 2021 Ruoyu Feng + +;; Author: Ruoyu Feng +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.4 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, tools, mpd + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: +;; Evil bindings for mpdel. + +;;; Code: + +(require 'mpdel nil t) +(require 'evil-collection) + +(defvar mpdel-core-map) + +(defconst evil-collection-mpdel-maps '(mpdel-core-map)) + +(defconst evil-collection-mpdel-modes '(mpdel-browser-mode mpdel-playlist-mode + mpdel-song-mode mpdel-browser-mode + mpdel-playlist-current-playlist-mode + mpdel-playlist-stored-playlist-mode)) + +;;;###autoload +(defun evil-collection-mpdel-setup () + "Set up `evil' bindings for `mpdel'." + + (evil-collection-set-readonly-bindings 'mpdel-core-map) + (dolist (mode evil-collection-mpdel-modes) + (evil-set-initial-state mode 'normal)) + (evil-collection-define-key 'normal 'mpdel-core-map + "p" 'libmpdel-playback-play-pause + "{" 'libmpdel-playback-previous + "}" 'libmpdel-playback-next + "a" 'mpdel-core-add-to-current-playlist + "A" 'mpdel-core-add-to-stored-playlist + "r" 'mpdel-core-replace-current-playlist + "R" 'mpdel-core-replace-stored-playlist + "i" 'mpdel-core-insert-current-playlist + "gD" 'mpdel-core-dired + "gA" 'mpdel-core-open-artists + "gL" 'mpdel-core-open-stored-playlists + "ss" 'mpdel-core-search-by-title + "sl" 'mpdel-core-search-by-album + "sr" 'mpdel-core-search-by-artist + "gp" 'navigel-open-parent + "j" 'evil-next-line + "k" 'evil-previous-line + "+" 'mpdel-core-volume-increase + "-" 'mpdel-core-volume-decrease + "C" 'libmpdel-connect-profile + + "gb" 'mpdel-browser-open + + "go" 'mpdel-song-open + "gr" 'mpdel-song-refresh + "I" 'mpdel-song-play + "q" 'mpdel-song-quit-window + + ">s" 'mpdel-song-small-increment + ">n" 'mpdel-song-normal-increment + ">l" 'mpdel-song-large-increment + " +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "29.1")) +;; Keywords: evil, tools, mpd + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: +;; Evil bindings for mpdired. + +;;; Code: + +(require 'mpdired nil t) +(require 'evil-collection) + +(defvar mpdired-core-map) + +(defconst evil-collection-mpdired-maps '(mpdired-mode-map)) + +(defconst evil-collection-mpdired-modes '(mpdired-mode-map)) + +;;;###autoload +(defun evil-collection-mpdired-setup () + "Set up `evil' bindings for `mpdired'." + + (evil-collection-set-readonly-bindings 'mpdired-mode-map) + (dolist (mode evil-collection-mpdired-modes) + (evil-set-initial-state mode 'normal)) + + (evil-collection-define-key 'normal 'mpdired-mode-map + "j" 'mpdired-next-line + "k" 'mpdired-previous-line + (kbd "RET") 'mpdired-enter + "^" 'mpdired-goto-parent + "." 'mpdired-goto-current-song + "o" 'mpdired-toggle-view + "gr" 'mpdired-update + "gR" 'mpdired-db-update + "J" 'mpdired-next-internal + "K" 'mpdired-previous-internal + "a" 'mpdired-add + "d" 'mpdired-flag-at-point + "x" 'mpdired-execute + "D" 'mpdired-delete + "p" 'mpdired-pause-internal + (kbd "SPC") 'mpdired-pause-internal + "gv" 'mpdired-set-volume-internal + "ss" 'mpdired-stop + "sR" 'mpdired-toggle-repeat + "sr" 'mpdired-toggle-random + "sS" 'mpdired-toggle-single + "sc" 'mpdired-toggle-consume + "gc" 'mpdired-playlist-create + "ga" 'mpdired-playlist-append + "m" 'mpdired-mark-at-point + "M" 'mpdired-change-marks + "u" 'mpdired-unmark-at-point + "U" 'mpdired-unmark-all-marks + "t" 'mpdired-toggle-marks + "T" 'mpdired-previous-unmark + "%d" 'mpdired-flag-files-regexp + "%m" 'mpdired-mark-files-regexp + "%i" 'mpdired-put-order-at-point + "%r" 'mpdired-reset-order-index)) + +(provide 'evil-collection-mpdired) +;;; evil-collection-mpdired.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/mu4e-conversation/evil-collection-mu4e-conversation.el b/.config/emacs/lisp/evil-collection/modes/mu4e-conversation/evil-collection-mu4e-conversation.el new file mode 100644 index 0000000..8d72bc1 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/mu4e-conversation/evil-collection-mu4e-conversation.el @@ -0,0 +1,75 @@ +;;; evil-collection-mu4e-conversation.el --- Evil bindings for mu4e-conversation -*- lexical-binding: t -*- + +;; Copyright (C) 2018 Pierre Neidhardt + +;; Author: Pierre Neidhardt +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "24.4") (evil "1.2.10")) +;; Keywords: evil, mu4e, tools + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: +;; Evil bindings for mu4e-conversation. + +;;; Code: + +(require 'evil-collection) +(require 'mu4e-conversation nil t) + +(defconst evil-collection-mu4e-conversation-maps '(mu4e-conversation-map + mu4e-conversation-thread-map)) + +(defvar evil-collection-mu4e-conversation--local-map-p nil + "Non-nil if last position was on a local-map property.") + +(defun evil-collection-mu4e-conversation--switch () + "Re-compute the bindings if point has moved between the thread + area and the composition area." + (let ((local-map-here (get-text-property (point) 'local-map))) + (when (or (and evil-collection-mu4e-conversation--local-map-p + (not local-map-here)) + (and (not evil-collection-mu4e-conversation--local-map-p) + local-map-here)) + (evil-normalize-keymaps)) + (setq evil-collection-mu4e-conversation--local-map-p local-map-here))) + +(defun evil-collection-mu4e-conversation--update-local-map () + (setq evil-collection-mu4e-conversation--local-map-p (get-text-property (point) 'local-map)) + (evil-normalize-keymaps) + (add-hook 'post-command-hook 'evil-collection-mu4e-conversation--switch nil t)) + +;;;###autoload +(defun evil-collection-mu4e-conversation-setup () + "Set up `evil' bindings for `mu4e-conversation'." + ;; Evil does not update its current keymap state when it the point hits a + ;; local-map property is used. See + ;; https://github.com/emacs-evil/evil/issues/301. Thus we force the update + ;; with a technique similar to what `org~mu4e-mime-switch-headers-or-body' + ;; does. + (add-hook 'mu4e-conversation-hook 'evil-collection-mu4e-conversation--update-local-map) + (evil-collection-define-key 'normal 'mu4e-conversation-map + " " 'evil-scroll-page-down + (kbd "S-SPC") 'evil-scroll-page-up + "[[" 'mu4e-conversation-previous-message + "]]" 'mu4e-conversation-next-message + "zv" 'mu4e-conversation-toggle-view + "za" 'mu4e-conversation-toggle-hide-cited + "q" 'mu4e-conversation-quit)) + +(provide 'evil-collection-mu4e-conversation) +;;; evil-collection-mu4e-conversation.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/mu4e/evil-collection-mu4e-1.8.el b/.config/emacs/lisp/evil-collection/modes/mu4e/evil-collection-mu4e-1.8.el new file mode 100644 index 0000000..eab3a63 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/mu4e/evil-collection-mu4e-1.8.el @@ -0,0 +1,435 @@ +;;; evil-collection-mu4e.el --- Evil bindings for mu4e -*- lexical-binding: t -*- + +;; Copyright (C) 2015-2018 Joris Engbers +;; Copyright (C) 2018 Pierre Neidhardt + +;; Author: Joris Engbers +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.9 +;; Package-Requires: ((emacs "24.4") (evil "1.2.10")) +;; Keywords: evil, mu4e, tools + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: +;; Evil keybindings for mu4e that make sense for Evil users. The following +;; keybindings are defined: +;; +;; General commands: +;; | Commmand | evil-mu4e | Alternative | +;; |--------------------------+-----------+-------------| +;; | Jump to maildir | J | | +;; | Update | u | | +;; | Compose message | cc | C | +;; | Kill update mail process | x | | + +;; Commands for header-mode and view-mode: +;; | Command | evil-mu4e | Alternative | +;; |---------------------------------+-----------+-------------| +;; | Next message | C-j | | +;; | Previous message | C-k | | +;; | Mark the current thread as read | T | | +;; | Compose message | cc | C | +;; | Compose edit** | ce | E | +;; | Compose forward** | cf | F | +;; | Compose reply | cr | R | +;; | Change sorting*** | o | O | +;; | Rerun search | gr | | +;; | Toggle include related | zr | | +;; | Toggle threading | zt | | +;; | Toggle hide cited | za | | +;; | Skip duplicates | zd | | +;; | Show log | gl | | +;; | Select other view | gv | | +;; | Save attachement(s) | p | | +;; | Save url | yu | | +;; | Go to url | gx | | +;; | Fetch url | gX | | +;; +;; - * denotes only in header-mode +;; - ** denotes Alternative only in header-mode +;; - *** denotes Alternative only in view-mode +;; +;;; Code: + +(require 'evil-collection) +(require 'mu4e nil t) + +(declare-function mu4e--main-action-str "mu4e-main") +(declare-function mu4e--main-view-queue "mu4e-main") +(declare-function mu4e--longest-of-maildirs-and-bookmarks "mu4e-main") +(declare-function mu4e--longest-of-maildirs-and-bookmarks "mu4e-main") +(declare-function mu4e--maildirs-with-query "mu4e-folders") +(defvar mu4e--server-props) +(defvar mu4e-main-hide-fully-read) + +(defun evil-collection-mu4e--main-action-str (&rest args) + "Wrapper for `mu4e--main-action-str' to maintain compatibility +with older release versions of `mu4e.'" + (apply (if (fboundp 'mu4e~main-action-str) + #'mu4e~main-action-str + #'mu4e--main-action-str) + args)) + +(defun evil-collection-mu4e--main-view-queue (&rest args) + "Wrapper for `mu4e--main-view-queue' to maintain compatibility +with older release versions of `mu4e.'" + (apply (if (fboundp 'mu4e~main-view-queue) + #'mu4e~main-view-queue + #'mu4e--main-view-queue) + args)) + +(defvar smtpmail-send-queued-mail) +(defvar smtpmail-queue-dir) + +(defconst evil-collection-mu4e-maps '(mu4e-main-mode-map + mu4e-headers-mode-map + mu4e-view-mode-map + mu4e-compose-mode-map)) + + + +(defun evil-collection-mu4e-set-state () + "Set the appropriate initial state of all mu4e modes." + (dolist (mode '(mu4e-main-mode + mu4e-headers-mode + mu4e-view-mode + mu4e-org-mode)) + (evil-set-initial-state mode 'normal)) + (evil-set-initial-state 'mu4e-compose-mode 'insert)) + +;; When using org-mu4e, the above leads to an annoying behaviour, because +;; switching from message body to header activates mu4e-compose-mode, thus +;; putting the user into insert-state. The below code, together with the hooks +;; set in evil-collection-mu4e-setup fixes this issue. +(defun evil-collection-mu4e-org-set-header-to-normal-mode () + (evil-set-initial-state 'mu4e-compose-mode 'normal)) + +(defun evil-collection-mu4e-org-set-header-to-insert-mode () + (evil-set-initial-state 'mu4e-compose-mode 'insert)) + + +;;; Define bindings + +;; TODO: Inhibit insert-state functions as per Evil Collection. +(defvar evil-collection-mu4e-mode-normal-map-bindings + `((mu4e-main-mode-map + "J" mu4e~headers-jump-to-maildir + "j" next-line + "k" previous-line + "u" mu4e-update-mail-and-index + "gr" revert-buffer + "b" mu4e-search-bookmark + "B" mu4e-search-bookmark-edit + "N" mu4e-news + ";" mu4e-context-switch + "H" mu4e-display-manual + "C" mu4e-compose-new + "cc" mu4e-compose-new + "x" mu4e-kill-update-mail + "A" mu4e-about + "f" smtpmail-send-queued-mail + "m" mu4e--main-toggle-mail-sending-mode + "s" mu4e-search + "q" mu4e-quit) + + (mu4e-headers-mode-map + "q" mu4e~headers-quit-buffer + "J" mu4e~headers-jump-to-maildir + "C" mu4e-compose-new + "E" mu4e-compose-edit + "F" mu4e-compose-forward + "R" mu4e-compose-reply + "cc" mu4e-compose-new + "ce" mu4e-compose-edit + "cf" mu4e-compose-forward + "cr" mu4e-compose-reply + "o" mu4e-headers-change-sorting + "j" mu4e-headers-next + "k" mu4e-headers-prev + "gr" mu4e-search-rerun + "b" mu4e-search-bookmark + "B" mu4e-search-bookmark-edit + ";" mu4e-context-switch + ,(kbd "RET") mu4e-headers-view-message + "/" mu4e-search-narrow + "s" mu4e-search + "S" mu4e-search-edit + "x" mu4e-mark-execute-all + "a" mu4e-headers-action + "*" mu4e-headers-mark-for-something ; TODO: Don't override evil-seach-word-forward? + "&" mu4e-headers-mark-custom + "A" mu4e-headers-mark-for-action + "m" mu4e-headers-mark-for-move + "r" mu4e-headers-mark-for-refile + "D" mu4e-headers-mark-for-delete + "d" mu4e-headers-mark-for-trash + "=" mu4e-headers-mark-for-untrash + "u" mu4e-headers-mark-for-unmark + "U" mu4e-mark-unmark-all + "?" mu4e-headers-mark-for-unread + "!" mu4e-headers-mark-for-read + "%" mu4e-headers-mark-pattern + "+" mu4e-headers-mark-for-flag + "-" mu4e-headers-mark-for-unflag + "[[" mu4e-headers-prev-unread + "]]" mu4e-headers-next-unread + "gk" mu4e-headers-prev-unread + "gj" mu4e-headers-next-unread + "\C-j" mu4e-headers-next + "\C-k" mu4e-headers-prev + "zr" mu4e-headers-toggle-include-related + "zt" mu4e-headers-toggle-threading + "zd" mu4e-headers-toggle-skip-duplicates + "gl" mu4e-show-log + "gv" mu4e-select-other-view + "T" (lambda () + (interactive) + (mu4e-headers-mark-thread nil '(read)))) + + (mu4e-compose-mode-map + "gg" mu4e-compose-goto-top + "G" mu4e-compose-goto-bottom + "ZD" message-dont-send + "ZF" mml-attach-file + "ZQ" mu4e-message-kill-buffer + "ZZ" message-send-and-exit) + + (mu4e-view-mode-map + " " mu4e-view-scroll-up-or-next + [tab] shr-next-link + [backtab] shr-previous-link + "q" mu4e~view-quit-buffer + "gx" mu4e-view-go-to-url + "gX" mu4e-view-fetch-url + "C" mu4e-compose-new + "H" mu4e-view-toggle-html + ;; "E" mu4e-compose-edit + ;; "F" mu4e-compose-forward + "R" mu4e-compose-reply + "cc" mu4e-compose-new + "ce" mu4e-compose-edit + "cf" mu4e-compose-forward + "cr" mu4e-compose-reply + "p" mu4e-view-save-attachments + "O" mu4e-headers-change-sorting + "A" mu4e-view-mime-part-action ; Since 1.6, uses gnus view by default + "a" mu4e-view-action + "J" mu4e~headers-jump-to-maildir + "[[" mu4e-view-headers-prev-unread + "]]" mu4e-view-headers-next-unread + "gk" mu4e-view-headers-prev-unread + "gj" mu4e-view-headers-next-unread + "\C-j" mu4e-view-headers-next + "\C-k" mu4e-view-headers-prev + "x" mu4e-view-marked-execute + "&" mu4e-view-mark-custom + "*" mu4e-view-mark-for-something ; TODO: Don't override "*". + "m" mu4e-view-mark-for-move + "r" mu4e-view-mark-for-refile + "D" mu4e-view-mark-for-delete + "d" mu4e-view-mark-for-trash + "=" mu4e-view-mark-for-untrash + "u" mu4e-view-unmark + "U" mu4e-view-unmark-all + "?" mu4e-view-mark-for-unread + "!" mu4e-view-mark-for-read + "%" mu4e-view-mark-pattern + "+" mu4e-view-mark-for-flag + "-" mu4e-view-mark-for-unflag + "zr" mu4e-headers-toggle-include-related + "zt" mu4e-headers-toggle-threading + "za" mu4e-view-toggle-hide-cited + "gl" mu4e-show-log + "s" mu4e-view-search-edit + "|" mu4e-view-pipe + "." mu4e-view-raw-message + ,(kbd "C--") mu4e-headers-split-view-shrink + ,(kbd "C-+") mu4e-headers-split-view-grow + "T" (lambda () + (interactive) + (mu4e-headers-mark-thread nil '(read))) + ,@(when evil-want-C-u-scroll + '("\C-u" evil-scroll-up)))) + "All evil-mu4e bindings for evil normal mode.") + + (defvar evil-collection-mu4e-mode-visual-map-bindings + `((mu4e-headers-mode-map + "*" mu4e-headers-mark-for-something + "A" mu4e-headers-mark-for-action + "m" mu4e-headers-mark-for-move + "r" mu4e-headers-mark-for-refile + "D" mu4e-headers-mark-for-delete + "d" mu4e-headers-mark-for-trash + "=" mu4e-headers-mark-for-untrash + "u" mu4e-headers-mark-for-unmark + "?" mu4e-headers-mark-for-unread + "!" mu4e-headers-mark-for-read + "+" mu4e-headers-mark-for-flag + "-" mu4e-headers-mark-for-unflag) + + (mu4e-compose-mode-map + "gg" mu4e-compose-goto-top + "G" mu4e-compose-goto-bottom)) + "All evil-mu4e bindings for evil visual mode.") + +(defun evil-collection-mu4e-set-bindings () + "Set the bindings." + ;; WARNING: With lexical binding, lambdas from `mapc' and `dolist' become + ;; closures in which we must use `evil-define-key*' instead of + ;; `evil-define-key'. + (dolist (binding evil-collection-mu4e-mode-normal-map-bindings) + (apply #'evil-collection-define-key 'normal binding)) + (dolist (binding evil-collection-mu4e-mode-visual-map-bindings) + (apply #'evil-collection-define-key 'visual binding)) + (evil-set-command-property 'mu4e-compose-goto-bottom :keep-visual t) + (evil-set-command-property 'mu4e-compose-goto-top :keep-visual t) + + ;; yu + (evil-collection-define-operator-key 'yank 'mu4e-view-mode-map + "u" 'mu4e-view-save-url)) + + +;;; Update mu4e-main-view +;;; To avoid confusion the main-view is updated to show the keys that are in use +;;; for evil-mu4e. + +(defvar evil-collection-mu4e-begin-region-basic "\n Basics" + "The place where to start overriding Basic section.") + +(defvar evil-collection-mu4e-end-region-basic "a new message\n" + "The place where to end overriding Basic section.") + +(defvar evil-collection-mu4e-new-region-basic + (concat (evil-collection-mu4e--main-action-str "\t* [J]ump to some maildir\n" 'mu4e-jump-to-maildir) + (evil-collection-mu4e--main-action-str "\t* enter a [s]earch query\n" 'mu4e-search) + (evil-collection-mu4e--main-action-str "\t* [C]ompose a new message\n" 'mu4e-compose-new)) + "Define the evil-mu4e Basic region.") + +(defvar evil-collection-mu4e-begin-region-misc "\n Misc" + "The place where to start overriding Misc section.") + +(defvar evil-collection-mu4e-end-region-misc "q]uit" + "The place where to end overriding Misc section.") + +(defun evil-collection-mu4e-new-region-misc () + "Define the evil-mu4e Misc region." + (concat + (evil-collection-mu4e--main-action-str "\t* [;]Switch focus\n" 'mu4e-context-switch) + (evil-collection-mu4e--main-action-str "\t* [u]pdate email & database\n" + 'mu4e-update-mail-and-index) + + ;; show the queue functions if `smtpmail-queue-dir' is defined + (if (file-directory-p smtpmail-queue-dir) + (evil-collection-mu4e--main-view-queue) + "") + "\n" + + (evil-collection-mu4e--main-action-str "\t* [N]ews\n" 'mu4e-news) + (evil-collection-mu4e--main-action-str "\t* [A]bout mu4e\n" 'mu4e-about) + (evil-collection-mu4e--main-action-str "\t* [H]elp\n" 'mu4e-display-manual) + (evil-collection-mu4e--main-action-str "\t* [q]uit\n" 'mu4e-quit))) + +(defvar evil-collection-mu4e-begin-region-maildir "\n Maildirs" + "The place where to end overriding Maildirs section.") + +(defvar evil-collection-mu4e-end-region-maildir "\n\n Misc" + "The place where to end overriding Maildirs section.") + +(defun evil-collection-mu4e-new-region-maildir () + "Define the evil-mu4e Maildirs region." + (concat + ;; minorly edited version of mu4e--main-bookmarks mu4e-main.el + (cl-loop with mds = (mu4e--maildirs-with-query) + with longest = (mu4e--longest-of-maildirs-and-bookmarks) + with queries = (plist-get mu4e--server-props :queries) + for m in mds + for key = (string (plist-get m :key)) + for name = (plist-get m :name) + for query = (plist-get m :query) + for qcounts = (and (stringp query) + (cl-loop for q in queries + when (string= + (decode-coding-string + (plist-get q :query) + 'utf-8 t) + query) + collect q)) + for unread = (and qcounts (plist-get (car qcounts) :unread)) + when (not (plist-get m :hide)) + when (not (and mu4e-main-hide-fully-read (eq unread 0))) + concat (concat + ;; menu entry + (evil-collection-mu4e--main-action-str + (concat "\t* [J" key "] " name) + (concat "J" key)) + ;; append all/unread numbers, if available. + (if qcounts + (let ((unread (plist-get (car qcounts) :unread)) + (count (plist-get (car qcounts) :count))) + (format + "%s (%s/%s)" + (make-string (- longest (string-width name)) ? ) + (propertize (number-to-string unread) + 'face 'mu4e-header-key-face) + count)) + "") + "\n")) +(propertize "\n Misc" 'face 'mu4e-title-face))) + +(defun evil-collection-mu4e-replace-region (new-region start end) + "Replace region between START and END with NEW-REGION. +START end END end are regular expressions." + ;; move to start of region + (goto-char (point-min)) + (re-search-forward start) + + ;; insert new headings + (insert "\n\n") + (insert new-region) + ;; Delete text until end of region. + (let ((start-point (point)) + (end-point (re-search-forward end))) + (delete-region start-point end-point))) + +(defun evil-collection-mu4e-update-main-view () + "Update `Basic', `Maildir', and `Misc' regions to reflect the new keybindings." + (evil-collection-mu4e-replace-region evil-collection-mu4e-new-region-basic + evil-collection-mu4e-begin-region-basic + evil-collection-mu4e-end-region-basic) + (evil-collection-mu4e-replace-region (evil-collection-mu4e-new-region-misc) + evil-collection-mu4e-begin-region-misc + evil-collection-mu4e-end-region-misc) + (evil-collection-mu4e-replace-region (evil-collection-mu4e-new-region-maildir) + evil-collection-mu4e-begin-region-maildir + evil-collection-mu4e-end-region-maildir)) + + +;;; Initialize evil-collection-mu4e + +;;;###autoload +(defun evil-collection-mu4e-setup () + "Initialize evil-mu4e if necessary. +If mu4e-main-mode is in evil-state-motion-modes, initialization +is already done earlier." + (evil-collection-mu4e-set-state) + (evil-collection-mu4e-set-bindings) + (add-hook 'mu4e-main-mode-hook 'evil-collection-mu4e-update-main-view) + (add-hook 'org-mode-hook #'evil-collection-mu4e-org-set-header-to-normal-mode) + (add-hook 'mu4e-compose-pre-hook #'evil-collection-mu4e-org-set-header-to-insert-mode)) + +(provide 'evil-collection-mu4e) +;;; evil-collection-mu4e.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/mu4e/evil-collection-mu4e.el b/.config/emacs/lisp/evil-collection/modes/mu4e/evil-collection-mu4e.el new file mode 100644 index 0000000..3f22cd2 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/mu4e/evil-collection-mu4e.el @@ -0,0 +1,344 @@ +;;; evil-collection-mu4e.el --- Evil bindings for mu4e -*- lexical-binding: t -*- + +;; Copyright (C) 2015-2018 Joris Engbers +;; Copyright (C) 2018 Pierre Neidhardt + +;; Author: Joris Engbers +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.9 +;; Package-Requires: ((emacs "24.4") (evil "1.2.10")) +;; Keywords: evil, mu4e, tools + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: +;; Evil keybindings for mu4e that make sense for Evil users. The following +;; keybindings are defined: +;; +;; General commands: +;; | Commmand | evil-mu4e | Alternative | +;; |--------------------------+-----------+-------------| +;; | Jump to maildir | J | | +;; | Update | u | | +;; | Compose message | cc | C | +;; | Kill update mail process | x | | + +;; Commands for header-mode and view-mode: +;; | Command | evil-mu4e | Alternative | +;; |---------------------------------+-----------+-------------| +;; | Next message | C-j | | +;; | Previous message | C-k | | +;; | Mark the current thread as read | T | | +;; | Compose message | cc | C | +;; | Compose edit** | ce | E | +;; | Compose forward** | cf | F | +;; | Compose reply | cr | R | +;; | Change sorting*** | o | O | +;; | Rerun search | gr | | +;; | Toggle include related | zr | | +;; | Toggle threading | zt | | +;; | Toggle hide cited | za | | +;; | Skip duplicates | zd | | +;; | Show log | gl | | +;; | Select other view | gv | | +;; | Save attachement(s) | p | | +;; | Save url | yu | | +;; | Go to url | gx | | +;; | Fetch url | gX | | +;; +;; - * denotes only in header-mode +;; - ** denotes Alternative only in header-mode +;; - *** denotes Alternative only in view-mode +;; +;;; Code: + +(require 'evil-collection) +(require 'message) +(require 'mu4e nil t) + +(defvar mu4e-mu-version) +(declare-function evil-collection-mu4e-set-bindings "evil-collection-mu4e") +(declare-function evil-collection-mu4e-set-state "evil-collection-mu4e") +(declare-function mu4e-headers-mark-thread "mu4e-headers") + +(if (version< mu4e-mu-version "1.10") + (require 'evil-collection-mu4e + (expand-file-name "modes/mu4e/evil-collection-mu4e-1.8" evil-collection-base-dir)) + + + (defconst evil-collection-mu4e-maps '(mu4e-main-mode-map + mu4e-headers-mode-map + mu4e-view-mode-map + mu4e-compose-mode-map + mu4e-search-minor-mode-map + mu4e-thread-mode-map)) + + (defun evil-collection-mu4e-set-state () + "Set the appropriate initial state of all mu4e modes." + (dolist (mode '(mu4e-main-mode + mu4e-headers-mode + mu4e-view-mode + mu4e-org-mode)) + (evil-set-initial-state mode 'normal)) + (evil-set-initial-state 'mu4e-compose-mode 'insert)) + + ;; These functions were removed from mu4e 1.12.0, specifically this commit: + ;; https://github.com/djcb/mu/commit/85bfe763362b95935a3967f6585e14b3f9890a70 + ;; They were also re-added in version 1.12.2. + (when (and (version<= "1.12.0" mu4e-mu-version) + (version< mu4e-mu-version "1.12.2")) + (defun mu4e-compose-goto-top () + "Go to the beginning of the message or buffer. +Go to the beginning of the message or, if already there, go to the +beginning of the buffer." + (interactive) + (let ((old-position (point))) + (message-goto-body) + (when (= (point) old-position) + (goto-char (point-min))))) + + (defun mu4e-compose-goto-bottom () + "Go to the end of the message or buffer. +Go to the end of the message (before signature) or, if already there, go to the +end of the buffer." + (interactive) + (let ((old-position (point)) + (message-position (save-excursion (message-goto-body) (point)))) + (goto-char (point-max)) + (when (re-search-backward message-signature-separator message-position t) + (forward-line -1)) + (when (= (point) old-position) + (goto-char (point-max)))))) + + ;; When using org-mu4e, the above leads to an annoying behaviour, because + ;; switching from message body to header activates mu4e-compose-mode, thus + ;; putting the user into insert-state. The below code, together with the hooks + ;; set in evil-collection-mu4e-setup fixes this issue. + (defun evil-collection-mu4e-org-set-header-to-normal-mode () + "Set initial state in `mu4e-compose-mode' to \='normal." + (evil-set-initial-state 'mu4e-compose-mode 'normal)) + + (defun evil-collection-mu4e-org-set-header-to-insert-mode () + "Set initial state in `mu4e-compose-mode' to \='insert." + (evil-set-initial-state 'mu4e-compose-mode 'insert)) + + (defun evil-collection-mu4e-mark-thread-as-read () + (interactive) + (mu4e-headers-mark-thread nil '(read))) + + (defvar evil-collection-mu4e-mode-normal-map-bindings + `((mu4e-main-mode-map + "J" mu4e~headers-jump-to-maildir + "j" next-line + "k" previous-line + "u" mu4e-update-mail-and-index + "gr" revert-buffer + "b" mu4e-search-bookmark + "B" mu4e-search-bookmark-edit + "N" mu4e-news + ";" mu4e-context-switch + "H" mu4e-display-manual + "C" mu4e-compose-new + "cc" mu4e-compose-new + "x" mu4e-kill-update-mail + "A" mu4e-about + "f" smtpmail-send-queued-mail + "m" mu4e--main-toggle-mail-sending-mode + "s" mu4e-search + "q" mu4e-quit + "Q" mu4e-search-query) + + (mu4e-headers-mode-map + "q" mu4e~headers-quit-buffer + "J" mu4e~headers-jump-to-maildir + "C" mu4e-compose-new + "E" mu4e-compose-edit + "F" mu4e-compose-forward + "R" mu4e-compose-reply + "cc" mu4e-compose-new + "ce" mu4e-compose-edit + "cf" mu4e-compose-forward + "cr" mu4e-compose-reply + "cw" mu4e-compose-wide-reply + "W" mu4e-compose-wide-reply + "o" mu4e-headers-change-sorting + "j" mu4e-headers-next + "k" mu4e-headers-prev + "gr" mu4e-search-rerun + "b" mu4e-search-bookmark + "B" mu4e-search-bookmark-edit + ";" mu4e-context-switch + ,(kbd "RET") mu4e-headers-view-message + "/" mu4e-search-narrow + "s" mu4e-search + "S" mu4e-search-edit + "x" mu4e-mark-execute-all + "a" mu4e-headers-action + "*" mu4e-headers-mark-for-something ; TODO: Don't override evil-seach-word-forward? + "&" mu4e-headers-mark-custom + "A" mu4e-headers-mark-for-action + "m" mu4e-headers-mark-for-move + "r" mu4e-headers-mark-for-refile + "D" mu4e-headers-mark-for-delete + "d" mu4e-headers-mark-for-trash + "=" mu4e-headers-mark-for-untrash + "u" mu4e-headers-mark-for-unmark + "U" mu4e-mark-unmark-all + "?" mu4e-headers-mark-for-unread + "!" mu4e-headers-mark-for-read + "%" mu4e-headers-mark-pattern + "+" mu4e-headers-mark-for-flag + "-" mu4e-headers-mark-for-unflag + "[[" mu4e-headers-prev-unread + "]]" mu4e-headers-next-unread + "}" mu4e-headers-next-thread + "{" mu4e-headers-prev-thread + "gk" mu4e-headers-prev-unread + "gj" mu4e-headers-next-unread + "\C-j" mu4e-headers-next + "\C-k" mu4e-headers-prev + "t" mu4e-headers-toggle-property + "zr" mu4e-headers-toggle-include-related + "zt" mu4e-headers-toggle-threading + "zd" mu4e-headers-toggle-skip-duplicates + "gl" mu4e-show-log + "gv" mu4e-select-other-view + "T" evil-collection-mu4e-mark-thread-as-read + "Q" mu4e-search-query) + + (mu4e-compose-mode-map + "gg" mu4e-compose-goto-top + "G" mu4e-compose-goto-bottom + "ZD" message-dont-send + "ZF" mml-attach-file + "ZQ" ,(function-get 'mu4e-user-agent 'abortfunc) + "ZZ" ,(function-get 'mu4e-user-agent 'sendfunc)) + + (mu4e-search-minor-mode-map + "J" mu4e-search-maildir) + + (mu4e-thread-mode-map + [S-left] mu4e-thread-goto-root + [tab] mu4e-thread-fold-toggle + [C-tab] mu4e-thread-fold-toggle-goto-next + [backtab] mu4e-thread-fold-toggle-all) + + (mu4e-view-mode-map + " " mu4e-view-scroll-up-or-next + [tab] forward-button + [backtab] backward-button + "q" mu4e-view-quit + "gx" mu4e-view-go-to-url + "gX" mu4e-view-fetch-url + "C" mu4e-compose-new + "H" mu4e-view-toggle-html + ;; "E" mu4e-compose-edit + ;; "F" mu4e-compose-forward + "R" mu4e-compose-reply + "cc" mu4e-compose-new + "ce" mu4e-compose-edit + "cf" mu4e-compose-forward + "cr" mu4e-compose-reply + "cw" mu4e-compose-wide-reply + "p" mu4e-view-save-attachments + "O" mu4e-headers-change-sorting + "A" mu4e-view-mime-part-action ; Since 1.6, uses gnus view by default + "a" mu4e-view-action + "J" mu4e~headers-jump-to-maildir + "[[" mu4e-view-headers-prev-unread + "]]" mu4e-view-headers-next-unread + "gk" mu4e-view-headers-prev-unread + "gj" mu4e-view-headers-next-unread + "\C-j" mu4e-view-headers-next + "\C-k" mu4e-view-headers-prev + "x" mu4e-view-marked-execute + "&" mu4e-view-mark-custom + "*" mu4e-view-mark-for-something ; TODO: Don't override "*". + "m" mu4e-view-mark-for-move + "r" mu4e-view-mark-for-refile + "D" mu4e-view-mark-for-delete + "d" mu4e-view-mark-for-trash + "=" mu4e-view-mark-for-untrash + "u" mu4e-view-unmark + "U" mu4e-view-unmark-all + "?" mu4e-view-mark-for-unread + "!" mu4e-view-mark-for-read + "%" mu4e-view-mark-pattern + "+" mu4e-view-mark-for-flag + "-" mu4e-view-mark-for-unflag + "zr" mu4e-headers-toggle-include-related + "zt" mu4e-headers-toggle-threading + "za" mu4e-view-toggle-hide-cited + "gl" mu4e-show-log + "s" mu4e-view-search-edit + "|" mu4e-view-pipe + "." mu4e-view-raw-message + ,(kbd "C--") mu4e-headers-split-view-shrink + ,(kbd "C-+") mu4e-headers-split-view-grow + ,@(when evil-want-C-u-scroll + '("\C-u" evil-scroll-up)))) + "All evil-mu4e bindings for evil normal mode.") + + (defvar evil-collection-mu4e-mode-visual-map-bindings + `((mu4e-headers-mode-map + "*" mu4e-headers-mark-for-something + "A" mu4e-headers-mark-for-action + "m" mu4e-headers-mark-for-move + "r" mu4e-headers-mark-for-refile + "D" mu4e-headers-mark-for-delete + "d" mu4e-headers-mark-for-trash + "=" mu4e-headers-mark-for-untrash + "u" mu4e-headers-mark-for-unmark + "?" mu4e-headers-mark-for-unread + "!" mu4e-headers-mark-for-read + "+" mu4e-headers-mark-for-flag + "-" mu4e-headers-mark-for-unflag) + + (mu4e-compose-mode-map + "gg" mu4e-compose-goto-top + "G" mu4e-compose-goto-bottom)) + "All evil-mu4e bindings for evil visual mode.") + + (defun evil-collection-mu4e-set-bindings () + "Set the bindings." + ;; WARNING: With lexical binding, lambdas from `mapc' and `dolist' become + ;; closures in which we must use `evil-define-key*' instead of + ;; `evil-define-key'. + (dolist (binding evil-collection-mu4e-mode-normal-map-bindings) + (apply #'evil-collection-define-key 'normal binding)) + (dolist (binding evil-collection-mu4e-mode-visual-map-bindings) + (apply #'evil-collection-define-key 'visual binding)) + (evil-set-command-property 'mu4e-compose-goto-bottom :keep-visual t) + (evil-set-command-property 'mu4e-compose-goto-top :keep-visual t) + + ;; yu + (evil-collection-define-operator-key 'yank 'mu4e-view-mode-map + "u" 'mu4e-view-save-url)) + + + + + (defun evil-collection-mu4e-setup () + "Initialize evil-mu4e if necessary. +If `mu4e-main-mode' is in `evil-state-motion-modes', initialization +is already done earlier." + (evil-collection-mu4e-set-state) + (evil-collection-mu4e-set-bindings)) + + (add-hook 'mu4e-thread-mode-hook #'evil-normalize-keymaps) + + (provide 'evil-collection-mu4e)) +;;; evil-collection-mu4e.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/neotree/evil-collection-neotree.el b/.config/emacs/lisp/evil-collection/modes/neotree/evil-collection-neotree.el new file mode 100644 index 0000000..7961306 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/neotree/evil-collection-neotree.el @@ -0,0 +1,101 @@ +;;; evil-collection-neotree.el --- Evil bindings for neotree -*- lexical-binding: t; no-byte-compile: t; -*- + +;; Copyright (C) 2017 Pierre Neidhardt + +;; Author: Maximiliano Sandoval +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, neotree, tools + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: +;; Evil bindings for `neotree' + +;;; Code: + +(require 'evil-collection) +(require 'neotree nil t) + +(declare-function neotree-make-executor "neotree.el") +(defconst evil-collection-neotree-maps '(neotree-mode-map)) + +;;;###autoload +(defun evil-collection-neotree-setup () + "Set up `evil' bindings for `neotree'." + + (evil-set-initial-state 'neotree-mode 'normal) ;; Neotree start in normal by default. + + (evil-collection-define-key 'normal 'neotree-mode-map + + (kbd "RET") (neotree-make-executor + :file-fn 'neo-open-file + :dir-fn 'neo-open-dir) + (kbd "") (neotree-make-executor + :dir-fn 'neo-open-dir) + "z" (neotree-make-executor + :dir-fn 'neo-open-dir) + "ZZ" 'quit-window + "gd" (neotree-make-executor + :dir-fn 'neo-open-dired) + "gD" (neotree-make-executor + :dir-fn 'neo-open-dired) + "go" (neotree-make-executor + :file-fn 'neo-open-file + :dir-fn 'neo-open-dir) + "gO" 'neotree-quick-look + "gr" 'neotree-refresh + "q" 'neotree-hide + "H" 'neotree-hidden-file-toggle + "gh" 'neotree-hidden-file-toggle + (kbd "C-k") 'neotree-select-up-node + "gk" 'neotree-select-up-node + "[[" 'neotree-select-up-node + (kbd "C-j") 'neotree-select-down-node + "gj" 'neotree-select-down-node + "]]" 'neotree-select-down-node + "gv" 'neotree-open-file-in-system-application + "c" 'neotree-create-node + "y" 'neotree-copy-node + "r" 'neotree-rename-node + "R" 'neotree-change-root + "d" 'neotree-delete-node + "J" 'neotree-dir + "+" 'neotree-stretch-toggle + "=" 'neotree-stretch-toggle + "ge" 'neotree-enter + "j" 'neotree-next-line + "k" 'neotree-previous-line + + ;; Unchanged keybings. + "a" (neotree-make-executor + :file-fn 'neo-open-file-ace-window) + "|" (neotree-make-executor + :file-fn 'neo-open-file-vertical-split) + "-" (neotree-make-executor + :file-fn 'neo-open-file-horizontal-split) + "S" 'neotree-select-previous-sibling-node + "s" 'neotree-select-next-sibling-node + (kbd "C-c C-c") 'neotree-change-root + (kbd "C-x 1") 'neotree-empty-fn + (kbd "C-x 2") 'neotree-empty-fn + (kbd "C-x 3") 'neotree-empty-fn + (kbd "C-x C-f") 'find-file-other-window + (kbd "C-c C-f") 'find-file-other-window)) + +(provide 'evil-collection-neotree) +;;; evil-collection-neotree.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/newsticker/README.org b/.config/emacs/lisp/evil-collection/modes/newsticker/README.org new file mode 100644 index 0000000..4c73530 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/newsticker/README.org @@ -0,0 +1,56 @@ +* newsticker + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/newsticker/index.html][newsticker]], the built-in RSS / Atom reader. + +** Key bindings + +*** newsticker-mode-map (plainview) + + | Command | Original | Evil | + |---------------------------------------------+----------+------| + | =newsticker-previous-feed= | =F= | =gk= | + | =newsticker-next-feed= | =f= | =gj= | + | =newsticker-mark-item-at-point-as-read= | =o= | =r= | + | =newsticker-mark-item-at-point-as-immortal= | =i= | =i= | + | =newsticker-show-old-items= | =s O= | =o= | + | =newsticker-hide-old-items= | =h O= | =O= | + | =newsticker-buffer-force-update= | =U= | =gr= | + | =newsticker-get-all-news= | =G= | =gR= | + | =newsticker-close-buffer= | =q= | =q= | + +*** newsticker-treeview-mode-map + + | Command | Original | Evil | + |-------------------------------------------------+--------------+--------------| + | =newsticker-treeview-prev-feed= | =F= | =[[= | + | =newsticker-treeview-next-feed= | =f= | =]]= | + | =newsticker-treeview-next-item= | =n= | =M-j= | + | =newsticker-treeview-prev-item= | =p= | =M-k= | + | =newsticker-treeview-next-new-or-immortal-item= | =N= | =gj= | + | =newsticker-treeview-prev-new-or-immortal-item= | =P= | =gk= | + | =newsticker-treeview-next-page= | =SPC= | =SPC= | + | =newsticker-treeview-jump= | =j= | =J= | + | =newsticker-treeview-mark-item-old= | =o= | =o= | + | =newsticker-treeview-mark-list-items-old= | =O= | =O= | + | =newsticker-treeview-toggle-item-immortal= | =i= | =i= | + | =newsticker-treeview-browse-url-item= | =b= | =b= | + | =newsticker-treeview-browse-url= | =v= | =B= | + | =newsticker-group-add-group= | =M-a= | =A= | + | =newsticker-group-delete-group= | =M-d= | =D= | + | =newsticker-group-rename-group= | =M-r= | =R= | + | =newsticker-treeview-save= | =s= | =S= | + | =newsticker-group-move-feed= | =M-m= | =M-m= | + | =newsticker-group-shift-feed-down= | =M-= | =M-= | + | =newsticker-group-shift-feed-up= | =M-= | =M-= | + | =newsticker-group-shift-group-down= | =M-S-= | =M-S-= | + | =newsticker-group-shift-group-up= | =M-S-= | =M-S-= | + | =newsticker-treeview-update= | =u= | =gr= | + | =newsticker-get-all-news= | =G= | =gR= | + | =newsticker-treeview-quit= | =q= | =q= | + +** Notes + + - In the treeview list buffer, =C-m= / =C-j= are bound to + =newsticker-treeview-show-item= via text-property keymap, which has higher + precedence than the major-mode map. Use =M-j= / =M-k= for next / previous + item navigation. diff --git a/.config/emacs/lisp/evil-collection/modes/newsticker/evil-collection-newsticker.el b/.config/emacs/lisp/evil-collection/modes/newsticker/evil-collection-newsticker.el new file mode 100644 index 0000000..9397a44 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/newsticker/evil-collection-newsticker.el @@ -0,0 +1,116 @@ +;;; evil-collection-newsticker.el --- Evil bindings for newsticker -*- lexical-binding: t -*- + +;; Copyright (C) 2020 Zhiwei Chen + +;; Author: Zhiwei Chen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, newsticker, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for newsticker. + +;;; Code: +(require 'evil-collection) +(require 'newsticker) + +(defconst evil-collection-newsticker-maps '(newsticker-mode-map)) + +;;;###autoload +(defun evil-collection-newsticker-setup () + "Set up `evil' bindings for `newsticker'." + ;; plainview + (evil-set-initial-state 'newsticker-mode 'normal) + (evil-collection-define-key 'normal 'newsticker-mode-map + ;; move + "gk" 'newsticker-previous-feed + "gj" 'newsticker-next-feed + + ;; mark + "r" 'newsticker-mark-item-at-point-as-read + "i" 'newsticker-mark-item-at-point-as-immortal + + ;; show/hide + "o" 'newsticker-show-old-items + "O" 'newsticker-hide-old-items + + ;; refresh + "gr" 'newsticker-buffer-force-update + "gR" 'newsticker-get-all-news + + ;; quit + "q" 'newsticker-close-buffer) + + ;; treeview + (evil-set-initial-state 'newsticker-treeview-list-mode 'normal) + (evil-collection-define-key 'normal 'newsticker-treeview-list-mode-map + [down-mouse-3] 'newsticker-treeview-list-menu) + + (evil-set-initial-state 'newsticker-treeview-item-mode 'normal) + (evil-collection-define-key 'normal 'newsticker-treeview-item-mode-map + [down-mouse-3] 'newsticker-treeview-item-menu) + + (evil-set-initial-state 'newsticker-treeview-mode 'normal) + (evil-collection-define-key 'normal 'newsticker-treeview-mode-map + ;; move + "[[" 'newsticker-treeview-prev-feed + "]]" 'newsticker-treeview-next-feed + ;; The items in Newsticker List buffer has a particular keymap by text + ;; property, where CR (C-m) and LF (C-j) are bound to + ;; `newsticker-treeview-show-item'. According to the keymap precedence page, + ;; the text property based keymap has a higher priority. + ;; + ;; Eval (info "(elisp)Searching Keymaps") if you have interests. + ;; + ;; Use M-j/M-k instead. + (kbd "M-j") 'newsticker-treeview-next-item + (kbd "M-k") 'newsticker-treeview-prev-item + "gj" 'newsticker-treeview-next-new-or-immortal-item + "gk" 'newsticker-treeview-prev-new-or-immortal-item + (kbd "SPC") 'newsticker-treeview-next-page + "J" 'newsticker-treeview-jump + + ;; mark + "o" 'newsticker-treeview-mark-item-old + "O" 'newsticker-treeview-mark-list-items-old + "i" 'newsticker-treeview-toggle-item-immortal + + "b" 'newsticker-treeview-browse-url-item + "B" 'newsticker-treeview-browse-url + + ;; group + "A" 'newsticker-group-add-group + "D" 'newsticker-group-delete-group + "R" 'newsticker-group-rename-group + "S" 'newsticker-treeview-save + (kbd "M-m") 'newsticker-group-move-feed + (kbd "") 'newsticker-group-shift-feed-down + (kbd "") 'newsticker-group-shift-feed-up + (kbd "") 'newsticker-group-shift-group-down + (kbd "") 'newsticker-group-shift-group-up + + ;; refresh + "gr" 'newsticker-treeview-update + "gR" 'newsticker-get-all-news + + ;; quit + "q" 'newsticker-treeview-quit)) + +(provide 'evil-collection-newsticker) +;;; evil-collection-newsticker.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/notmuch/README.org b/.config/emacs/lisp/evil-collection/modes/notmuch/README.org new file mode 100644 index 0000000..ea5fa4e --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/notmuch/README.org @@ -0,0 +1,142 @@ +* notmuch + + Evil bindings for [[https://notmuchmail.org/][notmuch]]. + +** notmuch-common-keymap + + Inherited by all notmuch buffer maps. Single-letter commands are relocated + under the =g= prefix. + + | Command | Original | Evil | + |----------------------------------------+----------+-----------| + | =notmuch-help= | =?= | =g?= | + | =notmuch-bury-or-kill-this-buffer= | =q= | =q= | + | =notmuch-search= | =s= | =s= | + | =notmuch-tree= | =z= | =S= | + | =notmuch-mua-new-mail= | =m= | =C=, =cc= | + | =notmuch-refresh-this-buffer= | =g=, === | =gr= | + | =notmuch-refresh-all-buffers= | =M-== | =gA= | + | =notmuch-poll-and-refresh-this-buffer= | =G= | =gR= | + | =notmuch-jump-search= | =j= | =J= | + +** notmuch-show-mode-map + + | Command | Original | Evil | + |---------------------------------------------------------+-----------+-------------| + | =notmuch-show-next-open-message= | =n= | =gj= | + | =notmuch-show-previous-open-message= | =p= | =gk= | + | =notmuch-show-next-message= | =N= | =]]=, =C-j= | + | =notmuch-show-previous-message= | =P= | =[[=, =C-k= | + | =notmuch-show-next-thread-show= | =M-n= | =M-j= | + | =notmuch-show-previous-thread-show= | =M-p= | =M-k= | + | =notmuch-show-archive-message-then-next-or-next-thread= | =a= | =a= | + | =notmuch-show-archive-thread-then-next= | =A= | =A= | + | =notmuch-show-archive-thread-then-exit= | =X= | =X= | + | =notmuch-show-archive-message-then-next-or-exit= | =x= | =x= | + | =notmuch-show-reply-sender= | =r= | =cr= | + | =notmuch-show-reply= | =R= | =cR= | + | =notmuch-show-forward-message= | =f= | =cf= | + | =notmuch-show-filter-thread= | =l= | =S= | + | =notmuch-show-save-attachments= | =w= | =p= | + | =notmuch-show-toggle-visibility-headers= | =h= | =H= | + | =notmuch-tag-jump= | =k= | =K= | + | =notmuch-show-tag-all= | =*= | =*= | + | =notmuch-show-add-tag= | =+= | =+= | + | =notmuch-show-remove-tag= | =-= | =-= | + | =notmuch-show-toggle-message= | =RET= | =RET= | + | =notmuch-show-toggle-thread-indentation= | =<= | =<= | + | =notmuch-show-next-button= | =TAB= | =TAB= | + | =notmuch-show-previous-button= | =backtab= | =backtab= | + | =notmuch-show-pipe-message= | =\vert= | =\vert= | + | =notmuch-show-stash-map= | =c= | =ys= | + | =notmuch-show-part-map= | =.= | =.= | + | =notmuch-tree-from-show-current-query= | =Z= | =zv= | + | =goto-address-at-point= | n/a | =gd= | + | =evil-collection-notmuch-show-toggle-delete= | n/a | =d= | + | =evil-collection-notmuch-show-toggle-flagged= | n/a | === | + +** notmuch-tree-mode-map + + | Command | Original | Evil | + |--------------------------------------------------+----------+-----------| + | =notmuch-tree-next-matching-message= | =n= | =gj= | + | =notmuch-tree-prev-matching-message= | =p= | =gk= | + | =notmuch-tree-next-message= | =N= | =]]= | + | =notmuch-tree-prev-message= | =P= | =[[= | + | =notmuch-tree-next-thread= | =M-n= | =C-j= | + | =notmuch-tree-prev-thread= | =M-p= | =C-k= | + | =notmuch-tree-archive-message-then-next= | =a= | =a= | + | =notmuch-tree-archive-thread-then-next= | =A= | =A= | + | =notmuch-tree-archive-thread-then-exit= | =X= | (default) | + | =notmuch-tree-archive-message-then-next-or-exit= | =x= | (default) | + | =notmuch-show-reply-sender= | =r= | =cr= | + | =notmuch-show-reply= | =R= | =cR= | + | =notmuch-tree-filter= | =l= | (default) | + | =notmuch-tree-to-tree= | =z= | =s= | + | =notmuch-search-from-tree-current-query= | =S= | =zv= | + | =notmuch-show-save-attachments= | =w= | (default) | + | =notmuch-tag-jump= | =k= | =K= | + | =notmuch-tree-tag-thread= | =*= | =*= | + | =notmuch-tree-add-tag= | =+= | =+= | + | =notmuch-tree-remove-tag= | =-= | =-= | + | =notmuch-tree-show-message= | =RET= | =RET= | + | =notmuch-tree-resume-message= | =e= | =e= | + | =notmuch-show-pipe-message= | =\vert= | =\vert= | + | =evil-collection-notmuch-tree-toggle-delete= | n/a | =d= | + | =evil-collection-notmuch-tree-toggle-unread= | n/a | =!= | + | =evil-collection-notmuch-tree-toggle-flagged= | n/a | === | + +** notmuch-search-mode-map + + | Command | Original | Evil | + |-------------------------------------------------+----------+------------| + | =notmuch-search-next-thread= | =n= | =j= (evil) | + | =notmuch-search-previous-thread= | =p= | =k= (evil) | + | =notmuch-search-archive-thread= | =a= | =a= | + | =notmuch-search-reply-to-thread-sender= | =r= | =cr= | + | =notmuch-search-reply-to-thread= | =R= | =cR= | + | =notmuch-search-filter= | =l= | =S= | + | =notmuch-search-filter-by-tag= | =t= | =t= | + | =notmuch-search-toggle-order= | =o= | =o= | + | =notmuch-tag-jump= | =k= | =K= | + | =notmuch-search-tag-all= | =*= | =*= | + | =notmuch-search-add-tag= | =+= | =+= | + | =notmuch-search-remove-tag= | =-= | =-= | + | =notmuch-search-show-thread= | =RET= | =RET= | + | =notmuch-tree-from-search-current-query= | =Z= | =zv= | + | =notmuch-bury-or-kill-this-buffer= | =x= | =q= | + | =notmuch-search-stash-map= | =c= | =ys= | + | =compose-mail= | n/a | =cc= | + | =compose-mail-other-frame= | n/a | =cC= | + | =evil-collection-notmuch-search-toggle-delete= | n/a | =d= | + | =evil-collection-notmuch-search-toggle-unread= | n/a | =!= | + | =evil-collection-notmuch-search-toggle-flagged= | n/a | === | + +** notmuch-hello-mode-map + + | Command | Original | Evil | + |-------------------------------------+----------+------------------| + | =notmuch-version= | =v= | =g?= | + | =widget-forward= | =TAB= | =TAB= | + | =widget-backward= | =S-TAB= | =S-TAB=, =C-TAB= | + | =evil-collection-notmuch-hello-ret= | n/a | =RET= | + +** New commands + + | Command | Key | | + |-------------------------------------------------+-------+----------------------------------------------------------------| + | =evil-collection-notmuch-show-toggle-delete= | =d= | toggle =evil-collection-notmuch-delete-tag= on current message | + | =evil-collection-notmuch-tree-toggle-delete= | =d= | tree variant | + | =evil-collection-notmuch-search-toggle-delete= | =d= | search variant | + | =evil-collection-notmuch-show-toggle-flagged= | === | toggle =flagged= tag | + | =evil-collection-notmuch-tree-toggle-flagged= | === | | + | =evil-collection-notmuch-search-toggle-flagged= | === | | + | =evil-collection-notmuch-tree-toggle-unread= | =!= | toggle =unread= tag | + | =evil-collection-notmuch-search-toggle-unread= | =!= | | + | =evil-collection-notmuch-hello-ret= | =RET= | activate widget or button at point | + +** Customization + + | Variable | Default | Purpose | + |--------------------------------------+-------------+------------------------------------------------------------------| + | =evil-collection-notmuch-delete-tag= | ="deleted"= | Tag toggled by =d=. Set to ="trash"= for lieer/Gmail-style sync. | diff --git a/.config/emacs/lisp/evil-collection/modes/notmuch/evil-collection-notmuch.el b/.config/emacs/lisp/evil-collection/modes/notmuch/evil-collection-notmuch.el new file mode 100644 index 0000000..2256259 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/notmuch/evil-collection-notmuch.el @@ -0,0 +1,256 @@ +;;; evil-collection-notmuch.el --- Bindings for `notmuch' -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: emacs, tools, evil + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for `notmuch'. + +;;; Code: +(require 'notmuch nil t) +(require 'evil-collection) + +(defcustom evil-collection-notmuch-delete-tag "deleted" + "Tag toggled by the delete bindings (`d') in notmuch modes. + +Defaults to \"deleted\" for backwards compatibility with the self-hosted +notmuch convention where a cron job removes files matching `tag:deleted'. + +Set to \"trash\" when syncing with services that map a Trash tag/label +back to the server (e.g. lieer/Gmail's TRASH label, or an IMAP setup +that moves trashed messages out of the inbox)." + :type 'string + :group 'evil-collection-notmuch) + +(declare-function notmuch-show-get-tags "notmuch-show") +(declare-function notmuch-show-tag "notmuch-show") +(declare-function notmuch-search-get-tags "notmuch") +(declare-function notmuch-search-tag "notmuch") +(declare-function notmuch-tree-tag "notmuch-tree") + +(declare-function widget-field-at "wid-edit") +(declare-function widget-field-activate "wid-edit") +(declare-function widget-button-press "wid-edit") + +;; Since all the other maps in `evil-collection-notmuch-maps` +;; have notmuch-common-keymap as parent +;; https://git.notmuchmail.org/git?p=notmuch;a=blob;f=emacs/notmuch-hello.el;h=fa31694ff0f79a7f2781849394390a673f75aade;hb=HEAD#l651 +;; +;; When `evil-collection-setup-hook` runs, if it changes keymaps +;; using a `dolist` over `evil-collection-notmuch-maps`, then a binding might +;; see 2 changes at once. To avoid that, notmuch-common-keymap is last +(defconst evil-collection-notmuch-maps '(notmuch-hello-mode-map + notmuch-show-mode-map + notmuch-show-part-map + notmuch-tree-mode-map + notmuch-search-mode-map + notmuch-search-stash-map + notmuch-common-keymap)) + +(defun evil-collection-notmuch-toggle-tag (tag mode &optional next-function) + "Toggle TAG tag for message in MODE." + (let ((get (intern (format "notmuch-%s-get-tags" mode))) + (set (intern (format "notmuch-%s-tag" mode))) + (next (or next-function (intern (format "notmuch-%s-next-message" mode))))) + (funcall set (list (concat (if (member tag (funcall get)) + "-" "+") + tag))) + (funcall next))) + +(defun evil-collection-notmuch-show-toggle-delete () + "Toggle `evil-collection-notmuch-delete-tag' for message." + (interactive) + (evil-collection-notmuch-toggle-tag evil-collection-notmuch-delete-tag "show")) + +(defun evil-collection-notmuch-tree-toggle-delete () + "Toggle `evil-collection-notmuch-delete-tag' for message." + (interactive) + (evil-collection-notmuch-toggle-tag evil-collection-notmuch-delete-tag "tree")) + +(defun evil-collection-notmuch-search-toggle-delete () + "Toggle `evil-collection-notmuch-delete-tag' for message." + (interactive) + (evil-collection-notmuch-toggle-tag evil-collection-notmuch-delete-tag "search" 'notmuch-search-next-thread)) + +(defun evil-collection-notmuch-tree-toggle-unread () + "Toggle unread tag for message." + (interactive) + (evil-collection-notmuch-toggle-tag "unread" "tree")) + +(defun evil-collection-notmuch-search-toggle-unread () + "Toggle unread tag for message." + (interactive) + (evil-collection-notmuch-toggle-tag "unread" "search" 'notmuch-search-next-thread)) + +(defun evil-collection-notmuch-show-toggle-flagged () + "Toggle flagged tag for message." + (interactive) + (evil-collection-notmuch-toggle-tag "flagged" "show")) + +(defun evil-collection-notmuch-tree-toggle-flagged () + "Toggle flagged tag for message." + (interactive) + (evil-collection-notmuch-toggle-tag "flagged" "tree")) + +(defun evil-collection-notmuch-search-toggle-flagged () + "Toggle flagged tag for message." + (interactive) + (evil-collection-notmuch-toggle-tag "flagged" "search" 'notmuch-search-next-thread)) + +(defun evil-collection-notmuch-hello-ret () + (interactive) + (if (widget-field-at (point)) + (call-interactively #'widget-field-activate) + (call-interactively #'widget-button-press))) + +;;;###autoload +(defun evil-collection-notmuch-setup () + "Set up `evil' bindings for `notmuch'." + (evil-collection-inhibit-insert-state 'notmuch-show-mode-map) + (evil-collection-inhibit-insert-state 'notmuch-search-mode-map) + (evil-collection-inhibit-insert-state 'notmuch-tree-mode-map) + + (evil-set-initial-state 'notmuch-show-mode 'normal) + (evil-set-initial-state 'notmuch-search-mode 'normal) + (evil-set-initial-state 'notmuch-hello-mode 'normal) + (evil-set-initial-state 'notmuch-tree-mode 'normal) + + (evil-collection-define-key 'normal 'notmuch-common-keymap + "g?" 'notmuch-help + "q" 'notmuch-bury-or-kill-this-buffer + "s" 'notmuch-search + "S" 'notmuch-tree + "C" 'notmuch-mua-new-mail ; like mu4e + "cc" 'notmuch-mua-new-mail ; like mu4e + "gr" 'notmuch-refresh-this-buffer + "gA" 'notmuch-refresh-all-buffers + "gR" 'notmuch-poll-and-refresh-this-buffer + "J" 'notmuch-jump-search) + + (evil-collection-define-key 'normal 'notmuch-hello-mode-map + "g?" 'notmuch-version + (kbd "TAB") 'widget-forward + (kbd "RET") 'evil-collection-notmuch-hello-ret + (kbd "S-TAB") 'widget-backward + (kbd "") 'widget-backward) + + (evil-collection-define-key 'normal 'notmuch-show-mode-map + "gd" 'goto-address-at-point + "p" 'notmuch-show-save-attachments ; like mu4e + "A" 'notmuch-show-archive-thread-then-next + "S" 'notmuch-show-filter-thread + "K" 'notmuch-tag-jump + "C" 'notmuch-mua-new-mail ; like mu4e + "cc" 'notmuch-mua-new-mail ; like mu4e + "cR" 'notmuch-show-reply + "cf" 'notmuch-show-forward-message + "X" 'notmuch-show-archive-thread-then-exit + "zv" 'notmuch-tree-from-show-current-query ; like mu4e-conversation + "<" 'notmuch-show-toggle-thread-indentation + "a" 'notmuch-show-archive-message-then-next-or-next-thread + "d" 'evil-collection-notmuch-show-toggle-delete + "=" 'evil-collection-notmuch-show-toggle-flagged + "H" 'notmuch-show-toggle-visibility-headers + "gj" 'notmuch-show-next-open-message + "gk" 'notmuch-show-previous-open-message + "]]" 'notmuch-show-next-message + "[[" 'notmuch-show-previous-message + (kbd "C-j") 'notmuch-show-next-message + (kbd "C-k") 'notmuch-show-previous-message + (kbd "M-j") 'notmuch-show-next-thread-show + (kbd "M-k") 'notmuch-show-previous-thread-show + "cr" 'notmuch-show-reply-sender + (kbd "x") 'notmuch-show-archive-message-then-next-or-exit + "|" 'notmuch-show-pipe-message + "*" 'notmuch-show-tag-all + "-" 'notmuch-show-remove-tag + "+" 'notmuch-show-add-tag + (kbd "TAB") 'notmuch-show-next-button + (kbd "") 'notmuch-show-previous-button + (kbd "RET") 'notmuch-show-toggle-message + "." 'notmuch-show-part-map) + + (evil-collection-define-key 'normal 'notmuch-tree-mode-map + "g?" 'notmuch-help + "q" 'notmuch-tree-quit + "S" 'notmuch-tree-to-search + "C" 'notmuch-mua-new-mail ; like mu4e + "cc" 'notmuch-mua-new-mail ; like mu4e + "J" 'notmuch-jump-search + "zv" 'notmuch-search-from-tree-current-query ; like mu4e-conversation + "cr" 'notmuch-show-reply-sender ; like mu4e + "cR" 'notmuch-show-reply + "d" 'evil-collection-notmuch-tree-toggle-delete + "!" 'evil-collection-notmuch-tree-toggle-unread + "=" 'evil-collection-notmuch-tree-toggle-flagged + "K" 'notmuch-tag-jump + (kbd "RET") 'notmuch-tree-show-message + [mouse-1] 'notmuch-tree-show-message + "A" 'notmuch-tree-archive-thread-then-next + "a" 'notmuch-tree-archive-message-then-next + "s" 'notmuch-tree-to-tree + "gj" 'notmuch-tree-next-matching-message + "gk" 'notmuch-tree-prev-matching-message + "]]" 'notmuch-tree-next-message + "[[" 'notmuch-tree-prev-message + (kbd "C-k") 'notmuch-tree-prev-thread + (kbd "C-j") 'notmuch-tree-next-thread + "|" 'notmuch-show-pipe-message + "-" 'notmuch-tree-remove-tag + "+" 'notmuch-tree-add-tag + "*" 'notmuch-tree-tag-thread + "e" 'notmuch-tree-resume-message) + + (dolist (state '(normal visual)) + (evil-collection-define-key state 'notmuch-search-mode-map + "cC" 'compose-mail-other-frame + "J" 'notmuch-jump-search + "S" 'notmuch-search-filter + "K" 'notmuch-tag-jump + "o" 'notmuch-search-toggle-order + "zv" 'notmuch-tree-from-search-current-query + "*" 'notmuch-search-tag-all + "a" 'notmuch-search-archive-thread + "cc" 'compose-mail ; like mu4e + "d" 'evil-collection-notmuch-search-toggle-delete + "!" 'evil-collection-notmuch-search-toggle-unread + "=" 'evil-collection-notmuch-search-toggle-flagged + "q" 'notmuch-bury-or-kill-this-buffer + "cr" 'notmuch-search-reply-to-thread-sender + "cR" 'notmuch-search-reply-to-thread + "t" 'notmuch-search-filter-by-tag + [mouse-1] 'notmuch-search-show-thread + "-" 'notmuch-search-remove-tag + "+" 'notmuch-search-add-tag + (kbd "RET") 'notmuch-search-show-thread)) + + ;; ys + (evil-collection-define-operator-key 'yank 'notmuch-search-mode-map + "s" 'notmuch-search-stash-map) + + ;; ys + (evil-collection-define-operator-key 'yank 'notmuch-show-mode-map + "s" 'notmuch-show-stash-map)) + +(provide 'evil-collection-notmuch) +;;; evil-collection-notmuch.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/nov/evil-collection-nov.el b/.config/emacs/lisp/evil-collection/modes/nov/evil-collection-nov.el new file mode 100644 index 0000000..aa1d86d --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/nov/evil-collection-nov.el @@ -0,0 +1,67 @@ +;;; evil-collection-nov.el --- Bindings for `nov' -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, emacs, tools, epub + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for`nov'. + +;;; Code: +(require 'evil-collection) +(require 'nov nil t) + +(defvar nov-mode-map) + +(defconst evil-collection-nov-maps '(nov-mode-map)) + +;;;###autoload +(defun evil-collection-nov-setup () + "Set up `evil' bindings for `nov'." + (evil-collection-define-key 'normal 'nov-mode-map + "gr" 'nov-render-document + "s" 'nov-view-source + "S" 'nov-view-content-source + "g?" 'nov-display-metadata + "gj" 'nov-next-document + (kbd "C-j") 'nov-next-document + (kbd "M-j") 'nov-next-document + "]]" 'nov-next-document + "gk" 'nov-previous-document + (kbd "C-k") 'nov-previous-document + (kbd "M-k") 'nov-previous-document + "[[" 'nov-previous-document + + "t" 'nov-goto-toc + "i" 'nov-goto-toc + (kbd "RET") 'nov-browse-url + (kbd "") 'mouse-face + (kbd "") 'nov-browse-url + (kbd "TAB") 'shr-next-link + (kbd "M-TAB") 'shr-previous-link + (kbd "") 'shr-previous-link + (kbd "SPC") 'nov-scroll-up + (kbd "S-SPC") 'nov-scroll-down + (kbd "DEL") 'nov-scroll-down)) + +(provide 'evil-collection-nov) +;;; evil-collection-nov.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/omnisharp/evil-collection-omnisharp.el b/.config/emacs/lisp/evil-collection/modes/omnisharp/evil-collection-omnisharp.el new file mode 100644 index 0000000..e032782 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/omnisharp/evil-collection-omnisharp.el @@ -0,0 +1,44 @@ +;;; evil-collection-omnisharp.el --- Evil bindings for omnisharp -*- lexical-binding: t -*- + +;; Copyright (C) 2019 Omair Majid + +;; Author: Omair Majid +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, omnisharp, convenience + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for Omnisharp. + +;;; Code: +(require 'omnisharp nil t) +(require 'evil-collection) + +(defconst evil-collection-omnisharp-maps '(omnisharp-mode-map)) + +;;;###autoload +(defun evil-collection-omnisharp-setup () + "Set up `evil' bindings for `omnisharp'." + (evil-collection-define-key '(normal visual) 'omnisharp-mode-map + "gd" 'omnisharp-go-to-definition + "gR" 'omnisharp-reload-solution + "K" 'omnisharp-current-type-documentation)) + +(provide 'evil-collection-omnisharp) +;;; evil-collection-omnisharp.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/org-agenda/evil-collection-org-agenda.el b/.config/emacs/lisp/evil-collection/modes/org-agenda/evil-collection-org-agenda.el new file mode 100644 index 0000000..8d17f22 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/org-agenda/evil-collection-org-agenda.el @@ -0,0 +1,147 @@ +;;; evil-collection-org-agenda.el --- Evil bindings for org-agenda -*- lexical-binding: t -*- + +;; Copyright (C) 2026 Ashish Panigrahi + +;; Author: Ashish Panigrahi +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, org, org-agenda, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil basic bindings for `org-agenda-mode'. + +;;; Code: +(require 'evil-collection) +(require 'org-agenda nil t) + +(defconst evil-collection-org-agenda-maps '(org-agenda-mode-map)) + +(declare-function org-agenda-next-line "org-agenda") +(declare-function org-agenda-previous-line "org-agenda") +(declare-function org-agenda-next-item "org-agenda") +(declare-function org-agenda-previous-item "org-agenda") +(declare-function org-agenda-forward-block "org-agenda") +(declare-function org-agenda-backward-block "org-agenda") +(declare-function org-agenda-goto "org-agenda") +(declare-function org-agenda-switch-to "org-agenda") +(declare-function org-agenda-show "org-agenda") +(declare-function org-agenda-quit "org-agenda") +(declare-function org-agenda-exit "org-agenda") +(declare-function org-agenda-redo "org-agenda") +(declare-function org-agenda-redo-all "org-agenda") +(declare-function org-agenda-later "org-agenda") +(declare-function org-agenda-earlier "org-agenda") +(declare-function org-agenda-goto-today "org-agenda") +(declare-function org-agenda-goto-date "org-agenda") +(declare-function org-agenda-day-view "org-agenda") +(declare-function org-agenda-week-view "org-agenda") +(declare-function org-agenda-month-view "org-agenda") +(declare-function org-agenda-year-view "org-agenda") +(declare-function org-agenda-todo "org-agenda") +(declare-function org-agenda-schedule "org-agenda") +(declare-function org-agenda-deadline "org-agenda") +(declare-function org-agenda-set-tags "org-agenda") +(declare-function org-agenda-priority "org-agenda") +(declare-function org-agenda-refile "org-agenda") +(declare-function org-agenda-archive "org-agenda") +(declare-function org-agenda-kill "org-agenda") +(declare-function org-agenda-add-note "org-agenda") +(declare-function org-agenda-open-link "org-agenda") +(declare-function org-agenda-filter-by-tag "org-agenda") +(declare-function org-agenda-filter-remove-all "org-agenda") +(declare-function org-agenda-clock-in "org-agenda") +(declare-function org-agenda-clock-out "org-agenda") +(declare-function org-agenda-clock-cancel "org-agenda") +(declare-function org-agenda-clock-goto "org-agenda") +(declare-function org-agenda-bulk-mark "org-agenda") +(declare-function org-agenda-bulk-unmark "org-agenda") +(declare-function org-agenda-bulk-action "org-agenda") +(declare-function org-save-all-org-buffers "org") + +;;;###autoload +(defun evil-collection-org-agenda-setup () + "Set up `evil' bindings for `org-agenda'." + (evil-set-initial-state 'org-agenda-mode 'normal) + (evil-collection-set-readonly-bindings 'org-agenda-mode-map) + + (evil-collection-define-key 'normal 'org-agenda-mode-map + ;; Motion + "j" 'org-agenda-next-line + "k" 'org-agenda-previous-line + "gj" 'org-agenda-next-item + "gk" 'org-agenda-previous-item + (kbd "C-j") 'org-agenda-next-item + (kbd "C-k") 'org-agenda-previous-item + "]]" 'org-agenda-forward-block + "[[" 'org-agenda-backward-block + + ;; Open / visit + (kbd "RET") 'org-agenda-switch-to + [tab] 'org-agenda-goto + (kbd "TAB") 'org-agenda-goto + (kbd "SPC") 'org-agenda-show + "go" 'org-agenda-open-link + + ;; Quit / refresh + "q" 'org-agenda-quit + "ZZ" 'org-agenda-quit + "ZQ" 'org-agenda-exit + "x" 'org-agenda-exit + "gr" 'org-agenda-redo + "gR" 'org-agenda-redo-all + "S" 'org-save-all-org-buffers + + ;; Date navigation + "L" 'org-agenda-later + "H" 'org-agenda-earlier + "." 'org-agenda-goto-today + "J" 'org-agenda-goto-date + "vd" 'org-agenda-day-view + "vw" 'org-agenda-week-view + "vm" 'org-agenda-month-view + "vy" 'org-agenda-year-view + + ;; Entry actions + "t" 'org-agenda-todo + "s" 'org-agenda-schedule + "d" 'org-agenda-deadline + "T" 'org-agenda-set-tags + "p" 'org-agenda-priority + "r" 'org-agenda-refile + "A" 'org-agenda-archive + "D" 'org-agenda-kill + "n" 'org-agenda-add-note + + ;; Filtering + "f" 'org-agenda-filter-by-tag + "F" 'org-agenda-filter-remove-all + + ;; Clocking + "I" 'org-agenda-clock-in + "O" 'org-agenda-clock-out + "X" 'org-agenda-clock-cancel + "gJ" 'org-agenda-clock-goto + + ;; Bulk actions + "m" 'org-agenda-bulk-mark + "u" 'org-agenda-bulk-unmark + "B" 'org-agenda-bulk-action)) + +(provide 'evil-collection-org-agenda) +;;; evil-collection-org-agenda.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/org-present/evil-collection-org-present.el b/.config/emacs/lisp/evil-collection/modes/org-present/evil-collection-org-present.el new file mode 100644 index 0000000..745db01 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/org-present/evil-collection-org-present.el @@ -0,0 +1,65 @@ +;;; evil-collection-org-present.el --- Bindings for `org-present' -*- lexical-binding: t -*- + +;; Copyright (C) 2020 Carla Cao + +;; Author: Carla Cao +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, emacs, tools, minimalist, presentation + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for`org-present'. + +;;; Code: +(require 'evil-collection) +(require 'org-present nil t) + +(defconst evil-collection-org-present-maps '(org-present-mode-keymap)) + +;;;###autoload +(defun evil-collection-org-present-setup () + "Set up `evil' bindings for `org-present'." + (evil-collection-define-key 'normal 'org-present-mode-keymap + "J" 'org-present-next + "K" 'org-present-prev + "gj" 'org-present-next + "gk" 'org-present-prev + "]]" 'org-present-next + "[[" 'org-present-prev + (kbd "SPC") 'org-present-next + (kbd "S-SPC") 'org-present-prev + (kbd "C-j") 'org-present-next + (kbd "M-j") 'org-present-next + (kbd "C-k") 'org-present-prev + (kbd "M-k") 'org-present-prev + "zi" 'org-present-big + "zo" 'org-present-small + "+" 'org-present-big + "=" 'org-present-big + "-" 'org-present-small + "q" 'org-present-quit + "ZQ" 'org-present-quit + "ZZ" 'org-present-quit + "r" 'org-present-read-only + "gw" 'org-present-read-write + "gg" 'org-present-beginning + "G" 'org-present-end)) + +(provide 'evil-collection-org-present) +;;; evil-collection-org-present.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/org-roam/evil-collection-org-roam.el b/.config/emacs/lisp/evil-collection/modes/org-roam/evil-collection-org-roam.el new file mode 100644 index 0000000..11acb38 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/org-roam/evil-collection-org-roam.el @@ -0,0 +1,56 @@ +;;; evil-collection-org-roam.el --- Bindings for `org-roam' -*- lexical-binding: t -*- + +;; Copyright (C) 2022 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.2 +;; Package-Requires: ((emacs "27.1")) +;; Keywords: evil, emacs, convenience, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for org-roam. + +;;; Code: +(require 'evil-collection) +(require 'org-roam nil t) + +(defvar org-roam-mode-map) +(defconst evil-collection-org-roam-maps '(org-roam-grep-map + org-roam-mode-map + org-roam-node-map + org-roam-preview-map)) + +(defun evil-collection-org-roam-setup () + "Set up `evil' bindings for org-roam." + (evil-collection-define-key 'normal 'org-roam-mode-map + [C-return] 'org-roam-buffer-visit-thing + (kbd "C-m") 'org-roam-buffer-visit-thing + [remap revert-buffer] 'org-roam-buffer-refresh + "gr" 'org-roam-buffer-refresh) + + (evil-collection-define-key 'normal 'org-roam-node-map + [remap org-roam-buffer-visit-thing] 'org-roam-node-visit) + + (evil-collection-define-key 'normal 'org-roam-preview-map + [remap org-roam-buffer-visit-thing] 'org-roam-preview-visit) + + (evil-collection-define-key 'normal 'org-roam-grep-map + [remap org-roam-buffer-visit-thing] 'org-roam-grep-visit)) + +(provide 'evil-collection-org-roam) +;;; evil-collection-org-roam.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/org/README.org b/.config/emacs/lisp/evil-collection/modes/org/README.org new file mode 100644 index 0000000..42f9b25 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/org/README.org @@ -0,0 +1,46 @@ +* org + + Basic Evil bindings for [[https://orgmode.org/][org-mode]]. Not intended to supersede + [[https://github.com/Somelauw/evil-org-mode][evil-org-mode]] — only a handful of + overrides that align Org with Evil motion idioms. + +** Key bindings + +*** org-mode-map (normal) + + | Command | Original | Evil | + |----------------+----------+-----------| + | =org-cycle= | =TAB= | == | + | =org-shifttab= | =S-TAB= | == | + +*** org-mode-map (motion) + + | Command | Original | Evil | + |--------------------------+----------+------| + | =org-backward-paragraph= | n/a | ={= | + | =org-forward-paragraph= | n/a | =}= | + | =org-backward-sentence= | n/a | =(= | + | =org-forward-sentence= | n/a | =)= | + +*** org-capture-mode-map (normal) + + | Command | Original | Evil | + |------------------------+-----------+------| + | =org-capture-finalize= | =C-c C-c= | =ZZ= | + | =org-capture-kill= | =C-c C-k= | =ZQ= | + | =org-capture-refile= | =C-c C-w= | =ZR= | + +*** org-read-date-minibuffer-local-map + + Calendar navigation in the date prompt: + + | Command | Key | + |-------------------------------+-------| + | =org-calendar-backward-day= | =M-h= | + | =org-calendar-forward-day= | =M-l= | + | =org-calendar-backward-week= | =M-k= | + | =org-calendar-forward-week= | =M-j= | + | =org-calendar-backward-month= | =M-H= | + | =org-calendar-forward-month= | =M-L= | + | =org-calendar-backward-year= | =M-K= | + | =org-calendar-forward-year= | =M-J= | diff --git a/.config/emacs/lisp/evil-collection/modes/org/evil-collection-org.el b/.config/emacs/lisp/evil-collection/modes/org/evil-collection-org.el new file mode 100644 index 0000000..5973bb2 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/org/evil-collection-org.el @@ -0,0 +1,87 @@ +;;; evil-collection-org.el --- Evil bindings for org -*- lexical-binding: t -*- + +;; Copyright (C) 2021 Zhiwei Chen + +;; Author: Zhiwei Chen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, org, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil basic bindings for org-mode. It's NOT intended to supersede +;; `evil-org-mode'. +;; + +;;; Code: +(require 'evil-collection) +(require 'org nil t) + + +(defconst evil-collection-org-maps '(org-mode-map + org-capture-mode-map + org-read-date-minibuffer-local-map)) + +(declare-function org-shifttab "org") +(declare-function org-backward-paragraph "org") +(declare-function org-forward-paragraph "org") +(declare-function org-backward-sentence "org") +(declare-function org-forward-sentence "org") +(declare-function org-capture-finalize "org-capture") +(declare-function org-capture-kill "org-capture") +(declare-function org-capture-refile "org-capture") + +(declare-function org-calendar-forward-day "org") +(declare-function org-calendar-backward-day "org") +(declare-function org-calendar-forward-week "org") +(declare-function org-calendar-backward-week "org") +(declare-function org-calendar-forward-month "org") +(declare-function org-calendar-backward-month "org") +(declare-function org-calendar-forward-year "org") +(declare-function org-calendar-backward-year "org") +(declare-function org-defkey "org") + +;;;###autoload +(defun evil-collection-org-setup () + "Set up `evil' bindings for `org'." + (evil-collection-define-key 'normal 'org-mode-map + [tab] 'org-cycle + [S-tab] 'org-shifttab) + + (evil-collection-define-key 'motion 'org-mode-map + "{" 'org-backward-paragraph + "}" 'org-forward-paragraph + "(" 'org-backward-sentence + ")" 'org-forward-sentence) + + (evil-collection-define-key 'normal 'org-capture-mode-map + "ZZ" 'org-capture-finalize + "ZQ" 'org-capture-kill + "ZR" 'org-capture-refile) + + (org-defkey org-read-date-minibuffer-local-map (kbd "M-l") #'org-calendar-forward-day) + (org-defkey org-read-date-minibuffer-local-map (kbd "M-h") #'org-calendar-backward-day) + (org-defkey org-read-date-minibuffer-local-map (kbd "M-j") #'org-calendar-forward-week) + (org-defkey org-read-date-minibuffer-local-map (kbd "M-k") #'org-calendar-backward-week) + (org-defkey org-read-date-minibuffer-local-map (kbd "M-L") #'org-calendar-forward-month) + (org-defkey org-read-date-minibuffer-local-map (kbd "M-H") #'org-calendar-backward-month) + (org-defkey org-read-date-minibuffer-local-map (kbd "M-J") #'org-calendar-forward-year) + (org-defkey org-read-date-minibuffer-local-map (kbd "M-K") #'org-calendar-backward-year)) + +(provide 'evil-collection-org) +;;; evil-collection-org.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/osx-dictionary/evil-collection-osx-dictionary.el b/.config/emacs/lisp/evil-collection/modes/osx-dictionary/evil-collection-osx-dictionary.el new file mode 100644 index 0000000..8c18ef2 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/osx-dictionary/evil-collection-osx-dictionary.el @@ -0,0 +1,47 @@ +;;; evil-collection-osx-dictionary.el --- Evil bindings for osx-dictionary -*- lexical-binding: t -*- + +;; Copyright (C) 2020 Zhiwei Chen + +;; Author: Zhiwei Chen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, osx-dictionary, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for osx-dictionary. + +;;; Code: +(require 'evil-collection) +(require 'osx-dictionary nil t) + +(defconst evil-collection-osx-dictionary-maps '(osx-dictionary-mode-map)) + +;;;###autoload +(defun evil-collection-osx-dictionary-setup () + "Set up `evil' bindings for `osx-dictionary'." + (evil-set-initial-state 'osx-dictionary-mode 'normal) + + (evil-collection-define-key 'normal 'osx-dictionary-mode-map + "q" 'osx-dictionary-quit + "s" 'osx-dictionary-search-input + "o" 'osx-dictionary-open-dictionary.app + "r" 'osx-dictionary-read-word)) + +(provide 'evil-collection-osx-dictionary) +;;; evil-collection-osx-dictionary.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/outline/README.org b/.config/emacs/lisp/evil-collection/modes/outline/README.org new file mode 100644 index 0000000..e79174b --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/outline/README.org @@ -0,0 +1,39 @@ +* outline + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Outline-Mode.html][outline-mode]]. + + Folding sticks to Evil's =z= namespace, augmenting the defaults =zO=, =za=, + =zc=, =zm=, =zo=, =zr= with outline-specific commands. + +** Key bindings + + Bindings applied to =outline-mode-map= in normal state. + + | Command | Original | Evil | + |------------------------------------+-----------+--------------------| + | =outline-hide-body= | =C-c C-t= | =zB= | + | =outline-hide-entry= | =C-c C-c= | =zE= | + | =outline-show-entry= | =C-c C-e= | =ze= | + | =outline-hide-leaves= | =C-c C-l= | =zl= | + | =outline-show-branches= | =C-c C-k= | =zK= | + | =outline-show-children= | =C-c TAB= | =zk= | + | =outline-hide-other= | =C-c C-o= | =zp= | + | =outline-up-heading= | =C-c C-u= | =zu= | + | =outline-previous-visible-heading= | =C-c C-p= | =[[= | + | =outline-next-visible-heading= | =C-c C-n= | =]]= | + | =outline-backward-same-level= | =C-c C-b= | =C-k=, =gk= | + | =outline-forward-same-level= | =C-c C-f= | =C-j=, =gj= | + | =outline-promote= | =C-c C-<= | =M-h= | + | =outline-demote= | =C-c C->= | =M-l= | + | =outline-move-subtree-up= | =C-c C-^= | =M-k= | + | =outline-move-subtree-down= | =C-c C-v= | =M-j= | + | =outline-insert-heading= | =C-c RET= | =M-= | + | =outline-show-all= | =C-c C-a= | == (opt.) | + | =outline-toggle-children= | =C-c TAB= | == (opt.) | + +** Customization + + | Variable | Default | Purpose | + |--------------------------------------------------+---------+--------------------------------------------------------------------------------------------| + | =evil-collection-outline-bind-tab-p= | =nil= | Bind == / == to outline cycling (off by default to avoid clashing with Org). | + | =evil-collection-outline-enable-in-minor-mode-p= | =t= | Inherit the same bindings in =outline-minor-mode= via auxiliary keymap parenting. | diff --git a/.config/emacs/lisp/evil-collection/modes/outline/evil-collection-outline.el b/.config/emacs/lisp/evil-collection/modes/outline/evil-collection-outline.el new file mode 100644 index 0000000..856387e --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/outline/evil-collection-outline.el @@ -0,0 +1,116 @@ +;;; evil-collection-outline.el --- Evil bindings for outline-mode -*- lexical-binding: t -*- + +;; Copyright (C) 2017 Pierre Neidhardt + +;; Author: Pierre Neidhardt +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, outline, tools + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: +;; Evil bindings for outline-mode. + +;;; Code: +(require 'evil-collection) +(require 'outline) + +(defcustom evil-collection-outline-bind-tab-p nil + "Enable -based bindings in Outline mode. + +Unless you have Evil bindings set up for Org mode, Org will +preserve the Emacs-state keys in Org mode. Set this option +to t if you want to inherit the -based bindings from Outline +mode." + :group 'evil-collection-outline + :type 'boolean) + +(defcustom evil-collection-outline-enable-in-minor-mode-p t + "Enable Outline mode bindings in Outline minor mode. + +To override individual bindings, modify the minor mode keymap. +For example, \"zB\" is bound to `outline-hide-body' in Outline +mode. To turn off this specific binding in Outline minor mode, +you can do: + + (evil-define-minor-mode-key \='normal \='outline-minor-mode \"zB\" nil)" + :group 'evil-collection-outline + :type 'boolean) + +(defconst evil-collection-outline-maps '(outline-mode-map)) + +;;;###autoload +(defun evil-collection-outline-setup () + "Set up `evil' bindings for `outline'." + (evil-set-initial-state 'outline-mode 'normal) + (when evil-collection-outline-bind-tab-p + (evil-collection-define-key 'normal 'outline-mode-map + (kbd "") 'outline-show-all ; Also "z r" by default + (kbd "") 'outline-toggle-children)) ; Also "z a" by default + (evil-collection-define-key 'normal 'outline-mode-map + ;; folding + ;; Evil default keys: + ;; zO: Show recursively for current branch only. + ;; za: Toggle first level like outline-toggle-children. + ;; zc: Hide complete subtree. + ;; zm: Show only root notes. + ;; zo: Show current node like "za". + ;; zr: Show everything. + ;; "ze" 'outline-hide-entry + ;; "zE" 'outline-show-entry + ;; "zl" 'outline-hide-leaves + ;; "zb" 'outline-show-branches + ;; "zo" 'outline-hide-other + "zB" 'outline-hide-body ; Hide all bodies, Emacs has "C-c C-t". + "zE" 'outline-hide-entry ; Hide current body, Emacs has "C-c C-c". + "ze" 'outline-show-entry ; Show current body only, not subtree, reverse of outline-hide-entry, Emacs has "C-c C-e". + "zl" 'outline-hide-leaves ; Like `outline-hide-body' but for current subtree only, Emacs has "C-c C-l". + "zK" 'outline-show-branches ; Show all children recursively but no body. Emacs has "C-c C-k". + "zk" 'outline-show-children ; Direct children only unlike `outline-show-branches', and no content unlike `outline-show-entry' and `outline-toggle-children'. Emacs has "C-c TAB". + "zu" 'outline-up-heading + + "zp" 'outline-hide-other ; Hide all nodes and bodies except current body. Emacs has "C-c C-o". + ;; outline-hide-sublevels ; q ; Is it any different from `outline-hide-body'? + ;; outline-hide-subtree ; Emacs has "C-c C-d", Evil has default "zc". + ;; outline-show-subtree ; Emacs has "C-c C-s", Evil has default "zO". + + ;; TODO: To mark subtree ("C-c @"), we would need to define a tree object. + + ;; motion + "[[" 'outline-previous-visible-heading + "]]" 'outline-next-visible-heading + (kbd "C-k") 'outline-backward-same-level + (kbd "C-j") 'outline-forward-same-level + "gk" 'outline-backward-same-level + "gj" 'outline-forward-same-level + + (kbd "M-h") 'outline-promote ; Org-mode has "M-", Evil-org has "M-h" + (kbd "M-j") 'outline-move-subtree-down ; Org-mode has "M-", Evil-org has "M-j" + (kbd "M-k") 'outline-move-subtree-up ; Org-mode has "M-", Evil-org has "M-k" + (kbd "M-l") 'outline-demote ; Org-mode has "M-", Evil-org has "M-l" + + (kbd "M-") 'outline-insert-heading) ; Org-mode has "M-" + + ;; Enable bindings in Outline minor mode if requested + (when evil-collection-outline-enable-in-minor-mode-p + (let* ((minor-map (evil-get-minor-mode-keymap 'normal 'outline-minor-mode)) + (major-map (evil-get-auxiliary-keymap outline-mode-map 'normal))) + (set-keymap-parent minor-map major-map)))) + +(provide 'evil-collection-outline) +;;; evil-collection-outline.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/ovpn-mode/evil-collection-ovpn-mode.el b/.config/emacs/lisp/evil-collection/modes/ovpn-mode/evil-collection-ovpn-mode.el new file mode 100644 index 0000000..ca6ec04 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/ovpn-mode/evil-collection-ovpn-mode.el @@ -0,0 +1,56 @@ +;;; evil-collection-ovpn-mode.el --- Bindings for `ovpn-mode' -*- lexical-binding: t -*- + +;; Copyright (C) 2025 Vitor Leal + +;; Author: Vitor Leal +;; Maintainer: Vitor Leal +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, emacs, convenience, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for ovpn-mode. + +;;; Code: +(require 'evil-collection) +(require 'ovpn-mode nil t) + +(defvar ovpn-mode-map) +(defconst evil-collection-ovpn-mode-maps '(ovpn-mode-map)) + +;;;###autoload +(defun evil-collection-ovpn-mode-setup () + "Set up `evil' bindings for `ovpn-mode'." + (evil-collection-define-key 'normal 'ovpn-mode-map + "s" 'ovpn-mode-start-vpn + "n" 'ovpn-mode-start-vpn-with-namespace + "q" 'ovpn-mode-stop-vpn + "r" 'ovpn-mode-restart-vpn + "i" 'ovpn-mode-info-vpn + "$" 'ovpn-mode-buffer-vpn + "o" 'ovpn-mode-edit-vpn + "~" 'ovpn-mode-dir-filter + "d" 'ovpn-mode-dir-set + "a" 'ovpn-mode-active + "J" 'ovpn-mode-ipv6-linux-toggle + "T" 'ovpn-mode-spawn-term-in-namespace + "B" 'ovpn-mode-spawn-browser-in-namespace + "ZZ" 'quit-window + "ZQ" 'evil-quit)) + +(provide 'evil-collection-ovpn-mode) +;;; evil-collection-ovpn-mode.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/p-search/evil-collection-p-search.el b/.config/emacs/lisp/evil-collection/modes/p-search/evil-collection-p-search.el new file mode 100644 index 0000000..346a5ed --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/p-search/evil-collection-p-search.el @@ -0,0 +1,85 @@ +;;; evil-collection-p-search.el --- Bindings for `p-search' -*- lexical-binding: t -*- + +;; Copyright (C) 2024 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.2 +;; Package-Requires: ((emacs "29.1")) +;; Keywords: evil, emacs, convenience, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for p-search. + +;;; Code: +(require 'evil-collection) +(require 'p-search nil t) + +(defvar p-search-mode-map) +(defconst evil-collection-p-search-maps '(p-search-mode-map)) + +(defvar evil-collection-p-search-mode-map (make-sparse-keymap)) + +;; The normal `p-search-mode-map' calls (suppress-keymap map t) +;; which makes some of the evil bindings get to to 'ignore too +;; for some reason. Use a separate minor mode to avoid all of that. +(define-minor-mode evil-collection-p-search-mode + "A minor mode to attach to `p-search' results" + :group 'evil-collection-p-search-mode + :keymap evil-collection-p-search-mode-map + :lighter nil) + +(defun evil-collection-p-search-setup () + "Set up `evil' bindings for p-search." + (add-hook 'p-search-mode-hook 'evil-collection-p-search-mode) + + (evil-collection-define-key 'normal 'evil-collection-p-search-mode-map + "a" 'p-search-add-dwim + "E" 'p-search-edit-dwim + "C" 'p-search-add-candidate-generator + "gr" 'p-search-refresh-buffer + "gR" 'p-search-hard-refresh-buffer + ;; (keymap-set map "i" #'p-search-importance) + "x" 'p-search-kill-entity-at-point + "gj" 'p-search-next-item + (kbd "C-j") 'p-search-next-item + "]]" 'p-search-next-item + "o" 'p-search-observe + "gk" 'p-search-prev-item + (kbd "C-k") 'p-search-prev-item + "[[" 'p-search-prev-item + ;; (keymap-set map "r" #'p-search-reinstantiate-prior) + "P" 'p-search-add-prior + "+" 'p-search-increase-preview-size + "-" 'p-search-decrease-preview-size + (kbd "") 'p-search-toggle-section + (kbd "") 'p-search-find-document + "gv" 'p-search-view-document + "go" 'p-search-view-document + (kbd "C-o") 'p-search-display-document + "gO" 'p-search-display-document + "q" 'p-search-quit + ;; (keymap-set map "C-o" #'p-search-display-file) + ;; (keymap-set map "1" #'p-search-show-level-1) + ;; (keymap-set map "2" #'p-search-show-level-2) + ;; (keymap-set map "3" #'p-search-show-level-3) + "Jg" 'p-search-jump-candidate-generators + "Jp" 'p-search-jump-priors + "Jr" 'p-search-jump-results)) + +(provide 'evil-collection-p-search) +;;; evil-collection-p-search.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/p4/evil-collection-p4.el b/.config/emacs/lisp/evil-collection/modes/p4/evil-collection-p4.el new file mode 100644 index 0000000..69d7892 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/p4/evil-collection-p4.el @@ -0,0 +1,123 @@ +;;; evil-collection-p4.el --- Evil bindings for P4 -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, p4, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for P4. + +;;; Code: +(require 'p4 nil t) +(require 'evil-collection) + +(defvar p4-basic-mode-map) +(defvar p4-basic-list-mode-map) +(defvar p4-opened-list-mode-map) +(defvar p4-status-list-mode-map) +(defvar p4-filelog-mode-map) +(defvar p4-diff-mode-map) +(defvar p4-annotate-mode-map) + +(defconst evil-collection-p4-maps '(p4-basic-mode-map + p4-basic-list-mode-map + p4-opened-list-mode-map + p4-status-list-mode-map + p4-filelog-mode-map + p4-diff-mode-map + p4-annotate-mode-map)) + +;;;###autoload +(defun evil-collection-p4-setup () + "Set up `evil' bindings for `p4'." + (evil-set-initial-state 'p4-basic-mode 'normal) + (evil-set-initial-state 'p4-basic-list-mode 'normal) + (evil-set-initial-state 'p4-opened-list-mode-map 'normal) + (evil-set-initial-state 'p4-status-list-mode-map 'normal) + (evil-set-initial-state 'p4-filelog-mode-map 'normal) + (evil-set-initial-state 'p4-diff-mode-map 'normal) + (evil-set-initial-state 'p4-annotate-mode-map 'normal) + + (evil-collection-define-key 'normal 'p4-basic-mode-map + [mouse-1] 'p4-buffer-mouse-clicked + "k" 'evil-previous-line + "j" 'evil-next-line + (kbd "C-j") 'p4-forward-active-link + (kbd "C-k") 'p4-backward-active-link + (kbd "RET") 'p4-buffer-commands + "q" 'quit-window + "gr" 'revert-buffer + "]]" 'p4-scroll-down-1-window + "[[" 'p4-scroll-up-1-window + "gg" 'p4-top-of-buffer + "G" 'p4-bottom-of-buffer + "=" 'delete-other-windows) + + (evil-collection-define-key 'normal 'p4-basic-list-mode-map + (kbd "RET") 'p4-basic-list-activate) + + (evil-collection-define-key 'normal 'p4-opened-list-mode-map + "R" 'p4-revert + "T" 'p4-opened-list-type + "C" 'p4-opened-list-change) + + (evil-collection-define-key 'normal 'p4-status-list-mode-map + (kbd "RET") 'p4-status-list-activate) + + (evil-collection-define-key 'normal 'p4-filelog-mode-map + "d" 'p4-diff2 + "gf" 'p4-find-file-other-window + "S" 'p4-filelog-short-format + "L" 'p4-filelog-long-format + " " 'p4-scroll-up-1-window + "gg" 'p4-top-of-buffer + "G" 'p4-bottom-of-buffer + "=" 'p4-delete-other-windows + "]]" 'p4-goto-next-change + "[[" 'p4-goto-prev-change + (kbd "C-j") 'p4-goto-next-change + (kbd "C-k") 'p4-goto-prev-change) + + (evil-collection-define-key 'normal 'p4-diff-mode-map + "]]" 'diff-hunk-next + (kbd "C-j") 'diff-hunk-next + (kbd "M-j") 'diff-file-next + "[[" 'diff-hunk-prev + (kbd "C-k") 'diff-hunk-prev + (kbd "M-k") 'diff-file-prev + "\t" 'diff-hunk-next + [backtab] 'diff-hunk-prev + "}" 'diff-file-next + "{" 'diff-file-prev + "\C-m" 'p4-buffer-commands + [mouse-2] 'p4-buffer-commands + "gb" 'p4-buffer-commands) + + (evil-collection-define-key 'normal 'p4-annotate-mode-map + "]]" 'p4-next-change-rev-line + "[[" 'p4-prev-change-rev-line + (kbd "C-j") 'p4-next-change-rev-line + (kbd "C-k") 'p4-prev-change-rev-line + "L" 'p4-toggle-line-wrap)) + +(provide 'evil-collection-p4) +;;; evil-collection-p4.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/package-menu/README.org b/.config/emacs/lisp/evil-collection/modes/package-menu/README.org new file mode 100644 index 0000000..c001fc5 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/package-menu/README.org @@ -0,0 +1,22 @@ +* package-menu + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Package-Menu.html][package-menu-mode]]. + + Standard read-only motion bindings are installed via + =evil-collection-set-readonly-bindings=. + +** Key bindings + + | Command | Original | Evil | + |----------------------------------+----------+------| + | =package-menu-mark-install= | =i= | =i= | + | =package-menu-mark-upgrades= | =U= | =U= | + | =package-menu-mark-delete= | =d= | =d= | + | =package-menu-mark-unmark= | =u= | =u= | + | =package-menu-execute= | =x= | =x= | + | =package-menu-describe-package= | =RET= | =g?= | + | =revert-buffer= | =g=, =r= | =gr= | + | =package-browse-url= (Emacs 28+) | =w= | =B= | + + The =/=-prefixed filter commands, =H= (hide), =(= (toggle-hiding), =~=, =b= + (report-bug), =S= (sort), and other defaults remain at their upstream keys. diff --git a/.config/emacs/lisp/evil-collection/modes/package-menu/evil-collection-package-menu.el b/.config/emacs/lisp/evil-collection/modes/package-menu/evil-collection-package-menu.el new file mode 100644 index 0000000..40a8f38 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/package-menu/evil-collection-package-menu.el @@ -0,0 +1,60 @@ +;;; evil-collection-package-menu.el --- Evil bindings for package-menu -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, package-menu, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil integration for `package-menu-mode'. + +;;; Code: +(require 'evil-collection) +(require 'package) + +(defconst evil-collection-package-menu-maps '(package-menu-mode-map)) + +;;;###autoload +(defun evil-collection-package-menu-setup () + "Set up `evil' bindings for `package-menu'." + (evil-set-initial-state 'package-menu-mode 'normal) + (evil-collection-set-readonly-bindings 'package-menu-mode-map) + (evil-collection-define-key 'normal 'package-menu-mode-map + "i" 'package-menu-mark-install + "U" 'package-menu-mark-upgrades + "d" 'package-menu-mark-delete + "gr" 'revert-buffer + + ;; undo + "u" 'package-menu-mark-unmark + + ;; execute + "x" 'package-menu-execute + + "g?" 'package-menu-describe-package) + + ;; It's introduced since Emacs 28. + (when (fboundp 'package-browse-url) + (evil-collection-define-key 'normal 'package-menu-mode-map + "B" 'package-browse-url))) + +(provide 'evil-collection-package-menu) +;;; evil-collection-package-menu.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/pass/evil-collection-pass.el b/.config/emacs/lisp/evil-collection/modes/pass/evil-collection-pass.el new file mode 100644 index 0000000..02457d3 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/pass/evil-collection-pass.el @@ -0,0 +1,102 @@ +;;; evil-collection-pass.el --- Evil bindings for pass-mode -*- lexical-binding: t -*- + +;; Copyright (C) 2021 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, pass, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for `pass-mode'. + +;;; Code: +(require 'evil-collection) +(require 'pass nil t) + +(defvar pass-mode-map) + +(declare-function pass--display-keybinding "pass") + +(defconst evil-collection-pass-maps '(pass-mode-map)) + +(defvar evil-collection-pass-command-to-label + '((pass-copy-field . "yf") + (pass-copy-username . "yn") + (pass-copy-url . "yu")) + "Alist holding labels to be used in `pass' header.") + +(defun evil-collection-pass-display-keybinding (f &rest args) + "A version of `pass--display-keybinding' that handles displaying +keybindings listed in `evil-collection-pass-command-to-label'." + (if (alist-get (car args) evil-collection-pass-command-to-label) + (insert + (format + "%8s %-13s \t " + (format "%s" + (propertize + (format + "<%s>" + (alist-get (car args) + evil-collection-pass-command-to-label)) + 'face 'font-lock-constant-face)) + (cadr args))) + (apply f args))) + +;;;###autoload +(defun evil-collection-pass-setup () + "Set up `evil' bindings for `pass-mode'." + + (advice-add 'pass--display-keybinding + :around 'evil-collection-pass-display-keybinding) + + (evil-collection-define-operator-key 'yank 'pass-mode-map + "f" 'pass-copy-field + "n" 'pass-copy-username + "u" 'pass-copy-url) + + ;; https://github.com/NicolasPetton/pass/pull/47 + (when (fboundp 'pass-edit) + (evil-collection-define-key 'normal 'pass-mode-map + "E" 'pass-edit)) + + (evil-collection-define-key 'normal 'pass-mode-map + "gj" 'pass-next-entry + "gk" 'pass-prev-entry + (kbd "C-j") 'pass-next-entry + (kbd "C-k") 'pass-prev-entry + (kbd "]]") 'pass-next-directory + (kbd "[[") 'pass-prev-directory + "d" 'pass-kill + "x" 'pass-kill + "s" 'isearch-forward + "J" 'pass-goto-entry + "g?" 'describe-mode + "gr" 'pass-update-buffer + "i" 'pass-insert + "I" 'pass-insert-generated + "Y" 'pass-copy + "r" 'pass-rename + "R" 'pass-rename + "o" 'pass-otp-options + (kbd "RET") 'pass-view + "q" 'pass-quit)) + +(provide 'evil-collection-pass) +;;; evil-collection-pass.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/pdf/evil-collection-pdf.el b/.config/emacs/lisp/evil-collection/modes/pdf/evil-collection-pdf.el new file mode 100644 index 0000000..8555e43 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/pdf/evil-collection-pdf.el @@ -0,0 +1,320 @@ +;;; evil-collection-pdf.el --- Evil bindings for pdf-tools -*- lexical-binding: t -*- + +;; Copyright (C) 2017, 2024 Pierre Neidhardt + +;; Author: Pierre Neidhardt +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, pdf, tools + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: +;; Evil bindings for pdf-tools. + +;;; Code: +(require 'evil-collection) +(require 'pdf-tools nil t) +(require 'pdf-view nil t) +(require 'pdf-history nil t) + +(defconst evil-collection-pdf-maps '(pdf-view-mode-map + pdf-history-minor-mode-map + pdf-outline-buffer-mode-map + pdf-occur-buffer-mode-map)) + +(declare-function pdf-view-last-page "pdf-view") +(declare-function pdf-view-first-page "pdf-view") +(declare-function pdf-view-goto-page "pdf-view") +(declare-function pdf-view-previous-line-or-previous-page "pdf-view") +(declare-function pdf-view-next-line-or-next-page "pdf-view") +(declare-function pdf-view-assert-active-region "pdf-view") +(declare-function pdf-view-active-region-text "pdf-view") +(declare-function pdf-view-deactivate-region "pdf-view") +(declare-function pdf-history-forward "pdf-history") +(declare-function pdf-history-backward "pdf-history") + +(defvar pdf-view-mode-map) +(defvar pdf-history-minor-mode-map) +(defvar pdf-outline-buffer-mode-map) +(defvar pdf-occur-buffer-mode-map) + +(defun evil-collection-pdf-view-goto-page (&optional page) + "`evil' wrapper around `pdf-view-last-page'." + (interactive "P") + (if page + (pdf-view-goto-page page) + (let ((hscroll (window-hscroll))) + (pdf-view-last-page) + (image-eob) + (image-set-window-hscroll hscroll)))) + +(defun evil-collection-pdf-view-goto-first-page (&optional page) + "`evil' wrapper around `pdf-view-first-page'." + (interactive "P") + (if page + (pdf-view-goto-page page) + (let ((hscroll (window-hscroll))) + (pdf-view-first-page) + (image-bob) + (image-set-window-hscroll hscroll)))) + +(defun evil-collection-pdf-jump-forward (&optional count) + "Wrap `pdf-history-forward' with `evil'. + +Consider COUNT." + (interactive "P") + (pdf-history-forward (or count 1))) + +(defun evil-collection-pdf-jump-backward (&optional count) + "Wrap `pdf-history-backward' with `evil'. + +Consider COUNT." + (interactive "P") + (pdf-history-backward (or count 1))) + +(defun evil-collection-pdf-yank () + "Save the text of the active region into the currently selected register." + (interactive) + (pdf-view-assert-active-region) + (let ((txt (pdf-view-active-region-text)) + (reg evil-this-register)) + (pdf-view-deactivate-region) + (evil-set-register + (or reg ?\") + (mapconcat #'identity txt nil)))) + +(defun evil-collection-pdf-disable-visual-mode () + "Don't enter visual-mode when the mark is activated. +Rationale: pdf-view allows using the region to select text within the pdf, +but evil-mode does not know how to do this. It selects entire pdf images +instead, which is useless and counterintuitive." + (add-hook 'evil-local-mode-hook + (lambda () (remove-hook + 'activate-mark-hook + 'evil-visual-activate-hook + t)) + nil t)) + +;;;###autoload +(defun evil-collection-pdf-setup () + "Set up `evil' bindings for `pdf-view'." + (evil-collection-inhibit-insert-state 'pdf-view-mode-map) + (evil-set-initial-state 'pdf-view-mode 'normal) + (evil-collection-define-key 'normal 'pdf-view-mode-map + ;; motion + (kbd "RET") 'image-next-line + "j" 'pdf-view-next-line-or-next-page + "k" 'pdf-view-previous-line-or-previous-page + (kbd "SPC") 'pdf-view-scroll-up-or-next-page + (kbd "S-SPC") 'pdf-view-scroll-down-or-previous-page + (kbd "") 'pdf-view-scroll-down-or-previous-page + (kbd "C-f") 'pdf-view-scroll-up-or-next-page + (kbd "C-b") 'pdf-view-scroll-down-or-previous-page + "]]" 'pdf-view-next-page-command + "[[" 'pdf-view-previous-page-command + (kbd "C-j") 'pdf-view-next-page-command + (kbd "C-k") 'pdf-view-previous-page-command + "gj" 'pdf-view-next-page-command + "gk" 'pdf-view-previous-page-command + (kbd "") 'forward-page + (kbd "") 'backward-page + (kbd "") 'pdf-view-next-line-or-next-page + (kbd "") 'pdf-view-previous-line-or-previous-page + "gg" 'evil-collection-pdf-view-goto-first-page + "G" 'evil-collection-pdf-view-goto-page + + ;; mark + "'" 'pdf-view-jump-to-register + "m" 'pdf-view-position-to-register + + ;; zoom + "+" 'pdf-view-enlarge + "zi" 'pdf-view-enlarge + "=" 'pdf-view-enlarge + "-" 'pdf-view-shrink + "zo" 'pdf-view-shrink + "0" 'pdf-view-scale-reset + "z0" 'pdf-view-scale-reset + + "f" 'pdf-links-isearch-link + "F" 'pdf-links-action-perform + "h" 'image-backward-hscroll + "^" 'image-bol + "$" 'image-eol + "l" 'image-forward-hscroll + + "H" 'pdf-view-fit-height-to-window ; evil-image has "H" + "P" 'pdf-view-fit-page-to-window + "W" 'pdf-view-fit-width-to-window ; evil-image has "W" + + ;; refresh + "gr" 'revert-buffer + + (kbd "") 'pdf-view-mouse-extend-region + (kbd "") 'pdf-view-mouse-set-region-rectangle + (kbd "") 'pdf-view-mouse-set-region + + (kbd "C-c C-c") 'doc-view-mode + (kbd "C-c ") 'pdf-view-extract-region-image + + "sb" 'pdf-view-set-slice-from-bounding-box + "sm" 'pdf-view-set-slice-using-mouse + "sr" 'pdf-view-reset-slice + + ;; goto + "gl" 'pdf-view-goto-label + + ;; search + (kbd "M-s o") 'pdf-occur ; TODO: More Evil bindings? + + "/" 'isearch-forward + "?" 'isearch-backward + "n" 'isearch-repeat-forward + "N" 'isearch-repeat-backward + + "zd" 'pdf-view-dark-minor-mode + "zm" 'pdf-view-midnight-minor-mode + "zp" 'pdf-view-printer-minor-mode + + "o" 'pdf-outline + + ;; quit + "q" 'quit-window + "Q" 'kill-current-buffer + "ZQ" 'kill-current-buffer + "ZZ" 'quit-window) + + + (when evil-want-C-d-scroll + (evil-collection-define-key 'normal 'pdf-view-mode-map + (kbd "C-d") 'pdf-view-scroll-up-or-next-page)) + (when evil-want-C-u-scroll + (evil-collection-define-key 'normal 'pdf-view-mode-map + (kbd "C-u") 'pdf-view-scroll-down-or-previous-page)) + + (add-hook 'pdf-view-mode-hook #'evil-collection-pdf-disable-visual-mode) + + (evil-collection-define-key 'normal 'pdf-view-mode-map + "y" 'evil-collection-pdf-yank) + + (evil-collection-inhibit-insert-state 'pdf-history-minor-mode-map) + (evil-set-initial-state 'pdf-history-minor-mode 'normal) + (evil-collection-define-key 'normal 'pdf-history-minor-mode-map + ;; history forward / backward + (kbd "C-i") 'evil-collection-pdf-jump-forward + (kbd "C-o") 'evil-collection-pdf-jump-backward) + + (evil-collection-inhibit-insert-state 'pdf-outline-buffer-mode-map) + (evil-set-initial-state 'pdf-outline-buffer-mode 'normal) + (evil-collection-define-key 'normal 'pdf-outline-buffer-mode-map + ;; open + (kbd "RET") 'pdf-outline-follow-link-and-quit + (kbd "S-") 'pdf-outline-follow-link + (kbd "M-") 'pdf-outline-display-link + "go" 'pdf-outline-follow-link + "." 'pdf-outline-move-to-current-page + (kbd "SPC") 'pdf-outline-select-pdf-window + + "G" 'pdf-outline-end-of-buffer + "^" 'pdf-outline-up-heading + "<" 'pdf-outline-up-heading ; TODO: Don't set this by default? + + "zf" 'pdf-outline-follow-mode ; Helm has "C-c C-f" in Emacs state. + + (kbd "") 'outline-toggle-children + (kbd "") 'pdf-outline-toggle-subtree + + ;; quit + (kbd "C-w q") 'pdf-outline-quit-and-kill ; TODO: Do we need to set this? I think not. + "q" 'quit-window + "ZQ" 'quit-window + "ZZ" 'pdf-outline-quit-and-kill) + + (evil-collection-inhibit-insert-state 'pdf-occur-buffer-mode-map) + (evil-set-initial-state 'pdf-occur-buffer-mode 'normal) + (evil-collection-define-key 'normal 'pdf-occur-buffer-mode-map + ;; open + (kbd "RET") 'pdf-occur-goto-occurrence + (kbd "S-") 'pdf-occur-view-occurrence + (kbd "SPC") 'pdf-occur-view-occurrence + "gd" 'pdf-occur-goto-occurrence + "gD" 'pdf-occur-view-occurrence + + "A" 'pdf-occur-tablist-gather-documents + "D" 'pdf-occur-tablist-do-delete + + ;; sort + "o" 'tabulated-list-sort + "O" 'tablist-sort ; TODO: Do we need this? + + ;; refresh + "G" 'tablist-revert + + "K" 'pdf-occur-abort-search + + ;; mark + "*m" 'tablist-mark-forward + "m" 'tablist-mark-forward + "~" 'tablist-toggle-marks + "u" 'tablist-unmark-forward + "U" 'tablist-unmark-all-marks + "*!" 'tablist-unmark-all-marks + "*c" 'tablist-change-marks + "*n" 'tablist-mark-items-numeric + "*r" 'tablist-mark-items-regexp + "%" 'tablist-mark-items-regexp + + "a" 'tablist-flag-forward + + ;; "f" 'tablist-find-entry ; TODO: Equivalent to 'pdf-occur-goto-occurrence? + "r" 'pdf-occur-revert-buffer-with-args + "d" 'tablist-do-kill-lines + "x" 'pdf-occur-tablist-do-flagged-delete + (kbd "") 'tablist-unmark-backward + (kbd "S-SPC") 'scroll-down-command + (kbd "") 'tablist-backward-column + (kbd "C-c C-e") 'tablist-export-csv + + [remap evil-first-non-blank] 'tablist-move-to-major-column + [remap evil-next-line] 'tablist-next-line + [remap evil-previous-line] 'tablist-previous-line + + ;; filter + ;; TODO: See if overriding "/" is a good idea. + "/!" 'tablist-negate-filter + "//" 'tablist-display-filter + "/=" 'tablist-push-equal-filter + "/C" 'tablist-clear-filter + "/D" 'tablist-delete-named-filter + "/a" 'tablist-push-named-filter + "/d" 'tablist-deconstruct-named-filter + "/e" 'tablist-edit-filter + "/n" 'tablist-push-numeric-filter + "/p" 'tablist-pop-filter + "/r" 'tablist-push-regexp-filter + "/s" 'tablist-name-current-filter + "/t" 'tablist-toggle-first-filter-logic + "/z" 'tablist-suspend-filter + + ;; quit + "q" 'tablist-quit + "ZQ" 'tablist-quit + "ZZ" 'tablist-quit)) + +(provide 'evil-collection-pdf) +;;; evil-collection-pdf.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/popup/README.org b/.config/emacs/lisp/evil-collection/modes/popup/README.org new file mode 100644 index 0000000..4409b19 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/popup/README.org @@ -0,0 +1,12 @@ +* popup + + Evil bindings for [[https://github.com/auto-complete/popup-el][popup.el]] menus. + +** Key bindings + +*** popup-menu-keymap + + | Command | Original | Evil | + |------------------+----------+-------| + | =popup-next= | =C-n= | =C-j= | + | =popup-previous= | =C-p= | =C-k= | diff --git a/.config/emacs/lisp/evil-collection/modes/popup/evil-collection-popup.el b/.config/emacs/lisp/evil-collection/modes/popup/evil-collection-popup.el new file mode 100644 index 0000000..67ea70a --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/popup/evil-collection-popup.el @@ -0,0 +1,44 @@ +;;; evil-collection-popup.el --- Bindings for `popup' -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, emacs, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Bindings for `popup'. + +;;; Code: +(require 'evil-collection) +(require 'popup nil t) + +(defconst evil-collection-popup-maps '(popup-menu-keymap)) + +;;;###autoload +(defun evil-collection-popup-setup () + "Set up `evil' bindings for `popup'." + (defvar popup-menu-keymap) + (evil-collection-define-key nil 'popup-menu-keymap + (kbd "C-j") 'popup-next + (kbd "C-k") 'popup-previous)) + +(provide 'evil-collection-popup) +;;; evil-collection-popup.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/proced/README.org b/.config/emacs/lisp/evil-collection/modes/proced/README.org new file mode 100644 index 0000000..5789230 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/proced/README.org @@ -0,0 +1,33 @@ +* proced + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Processes.html][proced]]. + +** Key bindings + + | Command | Original | Evil | + |-----------------------------+----------+----------| + | =proced-refine= | =RET= | =RET= | + | =proced-mark= | =m=, =d= | =m= | + | =proced-mark-all= | =M= | =*=, =M= | + | =proced-unmark-all= | =U= | =U= | + | =proced-toggle-marks= | =t= | =~= | + | =proced-mark-children= | =C= | =c=, =C= | + | =proced-mark-parents= | =P= | =p=, =P= | + | =proced-unmark-backward= | =DEL= | =DEL= | + | =evil-scroll-down= | n/a | =SPC= | + | =evil-scroll-up= | n/a | =S-SPC= | + | =proced-toggle-tree= | =T= | =zt= | + | =proced-undo= | n/a | =u= | + | =proced-omit-processes= | =o= | =O= | + | =proced-send-signal= | =k=, =x= | =x= | + | =proced-filter-interactive= | =f= | =s= | + | =proced-format-interactive= | =F= | =S= | + | =proced-sort-start= | =s s= | =oo= | + | =proced-sort-interactive= | =s S= | =oO= | + | =proced-sort-pcpu= | =s c= | =oc= | + | =proced-sort-pmem= | =s m= | =om= | + | =proced-sort-pid= | =s p= | =op= | + | =proced-sort-time= | =s t= | =ot= | + | =proced-sort-user= | =s u= | =ou= | + | =proced-renice= | =r= | =r= | + | =revert-buffer= | n/a | =gr= | diff --git a/.config/emacs/lisp/evil-collection/modes/proced/evil-collection-proced.el b/.config/emacs/lisp/evil-collection/modes/proced/evil-collection-proced.el new file mode 100644 index 0000000..8723cd8 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/proced/evil-collection-proced.el @@ -0,0 +1,88 @@ +;;; evil-collection-proced.el --- Evil bindings for proced -*- lexical-binding: t -*- + +;; Copyright (C) 2017 Pierre Neidhardt + +;; Author: Pierre Neidhardt +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, proced, tools + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: +;; Evil bindings for proced. + +;;; Code: +(require 'evil-collection) +(require 'proced) + +(defconst evil-collection-proced-maps '(proced-mode-map)) + +;;;###autoload +(defun evil-collection-proced-setup () + "Set up `evil' bindings for `proced'." + (evil-collection-set-readonly-bindings 'proced-mode-map) + (evil-set-initial-state 'proced-mode 'normal) + (evil-collection-define-key 'normal 'proced-mode-map + (kbd "RET") 'proced-refine + + ;; mark + ;; TODO: Implement a proced-toggle-mark? + "m" 'proced-mark ; Mentioned in documentation, should be followed. + "*" 'proced-mark-all + "M" 'proced-mark-all + "U" 'proced-unmark-all + "~" 'proced-toggle-marks + "c" 'proced-mark-children + "C" 'proced-mark-children ; Emacs has "C" + "p" 'proced-mark-parents + "P" 'proced-mark-parents ; Emacs has "P" + (kbd "") 'proced-unmark-backward + + ;; motion + ;; TODO: Implement beginning-of-buffer / end-of-buffer. + (kbd "SPC") 'evil-scroll-down + (kbd "S-SPC") 'evil-scroll-up + + "zt" 'proced-toggle-tree + + "u" 'proced-undo + + "O" 'proced-omit-processes ; TODO: Change default binding? + + "x" 'proced-send-signal ; Emacs has "k" and "x", "k" is mentioned in documentation + + ;; filter + "s" 'proced-filter-interactive ; Refers to "[s]elect", Emacs has "f" mentioned in documentation. + "S" 'proced-format-interactive + + ;; sort + "oo" 'proced-sort-start ; Refers to "[o]rder", Emacs has "s" mentioned in documentation. + "oO" 'proced-sort-interactive + "oc" 'proced-sort-pcpu + "om" 'proced-sort-pmem + "op" 'proced-sort-pid + "ot" 'proced-sort-time + "ou" 'proced-sort-user + + "r" 'proced-renice + + ;; refresh + "gr" 'revert-buffer)) + +(provide 'evil-collection-proced) +;;; evil-collection-proced.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/process-menu/README.org b/.config/emacs/lisp/evil-collection/modes/process-menu/README.org new file mode 100644 index 0000000..c82676c --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/process-menu/README.org @@ -0,0 +1,18 @@ +* process-menu + + Evil bindings for =process-menu-mode= (=M-x list-processes=). + + Read-only motion / quit bindings come from + =evil-collection-set-readonly-bindings= and are not repeated below. + +** Key bindings + + | Command | Original | Evil | + |-------------------------------+----------+---------| + | =process-menu-delete-process= | =d= | =D= | + | =tabulated-list-sort= | =S= | =S= | + | =forward-button= | n/a | =TAB= | + | =backward-button= | n/a | =S-TAB= | + | =evil-scroll-down= | n/a | =SPC= | + | =evil-scroll-up= | n/a | =S-SPC= | + | =revert-buffer= | n/a | =gr= | diff --git a/.config/emacs/lisp/evil-collection/modes/process-menu/evil-collection-process-menu.el b/.config/emacs/lisp/evil-collection/modes/process-menu/evil-collection-process-menu.el new file mode 100644 index 0000000..af5ce21 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/process-menu/evil-collection-process-menu.el @@ -0,0 +1,54 @@ +;;; evil-collection-process-menu.el --- Evil bindings for process-menu-mode -*- lexical-binding: t -*- + +;; Copyright (C) 2019 Pierre Neidhardt + +;; Author: Pierre Neidhardt +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, process, tools + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: +;; Evil bindings for process-menu-mode (M-x list-processes). + +;;; Code: +(require 'evil-collection) + +(defconst evil-collection-process-menu-maps '(process-menu-mode-map)) + +;;;###autoload +(defun evil-collection-process-menu-setup () + "Set up `evil' bindings for `list-processes'." + (evil-collection-set-readonly-bindings 'process-menu-mode-map) + (evil-collection-define-key 'normal 'process-menu-mode-map + (kbd "") 'forward-button + (kbd "") 'backward-button + + "S" 'tabulated-list-sort + "D" 'process-menu-delete-process + + ;; motion + ;; TODO: Implement beginning-of-buffer / end-of-buffer. + (kbd "SPC") 'evil-scroll-down + (kbd "S-SPC") 'evil-scroll-up + + ;; refresh + "gr" 'revert-buffer)) + +(provide 'evil-collection-process-menu) +;;; evil-collection-process-menu.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/prodigy/evil-collection-prodigy.el b/.config/emacs/lisp/evil-collection/modes/prodigy/evil-collection-prodigy.el new file mode 100644 index 0000000..18f28f9 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/prodigy/evil-collection-prodigy.el @@ -0,0 +1,86 @@ +;;; evil-collection-prodigy.el --- Evil bindings for prodigy -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, prodigy, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for `prodigy'. + +;;; Code: +(require 'evil-collection) +(require 'prodigy nil t) + +(defconst evil-collection-prodigy-maps '(prodigy-mode-map + prodigy-view-mode-map)) + +;;;###autoload +(defun evil-collection-prodigy-setup () + "Set up `evil' bindings for `prodigy'." + (evil-collection-define-key 'normal 'prodigy-mode-map + ;; quit + "q" 'quit-window + + "j" 'prodigy-next + "k" 'prodigy-prev + "gg" 'prodigy-first + "G" 'prodigy-last + + ;; mark + "m" 'prodigy-mark + "*t" 'prodigy-mark-tag + "M" 'prodigy-mark-all + "u" 'prodigy-unmark + "*T" 'prodigy-unmark-tag + "U" 'prodigy-unmark-all + + "s" 'prodigy-start + "S" 'prodigy-stop + + ;; refresh + "gr" 'prodigy-restart + + "`" 'prodigy-display-process + (kbd "RET") 'prodigy-browse + "it" 'prodigy-add-tag-filter + "in" 'prodigy-add-name-filter + "I" 'prodigy-clear-filters + "Jm" 'prodigy-jump-magit + "Jd" 'prodigy-jump-file-manager + + "gj" 'prodigy-next-with-status + "gk" 'prodigy-prev-with-status + (kbd "C-j") 'prodigy-next-with-status + (kbd "C-k") 'prodigy-prev-with-status + (kbd "Y") 'prodigy-copy-cmd) + + (evil-collection-define-key 'normal 'prodigy-view-mode-map + "s" 'prodigy-start + "S" 'prodigy-stop + "gr" 'prodigy-restart + "r" 'prodigy-restart + "c" 'prodigy-view-clear-buffer + (kbd "C-l") 'prodigy-view-clear-buffer + "x" 'prodigy-view-clear-buffer)) + +(provide 'evil-collection-prodigy) +;;; evil-collection-prodigy.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/profiler/README.org b/.config/emacs/lisp/evil-collection/modes/profiler/README.org new file mode 100644 index 0000000..79bd707 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/profiler/README.org @@ -0,0 +1,25 @@ +* profiler + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/elisp/Profiling.html][profiler]]. + +** Key bindings + + Bindings added to =profiler-report-mode-map= in normal state. + + | Command | Original | Evil | + |--------------------------------------------+------------+---------------------| + | =profiler-report-next-entry= | =n= | =j= | + | =profiler-report-previous-entry= | =p= | =k= | + | =profiler-report-toggle-entry= | =RET=, =i= | =TAB= | + | =profiler-report-find-entry= | =f=, =j= | =RET= | + | =profiler-report-describe-entry= | =d= | =i= | + | =profiler-report-render-calltree= | =C= | =c= | + | =profiler-report-render-reversed-calltree= | =B= | =C= | + | =profiler-report-ascending-sort= | =A= | =o= | + | =profiler-report-descending-sort= | =D= | =O= | + | =profiler-report-compare-profile= | === | === | + | =scroll-up-command= | n/a | =SPC= | + | =scroll-down-command= | n/a | =S-SPC=, == | + | =revert-buffer= | n/a | =gr= | + | =quit-window= | n/a | =q=, =ZZ= | + | =evil-quit= | n/a | =ZQ= | diff --git a/.config/emacs/lisp/evil-collection/modes/profiler/evil-collection-profiler.el b/.config/emacs/lisp/evil-collection/modes/profiler/evil-collection-profiler.el new file mode 100644 index 0000000..ce0c6ff --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/profiler/evil-collection-profiler.el @@ -0,0 +1,71 @@ +;;; evil-collection-profiler.el --- Evil bindings for profiler -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: Pierre Neidhardt +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, profiler, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for `profiler'. + +;;; Code: +(require 'evil-collection) +(require 'profiler) + +(defconst evil-collection-profiler-maps '(profiler-report-mode-map)) + +;;;###autoload +(defun evil-collection-profiler-setup () + "Set up `evil' bindings for `profiler'." + (evil-set-initial-state 'profiler-report-mode 'normal) + + (evil-collection-define-key 'normal 'profiler-report-mode-map + ;; motion + (kbd "SPC") 'scroll-up-command + (kbd "S-SPC") 'scroll-down-command + (kbd "") 'scroll-down-command + "j" 'profiler-report-next-entry + "k" 'profiler-report-previous-entry + + (kbd "") 'profiler-report-toggle-entry + + ;; sort + "o" 'profiler-report-ascending-sort + "O" 'profiler-report-descending-sort + + "c" 'profiler-report-render-calltree + "C" 'profiler-report-render-reversed-calltree + "i" 'profiler-report-describe-entry + "=" 'profiler-report-compare-profile + + ;; open + (kbd "RET") 'profiler-report-find-entry + + ;; refresh + "gr" 'revert-buffer + + ;; quit + "q" 'quit-window + "ZQ" 'evil-quit + "ZZ" 'quit-windw)) + +(provide 'evil-collection-profiler) +;;; evil-collection-profiler.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/python/README.org b/.config/emacs/lisp/evil-collection/modes/python/README.org new file mode 100644 index 0000000..1daae7e --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/python/README.org @@ -0,0 +1,17 @@ +* python + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Python.html][python-mode]]. + +** Key bindings + + Applied to =python-mode-map=, =python-ts-mode-map=, and + =python-base-mode-map= in normal state. + + | Command | Original | Evil | + |--------------------------------+-----------+------| + | =python-shell-switch-to-shell= | =C-c C-z= | =gz= | + +** Notes + + - =evil-shift-width= is set to =python-indent-offset= on + =python-mode-hook= and =python-ts-mode-hook=. diff --git a/.config/emacs/lisp/evil-collection/modes/python/evil-collection-python.el b/.config/emacs/lisp/evil-collection/modes/python/evil-collection-python.el new file mode 100644 index 0000000..c71395e --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/python/evil-collection-python.el @@ -0,0 +1,52 @@ +;;; evil-collection-python.el --- Bindings for `python' -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: emacs, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for `python'. + +;;; Code: +(require 'evil-collection) +(require 'python) + +(defconst evil-collection-python-maps '(python-mode-map + python-ts-mode-map + python-base-mode-map)) + +(defun evil-collection-python-set-evil-shift-width () + "Set `evil-shift-width' according to `python-indent-offset'." + (setq-local evil-shift-width python-indent-offset)) + +;;;###autoload +(defun evil-collection-python-setup () + "Set up `evil' bindings for `python'." + (dolist (hook '(python-mode-hook python-ts-mode-hook)) + (add-hook hook #'evil-collection-python-set-evil-shift-width)) + + (dolist (kmap evil-collection-python-maps) + (evil-collection-define-key 'normal kmap + "gz" 'python-shell-switch-to-shell))) + +(provide 'evil-collection-python) +;;; evil-collection-python.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/quickrun/evil-collection-quickrun.el b/.config/emacs/lisp/evil-collection/modes/quickrun/evil-collection-quickrun.el new file mode 100644 index 0000000..af27992 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/quickrun/evil-collection-quickrun.el @@ -0,0 +1,42 @@ +;;; evil-collection-quickrun.el --- Bindings for `quickrun' -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, emacs, tools, quickrun + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Bindings for `quickrun'. + +;;; Code: +(require 'evil-collection) +(require 'quickrun nil t) + +(defconst evil-collection-quickrun-maps '(quickrun--mode-map)) + +;;;###autoload +(defun evil-collection-quickrun-setup () + "Set up `evil' bindings for `quickrun'.." + (evil-collection-define-key 'normal 'quickrun--mode-map + "q" 'quit-window)) + +(provide 'evil-collection-quickrun) +;;; evil-collection-quickrun.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/racer/evil-collection-racer.el b/.config/emacs/lisp/evil-collection/modes/racer/evil-collection-racer.el new file mode 100644 index 0000000..7283669 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/racer/evil-collection-racer.el @@ -0,0 +1,48 @@ +;;; evil-collection-racer.el --- Bindings for `racer' -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: emacs, rust, tools, evil + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Bindings for `racer'. + +;;; Code: +(require 'evil-collection) +(require 'racer nil t) + +(defconst evil-collection-racer-maps '(racer-mode-map + racer-help-mode-map)) + +;;;###autoload +(defun evil-collection-racer-setup () + "Set up `evil' bindings for `racer'." + (evil-collection-define-key 'normal 'racer-mode-map + "gd" 'racer-find-definition + (kbd "C-t") 'pop-tag-mark + "K" 'racer-describe) + + (evil-collection-define-key 'normal 'racer-help-mode-map + "q" 'quit-window)) + +(provide 'evil-collection-racer) +;;; evil-collection-racer.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/racket-describe/evil-collection-racket-describe.el b/.config/emacs/lisp/evil-collection/modes/racket-describe/evil-collection-racket-describe.el new file mode 100644 index 0000000..a7d24e1 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/racket-describe/evil-collection-racket-describe.el @@ -0,0 +1,45 @@ +;;; evil-collection-racket-describe.el --- Bindings for `racket-describe' -*- lexical-binding: t -*- + +;; Copyright (C) 2020 Andre Goderich + +;; Author: Andre Goderich +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, emacs, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Bindings for `racket-describe'. + +;;; Code: +(require 'evil-collection) +(require 'racket-describe nil t) + +(defconst evil-collection-racket-describe-maps '(racket-describe-mode-map)) + +;;;###autoload +(defun evil-collection-racket-describe-setup () + "Set up `evil' bindings for `racket-describe'." + (evil-collection-inhibit-insert-state 'racket-describe-mode-map) + (evil-set-initial-state 'racket-describe-mode 'normal) + (evil-collection-define-key 'normal 'racket-describe-mode-map + "q" 'quit-window + "g?" 'describe-mode)) + +(provide 'evil-collection-racket-describe) +;;; evil-collection-racket-describe.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/reader/evil-collection-reader.el b/.config/emacs/lisp/evil-collection/modes/reader/evil-collection-reader.el new file mode 100644 index 0000000..3fc3187 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/reader/evil-collection-reader.el @@ -0,0 +1,162 @@ +;;; evil-collection-reader.el --- Evil bindings for `reader' -*- lexical-binding: t -*- + +;; Copyright (C) 2025 Icy-Thought + +;; Author: Icy-Thought +;; Maintainer: Icy-Thought +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, emacs, tools, reader + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for Emacs `reader'. + +;;; Code: +(require 'evil-collection) +(require 'reader nil t) + +(declare-function reader-first-page "reader") +(declare-function reader-last-page "reader") +(declare-function reader-goto-page "reader") +(declare-function reader-close-doc "reader") +(declare-function reader-outline-show "reader") +(declare-function reader-presentation-mode "reader") +(declare-function reader-rotate-counter-clockwise "reader") +(declare-function reader-rotate-clockwise "reader") +(declare-function reader-fit-to-width "reader") +(declare-function reader-fit-to-height "reader") +(declare-function reader-mwheel-shrink-size "reader") +(declare-function reader-shrink-size "reader") +(declare-function reader-mwheel-enlarge-size "reader") +(declare-function reader-enlarge-size "reader") +(declare-function reader-scroll-left-most "reader") +(declare-function reader-scroll-right-most "reader") +(declare-function reader-scroll-left "reader") +(declare-function reader-scroll-right "reader") +(declare-function reader-scroll-up-or-prev-page "reader") +(declare-function reader-scroll-down-or-next-page "reader") +(declare-function reader-scroll-down-screen "reader") +(declare-function reader-scroll-up-screen "reader") +(declare-function reader-mwheel-scroll-right "reader") +(declare-function reader-mwheel-scroll-left "reader") +(declare-function reader-mwheel-scroll-down "reader") +(declare-function reader-mwheel-scroll-up "reader") +(declare-function reader-scroll-down-or-next-page "reader") +(declare-function reader-scroll-up-or-prev-page "reader") +(declare-function reader-previous-page "reader") +(declare-function reader-next-page "reader") + +(declare-function reader-outline-visit-page "reader") +(declare-function reader-outline-select-doc-window "reader") + +(defvar reader-mode-map) +(defvar reader-outline-mode-map) + +(defun evil-collection-reader-goto-first-page (&optional page) + "Navigates to `page' X or jump to the FIRST PAGE of the document." + (interactive "P") + (if page + (reader-goto-page page) + (reader-first-page))) + +(defun evil-collection-reader-goto-page (&optional page) + "Navigates to `page' X or jump to the LAST PAGE of the document. +`evil' wrapper around `reader-last-page'." + (interactive "P") + (if page + (reader-goto-page page) + (reader-last-page))) + +(defconst evil-collection-reader-maps + '(reader-mode-map reader-outline-mode-map)) + +;;;###autoload +(defun evil-collection-reader-setup () + "Set up `evil' bindings for `reader'." + (evil-collection-set-readonly-bindings 'reader-mode-map) + + ;; Refresh reader-mode bindings + (add-hook 'reader-mode-hook #'evil-normalize-keymaps) + (add-hook 'reader-outline-mode-hook #'evil-normalize-keymaps) + + (evil-collection-define-key 'normal 'reader-mode-map + "n" #'reader-next-page + "p" #'reader-previous-page + "k" #'reader-scroll-up-or-prev-page + "j" #'reader-scroll-down-or-next-page + [remap next] #'reader-scroll-down-or-next-page + [remap previous] #'reader-scroll-up-or-prev-page + [remap evil-next-line] #'reader-scroll-down-or-next-page + [remap evil-previous-line] #'reader-scroll-up-or-prev-page + + "" #'reader-mwheel-scroll-up + "" #'reader-mwheel-scroll-down + "S-" #'reader-mwheel-scroll-left + "S-" #'reader-mwheel-scroll-right + + "C-b" #'reader-scroll-up-screen + "C-f" #'reader-scroll-down-screen + [remap scroll-down-command] #'reader-scroll-up-screen + [remap scroll-up-command] #'reader-scroll-down-screen + + "SPC" #'reader-scroll-down-or-next-page + "DEL" #'reader-scroll-up-or-prev-page + "S-SPC" #'reader-scroll-up-or-prev-page + + "l" #'reader-scroll-right + "h" #'reader-scroll-left + [remap forward-char] #'reader-scroll-right + [remap backward-char] #'reader-scroll-left + + "$" #'reader-scroll-right-most + "^" #'reader-scroll-left-most + [remap move-end-of-line] #'reader-scroll-right-most + [remap move-beginning-of-line] #'reader-scroll-left-most + + "gg" #'evil-collection-reader-goto-first-page + "G" #'evil-collection-reader-goto-page + [remap beginning-of-buffer] #'reader-first-page + [remap end-of-buffer] #'reader-last-page + [remap goto-line] #'reader-goto-page + + ;; "0" #'evil-collections-reader-reset-zoom + "=" #'reader-enlarge-size + "+" #'reader-enlarge-size + "C-" #'reader-mwheel-enlarge-size + "-" #'reader-shrink-size + "C-" #'reader-mwheel-shrink-size + + "H" #'reader-fit-to-height + "W" #'reader-fit-to-width + + "r" #'reader-rotate-clockwise + "R" #'reader-rotate-counter-clockwise + + "" #'reader-presentation-mode + "o" #'reader-outline-show + "Q" #'reader-close-doc) + + (evil-collection-define-key 'normal 'reader-outline-mode-map + "p" #'previous-line + "n" #'next-line + "o" #'reader-outline-select-doc-window + "q" #'quit-window + "RET" #'reader-outline-visit-page + "M-RET" #'reader-outline-visit-page)) + +(provide 'evil-collection-reader) +;;; evil-collection-reader.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/realgud/evil-collection-realgud.el b/.config/emacs/lisp/evil-collection/modes/realgud/evil-collection-realgud.el new file mode 100644 index 0000000..a8462ae --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/realgud/evil-collection-realgud.el @@ -0,0 +1,103 @@ +;;; evil-collection-realgud.el --- Bindings for `realgud' -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, emacs, tools, realgud + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Bindings for `realgud'. + +;;; Code: +(require 'evil-collection) +(require 'realgud nil t) + +(defconst evil-collection-realgud-maps '(realgud:shortkey-mode-map)) + +;;;###autoload +(defun evil-collection-realgud-setup () + "Set up `evil' bindings for `realgud'." + ;; This one is to represent `realgud-populate-src-buffer-map-plain'. + (evil-collection-define-key 'normal 'realgud:shortkey-mode-map + "b" 'realgud:cmd-break + "D" 'realgud:cmd-delete + "X" 'realgud:cmd-clear + "-" 'realgud:cmd-disable + "+" 'realgud:cmd-enable + "T" 'realgud:cmd-backtrace + "f" 'realgud:cmd-finish + "n" 'realgud:cmd-next + "q" 'realgud:cmd-quit + "Q" 'realgud:cmd-kill + "r" 'realgud:cmd-restart + "R" 'realgud:cmd-restart + "s" 'realgud:cmd-step + "i" 'realgud:cmd-step + "!" 'realgud:cmd-shell + + ;; (evil-collection-define-key nil map [M-down] 'realgud-track-hist-newer) + ;; (evil-collection-define-key nil map [M-kp-2] 'realgud-track-hist-newer) + ;; (evil-collection-define-key nil map [M-up] 'realgud-track-hist-older) + ;; (evil-collection-define-key nil map [M-kp-8] 'realgud-track-hist-older) + ;; (evil-collection-define-key nil map [M-kp-up] 'realgud-track-hist-older) + ;; (evil-collection-define-key nil map [M-kp-down] 'realgud-track-hist-newer) + ;; (evil-collection-define-key nil map [M-print] 'realgud-track-hist-older) + ;; (evil-collection-define-key nil map [M-S-down] 'realgud-track-hist-newest) + ;; (evil-collection-define-key nil map [M-S-up] 'realgud-track-hist-oldest) + ) + + (evil-collection-define-key 'normal 'realgud:shortkey-mode-map + (kbd "C-x C-q") 'realgud-short-key-mode + "1" 'realgud-goto-arrow1 + "2" 'realgud-goto-arrow2 + "3" 'realgud-goto-arrow3 + "4" 'realgud:goto-loc-hist-4 + "5" 'realgud:goto-loc-hist-5 + "6" 'realgud:goto-loc-hist-6 + "7" 'realgud:goto-loc-hist-7 + "8" 'realgud:goto-loc-hist-8 + "9" 'realgud:goto-loc-hist-9 + "b" 'realgud:cmd-break + "J" 'realgud:cmd-jump + "c" 'realgud:cmd-continue + "e" 'realgud:cmd-eval-dwim + "E" 'realgud:cmd-eval-at-point + "U" 'realgud:cmd-until + "H" 'realgud:cmd-until-here + [mouse-2] 'realgud:tooltip-eval + [left-fringe mouse-1] 'realgud-cmds--mouse-add-remove-bp + [left-margin mouse-1] 'realgud-cmds--mouse-add-remove-bp + ">" 'realgud:cmd-newer-frame + "<" 'realgud:cmd-older-frame + "d" 'realgud:cmd-newer-frame + "u" 'realgud:cmd-older-frame + "gR" 'realgud-recenter-arrow ;; FIXME: Hmnn! + "C" 'realgud-window-cmd-undisturb-src + "g?" 'realgud:cmdbuf-info-describe + "S" 'realgud-window-src-undisturb-cmd + "R" 'realgud:cmd-restart + "gr" 'realgud:cmd-restart + "!" 'realgud:cmd-shell) + + (add-hook 'realgud-short-key-mode-hook #'evil-normalize-keymaps)) + +(provide 'evil-collection-realgud) +;;; evil-collection-realgud.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/reftex/README.org b/.config/emacs/lisp/evil-collection/modes/reftex/README.org new file mode 100644 index 0000000..d6f1d49 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/reftex/README.org @@ -0,0 +1,75 @@ +* reftex + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/reftex/index.html][reftex-mode]]. + +** Key bindings + +*** reftex-select-shared-map + + Used by =reftex-select-label-mode= and =reftex-select-bib-mode= (initial + state: normal). + + | Command | Original | Evil | + |------------------------------------------+----------+-------------------| + | =reftex-select-next= | =n= | =j= | + | =reftex-select-previous= | =p= | =k= | + | =reftex-select-next-heading= | n/a | =]]=, =gj=, =C-j= | + | =reftex-select-previous-heading= | n/a | =[[=, =gk=, =C-k= | + | =reftex-select-accept= | =RET= | =RET= | + | =reftex-select-callback= | =SPC= | =go= | + | =reftex-select-show-insertion-point= | =.= | =gO= | + | =reftex-select-read-label= | n/a | =TAB= | + | =reftex-select-quit= | =q= | =q=, =ZZ= | + | =evil-quit= | n/a | =ZQ= | + | =reftex-select-help= | =?= | =g?= | + | =reftex-select-jump= | n/a | =J= | + | =reftex-select-cycle-ref-style-forward= | n/a | =r= | + | =reftex-select-cycle-ref-style-backward= | n/a | =R= | + | =reftex-select-mark= | n/a | =m= | + | =reftex-select-unmark= | n/a | =u= | + + The keys =gr=, =c=, =s=, =x=, =X=, =S=, =o=, =O= dispatch back to + reftex's underlying =throw= protocol so the original selection actions + (rescan, reuse, switch label type, ref grouping, external xr, BibTeX + export) still work. + +*** reftex-toc-mode-map + + Initial state: normal. + + | Command | Original | Evil | + |-----------------------------------+-----------+------------| + | =reftex-toc-next= | =n= | =j= | + | =reftex-toc-previous= | =p= | =k= | + | =reftex-toc-view-line= | =SPC= | =go=, =gO= | + | =reftex-toc-goto-line-and-hide= | =RET= | =RET= | + | =reftex-toc-goto-line= | =TAB= | =TAB= | + | =reftex-toc-show-help= | =?= | =g?=, =?= | + | =reftex-toc-quit= | =q= | =q= | + | =reftex-toc-quit-and-kill= | =k= | =ZZ= | + | =evil-quit= | n/a | =ZQ= | + | =reftex-toc-rescan= | =r= | =gr= | + | =reftex-toc-Rescan= | =R= | =gR= | + | =reftex-toc-toggle-labels= | =l= | =l= | + | =reftex-toc-toggle-index= | =i= | =i= | + | =reftex-toc-toggle-context= | =c= | =c= | + | =reftex-toc-toggle-file-boundary= | =F= | =F= | + | =reftex-toc-rename-label= | =M-%= | =rl= | + | =reftex-toc-display-index= | =C-c >= | =zi= | + | =reftex-toc-external= | =x= | =x= | + | =reftex-toc-show-calling-point= | =.= | =.= | + | =reftex-toc-jump= | =z= | =J= | + | =reftex-toc-previous-heading= | =C-c C-p= | =[[= | + | =reftex-toc-next-heading= | =C-c C-n= | =]]= | + | =reftex-toc-promote= | =<= | =>= | + | =reftex-toc-demote= | =>= | =<= | + | =reftex-toc-toggle-follow= | =f= | =f= | + + Note: =>= and =<= are swapped relative to upstream so that =>= promotes + and =<= demotes; this matches the visual outline-shift direction. + +** Notes + + - =reftex-select-label-prompt=, =reftex-citation-prompt=, + =reftex-select-label-help=, =reftex-citation-help=, and + =reftex-toc-help= are rewritten to advertise the evil keys. diff --git a/.config/emacs/lisp/evil-collection/modes/reftex/evil-collection-reftex.el b/.config/emacs/lisp/evil-collection/modes/reftex/evil-collection-reftex.el new file mode 100644 index 0000000..274753f --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/reftex/evil-collection-reftex.el @@ -0,0 +1,174 @@ +;;; evil-collection-reftex.el --- Bindings for `reftex' -*- lexical-binding: t -*- + +;; Copyright (C) 2017 Pierre Neidhardt + +;; Author: Maximiliano Sandoval +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, reftex, tools + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: +;; Evil bindings for `reftex-mode'. + +;;; Code: +(require 'evil-collection) +(require 'reftex-ref nil t) +(require 'reftex-ref nil t) +(require 'reftex-cite nil t) +(require 'reftex-toc nil t) + +(defconst evil-collection-reftex-maps '(reftex-select-shared-map + reftex-toc-mode-map)) + +;; original code can be found in reftex-ref.el +(setq reftex-select-label-prompt + "Select: [RET]select [j]next [k]previous [gr]escan [go]context [q]uit [g?]help") + +;; original code can be found in reftex-cite.el +(setq reftex-citation-prompt + "Select: [RET]select [j]next [k]previous [q]uit [g?]help") + +;; original at reftex-ref.el +(setq reftex-select-label-help + " j / k Go to next/previous label (Cursor motion works as well) + [ / ] Go to previous/next section heading. + c Reuse last referenced label. + J Jump to a specific section, e.g. '3 J' jumps to section 3. + s Switch label type. + gr Reparse document. + go / gO Show context / Show insertion point. + S Switch to label menu of external document (with LaTeX package `xr'). + r / R Toggle \\ref <-> \\vref / Rotate \\ref <=> \\fref <=> \\Fref. + TAB Enter a label with completion. + m / M Mark/unmark entry. + x / X Put all marked entries into one/many \\ref commands. + q / RET Quit without referencing / Accept current label.") + +;; code can be found in reftex-cite.el +(setq reftex-citation-help + " j / k Go to next/previous entry (Cursor motion works as well). + go / gO Show citation / Show insertion point. + q Quit without inserting \\cite macro into buffer. + TAB Enter citation key with completion. + RET Accept current entry and create \\cite macro. + m / M Mark/Unmark the entry. + o / O Create BibTeX file with all marked / unmarked entries. + X / X Put all (marked) entries into one/many \\cite commands.") + +(setq reftex-toc-help + " AVAILABLE KEYS IN TOC BUFFER + ============================ + j / k next-line / previous-line + go Show the corresponding location of the LaTeX document. + TAB Goto the location and keep the TOC window. + RET Goto the location and hide the TOC window (also on mouse-2). + < / > Promote / Demote section, or all sections in region. + zi Display Index. With prefix arg, restrict index to current section. + q / ZZ Hide/Kill *toc* buffer, return to position of reftex-toc command. + l i c F Toggle display of [l]abels, [i]ndex, [c]ontext, [F]ile borders. + f Toggle follow mode + gr / gR Reparse the LaTeX document / Reparse entire LaTeX document. + . In other window, show position from where `reftex-toc' was called. + rl Global search and replace to rename label at point. + x Switch to TOC of external document (with LaTeX package `xr'). + J Jump to a specific section (e.g. '3 J' goes to section 3).") + +;;;###autoload +(defun evil-collection-reftex-setup () + "Set up `evil' bindings for `reftex'." + + (evil-set-initial-state 'reftex-select-label-mode 'normal) + (evil-set-initial-state 'reftex-select-bib-mode 'normal) + + (evil-collection-define-key 'normal 'reftex-select-shared-map + "j" 'reftex-select-next + "k" 'reftex-select-previous + (kbd "]]") 'reftex-select-next-heading + (kbd "[[") 'reftex-select-previous-heading + (kbd "gj") 'reftex-select-next-heading + (kbd "gk") 'reftex-select-previous-heading + (kbd "C-j") 'reftex-select-next-heading + (kbd "C-k") 'reftex-select-previous-heading + (kbd "RET") 'reftex-select-accept + "go" 'reftex-select-callback ;shows the point where the label is + "gr" (lambda nil "Press `?' during selection to find out + about this key" (interactive) (throw (quote myexit) 114)) ;reftex binds keys in a very arcane way using the number asigned by describe-char, in this case the value of "g" is 114 + "q" 'reftex-select-quit + "ZZ" 'reftex-select-quit + "ZQ" 'evil-quit + "g?" 'reftex-select-help + "c" (lambda nil "Press `?' during selection to find out + about this key." (interactive) (throw (quote myexit) 108)) + "J" 'reftex-select-jump ;; weird binding, using default + (kbd "") 'reftex-select-read-label + "s" (lambda nil "Press `?' during selection to find out + about this key." (interactive) (throw (quote myexit) 115)) + "x" (lambda nil "Press `?' during selection to find out + about this key." (interactive) (throw (quote myexit) 97)) + "X" (lambda nil "Press `?' during selection to find out + about this key." (interactive) (throw (quote myexit) 65)) + "S" (lambda nil "Press `?' during selection to find out + about this key." (interactive) (throw (quote myexit) 120)) + "r" 'reftex-select-cycle-ref-style-forward + "R" 'reftex-select-cycle-ref-style-backward + "gO" 'reftex-select-show-insertion-point + "o" (lambda nil "Press `?' during selection to find out + about this key." (interactive) (throw (quote myexit) 101)) + "O" (lambda nil "Press `?' during selection to find out + about this key." (interactive) (throw (quote myexit) 69)) + + ;; mark + "m" 'reftex-select-mark ; TODO: Need a mark toggle function. + "u" 'reftex-select-unmark) + + (evil-set-initial-state 'reftex-toc-mode 'normal) + + ;; This one is more involved, in reftex-toc.el, line 267 it shows the prompt + ;; string with the keybinds and I don't see any way of changing it to show evil-like binds. + (evil-collection-define-key 'normal 'reftex-toc-mode-map + "j" 'reftex-toc-next + "k" 'reftex-toc-previous + "go" 'reftex-toc-view-line + "gO" 'reftex-toc-view-line + (kbd "RET") 'reftex-toc-goto-line-and-hide + (kbd "") 'reftex-toc-goto-line + "g?" 'reftex-toc-show-help + "?" 'reftex-toc-show-help + "q" 'reftex-toc-quit + "ZZ" 'reftex-toc-quit-and-kill + "ZQ" 'evil-quit + "gr" 'reftex-toc-rescan + "gR" 'reftex-toc-Rescan + "l" 'reftex-toc-toggle-labels + "i" 'reftex-toc-toggle-index + "c" 'reftex-toc-toggle-context + "F" 'reftex-toc-toggle-file-boundary + "rl" 'reftex-toc-rename-label + "zi" 'reftex-toc-display-index + "x" 'reftex-toc-external + "." 'reftex-toc-show-calling-point + "J" 'reftex-toc-jump + (kbd "[[") 'reftex-toc-previous-heading + (kbd "]]") 'reftex-toc-next-heading + (kbd ">") 'reftex-toc-promote + (kbd "<") 'reftex-toc-demote + "f" 'reftex-toc-toggle-follow)) + +(provide 'evil-collection-reftex) +;;; evil-collection-reftex.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/replace/README.org b/.config/emacs/lisp/evil-collection/modes/replace/README.org new file mode 100644 index 0000000..9d85f62 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/replace/README.org @@ -0,0 +1,34 @@ +* replace + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Other-Repeating-Search.html][occur]] and =occur-edit-mode=. + +** Key bindings + +*** occur-mode-map + + Initial state: normal. + + | Command | Original | Evil | + |-------------------------------------------+-----------+------------------| + | =occur-edit-mode= | =e= | =i=, =C-x C-q= | + | =occur-mode-goto-occurrence= | =RET= | =RET=, =C-c C-c= | + | =occur-mode-goto-occurrence-other-window= | =o= | =go=, =S-RET= | + | =occur-mode-display-occurrence= | =C-o= | =M-RET= | + | =next-error-no-select= | =n= | =gj=, =C-j= | + | =previous-error-no-select= | =p= | =gk=, =C-k= | + | =occur-rename-buffer= | =r= | =r= | + | =clone-buffer= | =c= | =c= | + | =next-error-follow-minor-mode= | =C-c C-f= | =C-c C-f= | + | =occur-mode-mouse-goto= | =mouse-2= | =mouse-2= | + +*** occur-edit-mode-map + + | Command | Original | Evil | + |---------------------------------+-----------+----------------------------------------------| + | =occur-cease-edit= | =C-c C-c= | =C-x C-q=, ==, =ZZ=, =ZQ=, =C-c C-c= | + | =occur-mode-display-occurrence= | =C-c C-o= | =C-o= | + | =next-error-follow-minor-mode= | =C-c C-f= | =C-c C-f= | + | =occur-mode-mouse-goto= | =mouse-2= | =mouse-2= | + + Note: =occur-edit-mode= has no abort command; =ZZ=, =ZQ= and == + all commit the edit. diff --git a/.config/emacs/lisp/evil-collection/modes/replace/evil-collection-replace.el b/.config/emacs/lisp/evil-collection/modes/replace/evil-collection-replace.el new file mode 100644 index 0000000..5dc91e4 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/replace/evil-collection-replace.el @@ -0,0 +1,79 @@ +;;; evil-collection-replace.el --- Evil bindings for `replace' -*- lexical-binding: t -*- + +;; Copyright (C) 2022 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, occur, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for `replace'. + +;;; Code: +(require 'evil-collection) +(require 'replace nil t) + +(defconst evil-collection-replace-maps '(occur-mode-map + occur-edit-mode-map)) + +;;;###autoload +(defun evil-collection-replace-setup () + "Set up `evil' bindings for `occur'." + (evil-set-initial-state 'occur-mode 'normal) + + (evil-collection-define-key 'normal 'occur-mode-map + ;; Like `wdired-mode'. + (kbd "C-x C-q") 'occur-edit-mode + "i" 'occur-edit-mode + + [mouse-2] 'occur-mode-mouse-goto + (kbd "C-c C-c") 'occur-mode-goto-occurrence + + ;; open + (kbd "RET") 'occur-mode-goto-occurrence + (kbd "S-") 'occur-mode-goto-occurrence-other-window + (kbd "M-") 'occur-mode-display-occurrence + "go" 'occur-mode-goto-occurrence-other-window + + "gj" 'next-error-no-select + "gk" 'previous-error-no-select + (kbd "C-j") 'next-error-no-select + (kbd "C-k") 'previous-error-no-select + "r" 'occur-rename-buffer + "c" 'clone-buffer + (kbd "C-c C-f") 'next-error-follow-minor-mode) + + (evil-collection-define-key 'normal 'occur-edit-mode-map + ;; Like `wdired-mode'. + (kbd "C-x C-q") 'occur-cease-edit + + ;; Sadly, `occur-edit-mode' has no abort commands supported. ZZ, ZQ and + ;; are same. + (kbd "") 'occur-cease-edit + "ZZ" 'occur-cease-edit + "ZQ" 'occur-cease-edit + + [mouse-2] 'occur-mode-mouse-goto + (kbd "C-c C-c") 'occur-cease-edit + (kbd "C-o") 'occur-mode-display-occurrence + (kbd "C-c C-f") 'next-error-follow-minor-mode)) + +(provide 'evil-collection-replace) +;;; evil-collection-replace.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/restclient/evil-collection-restclient.el b/.config/emacs/lisp/evil-collection/modes/restclient/evil-collection-restclient.el new file mode 100644 index 0000000..49da419 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/restclient/evil-collection-restclient.el @@ -0,0 +1,66 @@ +;;; evil-collection-restclient.el --- Bindings for `restclient' -*- lexical-binding: t -*- + +;; Copyright (C) 2018 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.2 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, emacs, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for `restclient'. + +;;; Code: +(require 'evil-collection) +(require 'restclient nil t) + +(defconst evil-collection-restclient-maps + '(evil-collection-restclient-mode-map + restclient-mode-map)) + +(defvar evil-collection-restclient-mode-map (make-sparse-keymap)) + +(define-minor-mode evil-collection-restclient-result-mode + "A minor mode to attach to `restclient' results" + :group 'evil-collection-restclient-mode + :keymap evil-collection-restclient-mode-map + :lighter nil) + +(defun evil-collection-restclient-setup-result-mode () + "Set up `evil-collection-restclient-result-mode'." + (evil-collection-restclient-result-mode) + (evil-normalize-keymaps)) + +;;;###autoload +(defun evil-collection-restclient-setup () + "Set up `evil' bindings for `restclient'." + (evil-collection-define-key 'normal 'restclient-mode-map + "[[" 'restclient-jump-prev + "]]" 'restclient-jump-next) + (evil-collection-define-key 'normal 'evil-collection-restclient-mode-map + "q" #'quit-window + "ZZ" #'quit-window + "ZQ" #'evil-quit) + + ;; Enable a separate minor mode so that we can bind keys to it. + (add-hook 'restclient-response-loaded-hook + #'evil-collection-restclient-setup-result-mode)) + +(provide 'evil-collection-restclient) +;;; evil-collection-restclient.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/rg/README.org b/.config/emacs/lisp/evil-collection/modes/rg/README.org new file mode 100644 index 0000000..677010c --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/rg/README.org @@ -0,0 +1,47 @@ +* rg + + Evil bindings for [[https://github.com/dajva/rg.el][rg.el]] (ripgrep) result buffers. + + Initial state for =rg-mode= is forced to =normal=. Bindings cover + =normal=, =motion=, and =visual= states so that evil motion overrides + conflicting single-letter rg commands. + +** Key bindings + +*** normal state + + | Command | Original | Evil | + |--------------------------------+-----------+-------------| + | =rg-rerun-toggle-case= | =c= | =c= | + | =rg-rerun-change-dir= | =d= | =d= | + | =rg-rerun-change-files= | =f= | =f= | + | =rg-rerun-toggle-ignore= | =i= | =I= | + | =rg-rerun-change-regexp= | =r= | =r= | + | =rg-rerun-change-literal= | =t= | =t= | + | =rg-save-search= | =s= | =s= | + | =rg-save-search-as-name= | =S= | =S= | + | =rg-menu= | =m= | =m= | + | =wgrep-change-to-wgrep-mode= | =e= | =i= | + | =next-error-follow-minor-mode= | =C-c C-f= | =F= | + | =rg-list-searches= | =L= | =L= | + | =rg-back-history= | =C-c <= | =C-p= | + | =rg-forward-history= | =C-c >= | =C-n= | + | =rg-prev-file= | =M-P= | ={= | + | =rg-next-file= | =M-N= | =}= | + | =previous-error-no-select= | =p= | =gk=, =C-k= | + | =next-error-no-select= | =n= | =gj=, =C-j= | + | =evil-forward-word-end= | | =e= | + | =evil-forward-char= | | =l= | + | =evil-forward-word-begin= | | =w= | + | =evil-goto-first-line= | | =gg= | + | =rg-recompile= | =g= | =gr= | + | =quit-window= | | =q= | + +*** motion / visual states + + | Command | Evil | + |---------------------------+------| + | =evil-forward-word-end= | =e= | + | =evil-forward-char= | =l= | + | =evil-forward-word-begin= | =w= | + | =evil-goto-first-line= | =gg= | diff --git a/.config/emacs/lisp/evil-collection/modes/rg/evil-collection-rg.el b/.config/emacs/lisp/evil-collection/modes/rg/evil-collection-rg.el new file mode 100644 index 0000000..af20fb7 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/rg/evil-collection-rg.el @@ -0,0 +1,91 @@ +;;; evil-collection-rg.el --- Evil bindings for rg -*- lexical-binding: t -*- + +;; Copyright (C) 2020 Zhiwei Chen + +;; Author: Zhiwei Chen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, rg, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for rg. + +;;; Code: +(require 'evil-collection) +(require 'rg nil t) + +(defconst evil-collection-rg-maps '(rg-mode-map)) + +;;;###autoload +(defun evil-collection-rg-setup () + "Set up `evil' bindings for `rg'." + (evil-set-initial-state 'rg-mode 'normal) + + (evil-collection-define-key 'normal 'rg-mode-map + ;; rerun + "c" 'rg-rerun-toggle-case + "d" 'rg-rerun-change-dir + "f" 'rg-rerun-change-files + "I" 'rg-rerun-toggle-ignore ;; was i + "r" 'rg-rerun-change-regexp + "t" 'rg-rerun-change-literal + + ;; save + "s" 'rg-save-search + "S" 'rg-save-search-as-name + + ;; action + "m" 'rg-menu + "i" 'wgrep-change-to-wgrep-mode ;; was w/e + "F" 'next-error-follow-minor-mode ;; C-c C-f + "L" 'rg-list-searches ;; was l + (kbd "C-p") 'rg-back-history ;; C-c < + (kbd "C-n") 'rg-forward-history ;; C-c > + + ;; navigation + "{" 'rg-prev-file + "}" 'rg-next-file + "gk" 'previous-error-no-select + "gj" 'next-error-no-select + (kbd "C-k") 'previous-error-no-select + (kbd "C-j") 'next-error-no-select + + "e" 'evil-forward-word-end ;; shadows wgrep-change-to-wgrep-mode + "l" 'evil-forward-char ;; shadows rg-list-searches + "w" 'evil-forward-word-begin ;; shadows wgrep-change-to-wgrep-mode + "gg" 'evil-goto-first-line + "gr" 'rg-recompile + + ;; quit + "q" 'quit-window) + + (evil-collection-define-key 'motion 'rg-mode-map + "e" 'evil-forward-word-end ;; shadows wgrep-change-to-wgrep-mode + "l" 'evil-forward-char ;; shadows rg-list-searches + "w" 'evil-forward-word-begin ;; shadows wgrep-change-to-wgrep-mode + "gg" 'evil-goto-first-line) + + (evil-collection-define-key 'visual 'rg-mode-map + "e" 'evil-forward-word-end ;; shadows wgrep-change-to-wgrep-mode + "l" 'evil-forward-char ;; shadows rg-list-searches + "w" 'evil-forward-word-begin ;; shadows wgrep-change-to-wgrep-mode + "gg" 'evil-goto-first-line)) + +(provide 'evil-collection-rg) +;;; evil-collection-rg.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/ripgrep/README.org b/.config/emacs/lisp/evil-collection/modes/ripgrep/README.org new file mode 100644 index 0000000..bae0b91 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/ripgrep/README.org @@ -0,0 +1,14 @@ +* ripgrep + + Evil bindings for [[https://github.com/nlamirault/ripgrep.el][ripgrep.el]] search result buffers. + +** Key bindings + + | Command | Original | Evil | + |------------------------------+-----------+-------------| + | =evil-search-next= | | =n= | + | =previous-error-no-select= | =p= | =gk=, =C-k= | + | =next-error-no-select= | =n= | =gj=, =C-j= | + | =compilation-previous-file= | ={= | ={= | + | =compilation-next-file= | =}= | =}= | + | =wgrep-change-to-wgrep-mode= | =C-c C-p= | =i= | diff --git a/.config/emacs/lisp/evil-collection/modes/ripgrep/evil-collection-ripgrep.el b/.config/emacs/lisp/evil-collection/modes/ripgrep/evil-collection-ripgrep.el new file mode 100644 index 0000000..f96398a --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/ripgrep/evil-collection-ripgrep.el @@ -0,0 +1,48 @@ +;;; evil-collection-ripgrep.el --- Bindings for `ripgrep' -*- lexical-binding: t -*- + +;; Author: Sid Kasivajhula +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, emacs, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Bindings for `ripgrep'. + +;;; Code: +(require 'evil-collection) +(require 'ripgrep nil t) + +(defconst evil-collection-ripgrep-maps '(ripgrep-search-mode-map)) + +;;;###autoload +(defun evil-collection-ripgrep-setup () + "Set up `evil' bindings for `ripgrep'." + (evil-collection-define-key 'normal 'ripgrep-search-mode-map + "n" 'evil-search-next + "\C-k" 'previous-error-no-select + "\C-j" 'next-error-no-select + "gk" 'previous-error-no-select + "gj" 'next-error-no-select + "{" 'compilation-previous-file + "}" 'compilation-next-file + "i" 'wgrep-change-to-wgrep-mode)) + + +(provide 'evil-collection-ripgrep) +;;; evil-collection-ripgrep.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/rjsx-mode/evil-collection-rjsx-mode.el b/.config/emacs/lisp/evil-collection/modes/rjsx-mode/evil-collection-rjsx-mode.el new file mode 100644 index 0000000..fa99f5f --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/rjsx-mode/evil-collection-rjsx-mode.el @@ -0,0 +1,47 @@ +;;; evil-collection-rjsx-mode.el --- Bindings for `rjsx-mode' -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, emacs, rjsx, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for `rjsx-mode'. + +;;; Code: +(require 'evil-collection) +(require 'rjsx-mode nil t) + +(defvar rjsx-mode-map) + +(defconst evil-collection-rjsx-maps '(rjsx-mode-map)) + +;;;###autoload +(defun evil-collection-rjsx-mode-setup () + "Set up `evil' bindings for `rjsx-mode'." + (when evil-want-C-d-scroll + (evil-collection-define-key 'insert 'rjsx-mode-map + (kbd "C-d") 'rjsx-delete-creates-full-tag) + (evil-collection-define-key 'normal 'rjsx-mode-map + (kbd "C-d") 'evil-scroll-down))) + +(provide 'evil-collection-rjsx-mode) +;;; evil-collection-rjsx-mode.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/robe/evil-collection-robe.el b/.config/emacs/lisp/evil-collection/modes/robe/evil-collection-robe.el new file mode 100644 index 0000000..48480b5 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/robe/evil-collection-robe.el @@ -0,0 +1,45 @@ +;;; evil-collection-robe.el --- Bindings for `robe' -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: emacs, evil, tools, robe + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for `robe'. + +;;; Code: +(require 'evil-collection) +(require 'robe nil t) + +(defconst evil-collection-robe-maps '(robe-mode-map)) + +;;;###autoload +(defun evil-collection-robe-setup () + "Set up `evil' bindings for `robe'." + (evil-collection-define-key 'normal 'robe-mode-map + "gd" 'robe-jump + (kbd "C-t") 'pop-tag-mark + "K" 'robe-doc + "gr" 'robe-rails-refresh)) + +(provide 'evil-collection-robe) +;;; evil-collection-robe.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/rtags/evil-collection-rtags.el b/.config/emacs/lisp/evil-collection/modes/rtags/evil-collection-rtags.el new file mode 100644 index 0000000..009e46d --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/rtags/evil-collection-rtags.el @@ -0,0 +1,141 @@ +;;; evil-collection-rtags.el --- Evil bindings for `rtags' -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, rtags, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Evil bindings for `rtags'. + +;;; Code: +(require 'evil-collection) +(require 'rtags nil t) + +(defvar rtags-mode-map) +(defvar rtags-dependency-tree-mode-map) +(defvar rtags-references-tree-mode-map) +(defvar rtags-location-stack-visualize-mode-map) + +(defconst evil-collection-rtags-maps '(rtags-mode-map + rtags-dependency-tree-mode-map + rtags-references-tree-mode-map + rtags-location-stack-visualize-mode-map)) + +;;;###autoload +(defun evil-collection-rtags-setup () + "Set up `evil' bindings for `rtags'." + (evil-set-initial-state 'rtags-mode 'normal) + (evil-set-initial-state 'rtags-dependency-tree-mode 'normal) + (evil-set-initial-state 'rtags-references-tree-mode 'normal) + (evil-set-initial-state 'rtags-location-stack-visualize-mode 'normal) + + (evil-collection-define-key 'normal 'rtags-mode-map + ;; open + (kbd "RET") 'rtags-select + (kbd "S-") 'rtags-select-other-window + (kbd "M-") 'rtags-show-in-other-window + (kbd "go") 'rtags-select-other-window + (kbd "gO") 'rtags-show-in-other-window + [mouse-1] 'rtags-select-other-window + [mouse-2] 'rtags-select-other-window + + "c" 'rtags-select-caller + "C" 'rtags-select-caller-other-window + "x" 'rtags-select-and-remove-rtags-buffer + "q" 'rtags-call-bury-or-delete) + + (evil-collection-define-key 'normal 'rtags-dependency-tree-mode-map + (kbd "") 'rtags-dependency-tree-toggle-current-expanded + "E" 'rtags-dependency-tree-expand-all + "c" 'rtags-dependency-tree-collapse-all + "-" 'rtags-dependency-tree-collapse-current + "+" 'rtags-dependency-tree-expand-current + "P" 'rtags-dependency-tree-find-path + "gf" 'rtags-dependency-tree-find-path + + "gj" 'rtags-dependency-tree-next-level + "gk" 'rtags-dependency-tree-previous-level + + (kbd "C-j") 'rtags-dependency-tree-next-level + (kbd "C-k") 'rtags-dependency-tree-previous-level + "]]" 'rtags-dependency-tree-next-level + "[[" 'rtags-dependency-tree-previous-level + + ;; open + (kbd "RET") 'rtags-select + (kbd "S-") 'rtags-select-other-window + (kbd "M-") 'rtags-show-in-other-window + "go" 'rtags-select-other-window + "gO" 'rtags-show-in-other-window + [mouse-1] 'rtags-select-other-window + [mouse-2] 'rtags-select-other-window + "s" 'rtags-show-in-other-window + + "x" 'rtags-select-and-remove-rtags-buffer + "q" 'rtags-call-bury-or-delete) + + (evil-collection-define-key 'normal 'rtags-references-tree-mode-map + (kbd "") 'rtags-references-tree-toggle-current-expanded + + "E" 'rtags-references-tree-expand-all + "c" 'rtags-references-tree-collapse-all + "-" 'rtags-references-tree-collapse-current + "+" 'rtags-references-tree-expand-current + + "gj" 'rtags-references-tree-next-level + "gk" 'rtags-references-tree-previous-level + + (kbd "C-j") 'rtags-references-tree-next-level + (kbd "C-k") 'rtags-references-tree-previous-level + + "]]" 'rtags-references-tree-next-level + "[[" 'rtags-references-tree-previous-level + + ;; open + (kbd "RET") 'rtags-select + (kbd "S-") 'rtags-select-other-window + (kbd "M-") 'rtags-show-in-other-window + "go" 'rtags-select-other-window + "gO" 'rtags-show-in-other-window + [mouse-1] 'rtags-select-other-window + [mouse-2] 'rtags-select-other-window + "s" 'rtags-show-in-other-window + + "x" 'rtags-select-and-remove-rtags-buffer + "q" 'rtags-call-bury-or-delete) + + (evil-collection-define-key 'normal 'rtags-location-stack-visualize-mode-map + ;; open + (kbd "RET") 'rtags-select + (kbd "S-") 'rtags-select-other-window + (kbd "M-") 'rtags-show-in-other-window + (kbd "go") 'rtags-select-other-window + (kbd "gO") 'rtags-show-in-other-window + [mouse-1] 'rtags-select-other-window + [mouse-2] 'rtags-select-other-window + "s" 'rtags-show-in-other-window + + "x" 'rtags-select-and-remove-rtags-buffer + "q" 'rtags-call-bury-or-delete)) + +(provide 'evil-collection-rtags) +;;; evil-collection-rtags.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/ruby-mode/README.org b/.config/emacs/lisp/evil-collection/modes/ruby-mode/README.org new file mode 100644 index 0000000..9d81ad8 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/ruby-mode/README.org @@ -0,0 +1,9 @@ +* ruby-mode + + Evil support for [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Misc-for-Programmers.html][ruby-mode]]. + +** Notes + + No key bindings are added. =evil-shift-width= is set to + =ruby-indent-level= on =ruby-mode-hook= so that =>>= / =<<= reindent by + the same amount as ruby-mode itself. diff --git a/.config/emacs/lisp/evil-collection/modes/ruby-mode/evil-collection-ruby-mode.el b/.config/emacs/lisp/evil-collection/modes/ruby-mode/evil-collection-ruby-mode.el new file mode 100644 index 0000000..347e6c8 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/ruby-mode/evil-collection-ruby-mode.el @@ -0,0 +1,45 @@ +;;; evil-collection-ruby-mode.el --- Bindings for `ruby-mode' -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: emacs, tools, ruby + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for `ruby-mode'. + +;;; Code: +(require 'evil-collection) +(require 'ruby-mode) + +(defconst evil-collection-ruby-mode-maps nil) + +(defun evil-collection-ruby-mode-set-evil-shift-width () + "Set `evil-shift-width' according to `ruby-indent-level'." + (setq-local evil-shift-width ruby-indent-level)) + +;;;###autoload +(defun evil-collection-ruby-mode-setup () + "Set up `evil' bindings for `ruby'." + (add-hook 'ruby-mode-hook #'evil-collection-ruby-mode-set-evil-shift-width)) + +(provide 'evil-collection-ruby-mode) +;;; evil-collection-ruby-mode.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/scheme/README.org b/.config/emacs/lisp/evil-collection/modes/scheme/README.org new file mode 100644 index 0000000..c9397ba --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/scheme/README.org @@ -0,0 +1,17 @@ +* scheme + + Evil bindings for =scheme-mode=. + +** Key bindings + + Added to =scheme-mode-map= in normal state. + + | Command | Original | Evil | + |-------------------------------+----------+------| + | =evil-collection-scheme-repl= | n/a | =gz= | + +** New commands + + | Command | Key | | + |-------------------------------+------+------------------------------------------------| + | =evil-collection-scheme-repl= | =gz= | pop to =*scheme*= buffer and call =run-scheme= | diff --git a/.config/emacs/lisp/evil-collection/modes/scheme/evil-collection-scheme.el b/.config/emacs/lisp/evil-collection/modes/scheme/evil-collection-scheme.el new file mode 100644 index 0000000..3d10dd8 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/scheme/evil-collection-scheme.el @@ -0,0 +1,47 @@ +;;; evil-collection-scheme.el --- Evil bindings for scheme -*- lexical-binding: t -*- + +;; Copyright (C) 2021 Zhiwei Chen + +;; Author: Zhiwei Chen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, lisp, languages + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for scheme. + +;;; Code: +(require 'evil-collection) + +(defconst evil-collection-scheme-maps '(scheme-mode-map)) + +(defun evil-collection-scheme-repl () + "Open the scheme REPL." + (interactive) + (pop-to-buffer (get-buffer-create "*scheme*")) + (call-interactively #'run-scheme)) + +;;;###autoload +(defun evil-collection-scheme-setup () + "Set up `evil' bindings for `scheme'." + (evil-collection-define-key 'normal 'scheme-mode-map + "gz" 'evil-collection-scheme-repl)) + +(provide 'evil-collection-scheme) +;;; evil-collection-scheme.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/scroll-lock/README.org b/.config/emacs/lisp/evil-collection/modes/scroll-lock/README.org new file mode 100644 index 0000000..4b80844 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/scroll-lock/README.org @@ -0,0 +1,24 @@ +* scroll-lock + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Scrolling.html][scroll-lock-mode]]. + +** Key bindings + + Standard evil motions are remapped to scroll-lock equivalents so the + cursor stays fixed while the buffer scrolls. + + | Command | Remaps from | + |--------------------------------------------------+---------------------------| + | =evil-collection-scroll-lock-next-line= | =evil-next-line= | + | =evil-collection-scroll-lock-previous-line= | =evil-previous-line= | + | =evil-collection-scroll-lock-forward-paragraph= | =evil-forward-paragraph= | + | =evil-collection-scroll-lock-backward-paragraph= | =evil-backward-paragraph= | + +** New commands + + | Command | | + |--------------------------------------------------+------------------------------------| + | =evil-collection-scroll-lock-next-line= | line-wise scroll down, point fixed | + | =evil-collection-scroll-lock-previous-line= | line-wise scroll up, point fixed | + | =evil-collection-scroll-lock-forward-paragraph= | paragraph scroll down (=:jump t=) | + | =evil-collection-scroll-lock-backward-paragraph= | paragraph scroll up (=:jump t=) | diff --git a/.config/emacs/lisp/evil-collection/modes/scroll-lock/evil-collection-scroll-lock.el b/.config/emacs/lisp/evil-collection/modes/scroll-lock/evil-collection-scroll-lock.el new file mode 100644 index 0000000..ae81b10 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/scroll-lock/evil-collection-scroll-lock.el @@ -0,0 +1,87 @@ +;;; evil-collection-scroll-lock.el --- Bindings for `scroll-lock' -*- lexical-binding: t -*- + +;; Copyright (C) 2021 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, elisp, lisp + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for `scroll-lock'. + +;;; Code: +(require 'scroll-lock) +(require 'evil-collection) + +(declare-function scroll-lock-next-line "scroll-lock") +(declare-function scroll-lock-previous-line "scroll-lock") +(declare-function scroll-lock-forward-paragraph "scroll-lock") +(declare-function scroll-lock-backward-paragraph "scroll-lock") + +(defconst evil-collection-scroll-lock-maps '(scroll-lock-mode-map)) + +(evil-define-motion evil-collection-scroll-lock-next-line (count) + "Scroll down COUNT lines keeping point fixed." + :type line + (let (line-move-visual) + (scroll-lock-next-line (or count 1)))) + +(evil-define-motion evil-collection-scroll-lock-previous-line (count) + "Scroll up COUNT lines keeping point fixed." + :type line + (let (line-move-visual) + (scroll-lock-previous-line (or count 1)))) + +(evil-define-motion evil-collection-scroll-lock-forward-paragraph (count) + "Scroll down COUNT paragraphs keeping point fixed." + :jump t + :type exclusive + (evil-signal-at-bob-or-eob count) + (scroll-lock-forward-paragraph count) + (unless (eobp) (forward-line))) + +(evil-define-motion evil-collection-scroll-lock-backward-paragraph (count) + "Scroll up COUNT paragraphs keeping point fixed." + :jump t + :type exclusive + (evil-signal-at-bob-or-eob (- (or count 1))) + (unless (eobp) (forward-line)) + (scroll-lock-backward-paragraph count) + (unless (bobp) (forward-line -1))) + +;;;###autoload +(defun evil-collection-scroll-lock-setup () + "Set up `evil' bindings for `scroll-lock'." + (evil-collection-define-key 'normal 'scroll-lock-mode-map + [remap evil-next-line] 'evil-collection-scroll-lock-next-line + [remap evil-previous-line] 'evil-collection-scroll-lock-previous-line + [remap evil-forward-paragraph] + 'evil-collection-scroll-lock-forward-paragraph + [remap evil-backward-paragraph] + 'evil-collection-scroll-lock-backward-paragraph) + + (evil-add-command-properties + #'evil-collection-scroll-lock-forward-paragraph :jump t) + (evil-add-command-properties + #'evil-collection-scroll-lock-backward-paragraph :jump t) + + (add-hook 'scroll-lock-mode-hook 'evil-normalize-keymaps)) + +(provide 'evil-collection-scroll-lock) +;;; evil-collection-scroll-lock.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/selectrum/README.org b/.config/emacs/lisp/evil-collection/modes/selectrum/README.org new file mode 100644 index 0000000..aafc019 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/selectrum/README.org @@ -0,0 +1,43 @@ +* selectrum + + Evil bindings for [[https://github.com/radian-software/selectrum][selectrum]], the incremental narrowing UI for the minibuffer. + + Bindings are installed only when =evil-collection-setup-minibuffer= is + non-nil. + +** Key bindings + +*** selectrum-minibuffer-map (insert and normal) + + | Command | Original | Evil | + |--------------------------------------+----------+---------| + | =selectrum-previous-page= | =M-v= | =C-b= | + | =selectrum-next-page= | =C-v= | =C-f= | + | =selectrum-submit-exact-input= | =C-j= | =M-RET= | + | =selectrum-select-current-candidate= | =RET= | =RET= | + | =selectrum-previous-page= | =M-v= | =C-u= | + | =selectrum-next-page= | =C-v= | =C-d= | + + =C-u= and =C-d= are added only when =evil-want-C-u-scroll= and + =evil-want-C-d-scroll= respectively are non-nil. + +*** selectrum-minibuffer-map (insert) + + | Command | Original | Evil | + |--------------------------------+----------+-------| + | =selectrum-next-candidate= | =C-n= | =C-j= | + | =selectrum-previous-candidate= | =C-p= | =C-k= | + | =selectrum-next-candidate= | =C-n= | =C-n= | + | =selectrum-previous-candidate= | =C-p= | =C-p= | + +*** selectrum-minibuffer-map (normal) + + | Command | Original | Evil | + |--------------------------------+----------+------| + | =selectrum-next-candidate= | n/a | =j= | + | =selectrum-previous-candidate= | n/a | =k= | + | =selectrum-next-group= | =C-q n= | =gj= | + | =selectrum-previous-group= | =C-q p= | =gk= | + | =selectrum-goto-beginning= | =M-<= | =gg= | + | =selectrum-goto-end= | =M->= | =G= | + | =selectrum-kill-ring-save= | =M-w= | =gy= | diff --git a/.config/emacs/lisp/evil-collection/modes/selectrum/evil-collection-selectrum.el b/.config/emacs/lisp/evil-collection/modes/selectrum/evil-collection-selectrum.el new file mode 100644 index 0000000..525e33d --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/selectrum/evil-collection-selectrum.el @@ -0,0 +1,72 @@ +;;; evil-collection-selectrum.el --- Evil bindings for Selectrum -*- lexical-binding: t -*- + +;; Copyright (C) 2021 Balaji Sivaraman + +;; Author: Balaji Sivaraman +;; Maintainer: Balaji Sivaraman +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for Selectrum. + +;;; Code: + +(require 'evil-collection) +(require 'selectrum nil t) + +(defconst evil-collection-selectrum-maps '(selectrum-minibuffer-map)) + +;;;###autoload +(defun evil-collection-selectrum-setup () + "Set up `evil' bindings for `selectrum-mode'." + + (defvar evil-collection-setup-minibuffer) + (when evil-collection-setup-minibuffer + (evil-collection-define-key '(insert normal) 'selectrum-minibuffer-map + (kbd "C-b") 'selectrum-previous-page + (kbd "C-f") 'selectrum-next-page + (kbd "M-RET") 'selectrum-submit-exact-input + (kbd "") 'selectrum-select-current-candidate) + + (evil-collection-define-key 'insert 'selectrum-minibuffer-map + (kbd "C-j") 'selectrum-next-candidate + (kbd "C-k") 'selectrum-previous-candidate + (kbd "C-n") 'selectrum-next-candidate + (kbd "C-p") 'selectrum-previous-candidate) + + (evil-collection-define-key 'normal 'selectrum-minibuffer-map + (kbd "j") 'selectrum-next-candidate + (kbd "k") 'selectrum-previous-candidate + (kbd "gj") 'selectrum-next-group + (kbd "gk") 'selectrum-previous-group + (kbd "G") 'selectrum-goto-end + (kbd "gg") 'selectrum-goto-beginning + (kbd "gy") 'selectrum-kill-ring-save) + + (when evil-want-C-u-scroll + (evil-collection-define-key '(insert normal) 'selectrum-minibuffer-map + (kbd "C-u") 'selectrum-previous-page)) + + (when evil-want-C-d-scroll + (evil-collection-define-key '(insert normal) 'selectrum-minibuffer-map + (kbd "C-d") 'selectrum-next-page)))) + +(provide 'evil-collection-selectrum) +;;; evil-collection-selectrum.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/sh-script/README.org b/.config/emacs/lisp/evil-collection/modes/sh-script/README.org new file mode 100644 index 0000000..0d63469 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/sh-script/README.org @@ -0,0 +1,15 @@ +* sh-script + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Shell.html][sh-script]] (=sh-mode=). + +** Key bindings + + Added to =sh-mode-map= in normal state. + + | Command | Original | Evil | + |-----------------+----------+------| + | =sh-show-shell= | n/a | =gz= | + +** Notes + + - =evil-shift-width= is set to =sh-basic-offset= on =sh-mode-hook=. diff --git a/.config/emacs/lisp/evil-collection/modes/sh-script/evil-collection-sh-script.el b/.config/emacs/lisp/evil-collection/modes/sh-script/evil-collection-sh-script.el new file mode 100644 index 0000000..35a7bff --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/sh-script/evil-collection-sh-script.el @@ -0,0 +1,48 @@ +;;; evil-collection-sh-script.el --- Evil bindings for sh-script -*- lexical-binding: t -*- + +;; Copyright (C) 2020 Zhiwei Chen + +;; Author: Zhiwei Chen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for sh-script. + +;;; Code: +(require 'evil-collection) +(require 'sh-script) + +(defconst evil-collection-sh-script-maps '(sh-mode-map)) + +(defun evil-collection-sh-script-set-evil-shift-width () + "Set `evil-shift-width' according to `sh-basic-offset'." + (setq-local evil-shift-width sh-basic-offset)) + +;;;###autoload +(defun evil-collection-sh-script-setup () + "Set up `evil' bindings for `sh-script'." + (add-hook 'sh-mode-hook #'evil-collection-sh-script-set-evil-shift-width) + + (evil-collection-define-key 'normal 'sh-mode-map + "gz" 'sh-show-shell)) + +(provide 'evil-collection-sh-script) +;;; evil-collection-sh-script.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/shell-maker/evil-collection-shell-maker.el b/.config/emacs/lisp/evil-collection/modes/shell-maker/evil-collection-shell-maker.el new file mode 100644 index 0000000..710fbf4 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/shell-maker/evil-collection-shell-maker.el @@ -0,0 +1,65 @@ +;;; evil-collection-shell-maker.el --- Bindings for `shell-maker' -*- lexical-binding: t -*- + +;; Copyright (C) 2026 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "27.1")) +;; Keywords: evil, shell-maker, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for `shell-maker'. +;;; +;;; These bindings apply to `shell-maker-mode' and any derived mode that +;;; doesn't override RET / S-RET in its own evil state map (for example, +;;; `agent-shell-mode' inherits from `shell-maker-mode-map'). + +;;; Code: +(require 'evil-collection) +(require 'shell-maker nil t) + +(defgroup evil-collection-shell-maker nil + "Evil bindings for `shell-maker'." + :group 'evil-collection) + +(make-obsolete-variable 'evil-collection-shell-maker-submit-state + 'evil-collection-repl-submit-state + "evil-collection 0.0.2") + +(defconst evil-collection-shell-maker-maps '(shell-maker-mode-map)) + + +(defvar shell-maker-mode-map) + +;;;###autoload +(defun evil-collection-shell-maker-setup () + "Set up `evil' bindings for `shell-maker'." + (let* ((submit evil-collection-repl-submit-state) + (newline-state (if (eq submit 'normal) 'insert 'normal))) + (evil-collection-define-key submit 'shell-maker-mode-map + (kbd "RET") 'shell-maker-submit) + (evil-collection-define-key newline-state 'shell-maker-mode-map + (kbd "RET") 'newline)) + + (evil-collection-define-key 'insert 'shell-maker-mode-map + (kbd "S-") 'newline) + (evil-collection-define-key 'normal 'shell-maker-mode-map + (kbd "S-") 'newline)) + +(provide 'evil-collection-shell-maker) +;;; evil-collection-shell-maker.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/shortdoc/README.org b/.config/emacs/lisp/evil-collection/modes/shortdoc/README.org new file mode 100644 index 0000000..ec50145 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/shortdoc/README.org @@ -0,0 +1,20 @@ +* shortdoc + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/elisp/Documentation-Groups.html][shortdoc]]. + +** Key bindings + + Bindings added to =shortdoc-mode-map= in normal state (initial state: + normal). + + | Command | Original | Evil | + |-----------------------------+----------------+-------------| + | =forward-button= | n/a | =TAB= | + | =backward-button= | n/a | == | + | =shortdoc-next= | =n= | =C-j= | + | =shortdoc-previous= | =p= | =C-k= | + | =shortdoc-next-section= | =N=, =C-c C-n= | =]]= | + | =shortdoc-previous-section= | =P=, =C-c C-p= | =[[= | + + The upstream =n=, =p=, =N=, =P=, =w= keys keep their bindings so they + remain available alongside the evil-friendly additions. diff --git a/.config/emacs/lisp/evil-collection/modes/shortdoc/evil-collection-shortdoc.el b/.config/emacs/lisp/evil-collection/modes/shortdoc/evil-collection-shortdoc.el new file mode 100644 index 0000000..03e5061 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/shortdoc/evil-collection-shortdoc.el @@ -0,0 +1,49 @@ +;;; evil-collection-shortdoc.el --- Evil bindings for shortdoc -*- lexical-binding: t -*- + +;; Copyright (C) 2020 Zhiwei Chen + +;; Author: Zhiwei Chen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; TODO: Update to emacs 28.1 when it's out +;; Package-Requires: ((emacs "27.1")) +;; Keywords: evil, lisp, help + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for shortdoc. + +;;; Code: +(require 'evil-collection) +(require 'shortdoc nil t) + +(defconst evil-collection-shortdoc-maps '(shortdoc-mode-map)) + +;;;###autoload +(defun evil-collection-shortdoc-setup () + "Set up `evil' bindings for `shortdoc'." + (evil-set-initial-state 'shortdoc-mode 'normal) + (evil-collection-define-key 'normal 'shortdoc-mode-map + (kbd "") 'forward-button + (kbd "") 'backward-button + (kbd "C-k") 'shortdoc-previous + (kbd "C-j") 'shortdoc-next + "[[" 'shortdoc-previous-section + "]]" 'shortdoc-next-section)) + +(provide 'evil-collection-shortdoc) +;;; evil-collection-shortdoc.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/simple-mpc/evil-collection-simple-mpc.el b/.config/emacs/lisp/evil-collection/modes/simple-mpc/evil-collection-simple-mpc.el new file mode 100644 index 0000000..fea1bb0 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/simple-mpc/evil-collection-simple-mpc.el @@ -0,0 +1,122 @@ +;;; evil-collection-simple-mpc.el --- Bindings for `simple-mpc' -*- lexical-binding: t -*- +;; Copyright (C) 2022 Joseph Turner + +;; Author: Joseph Turner +;; Maintainer: Joseph Turner +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, simple-mpc, processes, mpd + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for `simple-mpc'. + +;;; Code: +(require 'simple-mpc nil t) +(require 'evil-collection) + +(defconst evil-collection-simple-mpc-maps '(simple-mpc-mode-map + simple-mpc-query-mode-map + simple-mpc-current-playlist-mode-map)) + +(defun evil-collection-simple-mpc-set-bindings () + "Set up `evil' bindings for `simple-mpc'. + +Other modes that are configured: +`simple-mpc-mode' +`simple-mpc-query-mode' +`simple-mpc-current-playlist-mode'" + (evil-collection-define-key 'normal 'simple-mpc-mode-map + "p" 'simple-mpc-toggle + ">" 'simple-mpc-next + "<" 'simple-mpc-prev + "f" 'simple-mpc-seek-forward + "b" 'simple-mpc-seek-backward + "s" 'simple-mpc-query + "c" 'simple-mpc-view-current-playlist + "l" 'simple-mpc-load-playlist + "S" 'simple-mpc-shuffle-current-playlist + "C" 'simple-mpc-clear-current-playlist + "+" 'simple-mpc-increase-volume + "-" 'simple-mpc-decrease-volume + + "q" 'simple-mpc-quit + "ZQ" 'simple-mpc-quit + "ZZ" 'simple-mpc-quit) + + (evil-collection-define-key 'normal 'simple-mpc-current-playlist-mode-map + "x" 'simple-mpc-delete + "d" 'simple-mpc-delete + + "q" 'simple-mpc-current-playlist-quit + "ZQ" 'simple-mpc-current-playlist-quit + "ZZ" 'simple-mpc-current-playlist-quit + + "" 'simple-mpc-play-current-line + (kbd "RET") 'simple-mpc-play-current-line) + + (evil-collection-define-key 'normal 'simple-mpc-query-mode-map + "o" 'simple-mpc-query-sort + + "q" 'simple-mpc-query-quit + "ZQ" 'simple-mpc-query-quit + "ZZ" 'simple-mpc-query-quit + + "" 'simple-mpc-query-add + (kbd "M-RET") 'simple-mpc-query-add + + "" 'simple-mpc-query-add-and-play + (kbd "RET") 'simple-mpc-query-add-and-play)) + +(defvar simple-mpc-main-buffer-name "*simple-mpc-main*") + +(defun evil-collection-simple-mpc-replace-main-view () + "Update main view to show keys in use with evil mode." + (interactive) + (when + (string= (buffer-name) simple-mpc-main-buffer-name) + (read-only-mode -1) + (erase-buffer) + (insert (propertize "* simple-mpc *\n\n" + 'face 'simple-mpc-main-name) + (propertize " * controls\n" 'face 'simple-mpc-main-headers) + " * [p]lay/pause toggle\n" + " * [>] next track\n" + " * [<] previous track\n" + " * seek [f]orward\n" + + " * seek [b]ackward\n" + " * [+] increase volume\n" + " * [-] decrease volume\n" + (propertize "\n * playlist\n" 'face 'simple-mpc-main-headers) + " * view [c]urrent playlist\n" + " * [C]lear current playlist\n" + " * [S]huffle playlist\n" + " * [l]oad playlist\n" + " * [s]earch database\n" + (propertize "\n * misc\n" 'face 'simple-mpc-main-headers) + " * [q]uit"))) + +;;;###autoload +(defun evil-collection-simple-mpc-setup () + "Set up simple-mpc bindings and main view." + (evil-collection-simple-mpc-set-bindings) + (add-hook 'simple-mpc-mode-hook 'evil-collection-simple-mpc-replace-main-view) + (add-hook 'simple-mpc-query-mode-hook 'evil-normalize-keymaps) + (add-hook 'simple-mpc-current-playlist-mode-hook 'evil-normalize-keymaps)) + +(provide 'evil-collection-simple-mpc) +;;; evil-collection-simple-mpc.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/simple/README.org b/.config/emacs/lisp/evil-collection/modes/simple/README.org new file mode 100644 index 0000000..5cbc496 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/simple/README.org @@ -0,0 +1,23 @@ +* simple + + Evil bindings for =special-mode-map=, the base keymap shared by many + read-only Emacs buffers. + +** Key bindings + + Applies =evil-collection-set-readonly-bindings= to =special-mode-map= + (standard motion / quit bindings for read-only buffers), then layers: + + | Command | Original | Evil | + |-----------------+----------+------| + | =revert-buffer= | =g= | =gr= | + + The following upstream single-letter bindings are unset so they do not + shadow evil normal-state keys: + + | Key | Was upstream | + |-----+------------------| + | =g= | =revert-buffer= | + | =h= | =describe-mode= | + | =?= | =describe-mode= | + | =0= | =digit-argument= | diff --git a/.config/emacs/lisp/evil-collection/modes/simple/evil-collection-simple.el b/.config/emacs/lisp/evil-collection/modes/simple/evil-collection-simple.el new file mode 100644 index 0000000..9f8b7b6 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/simple/evil-collection-simple.el @@ -0,0 +1,49 @@ +;;; evil-collection-simple.el --- Bindings for `simple' -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, emacs, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Bindings for `simple' + +;;; Code: +(require 'evil-collection) +(require 'simple) + +(defvar special-mode-map) + +(defconst evil-collection-simple-maps '(special-mode-map)) + +;;;###autoload +(defun evil-collection-simple-setup () + "Set up `evil' bindings for `simple'." + (evil-collection-set-readonly-bindings 'special-mode-map) + (evil-collection-define-key nil 'special-mode-map + "g" nil + "gr" 'revert-buffer + "h" nil + "?" nil + "0" nil)) + +(provide 'evil-collection-simple) +;;; evil-collection-simple.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/slime/evil-collection-slime.el b/.config/emacs/lisp/evil-collection/modes/slime/evil-collection-slime.el new file mode 100644 index 0000000..f89af6f --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/slime/evil-collection-slime.el @@ -0,0 +1,222 @@ +;;; evil-collection-slime.el --- Evil bindings for `slime' -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, slime, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for `slime-mode'. + +;;; Code: +(require 'evil-collection) +(require 'slime nil t) + +(defvar slime-parent-map) +(defvar sldb-mode-map) +(defvar slime-inspector-mode-map) +(defvar slime-mode-map) +(defvar slime-popup-buffer-mode-map) +(defvar slime-thread-control-mode-map) +(defvar slime-xref-mode-map) + +(defconst evil-collection-slime-maps '(slime-parent-map + sldb-mode-map + slime-inspector-mode-map + slime-mode-map + slime-popup-buffer-mode-map + slime-thread-control-mode-map + slime-xref-mode-map)) + +(defun evil-collection-slime-last-sexp (command &rest args) + "In normal-state or motion-state, last sexp ends at point." + (if (and (not evil-move-beyond-eol) + (or (evil-normal-state-p) (evil-motion-state-p))) + (save-excursion + (unless (or (eobp) (eolp)) (forward-char)) + (apply command args)) + (apply command args))) + +;;;###autoload +(defun evil-collection-slime-setup () + "Set up `evil' bindings for `slime'." + (unless evil-move-beyond-eol + (advice-add 'slime-eval-last-expression :around 'evil-collection-slime-last-sexp) + (advice-add 'slime-pprint-eval-last-expression :around 'evil-collection-slime-last-sexp) + (advice-add 'slime-eval-print-last-expression :around 'evil-collection-slime-last-sexp) + (advice-add 'slime-eval-last-expression-in-repl + :around 'evil-collection-slime-last-sexp)) + + (evil-set-initial-state 'sldb-mode 'normal) + (evil-set-initial-state 'slime-inspector-mode 'normal) + (evil-set-initial-state 'slime-popup-buffer-mode 'normal) + (evil-set-initial-state 'slime-thread-control-mode 'normal) + (evil-set-initial-state 'slime-xref-mode 'normal) + + (evil-collection-define-key 'normal 'slime-parent-map + "gd" 'slime-edit-definition + (kbd "C-t") 'slime-pop-find-definition-stack) + + (evil-collection-define-key 'normal 'sldb-mode-map + (kbd "RET") 'sldb-default-action + [mouse-2] 'sldb-default-action/mouse + [follow-link] 'mouse-face + "\C-i" 'sldb-cycle + "g?" 'describe-mode + "S" 'sldb-show-source + "e" 'sldb-eval-in-frame + "d" 'sldb-pprint-eval-in-frame + "D" 'sldb-disassemble + "i" 'sldb-inspect-in-frame + "gj" 'sldb-down + "gk" 'sldb-up + (kbd "C-j") 'sldb-down + (kbd "C-k") 'sldb-up + "]]" 'sldb-details-down + "[[" 'sldb-details-up + (kbd "M-j") 'sldb-details-down + (kbd "M-k") 'sldb-details-up + "gg" 'sldb-beginning-of-backtrace + "G" 'sldb-end-of-backtrace + "t" 'sldb-toggle-details + "gr" 'sldb-restart-frame + "I" 'sldb-invoke-restart-by-name + "R" 'sldb-return-from-frame + "c" 'sldb-continue + "s" 'sldb-step + "n" 'sldb-next + "o" 'sldb-out + "b" 'sldb-break-on-return + "a" 'sldb-abort + "q" 'sldb-quit + "A" 'sldb-break-with-system-debugger + "B" 'sldb-break-with-default-debugger + "P" 'sldb-print-condition + "C" 'sldb-inspect-condition + "g:" 'slime-interactive-eval + "0" 'sldb-invoke-restart-0 + "1" 'sldb-invoke-restart-1 + "2" 'sldb-invoke-restart-2 + "3" 'sldb-invoke-restart-3 + "4" 'sldb-invoke-restart-4 + "5" 'sldb-invoke-restart-5 + "6" 'sldb-invoke-restart-6 + "7" 'sldb-invoke-restart-7 + "8" 'sldb-invoke-restart-8 + "9" 'sldb-invoke-restart-9) + + (evil-collection-define-key 'normal 'slime-inspector-mode-map + (kbd "RET") 'slime-inspector-operate-on-point + [mouse-1] 'slime-inspector-operate-on-click + [mouse-2] 'slime-inspector-operate-on-click + [mouse-6] 'slime-inspector-pop + [mouse-7] 'slime-inspector-next + ;; TODO: `slime-inspector-next' and `slime-inspector-pop' should probably + ;; just be bound to C-i and C-o. + "gk" 'slime-inspector-pop + (kbd "C-k") 'slime-inspector-pop + "[[" 'slime-inspector-pop + (kbd "C-o") 'slime-inspector-pop + "gj" 'slime-inspector-next + (kbd "C-j") 'slime-inspector-next + "]]" 'slime-inspector-next + (kbd "C-i") 'slime-inspector-next + "K" 'slime-inspector-describe + "p" 'slime-inspector-pprint + "e" 'slime-inspector-eval + "M-p" 'slime-inspector-history + "gr" 'slime-inspector-reinspect + "gv" 'slime-inspector-toggle-verbose + (kbd "") 'slime-inspector-next-inspectable-object + (kbd "C-i") 'slime-inspector-next-inspectable-object + (kbd "") 'slime-inspector-previous-inspectable-object ; Emacs translates S-TAB + (kbd "") 'slime-inspector-previous-inspectable-object ; to BACKTAB on X. + "." 'slime-inspector-show-source + "gd" 'slime-inspector-show-source + "gR" 'slime-inspector-fetch-all + "q" 'slime-inspector-quit) + + (evil-collection-define-key 'normal 'slime-mode-map + (kbd "K") 'slime-describe-symbol + (kbd "C-t") 'slime-pop-find-definition-stack + ;; goto + "gd" 'slime-edit-definition + "gz" 'slime-switch-to-output-buffer) + + (when evil-collection-want-find-usages-bindings + (evil-collection-define-key 'normal 'slime-mode-map + "gr" 'slime-edit-uses)) + + (evil-collection-define-key 'normal 'slime-popup-buffer-mode-map + ;; quit + "q" 'quit-window + + (kbd "C-t") 'slime-pop-find-definition-stack + + ;; goto + "gd" 'slime-edit-definition) + + (evil-collection-inhibit-insert-state 'slime-thread-control-mode-map) + (evil-collection-define-key 'normal 'slime-thread-control-mode-map + "a" 'slime-thread-attach + "d" 'slime-thread-debug + "x" 'slime-thread-kill + "gr" 'slime-update-threads-buffer) + + (evil-collection-define-key 'normal 'slime-xref-mode-map + (kbd "RET") 'slime-goto-xref + (kbd "S-") 'slime-goto-xref + "go" 'slime-show-xref + "gj" 'slime-xref-next-line + "gk" 'slime-xref-prev-line + (kbd "C-j") 'slime-xref-next-line + (kbd "C-k") 'slime-xref-prev-line + "]]" 'slime-xref-next-line + "[[" 'slime-xref-prev-line + "gr" 'slime-recompile-xref + "gR" 'slime-recompile-all-xrefs + "r" 'slime-xref-retract) + + (let* ((submit evil-collection-repl-submit-state) + (newline-state (if (eq submit 'normal) 'insert 'normal))) + (evil-collection-define-key submit 'slime-repl-mode-map + (kbd "RET") 'slime-repl-return + (kbd "\C-m") 'slime-repl-return + [return] 'slime-repl-return) + (evil-collection-define-key newline-state 'slime-repl-mode-map + (kbd "RET") 'slime-repl-newline-and-indent + (kbd "\C-m") 'slime-repl-newline-and-indent + [return] 'slime-repl-newline-and-indent)) + + (evil-collection-define-key 'normal 'slime-repl-mode-map + "gj" 'slime-repl-next-prompt + "gk" 'slime-repl-previous-prompt + (kbd "C-j") 'slime-repl-next-prompt + (kbd "C-k") 'slime-repl-previous-prompt + "]]" 'slime-repl-next-prompt + "[[" 'slime-repl-previous-prompt + (kbd "C-p") 'slime-repl-previous-input + (kbd "C-n") 'slime-repl-next-input) + + (add-hook 'slime-popup-buffer-mode-hook #'evil-normalize-keymaps)) + +(provide 'evil-collection-slime) +;;; evil-collection-slime.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/sly/evil-collection-sly.el b/.config/emacs/lisp/evil-collection/modes/sly/evil-collection-sly.el new file mode 100644 index 0000000..0443f2a --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/sly/evil-collection-sly.el @@ -0,0 +1,276 @@ +;;; evil-collection-sly.el --- Evil bindings for `sly' -*- lexical-binding: t -*- + +;; Copyright (C) 2019 Pierre Neidhardt + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, sly, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for `sly-mode'. + +;;; Code: +;; WARNING: This mirrors evil-collection-slime.el. Keep them in sync! + +(require 'evil-collection) +(require 'sly nil t) + +(declare-function sly-last-expression "sly") +(declare-function sly-eval-print "sly") + +(defvar sly-connection-list-mode-map) +(defvar sly-db-mode-map) +(defvar sly-inspector-mode-map) +(defvar sly-mode-map) +(defvar sly-popup-buffer-mode-map) +(defvar sly-thread-control-mode-map) +(defvar sly-trace-dialog-mode-map) +(defvar sly-stickers--replay-mode-map) +(defvar sly-xref-mode-map) + +(defconst evil-collection-sly-maps '(sly-connection-list-mode-map + sly-db-mode-map + sly-inspector-mode-map + sly-mode-map + sly-popup-buffer-mode-map + sly-stickers--replay-mode-map + sly-thread-control-mode-map + sly-trace-dialog-mode-map + sly-xref-mode-map)) + +;; Same as `evil-collection-slime-last-sexp'. +(defun evil-collection-sly-last-sexp (command &rest args) + "In normal-state or motion-state, last sexp ends at point." + (if (and (not evil-move-beyond-eol) + (or (evil-normal-state-p) (evil-motion-state-p))) + (save-excursion + (unless (or (eobp) (eolp)) (forward-char)) + (apply command args)) + (apply command args))) + +(defun evil-collection-sly-eval-print-last-expression (string) + "Evaluate sexp before point; print value into the current buffer. + +Evil version of `sly-eval-print-last-expression' that accounts for +`evil-move-beyond-eol'." + (interactive + (list (progn + (when (and (not evil-move-beyond-eol) + (or (evil-normal-state-p) (evil-motion-state-p))) + (unless (or (eobp) (eolp)) + (forward-char))) + (sly-last-expression)))) + (insert "\n") + (sly-eval-print string)) + +;;;###autoload +(defun evil-collection-sly-setup () + "Set up `evil' bindings for `sly'." + (unless evil-move-beyond-eol + (advice-add 'sly-eval-last-expression :around 'evil-collection-sly-last-sexp) + (advice-add 'sly-pprint-eval-last-expression :around 'evil-collection-sly-last-sexp) + (advice-add 'sly-mrepl-return :around 'evil-collection-sly-last-sexp) + (advice-add 'sly-eval-print-last-expression :override 'evil-collection-sly-eval-print-last-expression)) + + (evil-collection-define-key 'normal 'sly-db-mode-map + [follow-link] 'mouse-face + "\C-i" 'sly-db-cycle + "g?" 'describe-mode + "S" 'sly-db-show-frame-source + "e" 'sly-db-eval-in-frame + "d" 'sly-db-pprint-eval-in-frame + "D" 'sly-db-disassemble + "i" 'sly-db-inspect-in-frame + "gj" 'sly-db-down + "gk" 'sly-db-up + (kbd "C-j") 'sly-db-down + (kbd "C-k") 'sly-db-up + "]]" 'sly-db-details-down + "[[" 'sly-db-details-up + (kbd "M-j") 'sly-db-details-down + (kbd "M-k") 'sly-db-details-up + "gg" 'sly-db-beginning-of-backtrace + "G" 'sly-db-end-of-backtrace + "t" 'sly-db-toggle-details + "gr" 'sly-db-restart-frame + "I" 'sly-db-invoke-restart-by-name + "R" 'sly-db-return-from-frame + "c" 'sly-db-continue + "s" 'sly-db-step + "n" 'sly-db-next + "o" 'sly-db-out + "b" 'sly-db-break-on-return + "a" 'sly-db-abort + "q" 'sly-db-quit + "A" 'sly-db-break-with-system-debugger + "B" 'sly-db-break-with-default-debugger + "P" 'sly-db-print-condition + "C" 'sly-db-inspect-condition + "g:" 'sly-interactive-eval + "0" 'sly-db-invoke-restart-0 + "1" 'sly-db-invoke-restart-1 + "2" 'sly-db-invoke-restart-2 + "3" 'sly-db-invoke-restart-3 + "4" 'sly-db-invoke-restart-4 + "5" 'sly-db-invoke-restart-5 + "6" 'sly-db-invoke-restart-6 + "7" 'sly-db-invoke-restart-7 + "8" 'sly-db-invoke-restart-8 + "9" 'sly-db-invoke-restart-9) + + (evil-collection-define-key 'normal 'sly-inspector-mode-map + [mouse-6] 'sly-inspector-pop + [mouse-7] 'sly-inspector-next + ;; TODO: `sly-inspector-next' and `sly-inspector-pop' should probably + ;; just be bound to C-i and C-o. + "gk" 'sly-inspector-pop + (kbd "C-k") 'sly-inspector-pop + "[[" 'sly-inspector-pop + (kbd "C-o") 'sly-inspector-pop + "gj" 'sly-inspector-next + (kbd "C-j") 'sly-inspector-next + "]]" 'sly-inspector-next + (kbd "C-i") 'sly-inspector-next + "K" 'sly-inspector-describe-inspectee + "e" 'sly-inspector-eval + "M-p" 'sly-inspector-history + "gr" 'sly-inspector-reinspect + "gv" 'sly-inspector-toggle-verbose + (kbd "") 'forward-button + (kbd "C-i") 'forward-button + (kbd "") 'backward-button ; Emacs translates S-TAB + (kbd "") 'backward-button ; to BACKTAB on X. + "." 'sly-edit-definition + "gd" 'sly-edit-definition + "gR" 'sly-inspector-fetch-all + "q" 'sly-inspector-quit) + + (evil-collection-define-key 'normal 'sly-mode-map + (kbd "K") 'sly-describe-symbol + (kbd "C-t") 'sly-pop-find-definition-stack + ;; goto + "gd" 'sly-edit-definition + "gz" 'sly-mrepl) + + (when evil-collection-want-find-usages-bindings + (evil-collection-define-key 'normal 'sly-mode-map + "gr" 'sly-who-references)) + + (evil-collection-define-key 'normal 'sly-popup-buffer-mode-map + ;; quit + "q" 'quit-window + + (kbd "C-t") 'sly-pop-find-definition-stack + + ;; goto + "gd" 'sly-edit-definition) + + (evil-collection-inhibit-insert-state 'sly-thread-control-mode-map) + (evil-collection-define-key 'normal 'sly-thread-control-mode-map + "a" 'sly-thread-attach + "d" 'sly-thread-debug + "x" 'sly-thread-kill + "gr" 'sly-update-threads-buffer) + + (evil-collection-define-key 'normal 'sly-xref-mode-map + "q" 'quit-window + (kbd "RET") 'sly-xref-goto + (kbd "SPC") 'sly-xref-show + "go" 'sly-show-xref + (kbd "") 'forward-button + (kbd "C-i") 'forward-button + (kbd "") 'backward-button ; Emacs translates S-TAB + (kbd "") 'backward-button ; to BACKTAB on X. + "gj" 'sly-xref-next-line + "gk" 'sly-xref-prev-line + (kbd "C-j") 'sly-xref-next-line + (kbd "C-k") 'sly-xref-prev-line + "]]" 'sly-xref-next-line + "[[" 'sly-xref-prev-line + "gr" 'sly-recompile-xref + "gR" 'sly-recompile-all-xrefs + ;; "r" 'sly-xref-retract ; TODO: Equivalent for Sly? + ) + + (let* ((submit evil-collection-repl-submit-state) + (newline-state (if (eq submit 'normal) 'insert 'normal))) + (evil-collection-define-key submit 'sly-mrepl-mode-map + (kbd "RET") 'sly-mrepl-return) + (evil-collection-define-key newline-state 'sly-mrepl-mode-map + (kbd "RET") 'newline)) + + (evil-collection-define-key 'normal 'sly-mrepl-mode-map + "gj" 'sly-mrepl-next-prompt + "gk" 'sly-mrepl-previous-prompt + (kbd "C-j") 'sly-mrepl-next-prompt + (kbd "C-k") 'sly-mrepl-previous-prompt + "]]" 'sly-mrepl-next-prompt + "[[" 'sly-mrepl-previous-prompt + (kbd "C-p") 'sly-mrepl-previous-input-or-button + (kbd "C-n") 'sly-mrepl-next-input-or-button) + + (evil-collection-define-key 'normal 'sly-trace-dialog-mode-map + "q" 'quit-window + "gr" 'sly-trace-dialog-fetch-status + "gR" 'sly-trace-dialog-fetch-traces) + + (evil-collection-define-key 'normal 'sly-stickers--replay-mode-map + ;; The "n", "p", "x", "h" and "q" key are hard-coded in the description, so + ;; we need to set them to the expected command. + "gg" 'sly-stickers-replay-jump-to-beginning + "G" 'sly-stickers-replay-jump-to-end + "F" 'sly-stickers-forget + "J" 'sly-stickers-replay-next-for-sticker + "K" 'sly-stickers-replay-prev-for-sticker + "N" 'sly-stickers-replay-next-for-sticker + "P" 'sly-stickers-replay-prev-for-sticker + "R" 'sly-stickers-replay-reset-ignore-list + "zv" 'sly-stickers-replay-toggle-pop-to-stickers + "h" 'sly-stickers-replay-toggle-help + "g?" 'sly-stickers-replay-toggle-help + "gd" 'sly-stickers-replay-jump + "j" 'sly-stickers-replay-next + "k" 'sly-stickers-replay-prev + "n" 'sly-stickers-replay-next + "p" 'sly-stickers-replay-prev + "q" 'quit-window + "go" 'sly-stickers-replay-pop-to-current-sticker + "v" 'sly-stickers-replay-pop-to-current-sticker + "x" 'sly-stickers-replay-toggle-ignore-sticker + "zi" 'sly-stickers-replay-toggle-ignore-sticker + "zz" 'sly-stickers-replay-toggle-ignore-zombies) + + (evil-collection-define-key 'normal 'sly-connection-list-mode-map + (kbd "") 'forward-button + (kbd "C-i") 'forward-button + (kbd "") 'backward-button + (kbd "") 'backward-button + (kbd "RET") 'sly-connection-list-default-action + "R" 'sly-restart-connection-at-point + "d" 'sly-connection-list-make-default + "x" 'sly-quit-connection-at-point + "gr" 'sly-update-connection-list + "o" 'tabulated-list-sort + "q" 'quit-window) + + (add-hook 'sly-popup-buffer-mode-hook #'evil-normalize-keymaps)) + +(provide 'evil-collection-sly) +;;; evil-collection-sly.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/smerge-mode/README.org b/.config/emacs/lisp/evil-collection/modes/smerge-mode/README.org new file mode 100644 index 0000000..44871a7 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/smerge-mode/README.org @@ -0,0 +1,16 @@ +* smerge + + The table below shows the binding changes that are made to smerge-mode. + +| Command | Original Binding | evil-collection-smerge | +|----------------------------+------------------+------------------------| +| =smerge-next= | =C-c ^ n= | =gj, ]]= | +| =smerge-prev= | =C-c ^ p= | =gk, [[= | +| =smerge-keep-all= | =C-c ^ a= | =ga= | +| =smerge-keep-upper= | =C-c ^ u= | =gu= | +| =smerge-keep-lower= | =C-c ^ l= | =gl= | +| =smerge-keep-other= | =C-c ^ o= | =go= | +| =smerge-keep-mine= | =C-c ^ m= | =gm= | +| =smerge-combine-with-next= | =C-c ^ C= | =gc= | +| =smerge-refine= | =C-c ^ R= | =gr= | +| =smerge-keep-base= | =C-c ^ b= | =gb= | diff --git a/.config/emacs/lisp/evil-collection/modes/smerge-mode/evil-collection-smerge-mode.el b/.config/emacs/lisp/evil-collection/modes/smerge-mode/evil-collection-smerge-mode.el new file mode 100644 index 0000000..fa939c5 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/smerge-mode/evil-collection-smerge-mode.el @@ -0,0 +1,54 @@ +;;; evil-collection-smerge-mode.el --- Bindings for `smerge-mode' -*- lexical-binding: t -*- + +;; Copyright (C) 2021 pspiagicw + +;; Author: pspiagicw +;; Maintainer: pspiagicw +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, python, tools, emacs + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for `smerge-mode'. +;;; Code: +(require 'evil-collection) +(require 'smerge-mode) +;; + +(defconst evil-collection-smerge-mode-maps '(smerge-mode-map)) + +;;;###autoload +(defun evil-collection-smerge-mode-setup () + "Setup up `evil' bindings for `smerge-mode'." + (add-hook 'smerge-mode-hook #'evil-normalize-keymaps) + (evil-collection-define-key 'normal 'smerge-mode-map + "gj" 'smerge-next + "]]" 'smerge-next + "gk" 'smerge-prev + "[[" 'smerge-prev + "gr" 'smerge-resolve + "ga" 'smerge-keep-all + "gu" 'smerge-keep-upper + "gl" 'smerge-keep-lower + "go" 'smerge-keep-other + "gm" 'smerge-keep-mine + "gc" 'smerge-combine-with-next + "gR" 'smerge-refine + "gb" 'smerge-keep-base)) + +(provide 'evil-collection-smerge-mode) +;;; evil-collection-smerge-mode.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/snake/README.org b/.config/emacs/lisp/evil-collection/modes/snake/README.org new file mode 100644 index 0000000..0234ac4 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/snake/README.org @@ -0,0 +1,16 @@ +* snake + + Evil bindings for =snake=, the built-in implementation of the classic arcade game. + +** Key bindings + + | Command | Original | Evil | + |--------------------+------------------+-----------| + | =snake-move-left= | ==, =C-b= | =h= | + | =snake-move-right= | ==, =C-f= | =l= | + | =snake-move-down= | ==, =C-n= | =j= | + | =snake-move-up= | ==, =C-p= | =k= | + | =snake-start-game= | =n= | =gr= | + | =snake-pause-game= | =p= | =p= | + | =snake-end-game= | =q= | =ZZ= | + | =quit-window= | n/a | =q=, =ZQ= | diff --git a/.config/emacs/lisp/evil-collection/modes/snake/evil-collection-snake.el b/.config/emacs/lisp/evil-collection/modes/snake/evil-collection-snake.el new file mode 100644 index 0000000..f1fc86e --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/snake/evil-collection-snake.el @@ -0,0 +1,50 @@ +;;; evil-collection-snake.el --- Bindings for `snake' -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen +;; Copyright (C) 2022 Farzin Firouzi + +;; Author: Farzin Firouzi +;; Maintainer: James Nguyen +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Bindings for `snake'. + +;;; Code: +(require 'evil-collection) + +(defconst evil-collection-snake-maps '(snake-mode-map)) + +;;;###autoload +(defun evil-collection-snake-setup () + "Set up `evil' bindings for `snake'." + (evil-set-initial-state 'snake-mode 'normal) + (evil-collection-define-key 'normal 'snake-mode-map + "h" 'snake-move-left + "l" 'snake-move-right + "j" 'snake-move-down + "k" 'snake-move-up + "gr" 'snake-start-game + "p" 'snake-pause-game + "q" 'quit-window + "ZQ" 'quit-window + "ZZ" 'snake-end-game)) + +(provide 'evil-collection-snake) +;;; evil-collection-snake.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/so-long/README.org b/.config/emacs/lisp/evil-collection/modes/so-long/README.org new file mode 100644 index 0000000..f8ff959 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/so-long/README.org @@ -0,0 +1,22 @@ +* so-long + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/emacs/So-Long.html][so-long]], which mitigates performance problems in buffers with very long lines. + +** Key bindings + + Normal and visual state bindings added to =so-long-mode-map=. The defaults + make motion respect visual lines, matching how so-long buffers are usually + read. + + | Command | Original | Evil | + |---------------------------------------+----------+-----------| + | =evil-next-visual-line= | n/a | =j= | + | =evil-previous-visual-line= | n/a | =k= | + | =evil-next-line= | n/a | =gj= | + | =evil-previous-line= | n/a | =gk= | + | =evil-beginning-of-visual-line= | n/a | =0=, =g0= | + | =evil-end-of-visual-line= | n/a | =$= | + | =evil-end-of-line= | n/a | =g$= | + | =evil-first-non-blank-of-visual-line= | n/a | =^= | + | =evil-first-non-blank= | n/a | =g^= | + | =end-of-buffer= | n/a | =G= | diff --git a/.config/emacs/lisp/evil-collection/modes/so-long/evil-collection-so-long.el b/.config/emacs/lisp/evil-collection/modes/so-long/evil-collection-so-long.el new file mode 100644 index 0000000..81500a7 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/so-long/evil-collection-so-long.el @@ -0,0 +1,51 @@ +;;; evil-collection-so-long.el --- Bindings for `so-long' -*- lexical-binding: t -*- + +;; Copyright (C) 2022 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.2 +;; Package-Requires: ((emacs "27.1")) +;; Keywords: evil, emacs, convenience, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for so-long. + +;;; Code: +(require 'evil-collection) +(require 'so-long nil t) + +(defvar so-long-mode-map) +(defconst evil-collection-so-long-maps '(so-long-mode-map)) + +(defun evil-collection-so-long-setup () + "Set up `evil' bindings for so-long." + (evil-collection-define-key '(normal visual) 'so-long-mode-map + "j" #'evil-next-visual-line + "k" #'evil-previous-visual-line + "gj" #'evil-next-line + "gk" #'evil-previous-line + "0" #'evil-beginning-of-visual-line + "g0" #'evil-beginning-of-visual-line + "$" #'evil-end-of-visual-line + "g$" #'evil-end-of-line + "^" #'evil-first-non-blank-of-visual-line + "g^" #'evil-first-non-blank + "G" 'end-of-buffer)) + +(provide 'evil-collection-so-long) +;;; evil-collection-so-long.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/speedbar/README.org b/.config/emacs/lisp/evil-collection/modes/speedbar/README.org new file mode 100644 index 0000000..81a39b4 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/speedbar/README.org @@ -0,0 +1,61 @@ +* speedbar + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/speedbar/index.html][speedbar]], the everything browser sidebar. + +** Key bindings + +*** speedbar-mode-map + + | Command | Original | Evil | + |------------------------------------------+------------+-------| + | =speedbar-next= | =n= | =j= | + | =speedbar-prev= | =p= | =k= | + | =evil-goto-first-line= | n/a | =gg= | + | =evil-goto-line= | n/a | =G= | + | =speedbar-refresh= | =g= | =gr= | + | =speedbar-edit-line= | =RET=, =e= | =RET= | + | =speedbar-toggle-line-expansion= | =SPC= | =TAB= | + | =speedbar-expand-line= | =+= | =zo= | + | =speedbar-expand-line-descendants= | =[= | =zO= | + | =speedbar-contract-line= | =-= | =zc= | + | =speedbar-contract-line-descendants= | =]= | =zC= | + | =speedbar-toggle-show-all-files= | n/a | =a= | + | =speedbar-toggle-updates= | =t= | =t= | + | =speedbar-toggle-images= | n/a | =i= | + | =speedbar-toggle-sorting= | n/a | =o= | + | =speedbar-restricted-next= | =M-n= | =M-j= | + | =speedbar-restricted-prev= | =M-p= | =M-k= | + | =speedbar-forward-list= | =M-C-n= | =]]= | + | =speedbar-backward-list= | =M-C-p= | =[[= | + | =switch-to-quick-buffers= | =b= | =b= | + | =switch-to-files= | =f= | =f= | + | =speedbar-change-initial-expansion-list= | n/a | =J= | + +*** speedbar-file-key-map + + | Command | Original | Evil | + |-------------------------------+----------+----------| + | =speedbar-item-byte-compile= | =B= | =B= | + | =speedbar-item-copy= | =C= | =C= | + | =speedbar-item-delete= | =D= | =D= | + | =speedbar-item-info= | =I= | =I= | + | =speedbar-item-object-delete= | =O= | =K= | + | =speedbar-item-load= | =L= | =L= | + | =speedbar-item-rename= | =R= | =R= | + | =speedbar-create-directory= | =M= | =+= | + | =speedbar-up-directory= | =U= | =^=, =-= | + +*** speedbar-buffers-key-map + + | Command | Original | Evil | + |---------------------------------+----------+------| + | =speedbar-buffer-kill-buffer= | =k= | =K= | + | =speedbar-buffer-revert-buffer= | =r= | =gr= | + +** New commands + + | Command | Key | + |--------------------------------------------------------------+--------------| + | =evil-collection-speedbar-switch-to-previous-expansion-list= | =C-p=, =C-n= | + | =evil-collection-speedbar-switch-to-quick-buffers= | =b= | + | =evil-collection-speedbar-switch-to-files= | =f= | diff --git a/.config/emacs/lisp/evil-collection/modes/speedbar/evil-collection-speedbar.el b/.config/emacs/lisp/evil-collection/modes/speedbar/evil-collection-speedbar.el new file mode 100644 index 0000000..5abc28b --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/speedbar/evil-collection-speedbar.el @@ -0,0 +1,110 @@ +;;; evil-collection-speedbar.el --- Evil bindings for speedbar -*- lexical-binding: t -*- + +;; Copyright (C) 2020 Zhiwei Chen + +;; Author: Zhiwei Chen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, speedbar, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for speedbar. + +;;; Code: + +(require 'evil-collection) +(require 'speedbar) + +(defconst evil-collection-speedbar-maps '(speedbar-mode-map + speedbar-file-key-map + speedbar-buffers-key-map)) + +(defun evil-collection-speedbar-switch-to-previous-expansion-list () + "Back to previously used expansion list." + (interactive) + (speedbar-change-initial-expansion-list speedbar-previously-used-expansion-list-name)) + +(defun evil-collection-speedbar-switch-to-quick-buffers () + "Switch to quick-buffers expansion list." + (interactive) + (speedbar-change-initial-expansion-list "quick buffers")) + +(defun evil-collection-speedbar-switch-to-files () + "Switch to files expansion list." + (interactive) + (speedbar-change-initial-expansion-list "files")) + +;;;###autoload +(defun evil-collection-speedbar-setup () + "Set up `evil' bindings for `speedbar'." + (evil-set-initial-state 'speedbar-mode 'normal) + (evil-collection-define-key 'normal 'speedbar-mode-map + "j" 'speedbar-next + "k" 'speedbar-prev + "gr" 'speedbar-refresh + "gg" 'evil-goto-first-line + "G" 'evil-goto-line + + ;; Basic tree features + (kbd "RET") 'speedbar-edit-line + (kbd "TAB") 'speedbar-toggle-line-expansion + + ;; Fold + "zo" 'speedbar-expand-line + "zO" 'speedbar-expand-line-descendants + "zc" 'speedbar-contract-line + "zC" 'speedbar-contract-line-descendants + + ;; Toggle + "a" 'speedbar-toggle-show-all-files + "t" 'speedbar-toggle-updates + "i" 'speedbar-toggle-images + "o" 'speedbar-toggle-sorting + + ;; Navigation + (kbd "M-j") 'speedbar-restricted-next + (kbd "M-k") 'speedbar-restricted-prev + "]]" 'speedbar-forward-list + "[[" 'speedbar-backward-list + (kbd "C-p") 'evil-collection-speedbar-switch-to-previous-expansion-list + (kbd "C-n") 'evil-collection-speedbar-switch-to-previous-expansion-list + "b" 'evil-collection-speedbar-switch-to-quick-buffers + "f" 'evil-collection-speedbar-switch-to-files + "J" 'speedbar-change-initial-expansion-list) + + (evil-collection-define-key 'normal 'speedbar-file-key-map + ;; File based commands + "B" 'speedbar-item-byte-compile + "C" 'speedbar-item-copy + "D" 'speedbar-item-delete + "I" 'speedbar-item-info + "K" 'speedbar-item-object-delete + "L" 'speedbar-item-load + "R" 'speedbar-item-rename + "+" 'speedbar-create-directory + "^" 'speedbar-up-directory + "-" 'speedbar-up-directory) + + (evil-collection-define-key 'normal 'speedbar-buffers-key-map + ;; Buffer specific keybindings + "K" 'speedbar-buffer-kill-buffer + "gr" 'speedbar-buffer-revert-buffer)) + +(provide 'evil-collection-speedbar) +;;; evil-collection-speedbar.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/tab-bar/README.org b/.config/emacs/lisp/evil-collection/modes/tab-bar/README.org new file mode 100644 index 0000000..70f8f43 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/tab-bar/README.org @@ -0,0 +1,15 @@ +* tab-bar + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Tab-Bars.html][tab-bar]]. Only =tab-switcher-mode-map= (the =M-x tab-switcher= list) is touched; the global =tab-bar-mode= itself has no buffer-local map to rebind. + +** Key bindings + + | Command | Original | Evil | + |--------------------------+-----------------+-----------------| + | =tab-switcher-next-line= | =n=, =SPC= | =j=, =gj= | + | =tab-switcher-prev-line= | =p= | =k=, =gk= | + | =tab-switcher-delete= | =d=, =k=, =C-k= | =d= | + | =tab-switcher-select= | =RET= | =RET= | + | =tab-switcher-unmark= | =u= | =u= | + | =tab-switcher-execute= | =x= | =x= | + | =quit-window= | =q= | =q=, =ZZ=, =ZQ= | diff --git a/.config/emacs/lisp/evil-collection/modes/tab-bar/evil-collection-tab-bar.el b/.config/emacs/lisp/evil-collection/modes/tab-bar/evil-collection-tab-bar.el new file mode 100644 index 0000000..9e2500c --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/tab-bar/evil-collection-tab-bar.el @@ -0,0 +1,59 @@ +;;; evil-collection-tab-bar.el --- Evil bindings for tab-bar -*- lexical-binding: t -*- + +;; Copyright (C) 2020 Zhiwei Chen + +;; Author: Zhiwei Chen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "27.1")) +;; Keywords: evil, tab-bar, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for tab-bar. + +;;; Code: + +(require 'evil-collection) +(require 'tab-bar nil t) + +(defconst evil-collection-tab-bar-maps '(tab-switcher-mode-map)) + +(defun evil-collection-tab-bar-setup () + "Set up `evil' bindings to `tab-bar'." + (evil-set-initial-state 'tab-switcher-mode 'normal) + (evil-collection-define-key 'normal 'tab-switcher-mode-map + ;; Movement + "j" 'tab-switcher-next-line + "k" 'tab-switcher-prev-line + "gj" 'tab-switcher-next-line + "gk" 'tab-switcher-prev-line + + ;; Mark + "d" 'tab-switcher-delete + (kbd "RET") 'tab-switcher-select + "u" 'tab-switcher-unmark + "x" 'tab-switcher-execute + + ;; Quit + "q" 'quit-window + "ZZ" 'quit-window + "ZQ" 'quit-window)) + +(provide 'evil-collection-tab-bar) + +;;; evil-collection-tab-bar.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/tablist/evil-collection-tablist.el b/.config/emacs/lisp/evil-collection/modes/tablist/evil-collection-tablist.el new file mode 100644 index 0000000..0781c1c --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/tablist/evil-collection-tablist.el @@ -0,0 +1,64 @@ +;;; evil-collection-tablist.el --- Evil bindings for Tablist -*- lexical-binding: t -*- + +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, tablist, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for Tablist. + +;;; Code: +(require 'tablist nil t) +(require 'evil-collection) + +(defconst evil-collection-tablist-maps '(tablist-mode-map tablist-minor-mode-map)) + +(defvar tablist-mode-regexp-map) +(defvar tablist-mode-mark-map) +(defvar tablist-mode-filter-map) + +;;;###autoload +(defun evil-collection-tablist-setup () + "Set up `evil' bindings for `tablist'." + + (let ((common-bindings + (list + "U" 'tablist-unmark-all-marks + "g%" tablist-mode-regexp-map + "g*" tablist-mode-mark-map + "g/" tablist-mode-filter-map + "gr" 'tablist-revert + "K" 'tablist-do-kill-lines + "m" 'tablist-mark-forward + "S" 'tablist-sort + "t" 'tablist-toggle-marks + "u" 'tablist-unmark-forward))) + + (apply #'evil-collection-define-key 'normal 'tablist-mode-map + (kbd "RET") 'tablist-find-entry + "d" 'tablist-flag-forward + "f" 'tablist-find-entry + "X" 'tablist-do-delete + "x" 'tablist-do-flagged-delete + common-bindings) + + (apply #'evil-collection-define-key 'normal 'tablist-minor-mode-map + "q" 'tablist-quit + common-bindings))) + +(provide 'evil-collection-tablist) +;;; evil-collection-tablist.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/tabulated-list/README.org b/.config/emacs/lisp/evil-collection/modes/tabulated-list/README.org new file mode 100644 index 0000000..f405393 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/tabulated-list/README.org @@ -0,0 +1,20 @@ +* tabulated-list + + Evil bindings for =tabulated-list-mode=, the parent mode behind package menu, process list, bookmark list, and many other list-based buffers. + +** Key bindings + + =n= and =p= are unbound so they fall through to evil motion. The default + =g= (revert) and =S= (sort) are kept; column commands move under the =g= + prefix. + + | Command | Original | Evil | + |----------------------------------------+-------------+------| + | =tabulated-list-sort= | =S= | =S= | + | =tabulated-list-narrow-current-column= | ={= | ={= | + | =tabulated-list-widen-current-column= | =}= | =}= | + | =tabulated-list-next-column= | =M-= | =gl= | + | =tabulated-list-previous-column= | =M-= | =gh= | + | =quit-window= | =q= | =q= | + | =next-line= (unbound) | =n= | n/a | + | =previous-line= (unbound) | =p= | n/a | diff --git a/.config/emacs/lisp/evil-collection/modes/tabulated-list/evil-collection-tabulated-list.el b/.config/emacs/lisp/evil-collection/modes/tabulated-list/evil-collection-tabulated-list.el new file mode 100644 index 0000000..081adb5 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/tabulated-list/evil-collection-tabulated-list.el @@ -0,0 +1,54 @@ +;;; evil-collection-tabulated-list.el --- Bindings for `tabulated-list' -*- lexical-binding: t -*- + +;; Copyright (C) 2020 Morgan Smith + +;; Author: Morgan Smith +;; Maintainer: Morgan Smith +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, emacs, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Bindings for `tabulated-list' + +;;; Code: +(require 'evil-collection) +(require 'tabulated-list) + +(defvar tabulated-list-mode-map) + +(defconst evil-collection-tabulated-list-maps '(tabulated-list-mode-map)) + +;;;###autoload +(defun evil-collection-tabulated-list-setup () + "Set up `evil' bindings for `tabulated-list'." + + (evil-collection-define-key nil 'tabulated-list-mode-map + "n" nil + "p" nil) + + (evil-set-initial-state 'tabulated-list-mode 'normal) + (evil-collection-define-key 'normal 'tabulated-list-mode-map + "S" 'tabulated-list-sort + "{" 'tabulated-list-narrow-current-column + "}" 'tabulated-list-widen-current-column + "gl" 'tabulated-list-next-column + "gh" 'tabulated-list-previous-column + "q" 'quit-window)) + +(provide 'evil-collection-tabulated-list) +;;; evil-collection-tabulated-list.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/tar-mode/README.org b/.config/emacs/lisp/evil-collection/modes/tar-mode/README.org new file mode 100644 index 0000000..fbb0da6 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/tar-mode/README.org @@ -0,0 +1,27 @@ +* tar-mode + + Evil bindings for =tar-mode=, the built-in tar archive browser. + +** Key bindings + + | Command | Original | Evil | + |--------------------------------+-----------------------------+--------------------| + | =tar-next-line= | =n=, =SPC=, =C-n=, == | =j=, =gj=, =C-j= | + | =tar-previous-line= | =p=, =C-p=, == | =k=, =gk=, =C-k= | + | =beginning-of-buffer= | n/a | =gg= | + | =end-of-buffer= | n/a | =G= | + | =tar-extract= | =RET=, =e=, =f= | =RET= | + | =tar-extract-other-window= | =o=, =E= | =go=, =S-= | + | =tar-view= | =v= | =gO=, =M-= | + | =tar-flag-deleted= | =d=, =C-d= | =d= | + | =tar-rename-entry= | =R= | =r= | + | =tar-expunge= | =x= | =x= | + | =tar-chmod-entry= | =M= | =M= | + | =tar-chgrp-entry= | =G= | =P= | + | =tar-chown-entry= | =O= | =O= | + | =revert-buffer= | =g= | =gr= | + | =tar-new-entry= | =I= | =I= | + | =tar-copy= | =C= | =C= | + | =tar-unflag= | =u= | =u= | + | =tar-clear-modification-flags= | n/a | =U= | + | =quit-window= | n/a | =q= | diff --git a/.config/emacs/lisp/evil-collection/modes/tar-mode/evil-collection-tar-mode.el b/.config/emacs/lisp/evil-collection/modes/tar-mode/evil-collection-tar-mode.el new file mode 100644 index 0000000..5df995d --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/tar-mode/evil-collection-tar-mode.el @@ -0,0 +1,81 @@ +;;; evil-collection-tar-mode.el --- Evil bindings for tar-mode -*- lexical-binding: t -*- + +;; Copyright (C) 2019 Michael Arndt + +;; Author: 0x28 +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, tar-mode, archive, bindings, files + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Evil bindings for `tar-mode'. + +;;; Code: +(require 'tar-mode) +(require 'evil-collection) + +(defconst evil-collection-tar-mode-maps '(tar-mode-map)) + +;;;###autoload +(defun evil-collection-tar-mode-setup () + "Set up `evil' bindings for `tar-mode'." + (evil-set-initial-state 'tar-mode 'normal) + (evil-collection-define-key 'normal 'tar-mode-map + "j" 'tar-next-line + "k" 'tar-previous-line + (kbd "C-j") 'tar-next-line + (kbd "C-k") 'tar-previous-line + "gj" 'tar-next-line + "gk" 'tar-previous-line + + "gg" 'beginning-of-buffer + "G" 'end-of-buffer + + ;; open + (kbd "RET") 'tar-extract + (kbd "S-") 'tar-extract-other-window + (kbd "M-") 'tar-view + "go" 'tar-extract-other-window + "gO" 'tar-view + + "d" 'tar-flag-deleted + "r" 'tar-rename-entry + "x" 'tar-expunge + "M" 'tar-chmod-entry + "P" 'tar-chgrp-entry + "O" 'tar-chown-entry + + ;; refresh + "gr" 'revert-buffer + + ;; create + "I" 'tar-new-entry + + ;; write + "C" 'tar-copy + + ;; mark + "u" 'tar-unflag + "U" 'tar-clear-modification-flags + + ;; quit + "q" 'quit-window)) + +(provide 'evil-collection-tar-mode) +;;; evil-collection-tar-mode.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/telega/evil-collection-telega.el b/.config/emacs/lisp/evil-collection/modes/telega/evil-collection-telega.el new file mode 100644 index 0000000..2fcbd00 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/telega/evil-collection-telega.el @@ -0,0 +1,218 @@ +;;; evil-collection-telega.el --- Evil bindings for telega -*- lexical-binding: t -*- + +;; Copyright (C) 2021 Ruoyu Feng + +;; Author: Ruoyu Feng +;; Maintainer: James Nguyen , Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.6 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, emacs, tools, telegram, telega + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: +;; Evil bindings for telega. + +;;; Code: +(require 'telega nil t) +(require 'evil-collection) + +(defvar telega-prefix-map) +(defvar telega-filter-map) +(defvar telega-sort-map) +(defvar telega-chatbuf-fastnav-map) +(defvar telega-describe-map) +(defvar telega-folder-map) +(defvar telega-voip-map) +(defvar telega-root-view-map) +(defvar telega-root-fastnav-map) + +(defconst evil-collection-telega-maps '(telega-root-mode-map + telega-chat-mode-map + telega-image-mode-map + telega-webpage-mode-map + telega-user-button-map + telega-msg-button-map + telega-chat-button-map + telega-sticker-button-map)) + +(defconst evil-collection-telega-modes '(telega-root-mode + telega-chat-mode + telega-image-mode + telega-webpage-mode)) + +;;;###autoload +(defun evil-collection-telega-setup () + "Set up `evil' bindings for `telega'." + (evil-collection-set-readonly-bindings 'telega-root-mode-map) + + (dolist (mode evil-collection-telega-modes) + (evil-set-initial-state mode 'normal)) + + (evil-collection-define-key 'normal 'telega-root-mode-map + "j" 'evil-next-line + "k" 'evil-previous-line + + "ga" telega-prefix-map + + (kbd "") 'telega-button-forward + (kbd "") 'telega-button-backward + + "S" telega-sort-map + "s" telega-filter-map + "_" 'telega-filter-undo + "-" 'telega-filter-redo + + "c" 'telega-chat-join-by-link + "C" 'telega-chat-create + "D" 'telega-chats-filtered-kill-chatbuf + "R" 'telega-chats-filtered-toggle-read + + "q" 'bury-buffer + "Q" 'telega-kill + + "g?" telega-describe-map + "gO" telega-folder-map + "gC" telega-voip-map + "gV" telega-root-view-map + "J" telega-root-fastnav-map + + "gs" 'telega-view-search) + + (evil-collection-define-key 'normal 'telega-chat-mode-map + "ga" telega-prefix-map + "gA" telega-chatbuf-fastnav-map + + "zz" 'telega-chatbuf-recenter-1 + + "^" 'telega-chatbuf-beginning-of-thing + + "g?" 'telega-describe-chat + + "Za" 'telega-chatbuf-attach + "Zf" 'telega-chatbuf-attach-media + "Zv" 'telega-chatbuf-attach-clipboard + + "s" 'telega-chatbuf-filter + "_" 'telega-chatbuf-filter-cancel + "S" 'telega-chatbuf-filter-search + + (kbd "") 'telega-chatbuf-complete-or-next-link + (kbd "") 'telega-chatbuf-prev-link + + "q" 'quit-window) + + (let* ((submit evil-collection-repl-submit-state) + (newline-state (if (eq submit 'normal) 'insert 'normal))) + (evil-collection-define-key submit 'telega-chat-mode-map + (kbd "RET") 'telega-chatbuf-newline-or-input-send) + (evil-collection-define-key newline-state 'telega-chat-mode-map + (kbd "RET") 'newline)) + + (evil-collection-define-key 'normal 'telega-image-mode-map + "ga" telega-prefix-map + + "}" 'telega-image-next + "{" 'telega-image-prev + "q" 'telega-image-quit) + + (evil-collection-define-key 'normal 'telega-webpage-mode-map + "ga" telega-prefix-map + + "gx" 'telega-webpage-browse-url + "yy" 'telega-webpage-copy-url + "(" 'telega-webpage-history-prev + ")" 'telega-webpage-history-next + (kbd "") 'telega-button-forward + (kbd "") 'telega-button-backward) + + (evil-collection-set-readonly-bindings 'telega-user-button-map) + ; We have to set keybinds for emacs instead of normal state because normal + ; states takes no effects on buttons and remove the default bindings. + ; ref: emacs-evil/evil#1477 + (evil-collection-define-key nil 'telega-user-button-map + "B" nil + "K" nil + (kbd "DEL") nil + + "g?" 'telega-describe-user + "m" 'telega-user-chat-with + "D" 'telega-user-block) + + (evil-collection-set-readonly-bindings 'telega-msg-button-map) + (evil-collection-define-key nil 'telega-msg-button-map + "c" nil + "d" nil + "e" nil + "f" nil + "k" nil + "l" nil + "m" nil + "n" nil + "p" nil + "^" nil + (kbd "DEL") nil + "*" nil + + "D" 'telega-msg-delete-dwim + "dd" 'telega-msg-delete-dwim + "i" 'telega-msg-edit + "g?" 'telega-describe-message + "a" 'telega-msg-mark-toggle + (kbd "") 'telega-button-forward + (kbd "") 'telega-button-backward + "R" 'telega-msg-forward-dwim + "r" 'telega-msg-reply + "gr" 'telega-msg-open-thread-or-topic + + "Zy" 'telega-msg-copy-text + "Zl" 'telega-msg-copy-link + "ds" 'telega-msg-ban-sender + "ZL" 'telega-msg-redisplay + "P" 'telega-msg-pin-toggle + "ZR" 'telega-msg-resend + "S" 'telega-msg-save + "u" 'telega-msg-unmark + "U" 'telega-chatbuf-msg-marks-toggle + "=" 'telega-msg-diff-edits + "s" 'telega-msg-favorite-toggle) + + (evil-collection-set-readonly-bindings 'telega-chat-button-map) + (evil-collection-define-key nil 'telega-chat-button-map + "i" nil + "d" nil + "^" nil + (kbd "DEL") nil + + "g?" 'telega-describe-chat + "a" 'telega-chat-add-member + "o" 'telega-chat-set-custom-order + "r" 'telega-chat-toggle-read + "P" 'telega-chat-toggle-pin + "C" 'telega-chat-call + "D" 'telega-chat-delete) + + (evil-collection-set-readonly-bindings 'telega-sticker-button-map) + (evil-collection-define-key nil 'telega-sticker-button-map + "f" nil + "*" nil + "i" nil + "h" nil + + "t" 'telega-sticker-toggle-favorite + "g?" 'telega-sticker-help)) + +(provide 'evil-collection-telega) +;;; evil-collection-telega.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/term/README.org b/.config/emacs/lisp/evil-collection/modes/term/README.org new file mode 100644 index 0000000..aa7fcc2 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/term/README.org @@ -0,0 +1,55 @@ +* term + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Terminal-emulator.html][term]] and =ansi-term=, also usable with =multi-term=. + + Insert state corresponds to =term-char-mode=, normal state to =term-line-mode=. + When =evil-collection-term-sync-state-and-mode-p= is non-nil the mode and + state switch in lockstep. + +** Key bindings + +*** term-raw-map (insert state) + + Restores raw passthrough for control characters evil otherwise intercepts. + + | Command | Original | Evil | + |---------------------------------+-----------+-------------------------------------------------------------------------------------------------------------------------------------| + | =term-send-raw= | (default) | =C-a=, =C-b=, =C-d=, =C-e=, =C-f=, =C-k=, =C-l=, =C-n=, =C-o=, =C-p=, =C-q=, =C-r=, =C-s=, =C-t=, =C-u=, =C-v=, =C-w=, =C-y=, =C-z= | + | =evil-collection-term-send-tab= | n/a | == | + | =term-send-eof= | =C-c C-d= | =C-c C-d= | + | =term-stop-subjob= | =C-c C-z= | =C-c C-z= | + +*** term-mode-map (normal state) + + | Command | Original | Evil | + |-----------------------------------------+-----------+------------------------------------------------| + | =evil-collection-term-char-mode-insert= | n/a | =C-c C-k= | + | =term-paste= | =C-c C-y= | =p= | + | =term-previous-prompt= | =C-c C-p= | =[[=, =C-k=, =gk= | + | =term-next-prompt= | =C-c C-n= | =]]=, =C-j=, =gj= | + | =term-bol= | =C-a= | =^= | + | =term-show-maximum-output= | =M-> = | =$= | + | =term-send-input= | =RET= | =RET= (in =evil-collection-repl-submit-state=) | + +** New commands + + | Command | Description | + |------------------------------------------------------+-----------------------------------------------------------| + | =evil-collection-term-char-mode-insert= | switch to =term-char-mode= and insert state | + | =evil-collection-term-send-tab= | send a literal TAB through =term-send-raw-string= | + | =evil-collection-term-escape-stay= | hook that disables backwards cursor on normal-state entry | + | =evil-collection-term-sync-state-and-mode= | hook that ties insert/normal to char/line mode | + | =evil-collection-term-switch-to-char-mode-on-insert= | default sync function | + | =evil-collection-term-char-mode-entry-function= | alternative sync function that only flips at the prompt | + +** Customization + + | Variable | Default | + |----------------------------------------------+------------------------------------------------------| + | =evil-collection-term-sync-state-and-mode-p= | =t= | + | =evil-collection-term-sync-state-function= | =evil-collection-term-switch-to-char-mode-on-insert= | + +** Integrations + + - =multi-term=: =M-DEL= sends =term-send-backward-kill-word= in both + normal state on =term-mode-map= and insert state on =term-raw-map=. diff --git a/.config/emacs/lisp/evil-collection/modes/term/evil-collection-term.el b/.config/emacs/lisp/evil-collection/modes/term/evil-collection-term.el new file mode 100644 index 0000000..bc566fb --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/term/evil-collection-term.el @@ -0,0 +1,170 @@ +;;; evil-collection-term.el --- Evil bindings for term and ansi-term -*- lexical-binding: t -*- + +;; Copyright (C) 2017 Pierre Neidhardt + +;; Author: Pierre Neidhardt +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, term, tools + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: +;; Evil integration for `term' and `ansi-term'. +;; This should also work for other terminal emulators such as `multi-term'. +;; +;; Switching to normal state will automatically switch to line mode. +;; Conversely, switching to insert state will automatically switch to char mode. + +;;; Code: +(require 'evil-collection) +(require 'term) + +(defcustom evil-collection-term-sync-state-and-mode-p t + "Synchronize insert/normal state with char/line-mode respectively. + +When non-nil, going to normal state will automatically switch to +line-mode. Conversely, going to insert state on the last +commandline will automatically switch to char-mode. + +Warning: This feature is experimental." + :group 'evil-collection-term + :type 'boolean) + +(defcustom evil-collection-term-sync-state-function + 'evil-collection-term-switch-to-char-mode-on-insert + "Function used when synchronizing insert/normal state with char/line-mode. + +This is only used if `evil-collection-term-sync-state-and-mode-p' is true." + :group 'evil-collection-term + :type 'function) + +;; TODO: Rebinding ESC has the drawback that programs like vi cannot use it anymore. +;; Workaround: switch to Emacs state and double-press ESC. +;; Otherwise leave ESC to "C-c C-j". +;; Or bind char-mode ESC to "C-c C-x"? + +;; TODO: Add support for normal-state editing. + +(defconst evil-collection-term-maps '(term-raw-map + term-mode-map)) + +(defun evil-collection-term-escape-stay () + "Go back to normal state but don't move cursor backwards. +Moving cursor backwards is the default Vim behavior but +it is not appropriate in some cases like terminals." + (setq-local evil-move-cursor-back nil)) + +(defun evil-collection-term-char-mode-insert () + "Switch to `term-char-mode' and enter insert state." + (interactive) + (term-char-mode) + (evil-insert-state)) + +(defun evil-collection-term-char-mode-entry-function () + "Maybe switch to `term-char-mode' on insert state." + (when (get-buffer-process (current-buffer)) + (let (last-prompt) + (save-excursion + (goto-char (point-max)) + (when (= (line-beginning-position) (line-end-position)) + (ignore-errors (backward-char))) + (setq last-prompt (max (term-bol nil) (line-beginning-position)))) + (when (>= (point) last-prompt) + (term-char-mode))))) + +(defun evil-collection-term-switch-to-char-mode-on-insert () + "Switch to `term-char-mode' on insert state." + (when (get-buffer-process (current-buffer)) + (term-char-mode))) + +(defun evil-collection-term-sync-state-and-mode () + "Sync `term-char-mode' and `term-line-mode' with insert and normal state." + (add-hook 'evil-insert-state-entry-hook + evil-collection-term-sync-state-function nil t) + (add-hook 'evil-insert-state-exit-hook 'term-line-mode nil t)) + +(defun evil-collection-term-send-tab () + "Send tab in term mode." + (interactive) + (term-send-raw-string "\t")) + +;;;###autoload +(defun evil-collection-term-setup () + "Set up `evil' bindings for `term'." + (evil-set-initial-state 'term-mode 'insert) + (if evil-collection-term-sync-state-and-mode-p + (add-hook 'term-mode-hook 'evil-collection-term-sync-state-and-mode) + (remove-hook 'term-mode-hook 'evil-collection-term-sync-state-and-mode)) + + (add-hook 'term-mode-hook 'evil-collection-term-escape-stay) + + ;; Evil has some "C-" bindings in insert state that shadow regular terminal + ;; bindings. Don't raw-send "C-c" (prefix key) nor "C-h" (help prefix). + (evil-collection-define-key 'insert 'term-raw-map + (kbd "C-a") 'term-send-raw + (kbd "C-b") 'term-send-raw ; Should not be necessary. + (kbd "C-d") 'term-send-raw + (kbd "C-e") 'term-send-raw + (kbd "C-f") 'term-send-raw ; Should not be necessary. + (kbd "C-k") 'term-send-raw + (kbd "C-l") 'term-send-raw ; Should not be necessary. + (kbd "C-n") 'term-send-raw + (kbd "C-o") 'term-send-raw + (kbd "C-p") 'term-send-raw + (kbd "C-q") 'term-send-raw ; Should not be necessary. + (kbd "C-r") 'term-send-raw + (kbd "C-s") 'term-send-raw ; Should not be necessary. + (kbd "C-t") 'term-send-raw + (kbd "C-u") 'term-send-raw ; Should not be necessary. + (kbd "C-v") 'term-send-raw ; Should not be necessary. + (kbd "C-w") 'term-send-raw + (kbd "C-y") 'term-send-raw + (kbd "C-z") 'term-send-raw + (kbd "") 'evil-collection-term-send-tab ; Should not be necessary. + (kbd "C-c C-d") 'term-send-eof + (kbd "C-c C-z") 'term-stop-subjob) + + (let* ((submit evil-collection-repl-submit-state)) + (evil-collection-define-key submit 'term-mode-map + (kbd "RET") 'term-send-input)) + + (evil-collection-define-key 'normal 'term-mode-map + (kbd "C-c C-k") 'evil-collection-term-char-mode-insert + + (kbd "p") 'term-paste + + ;; motion + "[[" 'term-previous-prompt + "]]" 'term-next-prompt + (kbd "C-k") 'term-previous-prompt + (kbd "C-j") 'term-next-prompt + "gk" 'term-previous-prompt + "gj" 'term-next-prompt + ;; "0" 'term-bol ; "0" is meant to really go at the beginning of line. + "^" 'term-bol + "$" 'term-show-maximum-output) + + ;; https://github.com/emacs-evil/evil-collection/issues/235 + (with-eval-after-load 'multi-term + (evil-collection-define-key 'normal 'term-mode-map + (kbd "M-DEL") 'term-send-backward-kill-word) + (evil-collection-define-key 'insert 'term-raw-map + (kbd "M-DEL") 'term-send-backward-kill-word))) + +(provide 'evil-collection-term) +;;; evil-collection-term.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/tetris/README.org b/.config/emacs/lisp/evil-collection/modes/tetris/README.org new file mode 100644 index 0000000..5adab75 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/tetris/README.org @@ -0,0 +1,18 @@ +* tetris + + Evil bindings for =tetris=, the built-in implementation of the falling-blocks game. + +** Key bindings + + | Command | Original | Evil | + |----------------------+-----------+-----------------| + | =tetris-move-left= | == | =h= | + | =tetris-move-right= | == | =l= | + | =tetris-rotate-next= | n/a | =k= | + | =tetris-rotate-prev= | == | =K= | + | =tetris-move-down= | == | =j= | + | =tetris-move-bottom= | =SPC= | =J=, =G=, =TAB= | + | =tetris-start-game= | =n= | =gr= | + | =tetris-pause-game= | =p= | =p= | + | =tetris-end-game= | =q= | =ZZ= | + | =quit-window= | n/a | =q=, =ZQ= | diff --git a/.config/emacs/lisp/evil-collection/modes/tetris/evil-collection-tetris.el b/.config/emacs/lisp/evil-collection/modes/tetris/evil-collection-tetris.el new file mode 100644 index 0000000..682b275 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/tetris/evil-collection-tetris.el @@ -0,0 +1,55 @@ +;;; evil-collection-tetris.el --- Bindings for `tetris' -*- lexical-binding: t -*- + +;; Copyright (C) 2018 James Nguyen + +;; Author: MaxSt +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, emacs, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Bindings for `tetris'. + +;;; Code: +(require 'evil-collection) +(require 'tetris nil t) + +(defconst evil-collection-tetris-maps '(tetris-mode-map)) + +;;;###autoload +(defun evil-collection-tetris-setup () + "Set up `evil' bindings for `tetris'." + (evil-set-initial-state 'tetris-mode 'normal) + (evil-collection-define-key 'normal 'tetris-mode-map + "h" 'tetris-move-left + "l" 'tetris-move-right + "k" 'tetris-rotate-next + "K" 'tetris-rotate-prev + "j" 'tetris-move-down + "J" 'tetris-move-bottom + "G" 'tetris-move-bottom + "gr" 'tetris-start-game + (kbd "TAB") 'tetris-move-bottom + "p" 'tetris-pause-game + "q" 'quit-window + "ZQ" 'quit-window + "ZZ" 'tetris-end-game)) + +(provide 'evil-collection-tetris) +;;; evil-collection-tetris.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/thread/README.org b/.config/emacs/lisp/evil-collection/modes/thread/README.org new file mode 100644 index 0000000..1b51bed --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/thread/README.org @@ -0,0 +1,14 @@ +* thread + + Evil bindings for =thread-list-mode=, the built-in =M-x list-threads= buffer. + +** Key bindings + + Inherits the standard =tabulated-list-mode= bindings (=S=, ={=, =}=, =gh=, + =gl=, =q=). evil-collection only rebinds the thread-specific actions. + + | Command | Original | Evil | + |---------------------------------+----------+------| + | =thread-list-pop-to-backtrace= | =b= | =B= | + | =thread-list-send-quit-signal= | =s q= | =Q= | + | =thread-list-send-error-signal= | =s e= | =E= | diff --git a/.config/emacs/lisp/evil-collection/modes/thread/evil-collection-thread.el b/.config/emacs/lisp/evil-collection/modes/thread/evil-collection-thread.el new file mode 100644 index 0000000..848b035 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/thread/evil-collection-thread.el @@ -0,0 +1,45 @@ +;;; evil-collection-thread.el --- Evil bindings for `thread' -*- lexical-binding: t -*- + +;; Copyright (C) 2020 Zhiwei Chen + +;; Author: Zhiwei Chen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "27.1")) +;; Keywords: evil, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for `thread'. + +;;; Code: +(require 'evil-collection) +(require 'thread nil t) + +(defconst evil-collection-thread-maps '(thread-list-mode-map)) + +;;;###autoload +(defun evil-collection-thread-setup () + "Set up `evil' bindings for `thread'." + (evil-set-initial-state 'thread-list-mode 'normal) + (evil-collection-define-key 'normal 'thread-list-mode-map + "B" 'thread-list-pop-to-backtrace + "Q" 'thread-list-send-quit-signal + "E" 'thread-list-send-error-signal)) + +(provide 'evil-collection-thread) +;;; evil-collection-thread.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/tide/evil-collection-tide.el b/.config/emacs/lisp/evil-collection/modes/tide/evil-collection-tide.el new file mode 100644 index 0000000..abce9c4 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/tide/evil-collection-tide.el @@ -0,0 +1,64 @@ +;;; evil-collection-tide.el --- Bindings for `tide-mode' -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, tide, typescript, languages + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for `tide-mode'. + +;;; Code: +(require 'tide nil t) +(require 'evil-collection) + +(defconst evil-collection-tide-maps '(tide-mode-map + tide-references-mode-map + tide-project-errors-mode-map)) + +;;;###autoload +(defun evil-collection-tide-setup () + "Set up `evil' bindings for `tide'." + (evil-collection-define-key 'normal 'tide-mode-map + "gd" 'tide-jump-to-definition + (kbd "C-t") 'tide-jump-back + "K" 'tide-documentation-at-point) + + (evil-collection-define-key 'normal 'tide-references-mode-map + "gj" 'tide-find-next-reference + "gk" 'tide-find-previous-reference + (kbd "C-j") 'tide-find-next-reference + (kbd "C-k") 'tide-find-previous-reference + (kbd "RET") 'tide-goto-line-reference + ;; quit + "q" 'quit-window) + + (evil-collection-define-key 'normal 'tide-project-errors-mode-map + "gj" 'tide-find-next-error + "gk" 'tide-find-previous-error + (kbd "C-j") 'tide-find-next-error + (kbd "C-k") 'tide-find-previous-error + (kbd "RET") 'tide-goto-error + ;; quit + (kbd "q") 'quit-window)) + +(provide 'evil-collection-tide) +;;; evil-collection-tide.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/timer-list/README.org b/.config/emacs/lisp/evil-collection/modes/timer-list/README.org new file mode 100644 index 0000000..65f5174 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/timer-list/README.org @@ -0,0 +1,12 @@ +* timer-list + + Evil bindings for =timer-list-mode=, the built-in =M-x list-timers= buffer. + +** Key bindings + + Inherits the standard =tabulated-list-mode= bindings (=S=, ={=, =}=, =gh=, + =gl=, =q=). + + | Command | Original | Evil | + |---------------------+----------+------| + | =timer-list-cancel= | =c= | =C= | diff --git a/.config/emacs/lisp/evil-collection/modes/timer-list/evil-collection-timer-list.el b/.config/emacs/lisp/evil-collection/modes/timer-list/evil-collection-timer-list.el new file mode 100644 index 0000000..aff8127 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/timer-list/evil-collection-timer-list.el @@ -0,0 +1,43 @@ +;;; evil-collection-timer-list.el --- Evil bindings for `timer-list' -*- lexical-binding: t -*- + +;; Copyright (C) 2020 Zhiwei Chen + +;; Author: Zhiwei Chen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for `timer-list'. + +;;; Code: +(require 'evil-collection) +(require 'timer-list) + +(defconst evil-collection-timer-list-maps '(timer-list-mode-map)) + +;;;###autoload +(defun evil-collection-timer-list-setup () + "Set up `evil' bindings for `timer-list'." + (evil-set-initial-state 'timer-list-mode 'normal) + (evil-collection-define-key 'normal 'timer-list-mode-map + "C" 'timer-list-cancel)) + +(provide 'evil-collection-timer-list) +;;; evil-collection-timer-list.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/transmission/evil-collection-transmission.el b/.config/emacs/lisp/evil-collection/modes/transmission/evil-collection-transmission.el new file mode 100644 index 0000000..547bc10 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/transmission/evil-collection-transmission.el @@ -0,0 +1,163 @@ +;;; evil-collection-transmission.el --- Evil bindings for transmission.el -*- lexical-binding: t -*- + +;; Copyright (C) 2017 Pierre Neidhardt + +;; Author: Pierre Neidhardt +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, transmission, tools + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + + +;;; Commentary: +;; Evil bindings for `transmission'. + +;;; Code: +(require 'evil-collection) +(require 'transmission nil t) + +(defvar transmission-mode-map) +(defvar transmission-files-mode-map) +(defvar transmission-info-mode-map) +(defvar transmission-peers-mode-map) + +(defconst evil-collection-transmission-maps '(transmission-mode-map + transmission-files-mode-map + transmission-info-mode-map + transmission-peers-mode-map)) + +;;;###autoload +(defun evil-collection-transmission-setup () + "Set up `evil' bindings for `transmission'." + + (evil-collection-inhibit-insert-state 'transmission-mode-map) + (evil-set-initial-state 'transmission-mode 'normal) + (evil-collection-define-key 'normal 'transmission-mode-map + ;; motion + (kbd "SPC") 'scroll-up-command + (kbd "S-SPC") 'scroll-down-command + (kbd "") 'scroll-down-command + + ;; sort + "o" 'tabulated-list-sort + + (kbd "RET") 'transmission-files + "p" 'transmission-peers + "i" 'transmission-info + + "a" 'transmission-add + "D" 'transmission-delete + "r" 'transmission-move ; "r" for "[r]ename" + "R" 'transmission-remove + "x" 'transmission-toggle ; EMMS has "x" for pause. + "t" 'transmission-trackers-add + "c" 'transmission-verify ; "c" for "[c]heck". + "d" 'transmission-set-download + "u" 'transmission-set-upload + "S" 'transmission-set-ratio ; "S" for "[S]eed" + "P" 'transmission-set-bandwidth-priority + "I" 'transmission-label ; "I" for "[I]nput labels" + + ;; mark + "m" 'transmission-toggle-mark + "U" 'transmission-unmark-all + "~" 'transmission-invert-marks + + ;; refresh + "gr" 'revert-buffer + + ;; quit + "q" 'transmission-quit + "ZQ" 'evil-quit + "ZZ" 'transmission-quit) + + (evil-collection-inhibit-insert-state 'transmission-files-mode-map) + (evil-set-initial-state 'transmission-files-mode 'normal) + (evil-collection-define-key 'normal 'transmission-files-mode-map + (kbd "SPC") 'scroll-up-command + (kbd "S-SPC") 'scroll-down-command + (kbd "") 'scroll-down-command + + ;; sort + "o" 'tabulated-list-sort + + "p" 'transmission-peers + "i" 'transmission-info + + "r" 'transmission-move + "P" 'transmission-files-priority + + ;; mark + "u" 'transmission-files-unwant + "m" 'transmission-files-want + + ;; open + (kbd "RET") 'transmission-find-file + (kbd "S-") 'transmission-find-file-other-window + (kbd "M-") 'transmission-display-file + "go" 'transmission-find-file-other-window + + "v" 'transmission-view-file + + "!" 'transmission-files-command + ;; "X" 'transmission-files-command + "t" 'transmission-trackers-add + "T" 'transmission-trackers-remove + + ;; goto URL + "gx" 'transmission-browse-url-of-file ; See mu4e. + + ;; quit + "q" 'transmission-quit + "ZQ" 'evil-quit + "ZZ" 'transmission-quit) + + (evil-collection-define-key 'visual 'transmission-files-mode-map + "r" 'transmission-move + "P" 'transmission-files-priority + "u" 'transmission-files-unwant + "m" 'transmission-files-want) + + (evil-collection-set-readonly-bindings 'transmission-info-mode-map) + (evil-set-initial-state 'transmission-info-mode 'normal) + (evil-collection-define-key 'normal 'transmission-info-mode-map + "p" 'transmission-peers + + "t" 'transmission-trackers-add + "T" 'transmission-trackers-remove + "D" 'transmission-set-torrent-download + "U" 'transmission-set-torrent-upload + "S" 'transmission-set-torrent-ratio ; "S" for "[S]eed" + "I" 'transmission-label ; "I" for "[I]nput labels" + "P" 'transmission-set-bandwidth-priority + "r" 'transmission-move) + + ;; yu, Like `eww'. + (evil-collection-define-operator-key 'yank 'transmission-info-mode-map + "u" 'transmission-copy-magnet) + + (evil-collection-set-readonly-bindings 'transmission-peers-mode-map) + (evil-set-initial-state 'transmission-peers-mode 'normal) + (evil-collection-define-key 'normal 'transmission-peers-mode-map + ;; sort + "o" 'tabulated-list-sort + + "i" 'transmission-info)) + +(provide 'evil-collection-transmission) +;;; evil-collection-transmission.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/trashed/evil-collection-trashed.el b/.config/emacs/lisp/evil-collection/modes/trashed/evil-collection-trashed.el new file mode 100644 index 0000000..89c014c --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/trashed/evil-collection-trashed.el @@ -0,0 +1,87 @@ +;;; evil-collection-trashed.el --- Evil bindings for trashed.el -*- lexical-binding: t -*- + +;; Copyright (C) 2020 Pierre Neidhardt + +;; Author: Pierre Neidhardt +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.3 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, files, convenience, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for `trashed'. + +;;; Code: +(require 'evil-collection) +(require 'trashed nil t) + +(defconst evil-collection-trashed-maps '(trashed-mode-map)) + +;;;###autoload +(defun evil-collection-trashed-setup () + "Set up `evil' bindings for `trashed'." + (evil-collection-set-readonly-bindings 'trashed-mode-map) + (evil-collection-define-key 'normal 'trashed-mode-map + ;; motion + (kbd "SPC") 'scroll-up-command + (kbd "S-SPC") 'scroll-down-command + (kbd "") 'trashed-forward-column + (kbd "") 'trashed-backward-column + + (kbd "RET") 'trashed-find-file + (kbd "S-RET") 'trashed-find-file-other-window + (kbd "go") 'trashed-find-file-other-window + (kbd "gO") 'trashed-display-file + (kbd "gw") 'trashed-browse-url-of-file + (kbd "M-RET") 'trashed-display-file + + "S" 'tabulated-list-sort + + "m" 'trashed-mark + "M" 'trashed-mark-all + "u" 'trashed-unmark + "U" 'trashed-unmark-all + "~" 'trashed-toggle-marks + + "$ m" 'trashed-mark-files-by-date + "$ u" 'trashed-unmark-files-by-date + "$ d" 'trashed-flag-delete-files-by-date + "$ r" 'trashed-flag-restore-files-by-date + + "% m" 'trashed-mark-files-regexp + "% u" 'trashed-unmark-files-regexp + "% d" 'trashed-flag-delete-files-regexp + "% r" 'trashed-flag-restore-files-regexp + + "d" 'trashed-flag-delete + "r" 'trashed-flag-restore + + "zb" 'trashed-flag-backup-files + "za" 'trashed-flag-auto-save-files + + "x" 'trashed-do-execute + "D" 'trashed-do-delete + "R" 'trashed-do-restore + + "v" 'trashed-view-file + + "g?" 'describe-mode + "gr" 'revert-buffer)) + +(provide 'evil-collection-trashed) +;;; evil-collection-trashed.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/tuareg/README.org b/.config/emacs/lisp/evil-collection/modes/tuareg/README.org new file mode 100644 index 0000000..589da60 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/tuareg/README.org @@ -0,0 +1,9 @@ +* tuareg + + Evil bindings for [[https://github.com/ocaml/tuareg][tuareg-mode]] (OCaml). + +** Key bindings + + | Command | Original | Evil | + |--------------------+-----------+------| + | =tuareg-run-ocaml= | =C-c C-s= | =gz= | diff --git a/.config/emacs/lisp/evil-collection/modes/tuareg/evil-collection-tuareg.el b/.config/emacs/lisp/evil-collection/modes/tuareg/evil-collection-tuareg.el new file mode 100644 index 0000000..b283fb1 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/tuareg/evil-collection-tuareg.el @@ -0,0 +1,44 @@ +;;; evil-collection-tuareg.el --- Evil bindings for `tuareg-mode' -*- lexical-binding: t -*- + +;; Copyright (C) 2021 Zhiwei Chen + +;; Author: Zhiwei Chen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for `tuareg-mode'. + +;;; Code: + +(require 'evil-collection) +(require 'tuareg nil t) + +(defconst evil-collection-tuareg-maps '(tuareg-mode-map)) + +;;;###autoload +(defun evil-collection-tuareg-setup () + "Set up `evil' bindings for `tuareg'." + (evil-collection-define-key 'normal 'tuareg-mode-map + "gz" 'tuareg-run-ocaml)) + +(provide 'evil-collection-tuareg) + +;;; evil-collection-tuareg.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/typescript-mode/README.org b/.config/emacs/lisp/evil-collection/modes/typescript-mode/README.org new file mode 100644 index 0000000..f6bdc37 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/typescript-mode/README.org @@ -0,0 +1,13 @@ +* typescript-mode + + Evil integration for [[https://github.com/emacs-typescript/typescript.el][typescript-mode]]. + + No key bindings are added. The setup installs a hook that sets + =evil-shift-width= to =typescript-indent-level= in =typescript-mode= + buffers so that evil shift operators match the mode's indentation. + +** New commands + + - =evil-collection-typescript-mode-set-evil-shift-width= — sync + =evil-shift-width= with =typescript-indent-level= (added to + =typescript-mode-hook=). diff --git a/.config/emacs/lisp/evil-collection/modes/typescript-mode/evil-collection-typescript-mode.el b/.config/emacs/lisp/evil-collection/modes/typescript-mode/evil-collection-typescript-mode.el new file mode 100644 index 0000000..47366e6 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/typescript-mode/evil-collection-typescript-mode.el @@ -0,0 +1,46 @@ +;;; evil-collection-typescript-mode.el --- Bindings for `typescript-mode' -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: emacs, evil, tools, typescript + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for `typescript-mode'. + +;;; Code: +(require 'evil-collection) +(require 'typescript-mode nil t) + +(defvar typescript-indent-level) + +(defun evil-collection-typescript-mode-set-evil-shift-width () + "Set `evil-shift-width' according to `typescript-indent-level'." + (setq-local evil-shift-width typescript-indent-level)) + +;;;###autoload +(defun evil-collection-typescript-mode-setup () + "Set up `evil' bindings for `typescript-mode'." + (add-hook 'typescript-mode-hook + #'evil-collection-typescript-mode-set-evil-shift-width)) + +(provide 'evil-collection-typescript-mode) +;;; evil-collection-typescript-mode.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/ultra-scroll/evil-collection-ultra-scroll.el b/.config/emacs/lisp/evil-collection/modes/ultra-scroll/evil-collection-ultra-scroll.el new file mode 100644 index 0000000..fcc4aec --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/ultra-scroll/evil-collection-ultra-scroll.el @@ -0,0 +1,58 @@ +;;; evil-collection-ultra-scroll.el --- Evil integration for ultra-scroll -*- lexical-binding: t -*- + +;; Copyright (C) 2025 Steven Allen + +;; Author: Steven Allen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "27.1")) +;; Keywords: evil, ultra-scroll, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil integration for ultra-scroll. + +;;; Code: + +(require 'evil-collection) +(require 'ultra-scroll nil t) + +(defvar evil-collection-ultra-scroll-hide-cursor-states + '(evil-motion-state-cursor evil-normal-state-cursor) + "States in which to hide the cursor when scrolling.") + +(defun evil-collection-ultra-scroll--hide-cursor () + "A special Evil cursor type that simply hides the cursor." + (setq cursor-type nil)) + +(defun evil-collection-ultra-scroll--set-cursor-visible (arg) + "Make the cursor invisible when called with ARG < 1, or visible otherwise." + (when (bound-and-true-p evil-local-mode) + (if (and (numberp arg) (< arg 1)) + (dolist (var evil-collection-ultra-scroll-hide-cursor-states) + (make-local-variable var) + (set var #'evil-collection-ultra-scroll--hide-cursor)) + (mapc #'kill-local-variable evil-collection-ultra-scroll-hide-cursor-states) + (evil-refresh-cursor)))) + +(defun evil-collection-ultra-scroll-setup () + "Set up `evil' integration for `ultra-scroll'." + (add-hook 'ultra-scroll-hide-functions #'evil-collection-ultra-scroll--set-cursor-visible)) + +(provide 'evil-collection-ultra-scroll) + +;;; evil-collection-ultra-scroll.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/unimpaired/evil-collection-unimpaired.el b/.config/emacs/lisp/evil-collection/modes/unimpaired/evil-collection-unimpaired.el new file mode 100644 index 0000000..4d9710f --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/unimpaired/evil-collection-unimpaired.el @@ -0,0 +1,313 @@ +;;; evil-collection-unimpaired.el --- Evil Collection port of Unimpaired -*- lexical-binding: t -*- + +;; Copyright (C) 2019 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, unimpaired, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; `evil' port of unimpaired for `evil-collection'. +;; https://github.com/tpope/vim-unimpaired + +;;; Code: +(require 'evil-collection) + +;; Externals +(defvar flycheck-current-errors) + +(defgroup evil-collection-unimpaired nil + "Evil port of unimpaired for `evil-collection'." + :group 'evil-collection) + +(defcustom evil-collection-unimpaired-want-repeat-mode-integration nil + "Whether or not to enable `repeat-mode' integration." + :type 'boolean + :group 'evil-collection) + +(defconst evil-collection-unimpaired-maps '(evil-collection-unimpaired-mode-map)) + +(defvar evil-collection-unimpaired-mode-map (make-sparse-keymap) + "Keymap for `evil-collection-unimpaired-mode'.") + +(define-minor-mode evil-collection-unimpaired-mode + "Evil port of unimpaired." + :lighter " unimpaired" + :group 'evil-collection-unimpaired) + +;;;###autoload +(define-globalized-minor-mode global-evil-collection-unimpaired-mode + evil-collection-unimpaired-mode evil-collection-unimpaired-mode-on + :group 'evil-collection-unimpaired) + +(defun evil-collection-unimpaired-mode-on () + "Turn on `evil-collection-unimpaired-mode'." + (evil-collection-unimpaired-mode 1)) + +(evil-define-motion evil-collection-unimpaired-next-error (count) + "Go to next error." + :jump t + (setq count (or count 1)) + (cond + ((and (bound-and-true-p flycheck-mode) + (fboundp 'flycheck-next-error)) + (flycheck-next-error count)) + ((and (bound-and-true-p flymake-mode) + (fboundp 'flymake-goto-next-error)) + (flymake-goto-next-error count)) + (:default + (message "No linting modes are on.")))) + +(evil-define-motion evil-collection-unimpaired-previous-error (count) + "Go to previous error." + :jump t + (evil-collection-unimpaired-next-error (- (or count 1)))) + +(defun evil-collection-unimpaired--flycheck-count-errors () + "Count the number of flycheck errors." + (length (delete-dups (mapcar 'flycheck-error-line flycheck-current-errors)))) + +(evil-define-motion evil-collection-unimpaired-first-error () + "Go to the first error." + :jump t + (cond + ((and (bound-and-true-p flycheck-mode) + (fboundp 'flycheck-first-error)) + (flycheck-first-error)) + ((bound-and-true-p flymake-mode) + (message "flymake unsupported.")) + (:default + (message "No linting modes are on.")))) + +(evil-define-motion evil-collection-unimpaired-last-error () + "Go to the last error." + :jump t + (cond + ((and (bound-and-true-p flycheck-mode) + (fboundp 'flycheck-first-error)) + (flycheck-first-error (evil-collection-unimpaired--flycheck-count-errors))) + ((bound-and-true-p flymake-mode) + (message "flymake unsupported.")) + (:default + (message "No linting modes are on.")))) + +(defconst evil-collection-unimpaired--SCM-conflict-marker "^\\(@@@ .* @@@\\|[<=>]\\{7\\}\\)" + "A regexp to match SCM conflict marker.") + +(evil-define-motion evil-collection-unimpaired-previous-SCM-conflict-marker (count) + "Go to the previous SCM conflict marker or diff/patch hunk." + :jump t + (evil-collection-unimpaired-next-SCM-conflict-marker (- (or count 1)))) + +(evil-define-motion evil-collection-unimpaired-next-SCM-conflict-marker (count) + "Go to the next SCM conflict marker or diff/patch hunk." + :jump t + (evil-motion-loop (dir (or count 1)) + (cond + ((> dir 0) + (forward-line 1) + (when (not (search-forward-regexp evil-collection-unimpaired--SCM-conflict-marker nil t)) + (forward-line -1)) + (move-beginning-of-line nil)) + (t + (search-backward-regexp evil-collection-unimpaired--SCM-conflict-marker nil t) + (move-beginning-of-line nil))))) + +(defun evil-collection-unimpaired-paste-above () + "Paste above current line with preserving indentation." + (interactive) + (let ((indent (current-indentation)) + (column (current-column))) + (evil-insert-newline-above) + (indent-to indent) + (evil-paste-after 1) + (move-to-column column))) + +(defun evil-collection-unimpaired-paste-below () + "Paste below current line with preserving indentation." + (interactive) + (let ((indent (current-indentation)) + (column (current-column))) + (evil-insert-newline-below) + (indent-to indent) + (evil-paste-after 1) + (move-to-column column))) + +(defun evil-collection-unimpaired-insert-newline-above (count) + "Insert COUNT blank line(s) above current line." + (interactive "p") + (save-excursion (dotimes (_ count) (evil-insert-newline-above))) + (when (bolp) (forward-char count))) + +(defun evil-collection-unimpaired-insert-newline-below (count) + "Insert COUNT blank line(s) below current line." + (interactive "p") + (save-excursion (dotimes (_ count) (evil-insert-newline-below)))) + +(defun evil-collection-unimpaired--encode (beg end fn) + "Apply FN from BEG to END." + (save-excursion + (goto-char beg) + (let* ((end (if (eq evil-this-type 'line) (1- end) end)) + (text (buffer-substring-no-properties beg end))) + (delete-region beg end) + (insert (funcall fn text))))) + +(evil-define-operator evil-collection-unimpaired-url-encode (count &optional beg end) + "Encode a URL string." + (interactive "") + (ignore count) + (evil-collection-unimpaired--encode beg end #'url-encode-url)) + +(evil-define-operator evil-collection-unimpaired-url-decode (count &optional beg end) + "Decode a URL string." + (interactive "") + (ignore count) + (evil-collection-unimpaired--encode beg end #'url-unhex-string)) + +(evil-define-operator evil-collection-unimpaired-b64-encode (count &optional beg end) + "Encode a base64 string." + (interactive "") + (ignore count) + (evil-collection-unimpaired--encode beg end #'base64-encode-string)) + +(evil-define-operator evil-collection-unimpaired-b64-decode (count &optional beg end) + "Decode a base64 string." + (interactive "") + (ignore count) + (evil-collection-unimpaired--encode beg end #'base64-decode-string)) + +;; https://stackoverflow.com/questions/2423834/move-line-region-up-and-down-in-emacs +(defun evil-collection-unimpaired--move-text (arg) + "Move text down if ARG is positive, otherwise move text up." + (cond + ((and mark-active transient-mark-mode) + (when (> (point) (mark)) + (exchange-point-and-mark)) + (let ((column (current-column)) + (text (delete-and-extract-region (point) (mark)))) + (forward-line arg) + (move-to-column column :force) + (set-mark (point)) + (insert text) + (exchange-point-and-mark) + (setq deactivate-mark nil))) + (t + (let ((column (current-column))) + (beginning-of-line) + (when (or (> arg 0) (not (bobp))) + (forward-line) + (when (or (< arg 0) (not (eobp))) + (transpose-lines arg)) + (forward-line -1)) + (move-to-column column))))) + +(defun evil-collection-unimpaired-move-text-down (arg) + "Move region (transient-mark-mode active) or current line ARG lines down." + (interactive "*p") + (evil-collection-unimpaired--move-text arg)) + +(defun evil-collection-unimpaired-move-text-up (arg) + "Move region (transient-mark-mode active) or current line ARG lines up." + (interactive "*p") + (evil-collection-unimpaired--move-text (- arg))) + +;;; 'repeat-mode' integration. Emacs 28+ +(defmacro evil-collection-unimpaired-defvar-keymap (name &rest bindings) + "Define NAME a keymap with BINDINGS." + (declare (indent 1)) + (cl-assert (cl-evenp (length bindings))) + `(progn + (defvar ,name + (let ((map (make-sparse-keymap))) + map)) + (evil-collection-define-key nil ',name ,@bindings))) + +;; "[b" and "]b" +(evil-collection-unimpaired-defvar-keymap evil-prev-buffer-repeat-map + "b" #'evil-prev-buffer + "B" #'evil-next-buffer) +(evil-collection-unimpaired-defvar-keymap evil-next-buffer-repeat-map + "b" #'evil-next-buffer + "B" #'evil-prev-buffer) + +;; "[e" and "]e" +(evil-collection-unimpaired-defvar-keymap evil-collection-unimpaired-move-text-up-repeat-map + "e" #'evil-collection-unimpaired-move-text-up + "E" #'evil-collection-unimpaired-move-text-down) +(evil-collection-unimpaired-defvar-keymap evil-collection-unimpaired-move-text-down-repeat-map + "e" #'evil-collection-unimpaired-move-text-down + "E" #'evil-collection-unimpaired-move-text-up) + +;; "[q" and "]q" +(evil-collection-unimpaired-defvar-keymap evil-collection-unimpaired-previous-error-repeat-map + "q" #'evil-collection-unimpaired-previous-error + "Q" #'evil-collection-unimpaired-next-error) +(evil-collection-unimpaired-defvar-keymap evil-collection-unimpaired-next-error-repeat-map + "q" #'evil-collection-unimpaired-next-error + "Q" #'evil-collection-unimpaired-previous-error) + +;;;###autoload +(defun evil-collection-unimpaired-setup () + "Set up unimpaired-like bindings." + (global-evil-collection-unimpaired-mode 1) + (evil-collection-define-key 'normal 'evil-collection-unimpaired-mode-map + "[b" 'evil-prev-buffer + "]b" 'evil-next-buffer + "[e" 'evil-collection-unimpaired-move-text-up + "]e" 'evil-collection-unimpaired-move-text-down + "[l" 'evil-collection-unimpaired-previous-error + "]l" 'evil-collection-unimpaired-next-error + "[L" 'evil-collection-unimpaired-first-error + "]L" 'evil-collection-unimpaired-last-error + "[q" 'evil-collection-unimpaired-previous-error + "]q" 'evil-collection-unimpaired-next-error + "[Q" 'evil-collection-unimpaired-first-error + "]Q" 'evil-collection-unimpaired-last-error + "[n" 'evil-collection-unimpaired-previous-SCM-conflict-marker + "]n" 'evil-collection-unimpaired-next-SCM-conflict-marker + "[p" 'evil-collection-unimpaired-paste-above + "]p" 'evil-collection-unimpaired-paste-below + "[P" 'evil-collection-unimpaired-paste-above + "]P" 'evil-collection-unimpaired-paste-below + (kbd "[ SPC") 'evil-collection-unimpaired-insert-newline-above + (kbd "] SPC") 'evil-collection-unimpaired-insert-newline-below) + (evil-collection-define-key 'visual 'evil-collection-unimpaired-mode-map + "[e" 'evil-collection-unimpaired-move-text-up + "]e" 'evil-collection-unimpaired-move-text-down + "[n" 'evil-collection-unimpaired-previous-SCM-conflict-marker + "]n" 'evil-collection-unimpaired-next-SCM-conflict-marker) + (evil-collection-define-key 'motion 'evil-collection-unimpaired-mode-map + "[u" 'evil-collection-unimpaired-url-encode + "]u" 'evil-collection-unimpaired-url-decode + "[6" 'evil-collection-unimpaired-b64-encode + "]6" 'evil-collection-unimpaired-b64-decode) + + (when evil-collection-unimpaired-want-repeat-mode-integration + (dolist (cmd '(evil-prev-buffer + evil-next-buffer + evil-collection-unimpaired-move-text-up + evil-collection-unimpaired-move-text-down + evil-collection-unimpaired-previous-error + evil-collection-unimpaired-next-error)) + (put cmd 'repeat-map (intern (format "%s-repeat-map" cmd)))))) + +(provide 'evil-collection-unimpaired) +;;; evil-collection-unimpaired.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/vc-annotate/README.org b/.config/emacs/lisp/evil-collection/modes/vc-annotate/README.org new file mode 100644 index 0000000..c53e62f --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/vc-annotate/README.org @@ -0,0 +1,23 @@ +* vc-annotate + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Old-Revisions.html][vc-annotate]] (=C-x v g=), Emacs' built-in + blame view. + +** Key bindings + + | Command | Original | Evil | + |----------------------------------------------------+----------+-------------------| + | =quit-window= | =q= | =q= | + | =vc-annotate-revision-previous-to-line= | =P= | =a= | + | =vc-annotate-show-diff-revision-at-line= | === | =d=, === | + | =vc-annotate-show-changeset-diff-revision-at-line= | =D= | =D= | + | =vc-annotate-find-revision-at-line= | =f= | =F= | + | =vc-annotate-revision-at-line= | =J= | =J= | + | =vc-annotate-show-log-revision-at-line= | =l= | =L= | + | =vc-annotate-next-revision= | =n= | =gj=, =]]=, =C-j= | + | =vc-annotate-prev-revision= | =p= | =gk=, =[[=, =C-k= | + | =vc-annotate-working-revision= | =w= | =W= | + | =vc-annotate-toggle-annotation-visibility= | =A= | =A= | + | =vc-annotate-goto-line= | =RET= | =RET= | + + Initial state is normal. diff --git a/.config/emacs/lisp/evil-collection/modes/vc-annotate/evil-collection-vc-annotate.el b/.config/emacs/lisp/evil-collection/modes/vc-annotate/evil-collection-vc-annotate.el new file mode 100644 index 0000000..4334be1 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/vc-annotate/evil-collection-vc-annotate.el @@ -0,0 +1,59 @@ +;;; evil-collection-vc-annotate.el --- Bindings for `vc-annotate' -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, emacs, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Bindings for `vc-annotate' + +;;; Code: +(require 'evil-collection) +(require 'vc-annotate) + +(defconst evil-collection-vc-annotate-maps '(vc-annotate-mode-map)) + +;;;###autoload +(defun evil-collection-vc-annotate-setup () + "Set up `evil' bindings for `vc-annotate'." + (evil-set-initial-state 'vc-annotate-mode 'normal) + (evil-collection-define-key 'normal 'vc-annotate-mode-map + "q" 'quit-window + "a" 'vc-annotate-revision-previous-to-line + "d" 'vc-annotate-show-diff-revision-at-line + "=" 'vc-annotate-show-diff-revision-at-line + "D" 'vc-annotate-show-changeset-diff-revision-at-line + "F" 'vc-annotate-find-revision-at-line + "J" 'vc-annotate-revision-at-line + "L" 'vc-annotate-show-log-revision-at-line + "gj" 'vc-annotate-next-revision + "gk" 'vc-annotate-prev-revision + "]]" 'vc-annotate-next-revision + "[[" 'vc-annotate-prev-revision + (kbd "C-j") 'vc-annotate-next-revision + (kbd "C-k") 'vc-annotate-prev-revision + "W" 'vc-annotate-working-revision + "A" 'vc-annotate-toggle-annotation-visibility + (kbd "RET") 'vc-annotate-goto-line)) + +(provide 'evil-collection-vc-annotate) +;;; evil-collection-vc-annotate.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/vc-dir/README.org b/.config/emacs/lisp/evil-collection/modes/vc-dir/README.org new file mode 100644 index 0000000..98e36b4 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/vc-dir/README.org @@ -0,0 +1,47 @@ +* vc-dir + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/emacs/VC-Directory-Mode.html][vc-dir]] (=C-x v d=). + +** Key bindings + + Standard read-only motion / quit bindings come from + =evil-collection-set-readonly-bindings=. + + | Command | Original | Evil | + |----------------------------------+---------------+-------------------| + | =vc-next-action= | =v= | =c= | + | =vc-diff= | === | =d=, =TAB= | + | =vc-root-diff= | =D= | =D=, =S-TAB= | + | =vc-register= | =i= | =R=, =s= | + | =vc-update= | =+= | =gu=, =F= | + | =revert-buffer= | =g= | =gr= | + | =vc-push= | =P= | =p=, =P= | + | =vc-print-log= | =l= | =Lf=, =Ll= | + | =vc-print-root-log= | =L= | =Lr=, =LL= | + | =vc-log-incoming= | =Ii= | =Li= | + | =vc-log-outgoing= | =Io= | =Lo= | + | =vc-revert= | =N= | =x= | + | =vc-annotate= | =A= | =b= | + | =vc-dir-mark= | =m= | =m= | + | =vc-dir-mark-all-files= | =M m= | =M= | + | =vc-dir-unmark= | =u= | =u= | + | =vc-dir-unmark-all-files= | =M u= | =U= | + | =vc-dir-next-directory= | =M-n= | =]]=, =gj=, =C-j= | + | =vc-dir-previous-directory= | =M-p= | =[[=, =gk=, =C-k= | + | =vc-dir-find-file= | =f=, =RET= | =gf=, =RET= | + | =vc-dir-find-file-other-window= | =o= | =go=, =S-RET= | + | =vc-dir-display-file= | =SPC= | =gO=, =M-RET= | + | =vc-dir-kill-dir-status-process= | =C-c C-c= | =C-c C-c= | + | =vc-dir-toggle-mark= | =SPC= | =t= | + | =vc-dir-hide-up-to-date= | =x= | =(=, =o= | + | =vc-dir-kill-line= | =k= | =X= | + | =vc-dir-search= | =S= | =S= | + | =vc-dir-query-replace-regexp= | =Q= | =Q= | + | =vc-dir-isearch= | =M-s a C-s= | =M-s a C-s= | + | =vc-dir-isearch-regexp= | =M-s a M-C-s= | =M-s a M-C-s= | + | =vc-dir-ignore= | =G= | =i= | + | =vc-create-tag= | =B c= | =Bc= | + | =vc-print-branch-log= | =B l= | =Bl= | + | =vc-retrieve-tag= | =B s= | =Bs= | + + Initial state is normal. diff --git a/.config/emacs/lisp/evil-collection/modes/vc-dir/evil-collection-vc-dir.el b/.config/emacs/lisp/evil-collection/modes/vc-dir/evil-collection-vc-dir.el new file mode 100644 index 0000000..a9d1504 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/vc-dir/evil-collection-vc-dir.el @@ -0,0 +1,113 @@ +;;; evil-collection-vc-dir.el --- Evil bindings for Vc-Dir -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, vc-dir, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for Vc-Dir. + +;;; Code: +(require 'vc-dir) +(require 'evil-collection) + +(defconst evil-collection-vc-dir-maps '(vc-dir-mode-map)) + +;;;###autoload +(defun evil-collection-vc-dir-setup () + "Set up `evil' bindings for `vc-dir'." + (evil-set-initial-state 'vc-dir-mode 'normal) + (evil-collection-set-readonly-bindings 'vc-dir-mode-map) + (evil-collection-define-key 'normal 'vc-dir-mode-map + ;; VC commands + "c" 'vc-next-action + + "d" 'vc-diff + "D" 'vc-root-diff + "\t" 'vc-diff + [backtab] 'vc-root-diff + + "R" 'vc-register + "s" 'vc-register ;; Like `magit-stage'? + "gu" 'vc-update + "gr" 'revert-buffer + + "F" 'vc-update ;; This is the same as `vc-update' bound to "gu". + "p" 'vc-push + "P" 'vc-push + + "Lf" 'vc-print-log ;; Log File. + "Ll" 'vc-print-log + "Lr" 'vc-print-root-log + "LL" 'vc-print-root-log + "Li" 'vc-log-incoming + "Lo" 'vc-log-outgoing + + "x" 'vc-revert + "b" 'vc-annotate ;; Like `magit-blame' + + ;; Marking. + "m" 'vc-dir-mark + "M" 'vc-dir-mark-all-files + "u" 'vc-dir-unmark + "U" 'vc-dir-unmark-all-files + + ;; Rebind paragraph-movement commands. + "]]" 'vc-dir-next-directory + "[[" 'vc-dir-previous-directory + "gj" 'vc-dir-next-directory + "gk" 'vc-dir-previous-directory + (kbd "C-j") 'vc-dir-next-directory + (kbd "C-k") 'vc-dir-previous-directory + + ;; The remainder. + "gf" 'vc-dir-find-file + "\C-m" 'vc-dir-find-file + + (kbd "S-") 'vc-dir-find-file-other-window + "go" 'vc-dir-find-file-other-window + "gO" 'vc-dir-display-file + (kbd "M-") 'vc-dir-display-file + + "\C-c\C-c" 'vc-dir-kill-dir-status-process + [down-mouse-3] 'vc-dir-menu + [mouse-2] 'vc-dir-find-file-other-window + "t" 'vc-dir-toggle-mark + [follow-link] 'mouse-face + + "(" 'vc-dir-hide-up-to-date + "o" 'vc-dir-hide-up-to-date + + "X" 'vc-dir-kill-line + "S" 'vc-dir-search + "Q" 'vc-dir-query-replace-regexp + (kbd "M-s a C-s") 'vc-dir-isearch + (kbd "M-s a M-C-s") 'vc-dir-isearch-regexp + "i" 'vc-dir-ignore + + ;; Branching + "Bc" 'vc-create-tag + "Bl" 'vc-print-branch-log + "Bs" 'vc-retrieve-tag)) + +(provide 'evil-collection-vc-dir) +;;; evil-collection-vc-dir.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/vc-git/README.org b/.config/emacs/lisp/evil-collection/modes/vc-git/README.org new file mode 100644 index 0000000..4d4e8bb --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/vc-git/README.org @@ -0,0 +1,16 @@ +* vc-git + + Evil bindings for the vc-git log view (=vc-git-log-view-mode=). + +** Key bindings + + | Command | Original | Evil | + |---------------------------------+----------+-------| + | =quit-window= | =q= | =q= | + | =log-view-diff= | ===, =d= | =d= | + | =log-view-diff-changeset= | =D= | =D= | + | =log-view-msg-next= | =n= | =C-j= | + | =log-view-msg-prev= | =p= | =C-k= | + | =log-view-toggle-entry-display= | =RET= | =TAB= | + + Initial state for =vc-git-log-view-mode= is normal. diff --git a/.config/emacs/lisp/evil-collection/modes/vc-git/evil-collection-vc-git.el b/.config/emacs/lisp/evil-collection/modes/vc-git/evil-collection-vc-git.el new file mode 100644 index 0000000..4f002be --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/vc-git/evil-collection-vc-git.el @@ -0,0 +1,48 @@ +;;; evil-collection-vc-git.el --- Evil bindings for Vc-Git -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, vc-git, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for Vc-Git. + +;;; Code: +(require 'vc-git) +(require 'evil-collection) + +(defconst evil-collection-vc-git-maps '(vc-git-mode-map)) + +;;;###autoload +(defun evil-collection-vc-git-setup () + "Set up `evil' bindings for `vc-git'." + (evil-set-initial-state 'vc-git-log-view-mode 'normal) + (evil-collection-define-key 'normal 'vc-git-log-view-mode-map + "q" 'quit-window + "d" 'log-view-diff + "D" 'log-view-diff-changeset + (kbd "C-j") 'log-view-msg-next + (kbd "C-k") 'log-view-msg-prev + (kbd "") 'log-view-toggle-entry-display)) + +(provide 'evil-collection-vc-git) +;;; evil-collection-vc-git.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/vdiff/README.org b/.config/emacs/lisp/evil-collection/modes/vdiff/README.org new file mode 100644 index 0000000..3ba3adf --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/vdiff/README.org @@ -0,0 +1,18 @@ +* vdiff + + Evil bindings for [[https://github.com/justbur/emacs-vdiff][vdiff]], a vimdiff-style diff/merge interface. + + Applied to both =vdiff-mode-map= and =vdiff-3way-mode-map=. + +** Key bindings + + | Command | Original | Evil | + |-------------------------+----------+------| + | =vdiff-next-hunk= | (varies) | =]c= | + | =vdiff-previous-hunk= | (varies) | =[c= | + | =vdiff-receive-changes= | =do= | =do= | + | =vdiff-send-changes= | =dp= | =dp= | + + =do= / =dp= are installed as evil operator-keys via + =evil-collection-define-operator-key= so they compose with motions like + vim's =do= (diff obtain) and =dp= (diff put). diff --git a/.config/emacs/lisp/evil-collection/modes/vdiff/evil-collection-vdiff.el b/.config/emacs/lisp/evil-collection/modes/vdiff/evil-collection-vdiff.el new file mode 100644 index 0000000..393061a --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/vdiff/evil-collection-vdiff.el @@ -0,0 +1,54 @@ +;;; evil-collection-vdiff.el --- Evil bindings for vdiff -*- lexical-binding: t -*- + +;; Copyright (C) 2017 Pierre Neidhardt + +;; Author: Evgeni Kolev +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, vdiff, tools + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: +;; Evil bindings for vdiff.el https://github.com/justbur/emacs-vdiff + +;;; Code: +(require 'vdiff nil t) +(require 'evil-collection) + +(defconst evil-collection-vdiff-maps '(vdiff-mode-map + vdiff-3way-mode-map)) + +;;;###autoload +(defun evil-collection-vdiff-setup () + "Set up `evil' bindings for `vdiff-mode'." + (add-hook 'vdiff-mode-hook 'evil-normalize-keymaps) + (add-hook 'vdiff-3way-mode-hook 'evil-normalize-keymaps) + + (dolist (keymap evil-collection-vdiff-maps) + (evil-collection-define-key 'normal keymap + "]c" 'vdiff-next-hunk + "[c" 'vdiff-previous-hunk) + + ;; define `do' (diff obtain) and `dp' (diff put) bindings + (evil-collection-define-operator-key 'delete keymap + "o" 'vdiff-receive-changes + "p" 'vdiff-send-changes))) + +(provide 'evil-collection-vdiff) + +;;; evil-collection-vdiff.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/vertico/README.org b/.config/emacs/lisp/evil-collection/modes/vertico/README.org new file mode 100644 index 0000000..5ea5d14 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/vertico/README.org @@ -0,0 +1,40 @@ +* vertico + + Evil bindings for [[https://github.com/minad/vertico][vertico]]. + + Bindings only take effect when =evil-collection-setup-minibuffer= is non-nil + (excluding the global == → =abort-recursive-edit=). + +** Key bindings + +*** vertico-map (normal state) + + | Command | Original | Evil | + |--------------------------+-----------------+------------| + | =abort-recursive-edit= | =C-g= | == | + | =vertico-first= | =M-<= | =gg= | + | =vertico-last= | =M->= | =G= | + | =vertico-next= | ==, =C-n= | =j= | + | =vertico-previous= | ==, =C-p= | =k= | + | =vertico-next-group= | =M-}= | =gj= | + | =vertico-previous-group= | =M-{= | =gk= | + | =vertico-scroll-down= | =M-v= | =C-u= | + | =vertico-scroll-up= | =C-v= | =C-d= | + + =C-u= is gated on =evil-want-C-u-scroll=; =C-d= on =evil-want-C-d-scroll=. + +*** vertico-map (insert state) + + | Command | Original | Evil | + |--------------------+----------+-------| + | =vertico-next= | =C-n= | =C-n= | + | =vertico-previous= | =C-p= | =C-p= | + + With =evil-collection-vertico-want-want-C-u-in-insert= and + =evil-want-C-u-delete= unset, =C-u= → =vertico-scroll-down= in insert state. + +** Customization + + | Variable | Default | Purpose | + |---------------------------------------------------+---------+-------------------------------------| + | =evil-collection-vertico-want-want-C-u-in-insert= | =nil= | Allow =C-u= scroll in insert state. | diff --git a/.config/emacs/lisp/evil-collection/modes/vertico/evil-collection-vertico.el b/.config/emacs/lisp/evil-collection/modes/vertico/evil-collection-vertico.el new file mode 100644 index 0000000..521e1a1 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/vertico/evil-collection-vertico.el @@ -0,0 +1,68 @@ +;;; evil-collection-vertico.el --- Evil bindings for vertico -*- lexical-binding: t -*- + +;; Copyright (C) 2021 Kisaragi Hiu + +;; Author: Kisaragi Hiu +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, vertico, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for `vertico'. + +;;; Code: +(require 'evil-collection) +(require 'vertico nil t) + +(defcustom evil-collection-vertico-want-want-C-u-in-insert nil + "When non nil, C-u may be bound in insert state." + :group 'evil-collection + :type 'boolean) + +;;;###autoload +(defun evil-collection-vertico-setup () + "Set up `evil' bindings for `vertico'." + (evil-collection-define-key nil 'vertico-map + (kbd "") 'abort-recursive-edit) + + (defvar evil-collection-setup-minibuffer) + (when evil-collection-setup-minibuffer + (when evil-want-C-u-scroll + (evil-collection-define-key 'normal 'vertico-map + (kbd "C-u") 'vertico-scroll-down)) + (when evil-collection-vertico-want-want-C-u-in-insert + (unless evil-want-C-u-delete + (evil-collection-define-key 'insert 'vertico-map + (kbd "C-u") 'vertico-scroll-down))) + (when evil-want-C-d-scroll + (evil-collection-define-key 'normal 'vertico-map + (kbd "C-d") 'vertico-scroll-up)) + + (evil-collection-define-key 'normal 'vertico-map + "gg" 'vertico-first + "G" 'vertico-last + "gj" 'vertico-next-group + "gk" 'vertico-previous-group + "j" 'vertico-next + "k" 'vertico-previous) + + (evil-collection-define-key 'insert 'vertico-map + (kbd "C-n") 'vertico-next + (kbd "C-p") 'vertico-previous))) + +(provide 'evil-collection-vertico) +;;; evil-collection-vertico.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/view/README.org b/.config/emacs/lisp/evil-collection/modes/view/README.org new file mode 100644 index 0000000..39a990c --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/view/README.org @@ -0,0 +1,14 @@ +* view + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/emacs/View-Mode.html][View mode]]. + +** Key bindings + + | Command | Original | Evil | + |-----------------------------+----------+---------| + | =View-quit= | =q= | =q= | + | =View-scroll-page-forward= | =SPC= | =SPC= | + | =View-scroll-page-backward= | =S-SPC= | =S-SPC= | + | =revert-buffer= | =g= | =gr= | + + View mode starts in evil normal state. diff --git a/.config/emacs/lisp/evil-collection/modes/view/evil-collection-view.el b/.config/emacs/lisp/evil-collection/modes/view/evil-collection-view.el new file mode 100644 index 0000000..70c66ed --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/view/evil-collection-view.el @@ -0,0 +1,49 @@ +;;; evil-collection-view.el --- Evil bindings for view -*- lexical-binding: t -*- + +;; Copyright (C) 2018 Pierre Neidhardt + +;; Author: Pierre Neidhardt +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, bindings, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for View. + +;;; Code: +(require 'evil-collection) +(require 'view) + +(defconst evil-collection-view-maps '(view-mode-map)) + +;;;###autoload +(defun evil-collection-view-setup () + "Set up `evil' bindings for `view'." + (add-hook 'view-mode-hook 'evil-normalize-keymaps) + (evil-set-initial-state 'view-mode 'normal) + (evil-collection-define-key 'normal 'view-mode-map + "q" 'View-quit + (kbd "SPC") 'View-scroll-page-forward + (kbd "S-SPC") 'View-scroll-page-backward + + ;; refresh + (kbd "gr") 'revert-buffer)) + +(provide 'evil-collection-view) +;;; evil-collection-view.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/vlf/README.org b/.config/emacs/lisp/evil-collection/modes/vlf/README.org new file mode 100644 index 0000000..05842c4 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/vlf/README.org @@ -0,0 +1,46 @@ +* vlf + + Evil bindings for [[https://github.com/m00natic/vlfi][vlf]] (View Large Files). Bindings are added to + =vlf-prefix-map= (the =C-c C-v= prefix). + +** Key bindings + + Always installed: + + | Command | Original | Evil | + |-------------------------------------------+----------+-------------------| + | =vlf-next-batch= | =n= | =gj=, =C-j=, =]]= | + | =vlf-prev-batch= | =p= | =gk=, =C-k=, =[[= | + | =vlf-change-batch-size= | =+= | =+= | + | =evil-collection-vlf-decrease-batch-size= | =-= | =-= | + | =vlf-next-batch-from-point= | =SPC= | === | + | =vlf-revert= | =g= | =gr= | + | =vlf-query-replace= | =%= | =g%= | + | =vlf-occur= | =o= | =go= | + + When =evil-collection-want-g-bindings= is non-nil: + + | Command | Original | Evil | + |--------------------------+----------+------| + | =vlf-re-search-forward= | =s= | =g/= | + | =vlf-re-search-backward= | =r= | =g?= | + | =vlf-jump-to-chunk= | =j= | =gJ= | + | =vlf-ediff-buffers= | =e= | =gE= | + | =vlf-goto-line= | =l= | =g:= | + | =vlf-toggle-follow= | =f= | =gF= | + + When =evil-collection-want-g-bindings= is nil: + + | Command | Original | Evil | + |--------------------------+----------+------| + | =vlf-re-search-forward= | =s= | =s= | + | =vlf-re-search-backward= | =r= | =S= | + | =vlf-jump-to-chunk= | =j= | =J= | + | =vlf-ediff-buffers= | =e= | =E= | + | =vlf-goto-line= | =l= | =L= | + | =vlf-toggle-follow= | =f= | =F= | + +** New commands + + - =evil-collection-vlf-decrease-batch-size= - Halve the vlf batch size + (mirror of =vlf-change-batch-size= with a prefix arg), bound to =-=. diff --git a/.config/emacs/lisp/evil-collection/modes/vlf/evil-collection-vlf.el b/.config/emacs/lisp/evil-collection/modes/vlf/evil-collection-vlf.el new file mode 100644 index 0000000..b1482e2 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/vlf/evil-collection-vlf.el @@ -0,0 +1,86 @@ +;;; evil-collection-vlf.el --- Evil bindings for vlf -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, vlf, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for `vlf'. + +;;; Code: +(require 'evil-collection) +(require 'vlf nil t) + +(defvar vlf-mode-map) +(declare-function vlf-change-batch-size "vlf") + +(defconst evil-collection-vlf-maps '(vlf-mode-map)) + +(define-obsolete-variable-alias 'evil-collection-vlf-want-g-bindings + 'evil-collection-want-g-bindings "0.0.11") + +(defun evil-collection-vlf-decrease-batch-size () + "Decrease vlf batch size by factor of 2." + (interactive) + (vlf-change-batch-size t)) + +;;; Code: +;;;###autoload +(defun evil-collection-vlf-setup () + "Set up `evil' bindings for `vlf'." + (evil-set-initial-state 'vlf-mode 'normal) + + (add-hook 'vlf-mode-hook #'evil-normalize-keymaps) + + (evil-collection-define-key 'normal 'vlf-prefix-map + "gj" 'vlf-next-batch + "gk" 'vlf-prev-batch + (kbd "C-j") 'vlf-next-batch + (kbd "C-k") 'vlf-prev-batch + "]]" 'vlf-next-batch + "[[" 'vlf-prev-batch + "+" 'vlf-change-batch-size + "-" 'evil-collection-vlf-decrease-batch-size + "=" 'vlf-next-batch-from-point + ;; refresh + "gr" 'vlf-revert + "g%" 'vlf-query-replace + "go" 'vlf-occur) + + (if evil-collection-want-g-bindings + (evil-collection-define-key 'normal 'vlf-prefix-map + "g/" 'vlf-re-search-forward + "g?" 'vlf-re-search-backward + "gJ" 'vlf-jump-to-chunk + "gE" 'vlf-ediff-buffers + "g:" 'vlf-goto-line + "gF" 'vlf-toggle-follow) + (evil-collection-define-key 'normal 'vlf-prefix-map + "s" 'vlf-re-search-forward + "S" 'vlf-re-search-backward + "J" 'vlf-jump-to-chunk + "E" 'vlf-ediff-buffers + "L" 'vlf-goto-line + "F" 'vlf-toggle-follow))) + +(provide 'evil-collection-vlf) +;;; evil-collection-vlf.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/vterm/README.org b/.config/emacs/lisp/evil-collection/modes/vterm/README.org new file mode 100644 index 0000000..c6133fd --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/vterm/README.org @@ -0,0 +1,55 @@ +* vterm + + Evil bindings for [[https://github.com/akermu/emacs-libvterm][vterm]]. + + Initial state is =insert=. Normal state adds the bindings below and uses + vterm-aware operators that respect the prompt boundary. + +** Key bindings (normal state) + + | Command | Original | Evil | + |-----------------------------------------+-----------+------| + | =vterm-previous-prompt= | =C-c C-p= | =[[= | + | =vterm-next-prompt= | =C-c C-n= | =]]= | + | =vterm-yank= (paste before) | =C-y= | =P= | + | =evil-collection-vterm-paste-after= | n/a | =p= | + | =evil-collection-vterm-insert= | n/a | =i= | + | =evil-collection-vterm-insert-line= | n/a | =I= | + | =evil-collection-vterm-append= | n/a | =a= | + | =evil-collection-vterm-append-line= | n/a | =A= | + | =evil-collection-vterm-first-non-blank= | n/a | =^= | + | =vterm-undo= | n/a | =u= | + | =vterm-reset-cursor-point= | =C-c C-r= | =G= | + + =RET= sends to the terminal in the state named by =evil-collection-repl-submit-state=. + +** Insert state + + To preserve terminal control sequences, the following are forwarded raw to + the terminal via =vterm--self-insert=: =C-a=, =C-b=, =C-d=, =C-e=, =C-f=, + =C-k=, =C-l=, =C-n=, =C-o=, =C-p=, =C-q=, =C-r=, =C-s=, =C-t=, =C-u=, =C-v=, + =C-w=, =C-y=, =C-z=. =C-c= (prefix) and =C-h= (help) are not forwarded. + + == → =vterm-send-delete=. + +** New commands + + | Command | Key | | + |----------------------------------------------+-----------+--------------------------------------------| + | =evil-collection-vterm-delete= | =d= | delete operator, clamped to current line | + | =evil-collection-vterm-delete-line= | =D= | delete to end-of-line | + | =evil-collection-vterm-delete-char= | =x= | delete forward char | + | =evil-collection-vterm-delete-backward-char= | =X= | delete backward char | + | =evil-collection-vterm-change= | =c= | change operator | + | =evil-collection-vterm-change-line= | =C= | change to end-of-line | + | =evil-collection-vterm-substitute= | =s= | | + | =evil-collection-vterm-substitute-line= | =S= | | + | =evil-collection-vterm-replace= | =r= | | + | =evil-collection-vterm-next-line= | =j= | won't move below last prompt line | + | =evil-collection-vterm-toggle-send-escape= | =C-c C-z= | toggle whether =ESC= goes to vterm or evil | + +** Customization + + | Variable | Default | Purpose | + |------------------------------------------+---------+--------------------------------------------------------| + | =evil-collection-vterm-move-cursor-back= | =nil= | Move cursor back one column when leaving insert state. | diff --git a/.config/emacs/lisp/evil-collection/modes/vterm/evil-collection-vterm.el b/.config/emacs/lisp/evil-collection/modes/vterm/evil-collection-vterm.el new file mode 100644 index 0000000..d66dde8 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/vterm/evil-collection-vterm.el @@ -0,0 +1,308 @@ +;;; evil-collection-vterm.el --- Bindings for `vterm' -*- lexical-binding: t -*- + +;; Copyright (C) 2019 James Nguyen +;; Copyright (C) 2020 Alex Griffin + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, vterm, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for `vterm'. + +;;; Code: +(require 'evil-collection) +(require 'vterm nil t) + +(defconst evil-collection-vterm-maps '(vterm-mode-map)) + +(declare-function vterm-goto-char "vterm") +(declare-function vterm--get-prompt-point "vterm") +(declare-function vterm--get-end-of-line "vterm") +(declare-function vterm-delete-region "vterm") + +(defvar vterm--process) + +(defcustom evil-collection-vterm-move-cursor-back nil + "Whether the cursor is moved backwards when exiting insert state." + :type 'boolean + :group 'vterm) + +(defun evil-collection-vterm-escape-stay () + "Go back to normal state but don't move cursor backwards. +Moving cursor backwards is the default vim behavior but +it is not appropriate in some cases like terminals." + (setq-local evil-move-cursor-back + evil-collection-vterm-move-cursor-back)) + +(defvar-local evil-collection-vterm-send-escape-to-vterm-p nil + "Track whether or not we send ESC to `vterm' or `emacs'.") + +(defun evil-collection-vterm-toggle-send-escape () + "Toggle where ESC is sent between `vterm' and `emacs'. + +This is needed for programs that use ESC, e.g. vim or an ssh'd emacs that +also uses `evil-mode'." + (interactive) + (if evil-collection-vterm-send-escape-to-vterm-p + (evil-collection-define-key 'insert 'vterm-mode-map (kbd "") + (lookup-key evil-insert-state-map (kbd ""))) + (evil-collection-define-key 'insert 'vterm-mode-map + (kbd "") 'vterm--self-insert)) + (setq evil-collection-vterm-send-escape-to-vterm-p + (not evil-collection-vterm-send-escape-to-vterm-p)) + (message (format "Sending ESC to %s." + (if evil-collection-vterm-send-escape-to-vterm-p + "vterm" + "emacs")))) + +(declare-function vterm-cursor-in-command-buffer-p "vterm") +(declare-function vterm-beginning-of-line "vterm") +(declare-function vterm-insert "vterm") + +(evil-define-motion evil-collection-vterm-first-non-blank () + "Move the cursor to the first non-blank character +after the prompt." + :type exclusive + (if (vterm-cursor-in-command-buffer-p (point)) + (vterm-beginning-of-line) + (evil-first-non-blank))) + +(defun evil-collection-vterm-insert () + "Insert character before cursor." + (interactive) + (vterm-goto-char (point)) + (call-interactively #'evil-insert)) + +(defun evil-collection-vterm-insert-line () + "Insert character at beginning of prompt." + (interactive) + (vterm-goto-char (vterm--get-prompt-point)) + (call-interactively #'evil-insert)) + +(defun evil-collection-vterm-append () + "Append character after cursor." + (interactive) + (vterm-goto-char (1+ (point))) + (call-interactively #'evil-insert)) + +(defun evil-collection-vterm-append-line () + "Append character at end-of-line." + (interactive) + (vterm-goto-char (vterm--get-end-of-line)) + (call-interactively #'evil-insert)) + +(declare-function vterm-yank "vterm") + +(defun evil-collection-vterm-paste-after (&optional arg) + (interactive "P") + (vterm-goto-char (+ 1 (point))) + (call-interactively #'vterm-yank arg)) + +(declare-function vterm-reset-cursor-point "vterm") + +(evil-define-operator evil-collection-vterm-delete (beg end type register yank-handler) + "Modification of evil-delete to work in vterm buffer. +Delete text from BEG to END with TYPE. +Save in REGISTER or in the kill-ring with YANK-HANDLER." + (interactive "") + (let* ((beg (max (or beg (point)) (vterm--get-prompt-point))) + (end (min (or end beg) (vterm--get-end-of-line)))) + (unless register + (let ((text (filter-buffer-substring beg end))) + (unless (string-match-p "\n" text) + ;; set the small delete register + (evil-set-register ?- text)))) + (let ((evil-was-yanked-without-register nil)) + (evil-yank beg end type register yank-handler)) + (cond + ((eq type 'block) + (evil-apply-on-block #'vterm-delete-region beg end nil)) + ((and (eq type 'line) + (= end (point-max)) + (or (= beg end) + (/= (char-before end) ?\n)) + (/= beg (point-min)) + (= (char-before beg) ?\n)) + (vterm-delete-region (1- beg) end)) + (t + (vterm-delete-region beg end))) + ;; place cursor on beginning of line + (when (and (called-interactively-p 'any) + (eq type 'line)) + (vterm-reset-cursor-point)))) + +(evil-define-operator evil-collection-vterm-delete-backward-char (beg end type register) + "Delete previous character." + :motion evil-backward-char + (interactive "") + (evil-collection-vterm-delete beg end type register)) + +(evil-define-operator evil-collection-vterm-delete-char (beg end type register) + "Delete current character." + :motion evil-forward-char + (interactive "") + (evil-collection-vterm-delete beg end type register)) + +(evil-define-operator evil-collection-vterm-delete-line (beg end type register yank-handler) + "Modification of evil-delete line to work in vterm bufer. Delete to end of line." + :motion nil + :keep-visual t + (interactive "") + ;; act linewise in Visual state + (let* ((beg (or beg (point))) + (end (or end beg)) + (visual-line-mode (and evil-respect-visual-line-mode + visual-line-mode)) + (line-end (if visual-line-mode + (save-excursion + (end-of-visual-line) + (point)) + (line-end-position)))) + (when (evil-visual-state-p) + (unless (memq type '(line screen-line block)) + (let ((range (evil-expand beg end + (if visual-line-mode + 'screen-line + 'line)))) + (setq beg (evil-range-beginning range) + end (evil-range-end range) + type (evil-type range)))) + (evil-exit-visual-state)) + (cond + ((eq type 'block) + ;; equivalent to $d, i.e., we use the block-to-eol selection and + ;; call `evil-collection-vterm-delete'. In this case we fake the call to + ;; `evil-end-of-line' by setting `temporary-goal-column' and + ;; `last-command' appropriately as `evil-end-of-line' would do. + (let ((temporary-goal-column most-positive-fixnum) + (last-command 'next-line)) + (evil-collection-vterm-delete beg end 'block register yank-handler))) + ((memq type '(line screen-line)) + (evil-collection-vterm-delete beg end type register yank-handler)) + (t + (evil-collection-vterm-delete beg line-end type register yank-handler))))) + +(evil-define-operator evil-collection-vterm-replace (beg end type register yank-handler) + :motion evil-forward-char + (interactive "") + (let ((replacement (make-string (- end beg) (read-char)))) + (evil-collection-vterm-delete beg end type register yank-handler) + (vterm-insert replacement) + (vterm-goto-char (1- end)))) + +(evil-define-operator evil-collection-vterm-change (beg end type register yank-handler) + (evil-collection-vterm-delete beg end type register yank-handler) + (evil-collection-vterm-insert)) + +(evil-define-operator evil-collection-vterm-change-line (beg end type register yank-handler) + :motion evil-end-of-line-or-visual-line + (evil-collection-vterm-delete-line beg end type register yank-handler) + (evil-collection-vterm-insert)) + +(evil-define-operator evil-collection-vterm-substitute (beg end type register) + :motion evil-forward-char + (interactive "") + (evil-collection-vterm-change beg end type register)) + +(evil-define-operator evil-collection-vterm-substitute-line (beg end register yank-handler) + :motion evil-line-or-visual-line + :type line + (interactive "") + (evil-collection-vterm-change beg end 'line register yank-handler)) + +(evil-define-motion evil-collection-vterm-next-line (count) + "Move the cursor COUNT lines down. +But don't allow the cursor to move bellow the last prompt line." + :type line + ;; This successfully prevents the `j' button from moving to an empty line + ;; bellow the last prompt. However, it still can be bugged for example by + ;; going to the one line above the last prompt and doing `10j'. + (when (> (count-words (point) (point-max)) 0) + (evil-next-line count))) + +;;;###autoload +(defun evil-collection-vterm-setup () + "Set up `evil' bindings for `vterm'." + (evil-set-initial-state 'vterm-mode 'insert) + + (add-hook 'vterm-mode-hook #'evil-collection-vterm-escape-stay) + + ;; Open to a better binding... + (evil-collection-define-key '(normal insert) 'vterm-mode-map + (kbd "C-c C-z") 'evil-collection-vterm-toggle-send-escape) + + ;; Evil has some "C-" bindings in insert state that shadow regular terminal + ;; bindings. Don't raw-send "C-c" (prefix key) nor "C-h" (help prefix). + (evil-collection-define-key 'insert 'vterm-mode-map + (kbd "C-a") 'vterm--self-insert + (kbd "C-b") 'vterm--self-insert ; Should not be necessary. + (kbd "C-d") 'vterm--self-insert + (kbd "C-e") 'vterm--self-insert + (kbd "C-f") 'vterm--self-insert ; Should not be necessary. + (kbd "C-k") 'vterm--self-insert + (kbd "C-l") 'vterm--self-insert ; Should not be necessary. + (kbd "C-n") 'vterm--self-insert + (kbd "C-o") 'vterm--self-insert + (kbd "C-p") 'vterm--self-insert + (kbd "C-q") 'vterm--self-insert ; Should not be necessary. + (kbd "C-r") 'vterm--self-insert + (kbd "C-s") 'vterm--self-insert ; Should not be necessary. + (kbd "C-t") 'vterm--self-insert + (kbd "C-u") 'vterm--self-insert ; Should not be necessary. + (kbd "C-v") 'vterm--self-insert ; Should not be necessary. + (kbd "C-w") 'vterm--self-insert + (kbd "C-y") 'vterm--self-insert + (kbd "C-z") 'vterm--self-insert + (kbd "") 'vterm-send-delete) + + (let* ((submit evil-collection-repl-submit-state)) + (evil-collection-define-key submit 'vterm-mode-map + (kbd "RET") 'vterm-send-return)) + + (evil-collection-define-key 'normal 'vterm-mode-map + "[[" 'vterm-previous-prompt + "]]" 'vterm-next-prompt + "p" 'evil-collection-vterm-paste-after + "P" 'vterm-yank + "a" 'evil-collection-vterm-append + "A" 'evil-collection-vterm-append-line + "d" 'evil-collection-vterm-delete + "D" 'evil-collection-vterm-delete-line + "x" 'evil-collection-vterm-delete-char + "X" 'evil-collection-vterm-delete-backward-char + "^" 'evil-collection-vterm-first-non-blank + "i" 'evil-collection-vterm-insert + "I" 'evil-collection-vterm-insert-line + "u" 'vterm-undo + "r" 'evil-collection-vterm-replace + "c" 'evil-collection-vterm-change + "C" 'evil-collection-vterm-change-line + "s" 'evil-collection-vterm-substitute + "S" 'evil-collection-vterm-substitute-line + "j" 'evil-collection-vterm-next-line + "G" 'vterm-reset-cursor-point) + + (evil-collection-define-key 'visual 'vterm-mode-map + "d" 'evil-collection-vterm-delete + "x" 'evil-collection-vterm-delete-backward-char)) + +(provide 'evil-collection-vterm) +;;; evil-collection-vterm.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/vundo/README.org b/.config/emacs/lisp/evil-collection/modes/vundo/README.org new file mode 100644 index 0000000..04e505b --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/vundo/README.org @@ -0,0 +1,31 @@ +* vundo + + Evil bindings for [[https://github.com/casouri/vundo][vundo]], visual undo tree. + + Upstream defaults to emacs state; evil-collection forces normal state on + entry, hides the evil cursor, and disables =hl-line-mode= locally. + +** Key bindings + + | Command | Original | Evil | + |---------------------+--------------+--------------------------------| + | =vundo-forward= | =f=, =right= | =l=, =C-f=, =right= | + | =vundo-backward= | =b=, =left= | =h=, =C-b=, =left=, =DEL= | + | =vundo-next= | =n= | =j=, =C-n=, =C-j=, =M-j= | + | =vundo-previous= | =p= | =k=, =C-p=, =C-k=, =M-k= | + | =vundo-stem-root= | =a= | =H= (evil-window-top remap) | + | =vundo-stem-end= | =e= | =L= (evil-window-bottom remap) | + | =vundo-next-root= | =w= | =w= | + | =vundo-confirm= | =RET= | =RET=, =ZZ= | + | =vundo-quit= | =q=, =C-g= | =q=, =ZQ= | + | =vundo-diff= | =d= | =d= | + | =vundo-diff-mark= | =m= | =m= | + | =vundo-diff-unmark= | =u= | =u= | + | =vundo--inspect= | =i= | =i= | + | =vundo--debug= | =D= | =D= | + + Direction keys are wired via =[remap]= against the corresponding evil + motion command (=evil-backward-char=, =evil-forward-char=, etc.) so they + follow any user rebinding of those motions. =vundo-goto-last-saved= (=l= + upstream) and =vundo-goto-next-saved= (=r= upstream) are shadowed by the + evil motion remaps; call them via =M-x= if needed. diff --git a/.config/emacs/lisp/evil-collection/modes/vundo/evil-collection-vundo.el b/.config/emacs/lisp/evil-collection/modes/vundo/evil-collection-vundo.el new file mode 100644 index 0000000..e02c110 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/vundo/evil-collection-vundo.el @@ -0,0 +1,93 @@ +;;; evil-collection-vundo.el --- Bindings for `vundo-mode' -*- lexical-binding: t -*- + +;; Copyright (C) 2022 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "27.1")) +;; Keywords: evil, vundo, convenience + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for `vundo-mode'. + +;;; Code: +(require 'vundo nil t) +(require 'evil-collection) + +(defgroup evil-collection-vundo nil + "Evil bindings for `vundo-mode'." + :group 'evil-collection) + +(defvar vundo-mode-map) + +(defconst evil-collection-vundo-maps '(vundo-mode-map)) + +(defun evil-collection-vundo--hide-evil-cursor () + "Hide the evil cursor." + (setq-local evil-default-cursor '(nil)) + (setq-local evil-motion-state-cursor nil) + (setq-local evil-visual-state-cursor nil) + (setq-local evil-normal-state-cursor nil) + (setq-local evil-insert-state-cursor nil) + (setq-local evil-emacs-state-cursor nil)) + +(defun evil-collection-vundo--disable-hl-line-mode () + "Disable `hl-line-mode'." + (setq-local global-hl-line-mode nil)) + +;;;###autoload +(defun evil-collection-vundo-setup () + "Set up `evil' bindings for `vundo'." + (add-hook 'vundo-mode-hook #'evil-normalize-keymaps) + ;; `vundo' defaults to emacs state. + (add-hook 'vundo-mode-hook #'evil-normal-state) + ;; hide evil cursor + (add-hook 'vundo-mode-hook #'evil-collection-vundo--hide-evil-cursor) + ;; disable hl-line-mode + (add-hook 'vundo-mode-hook #'evil-collection-vundo--disable-hl-line-mode) + + (evil-collection-define-key 'normal 'vundo-mode-map + [remap evil-backward-char] 'vundo-backward + [remap evil-forward-char] 'vundo-forward + [remap evil-next-line] 'vundo-next + [remap evil-previous-line] 'vundo-previous + [remap evil-window-top] 'vundo-stem-root + [remap evil-window-bottom] 'vundo-stem-end + [remap evil-ret] 'vundo-confirm + [remap evil-quit] 'vundo-quit + [remap evil-save-and-close] 'vundo-confirm + [remap evil-save-modified-and-close] 'vundo-confirm + [remap evil-delete-backward-char] 'vundo-backward + (kbd "C-n") 'vundo-next + (kbd "C-p") 'vundo-previous + (kbd "C-j") 'vundo-next + (kbd "C-k") 'vundo-previous + (kbd "M-j") 'vundo-next + (kbd "M-k") 'vundo-previous + "i" 'vundo--inspect + "D" 'vundo--debug + "d" 'vundo-diff + "m" 'vundo-diff-mark + "u" 'vundo-diff-unmark + "w" 'vundo-next-root + "q" 'vundo-quit + "ZZ" 'vundo-quit + "ZQ" 'vundo-quit)) + +(provide 'evil-collection-vundo) +;;; evil-collection-vundo.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/w3m/evil-collection-w3m.el b/.config/emacs/lisp/evil-collection/modes/w3m/evil-collection-w3m.el new file mode 100644 index 0000000..ecdff0d --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/w3m/evil-collection-w3m.el @@ -0,0 +1,87 @@ +;;; evil-collection-w3m.el --- Evil bindings for w3m -*- lexical-binding: t -*- + +;; Copyright (C) 2018 Pierre Neidhardt + +;; Author: Pierre Neidhardt +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, w3m, tools + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: +;; Evil bindings for `w3m'. + +;;; Code: +(require 'evil-collection) +(require 'w3m nil t) + +(defconst evil-collection-w3m-maps '(w3m-mode-map)) + +;;;###autoload +(defun evil-collection-w3m-setup () + "Set up `evil' bindings for `w3m'." + (evil-set-initial-state 'w3m-mode 'normal) + (evil-collection-define-key 'normal 'w3m-mode-map + (kbd "S-SPC") 'w3m-scroll-down-or-previous-url + (kbd "SPC") 'w3m-scroll-up-or-next-url + + (kbd "RET") 'w3m-view-this-url + "o" 'w3m-goto-url + "O" 'w3m-goto-url-new-session + + "]]" 'w3m-next-form + "[[" 'w3m-previous-form + + "H" 'w3m-view-previous-page + "L" 'w3m-view-next-page + "^" 'w3m-view-parent-page + + "gf" 'w3m-view-source + "gh" 'w3m-view-header + + "d" 'w3m-download-this-url + "M-d" 'w3m-download + + "I" 'w3m-view-image + "M-i" 'w3m-save-image + "zi" 'w3m-toggle-inline-image + "zI" 'w3m-toggle-inline-images + "M-T" 'w3m-turnoff-inline-images + + ;; bookmarks + "gb" 'w3m-bookmark-view + "gB" 'w3m-bookmark-view-new-session + "a" 'w3m-bookmark-add-current-url + + ;; refresh + "gr" 'w3m-reload-this-page + "gR" 'w3m-reload-all-pages + + ;; quit + "q" 'w3m-close-window + "ZQ" 'w3m-quit + "ZZ" 'quit-window) + + (evil-collection-define-operator-key 'yank 'w3m-mode-map + ;; yt + "t" 'w3m-print-this-url + ;; yu + "u" 'w3m-print-current-url)) + +(provide 'evil-collection-w3m) +;;; evil-collection-w3m.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/wdired/README.org b/.config/emacs/lisp/evil-collection/modes/wdired/README.org new file mode 100644 index 0000000..9a16e3d --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/wdired/README.org @@ -0,0 +1,14 @@ +* wdired + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Wdired.html][Wdired]] (writable Dired). + +** Key bindings + + | Command | Original | Evil | + |------------------------+-----------+------------| + | =wdired-finish-edit= | =C-c C-c= | =ZZ=, =:w= | + | =wdired-abort-changes= | =C-c C-k= | =ZQ= | + | =wdired-exit= | =C-x C-q= | == | + + =wdired-finish-edit= is also bound to =[remap evil-write]= so =:w= commits + the rename. Initial state in wdired-mode is normal. diff --git a/.config/emacs/lisp/evil-collection/modes/wdired/evil-collection-wdired.el b/.config/emacs/lisp/evil-collection/modes/wdired/evil-collection-wdired.el new file mode 100644 index 0000000..e968b1e --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/wdired/evil-collection-wdired.el @@ -0,0 +1,49 @@ +;;; evil-collection-wdired.el --- Bindings for `wdired' -*- lexical-binding: t -*- + +;; Copyright (C) 2018 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, emacs, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Bindings for `wdired'. + +;;; Code: +(require 'evil-collection) +(require 'wdired) + +(defconst evil-collection-wdired-maps '(wdired-mode-map)) + +;;;###autoload +(defun evil-collection-wdired-setup () + "Set up `evil' bindings for `wdired'." + (evil-set-initial-state 'wdired-mode 'normal) + + (evil-collection-define-key nil 'wdired-mode-map + [remap evil-write] 'wdired-finish-edit) + + (evil-collection-define-key 'normal 'wdired-mode-map + "ZQ" 'wdired-abort-changes + "ZZ" 'wdired-finish-edit + (kbd "") 'wdired-exit)) + +(provide 'evil-collection-wdired) +;;; evil-collection-wdired.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/wgrep/README.org b/.config/emacs/lisp/evil-collection/modes/wgrep/README.org new file mode 100644 index 0000000..ca985ae --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/wgrep/README.org @@ -0,0 +1,19 @@ +* wgrep + + Evil bindings for [[https://github.com/mhayashi1120/Emacs-wgrep][wgrep]] (writable grep buffers). + + Upstream only binds finish / abort / toggle commands under =C-c= and + =C-x= prefixes. evil-collection layers the usual evil quit-and-save + bindings on top and remaps =evil-write= to finish the edit. + +** Key bindings + + | Command | Original | Evil | + |------------------------------+---------------------------------+------------| + | =wgrep-finish-edit= | =C-c C-c=, =C-c C-e=, =C-x C-s= | =ZZ=, =:w= | + | =wgrep-abort-changes= | =C-c C-k= | =ZQ= | + | =wgrep-exit= | =C-x C-q= | == | + | =wgrep-mark-deletion= | =C-c C-d= | =C-c C-d= | + | =wgrep-remove-change= | =C-c C-r= | =C-c C-r= | + | =wgrep-remove-all-change= | =C-c C-u= | =C-c C-u= | + | =wgrep-toggle-readonly-area= | =C-c C-p= | =C-c C-p= | diff --git a/.config/emacs/lisp/evil-collection/modes/wgrep/evil-collection-wgrep.el b/.config/emacs/lisp/evil-collection/modes/wgrep/evil-collection-wgrep.el new file mode 100644 index 0000000..fd4d73a --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/wgrep/evil-collection-wgrep.el @@ -0,0 +1,49 @@ +;;; evil-collection-wgrep.el --- Bindings for `wgrep' -*- lexical-binding: t -*- + +;; Copyright (C) 2018 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, emacs, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Bindings for `wgrep'. + +;;; Code: +(require 'evil-collection) +(require 'wgrep nil t) + +(defvar wgrep-mode-map) + +(defconst evil-collection-wgrep-maps '(wgrep-mode-map)) + +;;;###autoload +(defun evil-collection-wgrep-setup () + "Set up `evil' bindings for `wgrep'." + (evil-collection-define-key nil 'wgrep-mode-map + [remap evil-write] 'wgrep-finish-edit) + + (evil-collection-define-key 'normal 'wgrep-mode-map + "ZQ" 'wgrep-abort-changes + "ZZ" 'wgrep-finish-edit + (kbd "") 'wgrep-exit)) + +(provide 'evil-collection-wgrep) +;;; evil-collection-wgrep.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/which-key/README.org b/.config/emacs/lisp/evil-collection/modes/which-key/README.org new file mode 100644 index 0000000..17dd24a --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/which-key/README.org @@ -0,0 +1,17 @@ +* which-key + + Evil bindings for [[https://github.com/justbur/emacs-which-key][which-key]] paging popup. + + Only =which-key-C-h-map= (the paging popup invoked from inside a prefix) + is modified; the global which-key triggers themselves are untouched. + +** Key bindings + + | Command | Original | Evil | + |--------------------------------------+------------+------------| + | =which-key-abort= | =a=, =C-a= | =q= | + | =which-key-show-next-page-cycle= | =n=, =C-n= | =j=, =C-n= | + | =which-key-show-previous-page-cycle= | =p=, =C-p= | =k=, =C-p= | + | =which-key-show-standard-help= | =h=, =C-h= | =?=, =C-h= | + | =which-key-undo-key= | =u=, =C-u= | =u=, =C-u= | + | =which-key-toggle-docstrings= | =d=, =C-d= | =d=, =C-d= | diff --git a/.config/emacs/lisp/evil-collection/modes/which-key/evil-collection-which-key.el b/.config/emacs/lisp/evil-collection/modes/which-key/evil-collection-which-key.el new file mode 100644 index 0000000..e0b8b9d --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/which-key/evil-collection-which-key.el @@ -0,0 +1,52 @@ +;;; evil-collection-which-key.el --- Evil bindings for which-key -*- lexical-binding: t -*- + +;; Copyright (C) 2017 Pierre Neidhardt + +;; Author: Maximiliano Sandoval +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, which-key, tools + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: +;; Evil bindings for `which-key' + +;;; Code: + +(require 'evil-collection) +(require 'which-key nil t) + +(defvar which-key-C-h-map) + +(defconst evil-collection-which-key-maps '(which-key-C-h-map)) + +;; `which-key'is coded so that the prompt properly shows j and k as +;; the bindings. +;;;###autoload +(defun evil-collection-which-key-setup () + "Set up `evil' bindings for `which-key'." + + ;; (evil-collection-define-key nil 'which-key-C-h-map "u" 'which-key-undo-key) + (evil-collection-define-key nil 'which-key-C-h-map + "q" 'which-key-abort + "j" 'which-key-show-next-page-cycle + "k" 'which-key-show-previous-page-cycle + "?" 'which-key-show-standard-help)) + +(provide 'evil-collection-which-key) +;;; evil-collection-which-key.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/with-editor/README.org b/.config/emacs/lisp/evil-collection/modes/with-editor/README.org new file mode 100644 index 0000000..7007a69 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/with-editor/README.org @@ -0,0 +1,17 @@ +* with-editor + + Evil bindings for [[https://github.com/magit/with-editor][with-editor]], used for editing git commit messages + and similar =$EDITOR= sessions inside Emacs. + + Upstream already remaps =evil-quit=, =evil-save-and-close= and + =evil-save-modified-and-close= to =with-editor-cancel= / + =with-editor-finish=, so =:q=, =:wq= and =ZZ=/=ZQ= work out of the box. + evil-collection adds explicit normal-state =ZQ= and =ZZ= so they are + not subject to evil's save-modified semantics. + +** with-editor-mode-map (normal state) + + | Command | Original | Evil | + |----------------------+-----------+------| + | =with-editor-cancel= | =C-c C-k= | =ZQ= | + | =with-editor-finish= | =C-c C-c= | =ZZ= | diff --git a/.config/emacs/lisp/evil-collection/modes/with-editor/evil-collection-with-editor.el b/.config/emacs/lisp/evil-collection/modes/with-editor/evil-collection-with-editor.el new file mode 100644 index 0000000..91199a1 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/with-editor/evil-collection-with-editor.el @@ -0,0 +1,45 @@ +;;; evil-collection-with-editor.el --- Bindings for `with-editor' -*- lexical-binding: t -*- + +;; Copyright (C) 2024 Tianshu Wang + +;; Author: Tianshu Wang +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, emacs, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Bindings for `with-editor'. + +;;; Code: +(require 'evil-collection) +(require 'with-editor nil t) + +(defvar with-editor-mode-map) + +(defconst evil-collection-with-editor-maps '(with-editor-mode-map)) + +;;;###autoload +(defun evil-collection-with-editor-setup () + "Set up `evil' bindings for `with-editor'." + (evil-collection-define-key 'normal 'with-editor-mode-map + "ZQ" 'with-editor-cancel + "ZZ" 'with-editor-finish)) + +(provide 'evil-collection-with-editor) +;;; evil-collection-with-editor.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/woman/README.org b/.config/emacs/lisp/evil-collection/modes/woman/README.org new file mode 100644 index 0000000..c929d47 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/woman/README.org @@ -0,0 +1,13 @@ +* woman + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/woman/index.html][WoMan]] (manpage viewer, no external tools). + +** Key bindings + + | Command | Original | Evil | + |----------------------------+----------+------| + | =WoMan-next-manpage= | =n= | =]]= | + | =WoMan-previous-manpage= | =p= | =[[= | + | =woman-reformat-last-file= | =R= | =gr= | + + Standard motion / quit bindings are inherited from =evil-collection-man=. diff --git a/.config/emacs/lisp/evil-collection/modes/woman/evil-collection-woman.el b/.config/emacs/lisp/evil-collection/modes/woman/evil-collection-woman.el new file mode 100644 index 0000000..d7e889c --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/woman/evil-collection-woman.el @@ -0,0 +1,51 @@ +;;; evil-collection-woman.el --- Evil bindings for WoMan -*- lexical-binding: t -*- + +;; Copyright (C) 2017 Pierre Neidhardt + +;; Author: Pierre Neidhardt +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, woman, tools + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: +;; Evil bindings for `woman'. + +;;; Code: +(require 'evil-collection) +(evil-collection-require 'man) +(require 'woman) + +(defconst evil-collection-woman-maps '(woman-mode-map)) + +;;;###autoload +(defun evil-collection-woman-setup () + "Set up `evil' bindings for `woman'." + (evil-set-initial-state 'woman-mode 'normal) + (evil-collection-define-key 'normal 'woman-mode-map + (kbd "]]") 'WoMan-next-manpage + (kbd "[[") 'WoMan-previous-manpage + + ;; goto + ;; "gm" 'woman + + ;; refresh + "gr" 'woman-reformat-last-file)) + +(provide 'evil-collection-woman) +;;; evil-collection-woman.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/xref/README.org b/.config/emacs/lisp/evil-collection/modes/xref/README.org new file mode 100644 index 0000000..36e32c9 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/xref/README.org @@ -0,0 +1,26 @@ +* xref + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Xref.html][xref]]. + +** xref--xref-buffer-mode-map + + | Command | Original | Evil | + |----------------------------------+----------+--------------------------| + | =xref-next-line= | =n=, =.= | =gj=, =C-j=, =C-n=, =]]= | + | =xref-prev-line= | =p=, =,= | =gk=, =C-k=, =C-p=, =[[= | + | #ERROR | =N= | =]]= | + | =xref-prev-group= (Emacs 28+) | =P= | =[[= | + | =xref-query-replace-in-results= | =r= | =r=, =Q= | + | =xref-goto-xref= | =RET= | =RET= | + | =xref-quit-and-goto-xref= | =TAB= | =S-RET= | + | =xref-show-location-at-point= | =C-o= | =o=, =go= | + | =xref-revert-buffer= (Emacs 27+) | n/a | =gr= | + #+TBLFM: $1=xref-next-group= (Emacs 28+) + +** xref--transient-buffer-mode-map + + (Emacs 27+) + + | Command | Original | Evil | + |---------------------------+--------------+-------| + | =xref-quit-and-goto-xref= | =RET=, =TAB= | =RET= | diff --git a/.config/emacs/lisp/evil-collection/modes/xref/evil-collection-xref.el b/.config/emacs/lisp/evil-collection/modes/xref/evil-collection-xref.el new file mode 100644 index 0000000..1c9ea17 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/xref/evil-collection-xref.el @@ -0,0 +1,76 @@ +;;; evil-collection-xref.el --- Evil bindings for xref -*- lexical-binding: t -*- + +;; Copyright (C) 2017, 2021 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, xref, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; Evil bindings for `xref'. + +;;; Code: +(require 'evil-collection) +(require 'xref) + +(defconst evil-collection-xref-maps `(xref--xref-buffer-mode-map + ,@(when (>= emacs-major-version 27) '(xref--transient-buffer-mode-map)))) + +;;;###autoload +(defun evil-collection-xref-setup () + "Set up `evil' bindings for `xref'." + (evil-set-initial-state 'xref--xref-buffer-mode 'normal) + (evil-collection-set-readonly-bindings 'xref--xref-buffer-mode-map) + (evil-collection-define-key 'normal 'xref--xref-buffer-mode-map + "gj" 'xref-next-line + "gk" 'xref-prev-line + (kbd "C-j") 'xref-next-line + (kbd "C-k") 'xref-prev-line + (kbd "C-n") 'xref-next-line + (kbd "C-p") 'xref-prev-line + "]]" 'xref-next-line + "[[" 'xref-prev-line + "r" 'xref-query-replace-in-results + + ;; Match `dired''s `dired-do-find-regexp-and-replace'. + "Q" 'xref-query-replace-in-results + + ;; open + (kbd "RET") 'xref-goto-xref + (kbd "S-") 'xref-quit-and-goto-xref ;; In Emacs mode map, TAB binds to `xref-quit-and-goto-xref' + "o" 'xref-show-location-at-point + "go" 'xref-show-location-at-point) + + (when (>= emacs-major-version 27) + (evil-collection-define-key 'normal 'xref--xref-buffer-mode-map + "gr" 'xref-revert-buffer)) + + (when (>= emacs-major-version 28) + (evil-collection-define-key 'normal 'xref--xref-buffer-mode-map + "[[" 'xref-prev-group + "]]" 'xref-next-group)) + + (when (>= emacs-major-version 27) + (evil-set-initial-state 'xref--transient-buffer-mode 'normal) + (evil-collection-define-key 'normal 'xref--transient-buffer-mode-map + (kbd "RET") 'xref-quit-and-goto-xref))) + +(provide 'evil-collection-xref) +;;; evil-collection-xref.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/xwidget/README.org b/.config/emacs/lisp/evil-collection/modes/xwidget/README.org new file mode 100644 index 0000000..5825785 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/xwidget/README.org @@ -0,0 +1,43 @@ +* xwidget + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Embedded-WebKit-Widgets.html][xwidget-webkit]], modeled after vimium. + +** Key bindings + + Standard read-only motion / quit bindings come from + =evil-collection-set-readonly-bindings=. + + | Command | Original | Evil | + |--------------------------------------------------+----------+----------------| + | =xwidget-webkit-scroll-up-line= | =C-n= | =j= | + | =xwidget-webkit-scroll-down-line= | =C-p= | =k= | + | =xwidget-webkit-scroll-top= | =M-<= | =gg= | + | =xwidget-webkit-scroll-bottom= | =M->= | =G= | + | =xwidget-webkit-scroll-backward= | =B= | =h= | + | =xwidget-webkit-scroll-forward= | =F= | =l= | + | =xwidget-webkit-scroll-up= | =SPC= | =C-f= | + | =xwidget-webkit-scroll-down= | =S-SPC= | =C-b= | + | =xwidget-webkit-back= | =r= | =H=, =<= | + | =xwidget-webkit-forward= | =R= | =L=, =>= | + | =xwidget-webkit-reload= | =g= | =r=, =gr= | + | =xwidget-webkit-current-url= | =u= | =yy= | + | =xwidget-webkit-browse-url= | =a= | =o=, =gu=, =J= | + | =xwidget-webkit-copy-selection-as-kill= (visual) | =w= | =y= | + | =xwidget-webkit-insert-string= | =i= | =RET= | + | =xwidget-webkit-zoom-in= | =+= | =+=, === | + | =xwidget-webkit-zoom-out= | =-= | =-= | + | =describe-mode= | =C-h m= | =?= | + +** New commands + + | Command | Key | Notes | + |----------------------------------------------------------+-----------+--------------------------------| + | =evil-collection-xwidget-webkit-scroll-half-page-up= | =d= | half-page down (vim semantics) | + | =evil-collection-xwidget-webkit-scroll-half-page-down= | =u= | half-page up (vim semantics) | + | =evil-collection-xwidget-webkit-new-tab= | =t= | prompt URL in new buffer | + | =evil-collection-xwidget-webkit-close-tab= | =x= | kill current buffer | + | =evil-collection-xwidget-webkit-restore-last-closed-tab= | =X= | reopen last closed | + | =evil-collection-xwidget-webkit-search-tabs= | =T=, =gt= | switch via =completing-read= | + + When =evil-want-C-d-scroll= / =evil-want-C-u-scroll= are non-nil, =C-d= and + =C-u= scroll the page. diff --git a/.config/emacs/lisp/evil-collection/modes/xwidget/evil-collection-xwidget.el b/.config/emacs/lisp/evil-collection/modes/xwidget/evil-collection-xwidget.el new file mode 100644 index 0000000..ab197f1 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/xwidget/evil-collection-xwidget.el @@ -0,0 +1,184 @@ +;;; evil-collection-xwidget.el --- Evil bindings for Xwidget -*- lexical-binding: t -*- + +;; Copyright (C) 2020, 2022, 2024 Ruslan Kamashev + +;; Author: Ruslan Kamashev +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, xwidget, tools + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: +;; Evil bindings for Xwidget. + +;;; Code: +(require 'xwidget) +(require 'evil-collection) + +(defvar evil-collection-xwidget-maps '(xwidget-webkit-mode-map)) + +;; Silence compile errors +(declare-function xwidget-webkit-uri "xwidget") +(declare-function xwidget-window-inside-pixel-height "xwidget") + +;; HACK: elisp byte-opt can't optimize 'format' out, so it's checked at runtime. +(defun evil-collection-xwidget-webkit--scroll-trampoline (f n) + "Compatible wrapper for `xwidget-webkit-scroll-up' and so on. + +F is the name of function, N is the pixel height." + (let ((realf (intern (format "%s" f)))) + (if (>= emacs-major-version 28) + (funcall realf n) + (funcall realf)))) + +(defun evil-collection-xwidget-webkit-scroll-half-page-up () + "Compatible wrapper for `xwidget-webkit-scroll-up'." + (interactive) + (evil-collection-xwidget-webkit--scroll-trampoline + "xwidget-webkit-scroll-up" + (/ (xwidget-window-inside-pixel-height (selected-window)) 2))) + +(defun evil-collection-xwidget-webkit-scroll-half-page-down () + "Compatible wrapper for `xwidget-webkit-scroll-down'." + (interactive) + (evil-collection-xwidget-webkit--scroll-trampoline + "xwidget-webkit-scroll-down" + (/ (xwidget-window-inside-pixel-height (selected-window)) 2))) + +(defun evil-collection-xwidget-webkit-new-tab (url) + "New tab (new buffer) of URL." + (interactive "s(New Tab) xwidget-webkit URL: ") + (xwidget-webkit-browse-url url :new-session)) + +(defvar evil-collection-xwidget-webkit-last-closed-tab-url nil) +(defun evil-collection-xwidget-webkit-close-tab () + "Close tab (kill buffer) without confirmation." + (interactive) + (setq evil-collection-xwidget-webkit-last-closed-tab-url + (xwidget-webkit-uri (xwidget-webkit-current-session))) + (let ((kill-buffer-query-functions nil)) + (kill-current-buffer))) + +(defun evil-collection-xwidget-webkit-restore-last-closed-tab () + "Restore last closed tab." + (interactive) + (if (null evil-collection-xwidget-webkit-last-closed-tab-url) + (message "No url to restore.") + (message (format "Restoring last closed tab %s" + evil-collection-xwidget-webkit-last-closed-tab-url)) + (xwidget-webkit-browse-url + evil-collection-xwidget-webkit-last-closed-tab-url :new-session) + (setq evil-collection-xwidget-webkit-last-closed-tab-url nil))) + +(defun evil-collection-xwidget-webkit-search-tabs () + "Search tabs (buffers) with `buffer-name'." + (interactive) + (cl-flet ((is-xwidget-webkit-buffer? + (b) (with-current-buffer b + (equal major-mode 'xwidget-webkit-mode)))) + (let ((bufs (cl-loop for b in (buffer-list) + when (is-xwidget-webkit-buffer? b) + collect (buffer-name b)))) + (switch-to-buffer (completing-read "Switch to Tab: " bufs nil t))))) + +;;;###autoload +(defun evil-collection-xwidget-setup () + "Set up `evil' bindings for `xwidget'." + (evil-collection-set-readonly-bindings 'xwidget-webkit-mode-map) + + (evil-collection-define-key 'visual 'xwidget-webkit-mode-map + "y" 'xwidget-webkit-copy-selection-as-kill) + + (evil-collection-define-key 'normal 'xwidget-webkit-mode-map + ;; Mimic vimium (a browser extension) + ;; + ;; Since xwidget has no tab concept, `open-url-new-tab' etc are not + ;; supported. + ;; + ;; TODO: edit-mode, visual-mode + ;; + ;; Navigating the page + "j" 'xwidget-webkit-scroll-up-line + "k" 'xwidget-webkit-scroll-down-line + "gg" 'xwidget-webkit-scroll-top + "G" 'xwidget-webkit-scroll-bottom + "d" 'evil-collection-xwidget-webkit-scroll-half-page-up + "u" 'evil-collection-xwidget-webkit-scroll-half-page-down + "h" 'xwidget-webkit-scroll-backward + "l" 'xwidget-webkit-scroll-forward + "r" 'xwidget-webkit-reload + "yy" 'xwidget-webkit-current-url + ;; TODO `first-text-input', `open-link-in-current-tab' + "gi" 'undefined + "f" 'undefined + + ;; Using the vomnibar + ;; + ;; For bookmark, use C-x r m, C-x r j. + "o" 'xwidget-webkit-browse-url + "T" 'evil-collection-xwidget-webkit-search-tabs + + ;; Using find + ;; + ;; TODO + + ;; Navigating history + "H" 'xwidget-webkit-back + "L" 'xwidget-webkit-forward + + ;; Manipulating tabs (actually buffers) + ;; + ;; Only `new-tab' and `close-tab' are supported. + "t" 'evil-collection-xwidget-webkit-new-tab + "x" 'evil-collection-xwidget-webkit-close-tab + "X" 'evil-collection-xwidget-webkit-restore-last-closed-tab + + ;; Miscellaneous + "?" 'describe-mode + + ;; Evil style + + "<" 'xwidget-webkit-back + ">" 'xwidget-webkit-forward + + ;; Additional bindings to browse url. + "gu" 'xwidget-webkit-browse-url + "J" 'xwidget-webkit-browse-url + + ;; Additional binding to browse tabs. + "gt" 'evil-collection-xwidget-webkit-search-tabs + + "gr" 'xwidget-webkit-reload + (kbd "C-f") 'xwidget-webkit-scroll-up + (kbd "C-b") 'xwidget-webkit-scroll-down + (kbd "RET") 'xwidget-webkit-insert-string + + ;; zoom + "+" 'xwidget-webkit-zoom-in + "=" 'xwidget-webkit-zoom-in + "-" 'xwidget-webkit-zoom-out) + + (when evil-want-C-d-scroll + (evil-collection-define-key 'normal 'xwidget-webkit-mode-map + (kbd "C-d") 'xwidget-webkit-scroll-up)) + (when evil-want-C-u-scroll + (evil-collection-define-key 'normal 'xwidget-webkit-mode-map + (kbd "C-u") 'xwidget-webkit-scroll-down))) + +(provide 'evil-collection-xwidget) +;;; evil-collection-xwidget.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/yaml-mode/README.org b/.config/emacs/lisp/evil-collection/modes/yaml-mode/README.org new file mode 100644 index 0000000..33d13ad --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/yaml-mode/README.org @@ -0,0 +1,15 @@ +* yaml-mode + + Evil setup for [[https://github.com/yoshiki/yaml-mode][yaml-mode]]. + + No keys are rebound. =evil-shift-width= is set buffer-locally to + =yaml-indent-offset= so that =>>= / =<<= produce indentation that + matches yaml-mode's own electric keys. + +** New commands + + | Command | Purpose | + |--------------------------------------------------+-------------------------------------------------| + | =evil-collection-yaml-mode-set-evil-shift-width= | Set =evil-shift-width= to =yaml-indent-offset=. | + + Installed on =yaml-mode-hook=. diff --git a/.config/emacs/lisp/evil-collection/modes/yaml-mode/evil-collection-yaml-mode.el b/.config/emacs/lisp/evil-collection/modes/yaml-mode/evil-collection-yaml-mode.el new file mode 100644 index 0000000..3bf6667 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/yaml-mode/evil-collection-yaml-mode.el @@ -0,0 +1,42 @@ +;;; evil-collection-yaml-mode.el --- Bindings for `yaml-mode' -*- lexical-binding: t -*- + +;; Author: Frédéric Giquel +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: emacs, tools, yaml + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for `yaml-mode'. + +;;; Code: +(require 'evil-collection) +(require 'yaml-mode nil t) + +(defconst evil-collection-yaml-mode-maps nil) + +(defvar yaml-indent-offset) +(defun evil-collection-yaml-mode-set-evil-shift-width () + "Set `evil-shift-width' according to `yaml-indent-offset'." + (setq-local evil-shift-width yaml-indent-offset)) + +;;;###autoload +(defun evil-collection-yaml-mode-setup () + "Set up `evil' bindings for `yaml'." + (add-hook 'yaml-mode-hook #'evil-collection-yaml-mode-set-evil-shift-width)) + +(provide 'evil-collection-yaml-mode) +;;; evil-collection-yaml-mode.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/youtube-dl/evil-collection-youtube-dl.el b/.config/emacs/lisp/evil-collection/modes/youtube-dl/evil-collection-youtube-dl.el new file mode 100644 index 0000000..d9337ca --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/youtube-dl/evil-collection-youtube-dl.el @@ -0,0 +1,67 @@ +;;; evil-collection-youtube-dl.el --- Evil bindings for youtube-dl -*- lexical-binding: t -*- + +;; Copyright (C) 2018 Pierre Neidhardt + +;; Author: Pierre Neidhardt +;; Maintainer: James Nguyen , Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, youtube, tools + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: +;; Evil bindings for youtube-dl. + +;;; Code: +(require 'evil-collection) +(require 'youtube-dl nil t) + +(defvar youtube-dl-list-mode-map) + +(defconst evil-collection-youtube-dl-maps '(youtube-dl-list-mode-map)) + +;;;###autoload +(defun evil-collection-youtube-dl-setup () + "Set up `evil' bindings for `youtube-dl'." + + (evil-collection-set-readonly-bindings 'youtube-dl-list-mode-map) + (evil-collection-define-key 'normal 'youtube-dl-list-mode-map + (kbd "S-SPC") 'scroll-down-command + + "gr" 'youtube-dl-list-redisplay + + "g?" 'describe-mode + + "p" 'youtube-dl-list-toggle-pause + "s" 'youtube-dl-list-toggle-slow + "S" 'youtube-dl-list-toggle-slow-all + "y" 'youtube-dl-list-yank + + "i" 'youtube-dl-list-log + "I" 'youtube-dl-list-kill-log + + "a" 'youtube-dl + "d" 'youtube-dl-list-kill + + "[[" 'youtube-dl-list-priority-down + "]]" 'youtube-dl-list-priority-up + "gj" 'youtube-dl-list-priority-down + "gk" 'youtube-dl-list-priority-up + (kbd "C-j") 'youtube-dl-list-priority-down + (kbd "C-k") 'youtube-dl-list-priority-up)) + +(provide 'evil-collection-youtube-dl) +;;; evil-collection-youtube-dl.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/zmusic/evil-collection-zmusic.el b/.config/emacs/lisp/evil-collection/modes/zmusic/evil-collection-zmusic.el new file mode 100644 index 0000000..4fb06a8 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/zmusic/evil-collection-zmusic.el @@ -0,0 +1,49 @@ +;;; evil-collection-zmusic.el --- Bindings for `zmusic' -*- lexical-binding: t -*- + +;; Copyright (C) 2020 Carla Cao + +;; Author: Carla Cao +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, emacs, tools, minimalist, presentation + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;;; Bindings for`zmusic'. + +;;; Code: +(require 'evil-collection) +(require 'zmusic nil t) + +(defvar zmusic-mode-map) + +(defconst evil-collection-zmusic-maps '(zmusic-mode-map)) + +;;;###autoload +(defun evil-collection-zmusic-setup () + "Set up `evil' bindings for `zmusic'." + (evil-collection-define-key 'normal 'zmusic-mode-map + (kbd "RET") 'zmusic/toggle-play + "j" 'zmusic/next-beat + "k" 'zmusic/previous-beat + "h" 'zmusic/backward-degree + "l" 'zmusic/forward-degree + "d" 'zmusic/kill-beat)) + +(provide 'evil-collection-zmusic) +;;; evil-collection-zmusic.el ends here diff --git a/.config/emacs/lisp/evil-collection/modes/ztree/evil-collection-ztree.el b/.config/emacs/lisp/evil-collection/modes/ztree/evil-collection-ztree.el new file mode 100644 index 0000000..4dfd324 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/ztree/evil-collection-ztree.el @@ -0,0 +1,68 @@ +;;; evil-collection-ztree.el --- Evil bindings for ztree -*- lexical-binding: t -*- + +;; Copyright (C) 2017 Pierre Neidhardt + +;; Author: Pierre Neidhardt +;; Maintainer: James Nguyen , Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, ztree, tools + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. +;; +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: +;; Evil bindings for ztree. + +;;; Code: +(require 'evil-collection) +(require 'ztree nil t) + +(defvar ztree-mode-map) +(defvar ztreediff-mode-map) + +(defconst evil-collection-ztree-maps '(ztree-mode-map ztreediff-mode-map)) + +;;;###autoload +(defun evil-collection-ztree-setup () + "Set up `evil' bindings for `ztree'." + + (evil-collection-set-readonly-bindings 'ztree-mode-map) + (evil-set-initial-state 'ztree-mode 'normal) + (evil-collection-define-key 'normal 'ztree-mode-map + (kbd "") 'ztree-jump-side + (kbd "RET") 'ztree-perform-action + (kbd "SPC") 'ztree-perform-soft-action + + "x" 'ztree-toggle-expand-subtree + + ;; refresh + "gr" 'ztree-refresh-buffer) + + (evil-collection-set-readonly-bindings 'ztreediff-mode-map) + (evil-set-initial-state 'ztree-mode 'normal) + (evil-define-minor-mode-key 'normal 'ztreediff-mode + "C" 'ztree-diff-copy + "D" 'ztree-diff-delete-file + "zH" 'ztree-diff-toggle-show-filtered-files + "d" 'ztree-diff-simple-diff-files + "zh" 'ztree-diff-toggle-show-equal-files + "gf" 'ztree-diff-view-file + + ;; refresh + "gr" 'ztree-diff-partial-rescan + "gR" 'ztree-diff-full-rescan)) + +(provide 'evil-collection-ztree) +;;; evil-collection-ztree.el ends here -- cgit v1.2.3