---
Here is finally feature-emacs-meow ;()
WDYT
all best,
jgart
https://whereis.xn--q9jyb4c/
src/rde/features/emacs-xyz.scm | 45 +++
.../features/emacs/meow-keyboard-layouts.scm | 268 ++++++++++++++++++
2 files changed, 313 insertions(+)
create mode 100644 src/rde/features/emacs/meow-keyboard-layouts.scm
diff --git a/src/rde/features/emacs-xyz.scm b/src/rde/features/emacs-xyz.scm
index 1229ae2c..83e78850 100644
--- a/src/rde/features/emacs-xyz.scm
+++ b/src/rde/features/emacs-xyz.scm
@@ -26,6 +26,7 @@
#:use-module (rde features)
#:use-module (rde features predicates)
#:use-module (rde features emacs)
+ #:use-module (rde features emacs meow-keyboard-layouts)
#:use-module (rde features fontutils)
#:use-module (gnu home services)
@@ -99,6 +100,9 @@
feature-emacs-xref
feature-emacs-treebundel
+ ;; Editing
+ feature-emacs-meow
+
;; Reading
feature-emacs-pdf-tools
feature-emacs-nov-el
@@ -3600,6 +3604,47 @@ and references in your programs."
(values `((,f-name . #t)))
(home-services-getter get-home-services)))
+;;;
+;;; Editing.
+;;;
+
+(define* (feature-emacs-meow
+ #:key
+ (emacs-meow emacs-meow)
+ (meow-keyboard-layout %meow-qwerty-layout)
+ (additional-meow-el '())
+ (additional-elisp-packages '()))
+ "Configure Meow for Emacs."
+ (ensure-pred file-like? emacs-meow)
+ (ensure-pred elisp-config? meow-keyboard-layout)
+ (ensure-pred list-of-elisp-packages? additional-elisp-packages)
+
+ (define emacs-f-name 'meow)
+ (define f-name (symbol-append 'emacs- emacs-f-name))
+
+ (define (get-home-services config)
+ (list
+ (rde-elisp-configuration-service
+ emacs-f-name
+ config
+ `(,@meow-keyboard-layout
+ (require 'meow)
+ (meow-setup)
+ (meow-global-mode 1)
+ ,@additional-meow-el)
+
+ #:elisp-packages (cons emacs-meow additional-elisp-packages)
+ #:authors '("jgart <jgart@dismail.de>")
+ #:summary "\
+Yet another modal editing on Emacs."
+ #:commentary "\
+Meow configuration with support for various layouts.")))
+
+ (feature
+ (name f-name)
+ (values `((,f-name . ,emacs-meow)))
+ (home-services-getter get-home-services)))
+
;;;
;;; Reading.
diff --git a/src/rde/features/emacs/meow-keyboard-layouts.scm b/src/rde/features/emacs/meow-keyboard-layouts.scm
new file mode 100644
index 00000000..bdf9bb4c
--- /dev/null
+++ b/src/rde/features/emacs/meow-keyboard-layouts.scm
@@ -0,0 +1,268 @@
+(define-module (rde features emacs meow-keyboard-layouts)
+ #:export (%meow-programmer-dvorak-layout
+ %meow-dvorak-simplified-layout
+ %meow-qwerty-layout
+ %meow-colemak-layout
+ %meow-colemak-dh-layout))
+
+(define %meow-programmer-dvorak-layout
+ `((defun meow-setup ()
+ (setq meow-cheatsheet-layout meow-cheatsheet-layout-dvp)
+ (meow-leader-define-key
+ '("?" . meow-cheatsheet))
+ (meow-motion-overwrite-define-key
+ ;; custom keybinding for motion state
+ '("<escape>" . ignore))
+ (meow-normal-define-key
+ '("?" . meow-cheatsheet)
+ '("*" . meow-expand-0)
+ '("=" . meow-expand-9)
+ '("!" . meow-expand-8)
+ '("[" . meow-expand-7)
+ '("]" . meow-expand-6)
+ '("{" . meow-expand-5)
+ '("+" . meow-expand-4)
+ '("}" . meow-expand-3)
+ '(")" . meow-expand-2)
+ '("(" . meow-expand-1)
+ '("1" . digit-argument)
+ '("2" . digit-argument)
+ '("3" . digit-argument)
+ '("4" . digit-argument)
+ '("5" . digit-argument)
+ '("6" . digit-argument)
+ '("7" . digit-argument)
+ '("8" . digit-argument)
+ '("9" . digit-argument)
+ '("0" . digit-argument)
+ '("-" . 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-line)
+ '("E" . meow-goto-line)
+ '("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-join)
+ '("k" . meow-kill)
+ '("l" . meow-till)
+ '("m" . meow-mark-word)
+ '("M" . meow-mark-symbol)
+ '("n" . meow-next)
+ '("N" . meow-next-expand)
+ '("o" . meow-block)
+ '("O" . meow-to-block)
+ '("p" . meow-prev)
+ '("P" . meow-prev-expand)
+ '("q" . meow-quit)
+ '("r" . meow-replace)
+ '("R" . meow-swap-grab)
+ '("s" . meow-search)
+ '("t" . meow-right)
+ '("T" . meow-right-expand)
+ '("u" . meow-undo)
+ '("U" . meow-undo-in-selection)
+ '("v" . meow-visit)
+ '("w" . meow-next-word)
+ '("W" . meow-next-symbol)
+ '("x" . meow-save)
+ '("X" . meow-sync-grab)
+ '("y" . meow-yank)
+ '("z" . meow-pop-selection)
+ '("'" . repeat)
+ '("<escape>" . ignore)))))
+
+(define* (make-colemak-layout
+ #:key
+ (use-mod-dh? #f))
+ `((defun meow-setup ()
+ (setq meow-cheatsheet-layout
+ ,@(if use-mod-dh?
+ '((setq meow-cheatsheet-layout 'meow-cheatsheet-layout-colemak-dh))
+ '((setq meow-cheatsheet-layout 'meow-cheatsheet-layout-colemak-dh))))
+ (meow-motion-overwrite-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)
+ ;; To execute the originally e in MOTION state, use SPC e.
+ '("e" . "H-e")
+ '("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-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)
+ '("," . meow-inner-of-thing)
+ '("." . meow-bounds-of-thing)
+ '("[" . meow-beginning-of-thing)
+ '("]" . meow-end-of-thing)
+ '("/" . meow-visit)
+ '("a" . meow-append)
+ '("A" . meow-open-below)
+ '("b" . meow-back-word)
+ '("B" . meow-back-symbol)
+ '("c" . meow-change)
+ '("d" . meow-delete)
+ '("e" . meow-prev)
+ '("E" . meow-prev-expand)
+ '("f" . meow-find)
+ '("g" . meow-cancel-selection)
+ '("G" . meow-grab)
+ '("h" . meow-left)
+ '("H" . meow-left-expand)
+ '("i" . meow-right)
+ '("I" . meow-right-expand)
+ '("j" . meow-join)
+ '("k" . meow-kill)
+ '("l" . meow-line)
+ '("L" . meow-goto-line)
+ '("m" . meow-mark-word)
+ '("M" . meow-mark-symbol)
+ '("n" . meow-next)
+ '("N" . meow-next-expand)
+ '("o" . meow-block)
+ '("O" . meow-to-block)
+ '("p" . meow-yank)
+ '("q" . meow-quit)
+ '("r" . meow-replace)
+ '("s" . meow-insert)
+ '("S" . meow-open-above)
+ '("t" . meow-till)
+ '("u" . meow-undo)
+ '("U" . meow-undo-in-selection)
+ '("v" . meow-search)
+ '("w" . meow-next-word)
+ '("W" . meow-next-symbol)
+ '("x" . meow-delete)
+ '("X" . meow-backward-delete)
+ '("y" . meow-save)
+ '("z" . meow-pop-selection)
+ '("'" . repeat)
+ '("<escape>" . ignore)))))
+
+(define %meow-colemak-layout (make-colemak-layout))
+
+;; https://colemakmods.github.io/mod-dh/
+(define %meow-colemak-dh-layout
+ (make-colemak-layout #:use-mod-dh? #t))
+
+(define %meow-qwerty-layout
+ `((defun meow-setup ()
+ (setq meow-cheatsheet-layout meow-cheatsheet-layout-qwerty)
+ (meow-motion-overwrite-define-key
+ '("j" . meow-next)
+ '("k" . meow-prev)
+ '("<escape>" . ignore))
+ (meow-leader-define-key
+ ;; SPC j/k will run the original command in MOTION state.
+ '("j" . "H-j")
+ '("k" . "H-k")
+ ;; 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)
+ '("t" . meow-till)
+ '("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)
+ '("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)
+ '("<escape>" . ignore)))))
--
2.46.0
On 2024-10-22 21:30, jgart wrote:
> ---
>
> Here is finally feature-emacs-meow ;()
>
> WDYT
>
> all best,
>
> jgart
>
> https://whereis.xn--q9jyb4c/
>
> src/rde/features/emacs-xyz.scm | 45 +++
> .../features/emacs/meow-keyboard-layouts.scm | 268 ++++++++++++++++++
> 2 files changed, 313 insertions(+)
> create mode 100644 src/rde/features/emacs/meow-keyboard-layouts.scm
>
> diff --git a/src/rde/features/emacs-xyz.scm b/src/rde/features/emacs-xyz.scm
> index 1229ae2c..83e78850 100644
> --- a/src/rde/features/emacs-xyz.scm
> +++ b/src/rde/features/emacs-xyz.scm
> @@ -26,6 +26,7 @@
> #:use-module (rde features)
> #:use-module (rde features predicates)
> #:use-module (rde features emacs)
> + #:use-module (rde features emacs meow-keyboard-layouts)
> #:use-module (rde features fontutils)
>
> #:use-module (gnu home services)
> @@ -99,6 +100,9 @@
> feature-emacs-xref
> feature-emacs-treebundel
>
> + ;; Editing
> + feature-emacs-meow
> +
I think meow deserves it's own module, so layouts, feature and all
related stuff can be defined in it.
> ;; Reading
> feature-emacs-pdf-tools
> feature-emacs-nov-el
> @@ -3600,6 +3604,47 @@ and references in your programs."
> (values `((,f-name . #t)))
> (home-services-getter get-home-services)))
>
> +;;;
> +;;; Editing.
> +;;;
> +
> +(define* (feature-emacs-meow
> + #:key
> + (emacs-meow emacs-meow)
> + (meow-keyboard-layout %meow-qwerty-layout)
> + (additional-meow-el '())
> + (additional-elisp-packages '()))
Additional el and packages are not needed, ideally we have to expose via
RDE values another service-type to extend, so any other feature or user
can contribute to it.
https://git.sr.ht/~abcdw/rde/tree/11fb136c/src/rde/features/emacs-xyz.scm#L828
> + "Configure Meow for Emacs."
> + (ensure-pred file-like? emacs-meow)
> + (ensure-pred elisp-config? meow-keyboard-layout)
> + (ensure-pred list-of-elisp-packages? additional-elisp-packages)
> +
> + (define emacs-f-name 'meow)
> + (define f-name (symbol-append 'emacs- emacs-f-name))
> +
> + (define (get-home-services config)
> + (list
> + (rde-elisp-configuration-service
> + emacs-f-name
> + config
> + `(,@meow-keyboard-layout
> + (require 'meow)
Package should provide autoloads, or we can create our own if it doesn't
and use them to initialize package.
> + (meow-setup)
This should be done in eval-after-load to allow lazy-loading.
> + (meow-global-mode 1)
This one should be done in after-init-hook to reduce startup time. Like this:
https://git.sr.ht/~abcdw/rde/tree/11fb136c/src/rde/features/keyboard.scm#L146
> + ,@additional-meow-el)
> +
> + #:elisp-packages (cons emacs-meow additional-elisp-packages)
> + #:authors '("jgart <jgart@dismail.de>")
> + #:summary "\
> +Yet another modal editing on Emacs."
> + #:commentary "\
> +Meow configuration with support for various layouts.")))
> +
> + (feature
> + (name f-name)
> + (values `((,f-name . ,emacs-meow)))
> + (home-services-getter get-home-services)))
> +
>
> ;;;
> ;;; Reading.
> diff --git a/src/rde/features/emacs/meow-keyboard-layouts.scm b/src/rde/features/emacs/meow-keyboard-layouts.scm
> new file mode 100644
> index 00000000..bdf9bb4c
> --- /dev/null
> +++ b/src/rde/features/emacs/meow-keyboard-layouts.scm
> @@ -0,0 +1,268 @@
> +(define-module (rde features emacs meow-keyboard-layouts)
> + #:export (%meow-programmer-dvorak-layout
> + %meow-dvorak-simplified-layout
> + %meow-qwerty-layout
> + %meow-colemak-layout
> + %meow-colemak-dh-layout))
% prefix is intended for private variables, so if it's supposed to be
used by end user, it's better to remove the % from the name.
I missused this prefix a couple times in RDE, but I try to get rid of
it, when I encounter it in codebase.
> +
> +(define %meow-programmer-dvorak-layout
> + `((defun meow-setup ()
> + (setq meow-cheatsheet-layout meow-cheatsheet-layout-dvp)
> + (meow-leader-define-key
> + '("?" . meow-cheatsheet))
> + (meow-motion-overwrite-define-key
> + ;; custom keybinding for motion state
> + '("<escape>" . ignore))
> + (meow-normal-define-key
> + '("?" . meow-cheatsheet)
> + '("*" . meow-expand-0)
> + '("=" . meow-expand-9)
> + '("!" . meow-expand-8)
> + '("[" . meow-expand-7)
> + '("]" . meow-expand-6)
> + '("{" . meow-expand-5)
> + '("+" . meow-expand-4)
> + '("}" . meow-expand-3)
> + '(")" . meow-expand-2)
> + '("(" . meow-expand-1)
> + '("1" . digit-argument)
> + '("2" . digit-argument)
> + '("3" . digit-argument)
> + '("4" . digit-argument)
> + '("5" . digit-argument)
> + '("6" . digit-argument)
> + '("7" . digit-argument)
> + '("8" . digit-argument)
> + '("9" . digit-argument)
> + '("0" . digit-argument)
> + '("-" . 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-line)
> + '("E" . meow-goto-line)
> + '("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-join)
> + '("k" . meow-kill)
> + '("l" . meow-till)
> + '("m" . meow-mark-word)
> + '("M" . meow-mark-symbol)
> + '("n" . meow-next)
> + '("N" . meow-next-expand)
> + '("o" . meow-block)
> + '("O" . meow-to-block)
> + '("p" . meow-prev)
> + '("P" . meow-prev-expand)
> + '("q" . meow-quit)
> + '("r" . meow-replace)
> + '("R" . meow-swap-grab)
> + '("s" . meow-search)
> + '("t" . meow-right)
> + '("T" . meow-right-expand)
> + '("u" . meow-undo)
> + '("U" . meow-undo-in-selection)
> + '("v" . meow-visit)
> + '("w" . meow-next-word)
> + '("W" . meow-next-symbol)
> + '("x" . meow-save)
> + '("X" . meow-sync-grab)
> + '("y" . meow-yank)
> + '("z" . meow-pop-selection)
> + '("'" . repeat)
> + '("<escape>" . ignore)))))
> +
> +(define* (make-colemak-layout
> + #:key
> + (use-mod-dh? #f))
> + `((defun meow-setup ()
> + (setq meow-cheatsheet-layout
> + ,@(if use-mod-dh?
> + '((setq meow-cheatsheet-layout 'meow-cheatsheet-layout-colemak-dh))
> + '((setq meow-cheatsheet-layout 'meow-cheatsheet-layout-colemak-dh))))
> + (meow-motion-overwrite-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)
> + ;; To execute the originally e in MOTION state, use SPC e.
> + '("e" . "H-e")
> + '("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-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)
> + '("," . meow-inner-of-thing)
> + '("." . meow-bounds-of-thing)
> + '("[" . meow-beginning-of-thing)
> + '("]" . meow-end-of-thing)
> + '("/" . meow-visit)
> + '("a" . meow-append)
> + '("A" . meow-open-below)
> + '("b" . meow-back-word)
> + '("B" . meow-back-symbol)
> + '("c" . meow-change)
> + '("d" . meow-delete)
> + '("e" . meow-prev)
> + '("E" . meow-prev-expand)
> + '("f" . meow-find)
> + '("g" . meow-cancel-selection)
> + '("G" . meow-grab)
> + '("h" . meow-left)
> + '("H" . meow-left-expand)
> + '("i" . meow-right)
> + '("I" . meow-right-expand)
> + '("j" . meow-join)
> + '("k" . meow-kill)
> + '("l" . meow-line)
> + '("L" . meow-goto-line)
> + '("m" . meow-mark-word)
> + '("M" . meow-mark-symbol)
> + '("n" . meow-next)
> + '("N" . meow-next-expand)
> + '("o" . meow-block)
> + '("O" . meow-to-block)
> + '("p" . meow-yank)
> + '("q" . meow-quit)
> + '("r" . meow-replace)
> + '("s" . meow-insert)
> + '("S" . meow-open-above)
> + '("t" . meow-till)
> + '("u" . meow-undo)
> + '("U" . meow-undo-in-selection)
> + '("v" . meow-search)
> + '("w" . meow-next-word)
> + '("W" . meow-next-symbol)
> + '("x" . meow-delete)
> + '("X" . meow-backward-delete)
> + '("y" . meow-save)
> + '("z" . meow-pop-selection)
> + '("'" . repeat)
> + '("<escape>" . ignore)))))
> +
> +(define %meow-colemak-layout (make-colemak-layout))
> +
> +;; https://colemakmods.github.io/mod-dh/
> +(define %meow-colemak-dh-layout
> + (make-colemak-layout #:use-mod-dh? #t))
> +
> +(define %meow-qwerty-layout
> + `((defun meow-setup ()
> + (setq meow-cheatsheet-layout meow-cheatsheet-layout-qwerty)
> + (meow-motion-overwrite-define-key
> + '("j" . meow-next)
> + '("k" . meow-prev)
> + '("<escape>" . ignore))
> + (meow-leader-define-key
> + ;; SPC j/k will run the original command in MOTION state.
> + '("j" . "H-j")
> + '("k" . "H-k")
> + ;; 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)
> + '("t" . meow-till)
> + '("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)
> + '("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)
> + '("<escape>" . ignore)))))
Overall looks good to me! Thank you for working on it.
Marking as NEEDS_REVISION.
--
Best regards,
Andrew Tropin