emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

feature/project-switching c8cca68 04/15: Use an alist instead of a keyma


From: Simen Heggestøyl
Subject: feature/project-switching c8cca68 04/15: Use an alist instead of a keymap
Date: Tue, 26 May 2020 11:43:18 -0400 (EDT)

branch: feature/project-switching
commit c8cca68751ac3ebd702ab809bc2bb2cc352a190e
Author: Dmitry Gutov <address@hidden>
Commit: Simen Heggestøyl <address@hidden>

    Use an alist instead of a keymap
    
    * lisp/progmodes/project.el:
    (project--switch-alist): New variable to use instead of
    project-switch-keymap, which remove.  Update all references.
---
 lisp/progmodes/project.el | 24 +++++++++++++-----------
 1 file changed, 13 insertions(+), 11 deletions(-)

diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el
index 3e943ca..7209246 100644
--- a/lisp/progmodes/project.el
+++ b/lisp/progmodes/project.el
@@ -776,10 +776,10 @@ It's also possible to enter an arbitrary directory."
 
 ;;; Project switching
 
-(defvar project-switch-keymap (make-sparse-keymap)
-  "Keymap of commands for \"switching\" to a project.
+(defvar project--switch-alist nil
+  "Association list mapping characters to commands.
 Used by `project-switch-project' to construct a dispatch menu of
-commands available for \"switching\" to another project.")
+commands available upon \"switching\" to another project.")
 
 ;;;###autoload
 (defun project-dired ()
@@ -802,7 +802,8 @@ commands available for \"switching\" to another project.")
 SYMBOL should stand for a function to be invoked by the key KEY.
 LABEL is used to distinguish the function in the dispatch menu."
   (function-put symbol 'dispatch-label label)
-  (define-key project-switch-keymap key symbol))
+  ;; XXX: It could host the label as well now.
+  (add-to-list 'project--switch-alist `(,key . ,symbol)))
 
 (project-add-switch-command
  'project-find-file "f" "Find file")
@@ -816,12 +817,13 @@ LABEL is used to distinguish the function in the dispatch 
menu."
 (defun project--keymap-prompt ()
   "Return a prompt for the project swithing dispatch menu."
   (let ((prompt ""))
-    (map-keymap
-     (lambda (event value)
-       (let ((key (propertize (key-description `(,event)) 'face 'bold))
-             (desc (function-get value 'dispatch-label)))
+    (mapc
+     (lambda (entry)
+       (pcase-let* ((`(,char . ,symbol) entry)
+                    (key (propertize (key-description `(,char)) 'face 'bold))
+                    (desc (function-get symbol 'dispatch-label)))
          (setq prompt (concat (format "[%s] %s  " key desc) prompt))))
-     project-switch-keymap)
+     project--switch-alist)
     prompt))
 
 ;;;###autoload
@@ -834,12 +836,12 @@ and presented in a dispatch menu."
          (choice nil))
     (while (not (and choice
                      (or (equal choice (kbd "C-g"))
-                         (lookup-key project-switch-keymap choice))))
+                         (assoc choice project--switch-alist))))
       (setq choice (read-key-sequence (project--keymap-prompt))))
     (if (equal choice (kbd "C-g"))
         (message "Quit")
       (let ((default-directory dir))
-        (funcall (lookup-key project-switch-keymap choice))))))
+        (funcall (assoc-default choice project--switch-alist))))))
 
 (provide 'project)
 ;;; project.el ends here



reply via email to

[Prev in Thread] Current Thread [Next in Thread]