Поскольку мой первый ответ напрямую не дает вам то, что вы хотите, я подумал, что нашел бы реальное решение. Вот что у меня есть:
(defvar my-execute-extended-command-source-buffer nil
"var holding the buffer to which the extended-execute-command should apply")
(defvar in-my-execute-extended-command nil
"internal use - indicates whether we're in a 'recursive edit' of sorts")
(defun my-execute-extended-command (command)
"home-grown version of execute-extended-command that supports re-hosting the buffer"
(interactive (list (if in-my-execute-extended-command
nil
(let ((in-my-execute-extended-command t))
(setq my-execute-extended-command-source-buffer (current-buffer))
(completing-read "My-x " obarray 'commandp t nil 'extended-command-history nil nil)))))
(if in-my-execute-extended-command
(progn (setq my-execute-extended-command-source-buffer (current-buffer))
(select-window (minibuffer-window)))
(switch-to-buffer my-execute-extended-command-source-buffer)
(call-interactively (symbol-function (intern command)))))
Я проверял это таким образом. Я привязал его к ключу (F10
в моем случае б / к я не хотел потерять M-x
). Затем с двумя открытыми окнами, каждый из которых показывает свой буфер (скажем, A и B):
- Из окна, показывающего буфер A:
F10 isearch-for
- Переключение из минибуфера в окно с отображением A:
C-x o
- Переключиться из окна, отображающего A, в окно, отображающее B:
C-x o
- "повторно разместить" команду из буфера B:
F10
- Теперь вернитесь в минибуфер, завершите команду
ward RET
Когда я начал вводить поисковый запрос, поиск был применен к буферу B.
Это заменяет только функциональность M-x
, а не команды, вызванные из M-x
. Кроме того, эта версия не поддерживает префиксный аргумент.
Надеюсь, это то, что вы хотите.