由于我的第一个答案并没有直接给你你想要的,我想我会想出一个真正的解决方案。这就是我所拥有的:
(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
在我的情况下,我不想丢失 b/c M-x
)。然后,打开两个窗口,每个窗口显示不同的缓冲区(比如 A 和 B):
- 从显示缓冲区 A 的窗口:
F10 isearch-for
- 从 minibuffer 切换到显示 A 的窗口:
C-x o
- 从显示 A 的窗口切换到显示 B 的窗口:
C-x o
- “重新托管”来自缓冲区 B 的命令:
F10
- 现在回到迷你缓冲区,完成命令
ward RET
当我开始输入搜索词时,搜索应用到缓冲区 B。
这只会替换M-x
功能,而不是从 调用的命令M-x
。此外,此版本不支持前缀参数。
希望这是你想要的。