Cómo volver a un indicador de minibúfer activo en emacs sin el mouse

36

En emacs, a veces estaré en el medio de encontrar un archivo o cambiar buffers o hacer algo en el minibúfer, y haré clic en otro lugar por alguna razón. Cuando regrese, la única forma de volver a activar el indicador del minibúfer es hacer clic dentro del minibúfer, lo cual es molesto porque es un área delgada. ¿Hay alguna forma de volver a un indicador de minibúfer activo sin usar el mouse?

Ryan C. Thompson
fuente

Respuestas:

25

Esto hará lo que quieras. Enlace a la clave de su elección:

(defun switch-to-minibuffer-window ()
  "switch to minibuffer window (if active)"
  (interactive)
  (when (active-minibuffer-window)
    (select-frame-set-input-focus (window-frame (active-minibuffer-window)))
    (select-window (active-minibuffer-window))))
(global-set-key (kbd "<f7>") 'switch-to-minibuffer-window)
Trey Jackson
fuente
2
Si tiene varios marcos, debe agregarlos (select-frame-set-input-focus (window-frame (active-minibuffer-window)))antes de select-window.
dshepherd
@dshepherd Puedo confirmar que después de insertar su línea Elisp, la función enriquecida también funciona bien con un solo cuadro. Gracias.
dimitarvp
@dshepherd Gracias, he actualizado el código apropiadamente.
Trey Jackson
23
C-x o 

Repita según sea necesario.

Cx o ejecuta el comando other-window, que es una función integrada interactiva en el 'código fuente C'.

Si no desea recorrer las ventanas, puede agregar una función en su archivo de inicio y vincularla a una tecla. Algo como esto podría funcionar:

(defun select-minibuffer ()
 "Make the active minibuffer the selected window."
 (interactive)
 (when (active-minibuffer-window)
   (select-window (active-minibuffer-window))))
Richard Hoskins
fuente
1
¿Por qué querrías incluir RETasí? Aceptaría automáticamente lo que haya en el minibúfer (suponiendo que un solo C-x oconmutador se haya cambiado al minibúfer). En general, es posible que necesite usar C-x ovarias veces si hay (en el lenguaje de Emacs) múltiples ventanas abiertas en el marco (en términos normales de GUI: múltiples paneles en la ventana).
Chris Johnsen
Tienes razón. Mi error.
Richard Hoskins el
¿Hay alguna manera de llegar directamente al minibúfer sin pasar potencialmente por todas las ventanas? ¿Debo escribir un bucle que funcione other-windowhasta que la ventana actual sea minibúfer?
Ryan C. Thompson
6

Otra opción es usar switch-window

Considero que es un paquete realmente útil: le permite moverse rápidamente a cualquier ventana de Emacs, visualmente (y uso muchas ventanas abiertas en Emacs).

Pero acabo de descubrir que también le permite pasar al minibúfer, si está activo:

ingrese la descripción de la imagen aquí

Espero eso ayude.

rsenna
fuente
1
Un paquete relacionado es el swap-buffersque usa el mismo método para intercambiar el búfer actual con el de otra ventana.
pirócrata
0
;; faster switching between windows in the same frame
(windmove-default-keybindings)

Agregar dos líneas de código anteriores a .emacs.el permitirá un movimiento simple y eficiente, no solo al minibúfer, sino también a navegar por todas las demás ventanas en el marco de Emacs usando Shift-Arrow .

Cảnh Toàn Nguyễn
fuente