Estou procurando uma maneira de adicionar uma nova janela de altura total dividida a uma configuração de janela existente (dividida). Como não sei como explicá-lo corretamente, publicarei alguns gráficos ASCII mostrando o comportamento desejado para dois exemplos de configurações de janelas:
from to +-------------------------+ +---------------------+---+ | | | | | | | | | | | A | => | A | E | | | | | | | | | | | +-------------------------+ +---------------------+---+ +------------+------------+ +----------+----------+---+ | | B | | | B | | | A +------------+ | A +----------+ | | | C | => | | C | E | +------------+------------+ +----------+----------+ | | D | | D | | +-------------------------+ +---------------------+---+
onde a função aceita a largura desejada da nova janela E
e diminui as larguras de A
, B
, C
, e D
em conformidade. Edit2 : Observe que os dois desenhos acima são exemplos do comportamento esperado para um caso concreto. Estou procurando uma função geral que faça isso independentemente da configuração na coluna from (ou seja, o número de janelas [divididas] na coluna from deve ser arbitrário).
Também estou procurando essa funcionalidade no lado esquerdo e na parte superior e inferior de um quadro.
Edit: Do comentário de @ Nsukami_, percebi que a funcionalidade que estou procurando é um caso especial de um problema mais abstrato. Então, vou descrever esse problema:
Como você armazena uma configuração de janela (que consiste em qualquer número de janelas e buffers) e "cola" a configuração armazenada em uma janela existente?
A "pasta" deve preservar os tamanhos relativos das janelas e a divisão; naturalmente a configuração colada resultante é uma cópia em escala.
split-window-right
comoC-u -width C-x 3
. Mudewidth
para o que quiser e observe o sinal negativo.A
,B
,C
, eD
) e, em seguida, inserir esse layout em uma nova janela? Então, meu problema poderia ser resolvido com 1) armazenando a configuração atual da janela, 2) mudando o layout para mostrar apenas uma janela que é dividida horizontalmente [essencialmente formando a janela paraE
e a janela de espaço reservado para as outras, vamos chamá-loZ
], 3 ) finalmente inserção do esquema original para a janela do lado esquerdo (Z
)Respostas:
A função a seguir deve fazer o que você deseja. O truque é dividir a janela raiz do quadro atual.
Chame a função com a direção na qual você dividirá a janela e o tamanho da nova janela. O exemplo acima retorna a janela recém-criada. O conceito, as janelas e os quadros são explicados muito bem no Manual de Referência do GNU Emacs Lisp .
fonte
Não tenho certeza se a melhor solução, como não é o suficiente abstraído, estou resolvendo apenas um caso de uso. O truque é escrever uma função para ir de layoutX para layoutY, e outra para ir de layoutY para layoutX
Espero que a solução ajude
Acabei de encontrar um pacote chamado layout.el , eu nunca o usei, mas parece ser o que você está procurando, você nos dirá se está bem.
EDITAR:
Tentando encontrar uma solução mais genérica, parece que você pode usar
M-x switch-to-buffer-other-frame
para ir de um buffer em um quadro, digamos com um layout X, para outro buffer em outro quadro com um layout Y.Você também pode estar em um layout X, armazenar esse layout em um registro
C-x r f
(configuração de quadro para registro), ir para outro layout e, quando necessário, voltar para o anterior, chamando o que está dentro do registroC-x r j
(jump- registrar)fonte
layout.el
faz algo semelhante awinner
: (re) armazenar a configuração da janela do quadro completo, não armazenar a configuração completa e restaurá-la em uma janela existente. A função que você escreveu, por outro lado, não são, de fato, as soluções gerais que estou procurando. Eles resolvem meu segundo exemplo, que não era um problema concreto, mas apenas um exemplo. Estou procurando uma solução que funcione no caso geral.switch-to-buffer-other-frame
se 'de' é um quadro e 'a' é outro quadro