[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#41890: 28.0.50; [PATCH]: Add bindings for project.el
From: |
Philip K. |
Subject: |
bug#41890: 28.0.50; [PATCH]: Add bindings for project.el |
Date: |
Thu, 18 Jun 2020 20:50:46 +0200 |
Thanks, the fixed patch is below.
Another minor change to the last patch is settign
project-switch-use-entire-map to nil, so that by default not all keys in
project-prefix-map are usable, as to avoid the potential for confusion
mentioned before.
--
Philip K.
>From 8418074a6f73ad5dcafe1fbcbfc847155dc4c485 Mon Sep 17 00:00:00 2001
From: Philip K <philip@warpmail.net>
Date: Thu, 18 Jun 2020 16:06:19 +0200
Subject: [PATCH] Use same keys in project-switch-project as in
project-prefix-map
* project.el (project-switch-commands): Convert to user option and
change structure.
(project-switch-use-entire-map): Add new option.
(project--keymap-prompt): Adapt to change in project-switch-commands.
(project-switch-project): Use project-prefix-map instead of
project-switch-commands to query valid commands.
---
lisp/progmodes/project.el | 63 +++++++++++++++++++++++++--------------
1 file changed, 41 insertions(+), 22 deletions(-)
diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el
index e24d81c1b4..cf214719e5 100644
--- a/lisp/progmodes/project.el
+++ b/lisp/progmodes/project.el
@@ -900,27 +900,46 @@ project-prompt-project-dir
;;; Project switching
;;;###autoload
-(defvar project-switch-commands
- '((?f "Find file" project-find-file)
- (?g "Find regexp" project-find-regexp)
- (?d "Dired" project-dired)
- (?v "VC-Dir" project-vc-dir)
- (?e "Eshell" project-eshell))
- "Alist mapping keys to project switching menu entries.
+(defcustom project-switch-commands
+ '((project-find-file . "Find file")
+ (project-find-regexp . "Find regexp")
+ (project-dired . "Dired")
+ (project-vc-dir . "VC-Dir")
+ (project-shell . "Shell")
+ (project-eshell . "Eshell"))
+ "Alist mapping commands to descriptions.
Used by `project-switch-project' to construct a dispatch menu of
commands available upon \"switching\" to another project.
-Each element looks like (KEY LABEL COMMAND), where COMMAND is the
-command to run when KEY is pressed. LABEL is used to distinguish
-the choice in the dispatch menu.")
+Each element looks like (COMMAND . LABEL), where COMMAND should be
+bound in `project-prefix-map'. LABEL is used to distinguish the
+choice in the dispatch menu."
+ :type '(alist :key-type function
+ :value-type string)
+ :options (mapcan (lambda (ent)
+ (and (commandp (cdr ent))
+ (list (cdr ent))))
+ (cdr project-prefix-map))
+ :version "28.1")
+
+(defcustom project-switch-use-entire-map nil
+ "Make `project-switch-project' use entire `project-prefix-map'.
+If nil, `project-switch-project' will only recognize commands
+listed in `project-switch-commands', and signal an error when
+others are invoked. Otherwise, all keys in
+`project-switch-commands' are legal even if they aren't listed
+in the minibuffer."
+ :type 'bool
+ :version "28.1")
(defun project--keymap-prompt ()
"Return a prompt for the project swithing dispatch menu."
(mapconcat
- (pcase-lambda (`(,key ,label))
- (format "[%s] %s"
- (propertize (key-description `(,key)) 'face 'bold)
- label))
+ (pcase-lambda (`(,cmd . ,label))
+ (let ((key (where-is-internal cmd project-prefix-map t)))
+ (format "[%s] %s"
+ (propertize (key-description key) 'face 'bold)
+ label)))
project-switch-commands
" "))
@@ -930,14 +949,14 @@ project-switch-project
The available commands are picked from `project-switch-commands'
and presented in a dispatch menu."
(interactive)
- (let ((dir (project-prompt-project-dir))
- (choice nil))
- (while (not choice)
- (setq choice (assq (read-event (project--keymap-prompt))
- project-switch-commands)))
- (let ((default-directory dir)
- (project-current-inhibit-prompt t))
- (call-interactively (nth 2 choice)))))
+ (let* ((default-directory (project-prompt-project-dir))
+ (project-current-inhibit-prompt t)
+ (key (read-key-sequence-vector (project--keymap-prompt)))
+ (cmd (lookup-key project-prefix-map key)))
+ (if (and cmd (or project-switch-use-entire-map
+ (assq cmd project-switch-commands)))
+ (call-interactively cmd)
+ (user-error "%s is undefined" (key-description key)))))
(provide 'project)
;;; project.el ends here
--
2.20.1
- bug#41890: 28.0.50; [PATCH]: Add bindings for project.el, (continued)
- bug#41890: 28.0.50; [PATCH]: Add bindings for project.el, Stefan Monnier, 2020/06/18
- bug#41890: 28.0.50; [PATCH]: Add bindings for project.el, Eli Zaretskii, 2020/06/18
- bug#41890: 28.0.50; [PATCH]: Add bindings for project.el, Dmitry Gutov, 2020/06/18
- bug#41890: 28.0.50; [PATCH]: Add bindings for project.el, Eli Zaretskii, 2020/06/18
- bug#41890: 28.0.50; [PATCH]: Add bindings for project.el, Dmitry Gutov, 2020/06/18
- bug#41890: 28.0.50; [PATCH]: Add bindings for project.el, Eli Zaretskii, 2020/06/18
- bug#41890: 28.0.50; [PATCH]: Add bindings for project.el, Dmitry Gutov, 2020/06/18
- bug#41890: 28.0.50; [PATCH]: Add bindings for project.el, Eli Zaretskii, 2020/06/19
Message not available
- bug#41890: 28.0.50; [PATCH]: Add bindings for project.el, Philip K., 2020/06/18
- bug#41890: 28.0.50; [PATCH]: Add bindings for project.el, Basil L. Contovounesios, 2020/06/18
- bug#41890: 28.0.50; [PATCH]: Add bindings for project.el,
Philip K. <=
- bug#41890: 28.0.50; [PATCH]: Add bindings for project.el, Juri Linkov, 2020/06/18
- bug#41890: 28.0.50; [PATCH]: Add bindings for project.el, Dmitry Gutov, 2020/06/18
- bug#41890: 28.0.50; [PATCH]: Add bindings for project.el, Juri Linkov, 2020/06/18
- bug#41890: 28.0.50; [PATCH]: Add bindings for project.el, Dmitry Gutov, 2020/06/18
- bug#41890: 28.0.50; [PATCH]: Add bindings for project.el, Simen Heggestøyl, 2020/06/19
Message not availablebug#41890: 28.0.50; [PATCH]: Add bindings for project.el, Simen Heggestøyl, 2020/06/19
bug#41890: 28.0.50; [PATCH]: Add bindings for project.el, Philip K., 2020/06/19
bug#41890: 28.0.50; [PATCH]: Add bindings for project.el, Simen Heggestøyl, 2020/06/19
bug#41890: 28.0.50; [PATCH]: Add bindings for project.el, Dmitry Gutov, 2020/06/19