Tengo dos ventanas abiertas y divididas verticalmente (marco único):
A) contiene mi trabajo
B) contiene dired o ibuffer.
Me gustaría poder navegar a un archivo / búfer en el panel B y presionar "o" para que se abra en el panel A. ¿Es esto posible? En este momento, emacs está creando un nuevo panel en la parte inferior del panel A para abrir el archivo.
editar: de acuerdo con la lista de leyes del usuario, el comportamiento descrito anteriormente ocurrirá cuando el marco sea grande. Este parece ser el caso para mí porque ahora que estoy en casa (no en un monitor externo, marco más pequeño), emacs se comporta como lo deseo. La pregunta ahora es: ¿puedo evitar que emacs abra una nueva ventana cuando el marco actual es grande?
window
para referirnos a un cuadrante de búfer dentro del mismoframe
. Seframe
considera que A es todo el gatito-kaboodle, que puede tener muchas ventanas dentro. Emacs puede generar múltiples cuadros, cada cuadro contiene múltiples ventanas.Respuestas:
Aquí hay cuatro (4) ejemplos de
display-buffer
familias de funciones personalizadas que se pueden personalizar para satisfacer las necesidades particulares de un usuario, arriba ; abajo ; la izquierda ; derecha - y aquí hay cuatro (4)interactive
funciones para mostrar el archivo o directorio de la línea actual de undired-mode
búfer. Solo hay tres condiciones: (a) si ya hay una ventana que muestra el búfer de destino, elíjalo; (b) si hay una ventana en la dirección deseada que está disponible, úsela; (c) el objetivo general es crear una nueva ventana en la dirección deseada si no se cumplen las otras condiciones.Uso:
M-x dired-display-above
M-x dired-display-below
M-x dired-display-left
M-x dired-display-right
Hay tantas combinaciones de teclas ya integradas
dired-mode
ydired+
, que no me atrevo a inventar las mías. El usuario es libre de elegir sus propios atajos de teclado, lo que está más allá del alcance de este ejemplo limitado.El usuario es libre de agregar condiciones adicionales a la
display-buffer
familia de funciones de muestra para manejar más situaciones, por ejemplo, más ventanas que solo un par.EDITAR: Aquí hay una implementación un poco más sofisticada / divertida del concepto anterior, que le da al usuario la capacidad de usar esto de manera no interactiva o interactiva ; por ejemplo,
M-x dired-display-buffer
- donde se le pedirá al usuario que elija un directorio si no se encuentra sobre un archivodired-mode
y que elija una dirección de visualización (izquierda, derecha, arriba, abajo).fuente
dired-mode-map
, unidao
y luegohjkl
para mostrar arriba / abajo / izquierda / derecha?(defhydra dired-open (dired-mode-map "O" :exit t) "dired-open" ("j" dired-display-below "below") ("k" dired-display-above "above") ("h" dired-display-left "left") ("l" dired-display-right "left"))
select-window
se puede utilizar al final de cadamy-display-buffer-...
función. Como puede ver, el resultado / valor que se arroja al final de la última línea eswindow
. Si usted no necesita el resultado / valor para utilizar en conjunción con otra función, a continuación, sólo envolver elwindow
de la última línea con esto:(select-window window)
. Haga eso con las cuatro (4) funciones, es decirmy-display-buffer-below
;my-display-buffer-above
;my-display-buffer-left
; ymy-display-buffer-right
.Su pregunta no está clara, por lo que corre el riesgo de ser cerrada. ¿Tiene dos cuadros o un solo cuadro con dos ventanas Emacs? Cualesquiera que sean, si hay dos, ¿ cada uno de ellos está dividido verticalmente? ¿Y qué quieres decir con "dividir verticalmente"? ¿Qué quieres decir con un "panel"? ¿Qué quiere decir con "eso" en "tenerlo abierto en el panel A"?
Una suposición descabellada es que tiene un solo cuadro de Emacs que se divide en dos ventanas de Emacs, A y B, con la ventana A encima de la ventana B, la ventana B está seleccionada y la ventana B muestra un búfer Dired.
o
está vinculado por defecto adired-find-file-other-window
. Si lo anterior suposición es correcta, entonceso
en un nombre de archivo en B debe abrir en A. Esto es lo que veo cuando se inicia Emacs sin un archivo de inicio:emacs -Q
. ¿No lo ves?Si este no es el escenario, describa claramente lo que está haciendo, paso a paso, comenzando con
emacs -Q
.fuente
display-buffer
familia de variables afectará otras situaciones aún no previstas. Puede personalizarlodisplay-buffer-alist
, lo cual es algo confuso incluso para usuarios experimentados de Emacs. Hay variables que controlan cuándo dividir ventanas y tamaños mínimos de ventanas, y la lista sigue y sigue. Para contener el brote, puede aconsejardired-find-file-other-window
con una versión limitada deldisplay-buffer-alist
, pero dejaré esa respuesta a otro participante del foro. Hay una variedad de soluciones. :)NOTA : Las siguientes variables son globales , lo que significa que afectarán otras funciones además
dired-find-file-other-window
. El usuario puede desear aconsejar la función en cuestión para no afectar globalmente a otras funciones. [Sin embargo, este autor dejará esa opción a otro participante del foro.] Alternativamente, hay otra respuesta que este autor publicó que contiene funciones personalizadas que se pueden utilizar para no afectar nada más.La variable
split-width-threshold
tiene una cadena de documentación que establece:Establecer lo siguiente en el
.emacs
archivo logrará el efecto deseado. El usuario también puede establecer el valor en un número mayor. El valor predeterminado es 160Aquí hay un enlace a la sección correspondiente en el manual:
https://www.gnu.org/software/emacs/manual/html_node/emacs/Window-Choice.html
Consulte también la variable relacionada
split-height-threshold
, que tiene un valor predeterminado de 80Los estados de la cadena de documentación:
fuente