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

Reply via email to