Como mi primera respuesta no le da directamente lo que desea, pensé que encontraría una solución real. Esto es lo que tengo:
(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)))))
Lo he probado de esta manera. Lo até a una llave (F10
en mi caso b/c No quería perder M-x
). Luego, con dos ventanas abiertas, cada una mostrando un buffer diferente (por ejemplo A y B):
- Desde la ventana que muestra el tampón A:
F10 isearch-for
- Cambiar de minibuffer a la ventana que muestra A:
C-x o
- interruptor de la ventana Una muestra de que la muestra B:
C-x o
- "re-host" el comando de tampón B:
F10
- Ahora, de vuelta en el minibúfer, terminar el comando
ward RET
Cuando comencé a escribir un término de búsqueda, la búsqueda se aplicaba al buffer B.
Esto solo reemplaza la funcionalidad M-x
, no los comandos invocados desde M-x
. Además, esta versión no admite el argumento de prefijo.
Espero que esto es lo que desea.
Otra forma de verlo es que es el flujo de trabajo anterior que está roto, no emacs. G-g fuera del minibúfer antes de cambiar los buffers para establecer una nueva región o lo que sea, en lugar de tratar de recurrir (como lo hace) – simon
¡Hmm, parece que es más hostil con el usuario que emacs en este caso! Depende de la aplicación acomodar el flujo de trabajo de los usuarios, de lo contrario, ¿por qué implementar deshacer? Y no, esto no es recursividad en absoluto. – EoghanM
Aunque aprecio que las prácticas de diseño modernas eviten la modalidad, emacs fue diseñado en un pasado lejano y tiene modos en abundancia. Si la modalidad de emacs es problemática, francamente recomendaría no usarla. Emacs * es * usuario hostil. Personalmente, lo superé y aprendí a usarlo y encontré mucha potencia disponible, pero eso fue cuando emacs fue el rey de la percha. Estos días rara vez me sumerjo en él. – Godeke