From 1a883296ea0547579b3df5c43666f6b0f0408ead Mon Sep 17 00:00:00 2001 From: ab9986 Date: Fri, 14 Feb 2025 14:31:12 +0800 Subject: [PATCH 1/2] add meow-keypad-capital-letter-add-ctrl whether to enter a capital letter, add ctrol in front of it and change the capital letter to lowercase.input uppercase letter add ctrol before. For example use `SPC x F' to execute `C-x C-f' . --- meow-keypad.el | 17 +++++++++++------ meow-util.el | 4 +++- meow-var.el | 6 ++++++ 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/meow-keypad.el b/meow-keypad.el index f3ebc97..bbf3949 100644 --- a/meow-keypad.el +++ b/meow-keypad.el @@ -186,7 +186,7 @@ Argument CONTROL, non-nils stands for current input is prefixed with Control." (suppress-keymap km t) (map-keymap (lambda (key def) - (when (and (not (member 'control (event-modifiers key))) + (when (and (if meow-keypad-capital-letter-add-ctrl t (not (member 'control (event-modifiers key)))) (not (member key (list meow-keypad-meta-prefix meow-keypad-ctrl-meta-prefix meow-keypad-literal-prefix))) @@ -211,7 +211,7 @@ Argument CONTROL, non-nils stands for current input is prefixed with Control." (suppress-keymap km t) (map-keymap (lambda (key def) - (when (member 'control (event-modifiers key)) + (when (if meow-keypad-capital-letter-add-ctrl t (member 'control (event-modifiers key))) (unless (member (meow--event-key key) ignores) (when def (let ((k (vector (meow--get-event-key key)))) @@ -220,7 +220,7 @@ Argument CONTROL, non-nils stands for current input is prefixed with Control." keymap) (map-keymap (lambda (key def) - (unless (member 'control (event-modifiers key)) + (unless (if meow-keypad-capital-letter-add-ctrl nil (member 'control (event-modifiers key))) (unless (member key ignores) (let ((k (vector (meow--get-event-key key)))) (unless (lookup-key km k) @@ -499,7 +499,11 @@ command when there's one available on current key sequence." meow--keypad-keys) (setq meow--use-literal t)) (meow--keypad-keys - (push (cons 'control key) meow--keypad-keys)) + (if (and meow-keypad-capital-letter-add-ctrl (equal 'control (caar (last meow--keypad-keys)))) + (if (equal (upcase key) key) + (push (cons 'control (downcase key)) meow--keypad-keys) + (push (cons 'literal key) meow--keypad-keys)) + (push (cons 'control key) meow--keypad-keys))) ((alist-get input-event meow-keypad-start-keys) (push (cons 'control (meow--parse-input-event (alist-get input-event meow-keypad-start-keys))) @@ -508,8 +512,9 @@ command when there's one available on current key sequence." (if-let* ((keymap (meow--get-leader-keymap))) (setq meow--keypad-base-keymap keymap) (setq meow--keypad-keys (meow--parse-string-to-keypad-keys meow-keypad-leader-dispatch))) - (push (cons 'literal key) meow--keypad-keys)))) - + (if (and meow-keypad-capital-letter-add-ctrl (equal (upcase key) key)) + (push (cons 'control (downcase key)) meow--keypad-keys) + (push (cons 'literal key) meow--keypad-keys))))) ;; Try execute if the input is valid. (if (or meow--use-literal meow--use-meta diff --git a/meow-util.el b/meow-util.el index 07e7555..1f80aa4 100644 --- a/meow-util.el +++ b/meow-util.el @@ -417,7 +417,9 @@ Looks up the state in meow-replace-state-name-list" (if (and (integerp (event-basic-type e)) (member 'shift (event-modifiers e))) (upcase (event-basic-type e)) - (event-basic-type e))) + (if (and meow-keypad-capital-letter-add-ctrl (string-prefix-p "C-" (key-description (vector e))) (characterp (event-basic-type e))) + (upcase (event-basic-type e)) + (event-basic-type e)))) (defun meow--ensure-visible () (let ((overlays (overlays-at (1- (point)))) diff --git a/meow-var.el b/meow-var.el index 83b569c..a685456 100644 --- a/meow-var.el +++ b/meow-var.el @@ -301,6 +301,12 @@ Nil stands for taking leader keymap from `meow-keymap-alist'." :type '(choice (string :tag "Keys") (variable :tag "Keymap") (const nil))) +(defcustom meow-keypad-capital-letter-add-ctrl nil + "Whether to enter a capital letter, add ctrol in front of it and change + the capital letter to lowercase.input uppercase letter add ctrol before. + For example use `SPC x F' to execute `C-x C-f' ." + :group 'meow + :type 'boolean) (defcustom meow-keypad-meta-prefix ?m "The prefix represent M- in KEYPAD state." From c4d26f702b47ee0bdc61b98288ba07ba1a0dd8fb Mon Sep 17 00:00:00 2001 From: ab9986 Date: Mon, 17 Feb 2025 14:54:27 +0800 Subject: [PATCH 2/2] Fix an issue that the Tab key is displayed as i in the shortcut key prompt menu --- meow-keypad.el | 4 ++-- meow-util.el | 9 +++++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/meow-keypad.el b/meow-keypad.el index bbf3949..2c94d22 100644 --- a/meow-keypad.el +++ b/meow-keypad.el @@ -500,7 +500,7 @@ command when there's one available on current key sequence." (setq meow--use-literal t)) (meow--keypad-keys (if (and meow-keypad-capital-letter-add-ctrl (equal 'control (caar (last meow--keypad-keys)))) - (if (equal (upcase key) key) + (if (and (equal (upcase key) key) (= (length key) 1)) (push (cons 'control (downcase key)) meow--keypad-keys) (push (cons 'literal key) meow--keypad-keys)) (push (cons 'control key) meow--keypad-keys))) @@ -512,7 +512,7 @@ command when there's one available on current key sequence." (if-let* ((keymap (meow--get-leader-keymap))) (setq meow--keypad-base-keymap keymap) (setq meow--keypad-keys (meow--parse-string-to-keypad-keys meow-keypad-leader-dispatch))) - (if (and meow-keypad-capital-letter-add-ctrl (equal (upcase key) key)) + (if (and meow-keypad-capital-letter-add-ctrl (equal (upcase key) key) (= (length key) 1)) (push (cons 'control (downcase key)) meow--keypad-keys) (push (cons 'literal key) meow--keypad-keys))))) ;; Try execute if the input is valid. diff --git a/meow-util.el b/meow-util.el index 1f80aa4..0384d08 100644 --- a/meow-util.el +++ b/meow-util.el @@ -417,9 +417,14 @@ Looks up the state in meow-replace-state-name-list" (if (and (integerp (event-basic-type e)) (member 'shift (event-modifiers e))) (upcase (event-basic-type e)) - (if (and meow-keypad-capital-letter-add-ctrl (string-prefix-p "C-" (key-description (vector e))) (characterp (event-basic-type e))) + (let ((key-des (key-description (vector e)))) + (if (and meow-keypad-capital-letter-add-ctrl (string-prefix-p "C-" key-des) (characterp (event-basic-type e))) (upcase (event-basic-type e)) - (event-basic-type e)))) + (if (string-equal-ignore-case key-des "tab") + key-des + (event-basic-type e) + ) + )))) (defun meow--ensure-visible () (let ((overlays (overlays-at (1- (point))))