diff options
| author | Sakamoto <me@sakamoto.network> | 2026-08-16 15:34:00 -0500 |
|---|---|---|
| committer | Sakamoto <me@sakamoto.network> | 2026-08-16 15:34:00 -0500 |
| commit | d51beea88d300cb5066bb92a8148cad52fa1091d (patch) | |
| tree | 4357b4958c19dddd304a0d6ee77994fb9f12c118 /dot_config/emacs/lisp/meow-config.el | |
| parent | a623fed63460d6d810605ce1ce858a58a5b222f7 (diff) | |
| download | dotfiles-d51beea88d300cb5066bb92a8148cad52fa1091d.tar.xz dotfiles-d51beea88d300cb5066bb92a8148cad52fa1091d.zip | |
update
Diffstat (limited to 'dot_config/emacs/lisp/meow-config.el')
| -rw-r--r-- | dot_config/emacs/lisp/meow-config.el | 233 |
1 files changed, 233 insertions, 0 deletions
diff --git a/dot_config/emacs/lisp/meow-config.el b/dot_config/emacs/lisp/meow-config.el new file mode 100644 index 0000000..579e31c --- /dev/null +++ b/dot_config/emacs/lisp/meow-config.el @@ -0,0 +1,233 @@ +(use-package meow + :straight t + :init + (defun meow-setup () + (setq meow-use-clipboard select-enable-clipboard) + (setq meow-cheatsheet-layout meow-cheatsheet-layout-colemak-dh) + (meow-motion-define-key + ;; Use e to move up, n to move down. + ;; Since special modes usually use n to move down, we only overwrite e here. + '("e" . meow-prev) + '("<escape>" . ignore)) + (meow-leader-define-key + '("?" . meow-cheatsheet) + '("1" . meow-digit-argument) + '("2" . meow-digit-argument) + '("3" . meow-digit-argument) + '("4" . meow-digit-argument) + '("5" . meow-digit-argument) + '("6" . meow-digit-argument) + '("7" . meow-digit-argument) + '("8" . meow-digit-argument) + '("9" . meow-digit-argument) + '("0" . meow-digit-argument) + '("f f" . find-file) + '("/" . consult-ripgrep) + '("f r" . consult-recent-file) + '("i" . consult-imenu) + '("f y" . my/yank-buffer-path) + + ;; Projects + '("SPC" . project-find-file) + '("p R" . project-query-replace-regexp) + ;; Window bindings + '("w v" . split-window-right) + '("w s" . split-window-below) + '("w d" . delete-window) + '("w v" . split-window-right) + '("w s" . split-window-below) + '("w d" . delete-window) + + ;; Buffer + '("," . consult-buffer) + '("b k" . (lambda () (interactive) (kill-buffer (current-buffer)))) + '("b l" . (lambda () (interactive) (switch-to-buffer nil))) + '("b b" . switch-to-buffer) + '("b n" . next-buffer) + '("b i" . ibuffer) + + ;; Bookmarks + '("b m" . bookmark-set) + '("b P" . bookmark-save) + '("b D" . bookmark-delete) + '("RET" . bookmark-jump) + '("o b" . browse-url-of-file) + + ;; Magit + '("g" . (lambda () (interactive) (require 'magit) (magit-status))) + + '("e e" . elfeed) + '("e u" . elfeed-update) + '("e a" . elfeed-add-feed)) + + ;; (meow-motion-define-key + ;; ;; Navigation + ;; '("W" . meow-next-word) + ;; '("^" . back-to-indentation) + ;; '("L" . (lambda () (interactive) (meow-line 1) (meow-reverse))) + ;; '("l" . meow-line) + ;; '("M" . meow-mark-symbol) + ;; '("v" . meow-search) + ;; '("V" . meow-visit) + ;; '("%" . expreg-expand) + ;; '("$" . expreg-contract) + + ;; '(";" . meow-reverse) + ;; '("[" . meow-beginning-of-thing) + ;; '("]" . meow-end-of-thing) + ;; '(":" . execute-extended-command) + ;; ;; Yank + ;; '("y" . meow-clipboard-save) + ;; '("g" . meow-cancel-selection) + ;; ;; Jump + ;; '("f" . flash-jump) + ;; '("/" . consult-line) + ;; '("<escape>" . ignore)) + + (meow-normal-define-key + '("0" . meow-expand-0) + '("1" . meow-expand-1) + '("2" . meow-expand-2) + '("3" . meow-expand-3) + '("4" . meow-expand-4) + '("5" . meow-expand-5) + '("6" . meow-expand-6) + '("7" . meow-expand-7) + '("8" . meow-expand-8) + '("9" . meow-expand-9) + '("-" . negative-argument) + '(";" . meow-reverse) + '(":" . execute-extended-command) + '("," . meow-inner-of-thing) + '("." . meow-bounds-of-thing) + '("[" . meow-beginning-of-thing) + '("]" . meow-end-of-thing) + '("/" . meow-visit) + '("%" . expreg-expand) + '("$" . expreg-contract) + '("^" . back-to-indentation) + '("a" . meow-append) + '("A" . (lambda () (interactive) (end-of-line) (meow-insert))) + '("b" . meow-back-word) + '("B" . meow-back-symbol) + '("c" . meow-change) + '("C" . (lambda () (interactive) (meow-kill) (meow-insert))) + '("d" . meow-kill) + '("E" . meow-prev-expand) + '("f" . meow-find) + '("g" . meow-cancel-selection) + '("G" . meow-grab) + '("<left>" . meow-left) + '("<right>" . meow-right) + '("<up>" . meow-prev) + '("<down>" . meow-next) + '("H" . meow-left-expand) + '("i" . meow-insert) + '("I" . (lambda () (interactive) (beginning-of-line) (meow-insert))) + '("j" . meow-join) + '("K" . eldoc-box-help-at-point) + '("l" . meow-line) + '("L" . (lambda () (interactive) (meow-line 1) (meow-reverse))) + '("m" . meow-mark-word) + '("M" . meow-mark-symbol) + '("N" . meow-next-expand) + '("o" . meow-open-below) + '("O" . meow-open-above) + '("p" . meow-yank) + '("Q" . meow-quit) + '("r" . meow-replace) + '("R" . meow-swap-grab) + '("s" . meow-change-char) + '("S" . meow-pop-selection) + '("t" . meow-till) + '("u" . meow-undo) + '("U" . meow-undo-in-selection) + '("v" . meow-search) + '("V" . meow-visit) + '("w" . meow-next-word) + '("W" . meow-next-symbol) + '("x" . meow-delete) + '("X" . meow-backward-delete) + '("y" . meow-save) + '(">" . my/indent-right) + '("<" . my/indent-left) + + '("'" . repeat) + '("=" . indent-region) + '("<escape>" . ignore) + '("RET" . flash-jump)) + + + (setq meow-mode-state-list + '((dired-mode . motion) + (elfeed-search-mode . motion) + (org-mode . normal) + (elfeed-show-mode . motion) + (erc-mode . insert) + (vterm-mode . insert) + (ghostel-mode . insert) + (pdf-view-mode . motion) + (calibredb-search-mode . motion) + (dirvish-mode . motion) + (messages-buffer-mode . motion) + (help-mode . motion) + (info-mode . motion) + (occur-mode . motion) + (pass-mode . motion) + (grep-mode . motion) + (compilation-mode . motion) + (messages-buffer-mode . motion) + (special-mode . motion) + (notmuch-hello-mode . motion) + (notmuch-search-mode . motion) + (notmuch-tree-mode . motion) + (notmuch-show-mode . motion)))) + :config + (meow-thing-register 'angle '(regexp "<" ">") '(regexp "<" ">")) + (add-to-list 'meow-char-thing-table '(?a . angle)) + + (meow-setup) + (meow-global-mode 1)) + +(defun my/indent-right () + "Indent region or line right." + (interactive) + (if (use-region-p) + (indent-rigidly (region-beginning) (region-end) tab-width) + (indent-rigidly (line-beginning-position) (line-end-position) tab-width))) + +(defun my/indent-left () + "Indent region or line left." + (interactive) + (if (use-region-p) + (indent-rigidly (region-beginning) (region-end) (- tab-width)) + (indent-rigidly (line-beginning-position) (line-end-position) (- tab-width)))) + +(use-package repeat-fu + :straight t + :commands (repeat-fu-mode repeat-fu-execute) + + :config + (setq repeat-fu-preset 'meow) + + :hook + ((meow-mode) + . + (lambda () + (when (and (not (minibufferp)) (not (derived-mode-p 'special-mode))) + (repeat-fu-mode) + (define-key meow-normal-state-keymap (kbd "C-'") 'repeat-fu-execute) + (define-key meow-insert-state-keymap (kbd "C-'") 'repeat-fu-execute))))) + +(use-package expreg + :straight t) + +(use-package surround + :straight t + :ensure t + :bind-keymap ("M-'" . surround-keymap)) + +(use-package eldoc-box + :straight t) + +(provide 'meow-config) |
