(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) '("" . 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) ;; '("" . 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) '("" . meow-left) '("" . meow-right) '("" . meow-prev) '("" . 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) '("" . 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)