summaryrefslogtreecommitdiff
path: root/dot_config/emacs/lisp/meow-config.el
diff options
context:
space:
mode:
authorSakamoto <me@sakamoto.network>2026-08-16 15:34:00 -0500
committerSakamoto <me@sakamoto.network>2026-08-16 15:34:00 -0500
commitd51beea88d300cb5066bb92a8148cad52fa1091d (patch)
tree4357b4958c19dddd304a0d6ee77994fb9f12c118 /dot_config/emacs/lisp/meow-config.el
parenta623fed63460d6d810605ce1ce858a58a5b222f7 (diff)
downloaddotfiles-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.el233
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)