emacs window split emacs23

¿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))