branch: externals/greader
commit d7c9d8e99c8fdf9f6bcb54fae36e505455041f71
Author: Michelangelo Rodriguez <[email protected]>
Commit: Michelangelo Rodriguez <[email protected]>
Refactor: Make keymap prefix customizable
This commit refactors the keybinding system to allow for greater user
customization.
The hardcoded "C-r" prefix has been replaced with a new customizable
variable, `greader-keymap-prefix`. Users can now set their preferred keybinding
prefix in their configuration.
Key changes:
- A new `greader-keymap-prefix` customizable variable is introduced.
- Keymaps have been reorganized into a hierarchical structure using prefix
maps (`greader-prefix-keymap`, `greader-dict-prefix-map`).
- A new interactive function, `greader-set-map-prefix`, allows changing the
prefix for the current session.
- Dictionary keybindings are now loaded into the main prefix map via
`eval-after-load`, improving modularity.
---
greader-dict.el | 42 +++++++++++++++++-------------------------
greader.el | 39 +++++++++++++++++++++++++++++++--------
2 files changed, 48 insertions(+), 33 deletions(-)
diff --git a/greader-dict.el b/greader-dict.el
index e6989b4db0..65bba11c54 100644
--- a/greader-dict.el
+++ b/greader-dict.el
@@ -181,17 +181,24 @@
;; We use this variable to know if greader-dictionary is saved after
;; the last modification.
(defvar-local greader-dict--saved-flag t)
+(defvar greader-dict-prefix-map (make-sparse-keymap)
+ "Keymap for `greader-dict' commands.")
-;; greader-dict-mode.
-(defvar-keymap greader-dict-mode-map
- :doc "keymap for `greader-dict-mode'."
- "C-r d i" #'greader-dict-info
- "C-r d a" #'greader-dict-add-entry
- "C-r d k" #'greader-dict-remove-entry
- "C-r d c" #'greader-dict-change-dictionary
- "C-r d l" #'greader-dict-pronounce-in-other-language
- "C-r d m" #'greader-dict-modify-key
- "C-r d s" #'greader-dict-save)
+(defvar greader-dict-filters-prefix-map (make-sparse-keymap)
+ "Keymap for `greader-dict' filters commands.")
+
+(define-key greader-dict-prefix-map "i" #'greader-dict-info)
+(define-key greader-dict-prefix-map "a" #'greader-dict-add-entry)
+(define-key greader-dict-prefix-map "k" #'greader-dict-remove-entry)
+(define-key greader-dict-prefix-map "c" #'greader-dict-change-dictionary)
+(define-key greader-dict-prefix-map "l"
#'greader-dict-pronounce-in-other-language)
+(define-key greader-dict-prefix-map "m" #'greader-dict-modify-key)
+(define-key greader-dict-prefix-map "s" #'greader-dict-save)
+(define-key greader-dict-prefix-map "f" greader-dict-filters-prefix-map)
+
+(define-key greader-dict-filters-prefix-map "a" #'greader-dict-filter-add)
+(define-key greader-dict-filters-prefix-map "m" #'greader-dict-filter-modify)
+(define-key greader-dict-filters-prefix-map "k" #'greader-dict-filter-remove)
(defvar greader-dict--type-file-alternatives '(buffer mode global))
@@ -227,20 +234,6 @@ buffer."
greader-dict--current-reading-buffer))
,@body))
-(defvar-keymap greader-dict-filter-map
- :doc "key bindings for greader-dict filter feature."
- "C-r d f a" #'greader-dict-filter-add
- "C-r d f m" #'greader-dict-filter-modify
- "C-r r" #'isearch-backward
- "C-r d f k" #'greader-dict-filter-remove)
-
-(defvar-keymap greader-dict-filter-map
- :doc "key bindings for greader-dict filter feature."
- "C-r d f a" #'greader-dict-filter-add
- "C-r d f m" #'greader-dict-filter-modify
- "C-r r" #'isearch-backward
- "C-r d f k" #'greader-dict-filter-remove)
-
;; filters.
;; filters allow users to define arbitrary regexps to be replaced
;; either with empty strings or by another string.
@@ -270,7 +263,6 @@ You can use the usual `\\\\' expressions, shy groups and
all the power
of regexps.
If you are interested in how to write a regexp please consult the info
node `(emacs) Regexps'."
- :keymap greader-dict-filter-map
:lighter " gr-filters"
(when greader-dict-toggle-filters
(setq greader-filters (make-hash-table :test 'ignore-case))
diff --git a/greader.el b/greader.el
index ae08144cc6..7a4fde5a4d 100644
--- a/greader.el
+++ b/greader.el
@@ -252,16 +252,27 @@ if set to t, when you call function `greader-read', that
function sets a
(setq greader-reading-mode nil))
(define-obsolete-variable-alias 'greader-map 'greader-mode-map "2022")
+
+(defcustom greader-keymap-prefix "C-r"
+ "The prefix for `greader-mode' commands."
+ :type 'string
+ :group 'greader)
+
+(defvar greader-prefix-keymap
+ (let ((map (make-sparse-keymap)))
+ (define-key map (kbd "s") #'greader-toggle-tired-mode)
+ (define-key map (kbd "r") #'isearch-backward)
+ (define-key map (kbd "SPC") #'greader-read)
+ (define-key map (kbd "l") #'greader-set-language)
+ (define-key map (kbd "t") #'greader-toggle-timer)
+ (define-key map (kbd "f") #'greader-get-attributes)
+ (define-key map (kbd "b") #'greader-change-backend)
+ (define-key map (kbd "c") #'greader-compile-at-point)
+ map))
+
(defvar greader-mode-map
(let ((map (make-sparse-keymap)))
- (define-key map (kbd "C-r s") #'greader-toggle-tired-mode)
- (define-key map (kbd "C-r r") #'isearch-backward)
- (define-key map (kbd "C-r SPC") #'greader-read)
- (define-key map (kbd "C-r l") #'greader-set-language)
- (define-key map (kbd "C-r t") #'greader-toggle-timer)
- (define-key map (kbd "C-r f") #'greader-get-attributes)
- (define-key map (kbd "C-r b") #'greader-change-backend)
- (define-key map (kbd "C-r c") #'greader-compile-at-point)
+ (define-key map (kbd greader-keymap-prefix) greader-prefix-keymap)
map))
(defvar greader-reading-map
@@ -274,6 +285,9 @@ if set to t, when you call function `greader-read', that
function sets a
(define-key map (kbd "<left>") #'greader-backward)
(define-key map (kbd "<right>") #'greader-forward)
map))
+
+(eval-after-load 'greader-dict
+ '(define-key greader-prefix-keymap "d" greader-dict-prefix-map))
(defvar greader-queue-mode)
;;;###autoload
(define-minor-mode greader-mode
@@ -1858,5 +1872,14 @@ to the next sentence, or when you stop the reading."
+(defun greader-set-map-prefix (keys)
+ "Set `greader-keymap-prefix' to KEYS for the current session."
+ (interactive "kSet greader prefix to: ")
+ (let ((key-str (key-description keys)))
+ (define-key greader-mode-map (kbd greader-keymap-prefix) nil)
+ (setq greader-keymap-prefix key-str)
+ (define-key greader-mode-map (kbd greader-keymap-prefix)
greader-prefix-keymap)
+ (message "greader prefix set to %s for the current session." key-str)))
+
(provide 'greader)
;;; greader.el ends here