¿Cómo puedo cambiar el foco después de dividir el búfer en emacs?
window split (5)
Me gustaría que después de dividir la ventana ( Cx 3
o Cx 2
) para poder llegar automáticamente al cursor en el nuevo búfer abierto (el que no sea el actual). ¿Cómo puedo lograr este comportamiento?
Además de dividir el cuadro manualmente con Cx 2 o Cx 3 , los búferes también se "levantan" automáticamente algunas veces. Estos tampoco están seleccionados / activos por defecto.
Esto se puede solucionar cambiando la función utilizada para dividir una ventana. Está configurado para split-window-sensibly
de forma predeterminada, pero puede configurarlo para su propia función que llama a split-window-sensibly
y luego selecciona el búfer.
Desafortunadamente, sin embargo, esto tiene el efecto secundario de seleccionar el búfer *Completions*
cuando tocas TAB en el minibúfer. Entonces, vale la pena verificar si el minibúfer está activo y no cambiar en este caso. Apuesto que también hay otros escenarios indeseables. Intentaré actualizar esta publicación a medida que las encuentre.
;; after splitting a frame automatically, switch to the new window (unless we
;; were in the minibuffer)
(setq split-window-preferred-function ''my/split-window-func)
(defun my/split-window-func (&optional window)
(let ((new-window (split-window-sensibly window)))
(if (not (active-minibuffer-window))
(select-window new-window))))
(Funciona con Emacs 24.5.1.)
Mi idea de cuándo querrías seguir la ventana después de una ventana split-window
fue cuando tenía el mismo buffer que en el siguiente código:
(defun split-window--select-window (orig-func &rest args)
"Switch to the other window after a `split-window''"
(let ((cur-window (selected-window))
(new-window (apply orig-func args)))
(when (equal (window-buffer cur-window) (window-buffer new-window))
(select-window new-window))
new-window))
(advice-add ''split-window :around #''split-window--select-window)
Sencillo
Puede cambiar entre búferes con Cx o
. En cuanto a hacer eso automáticamente, no creo que haya un comando existente para eso.
Puedes hacerlo así:
(global-set-key "/C-x2" (lambda () (interactive)(split-window-vertically) (other-window 1)))
(global-set-key "/C-x3" (lambda () (interactive)(split-window-horizontally) (other-window 1)))
En Emacs 24.3.1 funciona si cambia el argumento 1
por 0
.
¡NO USE ESTA RESPUESTA! - como se señala en los comentarios, aconsejar split-window
puede provocar efectos secundarios no deseados.
Recomiendo la respuesta de Bozhidar Batsov en su lugar.
Coloque lo siguiente en su archivo .emacs:
(defadvice split-window (after move-point-to-new-window activate)
"Moves the point to the newly created window after splitting."
(other-window 1))