Existem várias perguntas semelhantes a esta. Eu li todos eles e eles não fornecem uma resposta para o meu cenário. Quero que o emacs prefira divisões verticais (janelas divididas em partes esquerda e direita) em vez de horizontais, mesmo que seja possível a divisão horizontal e vertical . Isto é o que o manual diz:
A divisão pode ser vertical ou horizontal, dependendo das variáveis limite da altura da divisão e limite da largura da divisão. Essas variáveis devem ter valores inteiros. Se o limite da altura da divisão for menor que a altura da janela escolhida, a divisão colocará a nova janela abaixo. Caso contrário, se o limite da largura da divisão for menor que a largura da janela, a divisão colocará a nova janela à direita.
Portanto, se ambos split-height-threshold
e split-width-threshold
forem menores que a largura e altura da janela, o emacs executará uma divisão horizontal. Eu quero o oposto Se os dois limites forem menores, execute uma divisão vertical.
Uma maneira de conseguir isto é conjunto split-height-threshold
para nil
, mas eu não gosto disso porque ele desativa divisão horizontal completamente.
Eu olhei para a split-window-sensibly
função, mas não sou bom o suficiente no elisp para escrever minha própria my-split-window-sensibly
função que funciona como eu quero.
fonte
split-window-preferred-function
que pode ser configurada para usar uma função personalizada. Dê uma boa olhada na funçãosplit-window-sensibly
e veja se ela pode atender às suas necessidades, ajustando determinadas variáveis, como você mencionou na sua pergunta, e também leia a sequência de documentos dessa função ... se ela não puder ser feita para atender às suas necessidades, então você pode escrever outro, ou obter ajuda para escrever outra função ...Respostas:
Na minha experiência, esse é um problema mais difícil que se possa pensar, porque a idéia intuitiva do que é sensível nem sempre é fácil de colocar em termos precisos. Vou apenas descrever o que acabei, mas você pode ter que mexer.
Primeiro: a
split-window-sensibly
função existente sempre prefere terminar com uma pilha horizontal de janelas (que, de maneira confusa, chama uma "divisão" vertical, embora a divisão seja horizontal ...) em um arranjo lado a lado. É fácil criar uma função que tenha a preferência oposta, que é essencialmente apenas uma cópiasplit-window-sensibly
com as preferências invertidas:Portanto, agora temos duas funções: a original que "prefere" uma pilha vertical e a nova que "prefere" uma pilha horizontal.
Em seguida, precisamos de uma função que tende a preferir a que preferimos usar.
Você precisa mexer nos valores aqui, mas a idéia básica é que preferimos um arranjo vertical sempre que houver pelo menos o dobro da largura e da altura. Você pode pensar que queria onde a janela existente é mais larga do que alta, mas, na minha experiência, isso não está certo e permite que você termine com janelas muito finas.
Finalmente, também precisamos ter alguns mínimos sãos. Defino um
split-height-threshold
de 4 (ou seja, não quero, a menos que seja inevitável, ter menos de 2 linhas em uma janela) e umsplit-width-threshold
de 40 (ou seja, eu não quero, a menos que seja inevitável, ter menos de 20 caracteres numa janela) - pelo menos acho que é isso que isso significa.Então se liga
split-window-preferred-function
asplit-window-really-sensibly
Outra idéia (que você pode preferir) seria apenas substituir a disposição "preferência por lado a lado" e definida
split-width-threshold
como 80: então você teria janelas lado a lado sempre que houvesse espaço para elas, eu acho.fonte
split-height/width-threshold
valores em seu padrão ou apop-to-buffer
função criaria novas divisões em vez de reutilizar as antigas. Eu prefiro ter uma única divisão direita / esquerda e não quero que as funções do emacs mexam com isso.Você pode usar meu pacote
el-patch
para implementar a funçãosplit-window-sensibly-prefer-horizontal
de uma maneira que torne óbvio o que foi alterado em relação ao originalsplit-window-sensibly
e também permita que você detecte se a definição original é alterada em uma versão futura do Emacs:fonte
Encontrei esta solução na lista de distribuição do Emacs e faz maravilhas:
Parabéns a Alexander, o autor original.
fonte