Hay varias preguntas similares a esta. Los he leído todos y no proporcionan una respuesta para mi escenario. Quiero que emacs prefiera divisiones verticales (división de ventanas en partes izquierda y derecha) sobre horizontales, incluso si es posible la división horizontal y vertical . Esto es lo que dice el manual :
La división puede ser vertical u horizontal, dependiendo de las variables split-height-umbral y split-width-umbral. Estas variables deben tener valores enteros. Si el umbral de altura de división es menor que la altura de la ventana elegida, la división coloca la nueva ventana debajo. De lo contrario, si el umbral de ancho de división es menor que el ancho de la ventana, la división coloca la nueva ventana a la derecha.
Entonces, si ambos split-height-thresholdy split-width-thresholdson más pequeños que el ancho y la altura de la ventana, emacs realizará una división horizontal. Quiero lo contrario Si ambos umbrales son más pequeños, realice una división vertical.
Una forma de lograrlo es a conjunto split-height-thresholda nil, pero que no me gusta que debido a que desactiva la división horizontal por completo.
He examinado la split-window-sensiblyfunción, pero no soy lo suficientemente bueno en elisp para escribir mi propia my-split-window-sensiblyfunción que funciona como quiero.
fuente

split-window-preferred-functionque se puede configurar para usar una función personalizada. Eche un buen vistazo a la funciónsplit-window-sensiblyy vea si puede satisfacer sus necesidades ajustando ciertas variables como mencionó en su pregunta, y también lea la cadena de documentos de esa función ... si no se puede hacer para satisfacer sus necesidades, entonces se puede escribir otra, u obtener ayuda para escribir otra función ...Respuestas:
En mi experiencia, este es un problema más difícil que uno podría pensar, porque la idea intuitiva de lo que es sensible no siempre es fácil de expresar en términos precisos. Solo describiré con qué terminé, pero es posible que tengas que jugar un poco.
Primero: la
split-window-sensiblyfunción existente siempre prefiere terminar con una pila horizontal de ventanas (que, de manera bastante confusa, llama una "división" vertical, aunque la división es horizontal ...) sobre una disposición de lado a lado. Es bastante fácil crear una función que tenga la preferencia opuesta, que es esencialmente solo una copia desplit-window-sensiblylas preferencias invertidas:Así que ahora tenemos dos funciones: la original que "prefiere" una pila vertical y la nueva que "prefiere" una pila horizontal.
Luego necesitamos una función que tiende a preferir la que preferimos usar.
Debe jugar con los valores aquí, pero la idea básica es que preferimos una disposición vertical siempre que haya al menos el doble de ancho que de altura. Puede pensar que lo quería donde la ventana existente es más ancha que alta, pero en mi experiencia eso no es correcto y le permite terminar con ventanas que son demasiado delgadas.
Finalmente, también necesitamos tener algunos mínimos sanos. Establezco un
split-height-threshold4 (es decir, no quiero, a menos que sea inevitable, tener menos de 2 líneas en una ventana) y unsplit-width-threshold40 (es decir, no quiero, a menos que sea inevitable, tener menos de 20 caracteres de ancho en una ventana), al menos creo que eso es lo que significan.Entonces uno solo se une
split-window-preferred-functionasplit-window-really-sensiblyOtra idea (que podría preferir) sería simplemente sustituir la disposición de "preferencia de lado a lado" y establecerla
split-width-thresholden 80: entonces obtendría ventanas de lado a lado siempre que hubiera espacio para ellos, creo.fuente
split-height/width-thresholdvalores por defecto o de lo contrario lapop-to-bufferfunción crearía nuevas divisiones en lugar de reutilizar las antiguas. Prefiero tener una sola división derecha / izquierda y no quiero que las funciones de emacs se metan con eso.Puede usar mi paquete
el-patchpara implementar la funciónsplit-window-sensibly-prefer-horizontalde manera que haga obvio lo que ha cambiado desde el originalsplit-window-sensibly, y también le permite detectar si la definición original cambia en una futura versión de Emacs:fuente
Encontré esta solución en la lista de correo de Emacs , y funciona de maravilla:
Felicitaciones a Alexander, el autor original.
fuente