Files
.emacs.d/lisp/init-meow.el

150 lines
4.5 KiB
EmacsLisp
Raw Permalink Normal View History

2025-12-14 04:51:24 +11:00
;; -*- lexical-binding: t -*-
2025-12-14 09:04:11 +11:00
(defun meow-setup()
2025-12-14 04:51:24 +11:00
(setq meow-cheatsheet-layout meow-cheatsheet-layout-qwerty)
(meow-motion-define-key
'("j" . meow-next)
'("k" . meow-prev)
'("<escape>" . ignore))
(meow-leader-define-key
;; Use SPC (0-9) for digit arguments.
'("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)
'("/" . meow-keypad-describe-key)
'("?" . meow-cheatsheet))
(meow-normal-define-key
'("0" . meow-expand-0)
'("9" . meow-expand-9)
'("8" . meow-expand-8)
'("7" . meow-expand-7)
'("6" . meow-expand-6)
'("5" . meow-expand-5)
'("4" . meow-expand-4)
'("3" . meow-expand-3)
'("2" . meow-expand-2)
'("1" . meow-expand-1)
'("-" . negative-argument)
'(";" . meow-reverse)
'("," . meow-inner-of-thing)
'("." . meow-bounds-of-thing)
'("[" . meow-beginning-of-thing)
'("]" . meow-end-of-thing)
'("a" . meow-append)
'("A" . meow-open-below)
'("b" . meow-back-word)
'("B" . meow-back-symbol)
'("c" . meow-change)
'("d" . meow-delete)
'("D" . meow-backward-delete)
'("e" . meow-next-word)
'("E" . meow-next-symbol)
'("f" . meow-find)
'("g" . meow-cancel-selection)
'("G" . meow-grab)
'("h" . meow-left)
'("H" . meow-left-expand)
'("i" . meow-insert)
'("I" . meow-open-above)
'("j" . meow-next)
'("J" . meow-next-expand)
'("k" . meow-prev)
'("K" . meow-prev-expand)
'("l" . meow-right)
'("L" . meow-right-expand)
'("m" . meow-join)
'("n" . meow-search)
'("o" . meow-block)
'("O" . meow-to-block)
'("p" . meow-yank)
'("q" . meow-quit)
'("Q" . meow-goto-line)
'("r" . meow-replace)
'("R" . meow-swap-grab)
'("s" . meow-kill)
'("t" . meow-till)
'("u" . meow-undo)
'("U" . meow-undo-in-selection)
'("v" . meow-visit)
'("w" . meow-mark-word)
'("W" . meow-mark-symbol)
'("x" . meow-line)
'("X" . meow-goto-line)
'("y" . meow-save)
'("Y" . meow-sync-grab)
'("z" . meow-pop-selection)
'("'" . repeat)
2026-04-03 00:22:19 +11:00
'("<escape>" . ignore))
2026-04-06 19:51:57 +10:00
(meow-define-keys
'beacon
'("C-g" . meow-grab))
2026-04-03 00:22:19 +11:00
)
2025-12-14 04:51:24 +11:00
2026-04-06 19:51:57 +10:00
2025-12-14 04:51:24 +11:00
(use-package meow
2025-12-14 09:04:11 +11:00
:demand t
2026-04-02 19:21:30 +11:00
:hook (elpaca-after-init . meow-global-mode)
2025-12-14 04:51:24 +11:00
:config
(meow-setup)
2026-04-03 19:00:38 +11:00
(add-to-list 'meow-mode-state-list '(magit-mode . insert))
(add-to-list 'meow-mode-state-list '(eat-mode . insert))
(add-to-list 'meow-mode-state-list '(eshell-mode . insert))
2026-04-03 22:48:09 +11:00
(add-to-list 'meow-mode-state-list '(git-commit-elisp-text-mode . insert))
2026-04-03 19:00:38 +11:00
2026-04-06 19:51:57 +10:00
(define-key input-decode-map (kbd "C-[") [control-bracketleft])
(define-key meow-insert-state-keymap [control-bracketleft] 'meow-insert-exit)
2026-04-03 00:22:19 +11:00
(setq meow-keypad-leader-dispatch "C-c"
meow-use-clipboard t)
2026-03-11 21:08:31 +11:00
(setq meow-replace-state-name-list
2026-03-29 19:12:45 +11:00
'((normal . "<N>")
(motion . "<M>")
(keypad . "<K>")
(insert . "<I>")
(beacon . "<B>")))
2025-12-15 18:20:19 +11:00
(setq meow-cursor-type-normal 'bar))
2025-12-14 04:51:24 +11:00
2026-04-06 19:51:57 +10:00
;; Meow jk exit
(use-package meow
:disabled t
:after meow
:config
;; Use jk to escape from insert state to normal state
(defvar meow-two-char-escape-sequence "jk")
(defvar meow-two-char-escape-delay 0.5)
(defun meow--two-char-exit-insert-state (s)
"Exit meow insert state when pressing consecutive two keys.
S is string of the two-key sequence."
(when (meow-insert-mode-p)
(let ((modified (buffer-modified-p))
(undo-list buffer-undo-list))
(insert (elt s 0))
(let* ((second-char (elt s 1))
(event
(if defining-kbd-macro
(read-event nil nil)
(read-event nil nil meow-two-char-escape-delay))))
(when event
(if (and (characterp event) (= event second-char))
(progn
(backward-delete-char 1)
(set-buffer-modified-p modified)
(setq buffer-undo-list undo-list)
(meow-insert-exit))
(push event unread-command-events)))))))
(defun meow-two-char-exit-insert-state ()
"Exit meow insert state when pressing consecutive two keys."
(interactive)
(meow--two-char-exit-insert-state meow-two-char-escape-sequence))
(define-key meow-insert-state-keymap (substring meow-two-char-escape-sequence 0 1)
#'meow-two-char-exit-insert-state))
2025-12-14 04:51:24 +11:00
(provide 'init-meow)