From 015cf7824ea511180329dabcb67c533661da3fff Mon Sep 17 00:00:00 2001 From: Lars Ingebrigtsen Date: Tue, 26 Jul 2022 15:21:28 +0200 Subject: [PATCH] Don't bind `M-X' when doing general completion * lisp/minibuffer.el (minibuffer-local-must-match-map): Remove the M-X binding here, because it's nonsensical outside read-extended-command (bug#56741). * lisp/simple.el (read-extended-command-mode-map) (read-extended-command-mode): New minor mode to bind `M-X' in read-extended-command. (read-extended-command-1): Use it. --- lisp/minibuffer.el | 1 - lisp/simple.el | 15 ++++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index d139e094eb2..bdf6d852a95 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el @@ -2760,7 +2760,6 @@ The completion method is determined by `completion-at-point-functions'." (defvar-keymap minibuffer-local-must-match-map :doc "Local keymap for minibuffer input with completion, for exact match." :parent minibuffer-local-completion-map - "M-X" #'execute-extended-command-cycle "RET" #'minibuffer-complete-and-exit "C-j" #'minibuffer-complete-and-exit) diff --git a/lisp/simple.el b/lisp/simple.el index 5443d961e13..e4fdb610764 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -2229,9 +2229,20 @@ See `extended-command-versions'." "Alist of prompts and what the extended command predicate should be. This is used by the \\\\[execute-extended-command-cycle] command when reading an extended command.") +(defvar-keymap read-extended-command-mode-map + :doc "Local keymap added to the current map when reading an extended command." + "M-X" #'execute-extended-command-cycle) + +(define-minor-mode read-extended-command-mode + "Minor mode when doing completion in `read-extended-command'.") + (defun read-extended-command (&optional prompt) "Read command name to invoke in `execute-extended-command'. -This function uses the `read-extended-command-predicate' user option." +This function uses the `read-extended-command-predicate' user +option. + +When reading the command name, the `read-extended-command-mode' +minor mode is activated." (let ((default-predicate read-extended-command-predicate) (read-extended-command-predicate read-extended-command-predicate) already-typed ret) @@ -2270,6 +2281,8 @@ This function uses the `read-extended-command-predicate' user option." (setq execute-extended-command--last-typed (minibuffer-contents))) nil 'local) + ;; This is so that we define the `M-X' toggling command. + (read-extended-command-mode) (setq-local minibuffer-default-add-function (lambda () ;; Get a command name at point in the original buffer -- 2.39.2