Como posso fixar o buffer de * compilação * para nunca deixar um único quadro / janela

7

Eu preferiria que o *compilation*buffer permanecesse sempre em seu próprio quadro. No entanto, atualmente, se eu for executado a M-x compilepartir de outro quadro / janela, o buffer também será exibido em uma nova janela. Como posso fazer com que o emacs, em vez disso, apenas eleve o quadro existente que está exibindo o *compilation*buffer?

ajp
fonte
Acredito que esta seja a resposta para sua pergunta, que escrevi há três anos no início de minha missão no Emacs: stackoverflow.com/a/19415289/2112489 As seções de código aplicáveis compile.elpodem ter sido alteradas e, desde então, fiz muitas alterações / melhorias em minhas funções personalizadas que visam certos quadros para exibição em buffer: stackoverflow.com/questions/18346785/… Dê uma olhada e veja se o primeiro link é aproximadamente o que você está procurando - quem sabe, ele ainda pode funcionar sem fazendo mudanças.
lawlist

Respostas:

5

Normalmente, o Emacs considera o quadro selecionado o único quadro reutilizável. Em outras palavras, normalmente o Emacs pesquisa apenas o quadro atual ("selecionado") em busca de janelas que já contenham o buffer para exibição ("janelas reutilizáveis"). O que você precisa é que o Emacs considere o quadro do buffer de compilação como um quadro reutilizável:

(push '("\\*compilation\\*" . (nil (reusable-frames . t))) display-buffer-alist)

O trecho acima tornará todos os quadros reutilizáveis ​​quando display-bufferexibir o *compilation*buffer. Veja a documentação de display-buffer-reuse-windowpara saber quais outros valores reusable-framespodem receber.

No entanto, isso não se aplica à outra direção - abrir um buffer de código na janela de compilação. Por exemplo, se você abrir um buffer pressionando um link no buffer de compilação, o Emacs abrirá o buffer no mesmo quadro da janela de compilação. Mudar isso é outra questão. Não sei como o comportamento se compara à special-display-buffer-namessolução.

bmag
fonte
2

Faça a compilação de buffer sempre ter uma janela dedicada. Uma maneira de fazer isso é personalizar a opção special-display-buffer-names, incluir "*compilation*". Outra é personalizar a opção special-display-regexps, incluir uma regexp que corresponda ao nome do buffer. (Incluo o regexp "[ ]?[*][^*]+[*]", que corresponde a todos os buffers cujos nomes são *...*.)

(Consulte também a opção special-display-frame-alist, que você pode usar para especificar o comportamento e as características do quadro usado para esses buffers de exibição especial.)

O Emacs dirá que essas opções de "buffer de exibição especial" são "obsoletas", mas, graças a Deus, elas ainda são suportadas. Eles oferecem uma maneira simples de fazer o que você deseja.

Se você deseja sofrer com o que o Emacs prefere agora, personalize a opção display-buffer-alist. A ideia é essencialmente a mesma (é apenas uma opção de usuário mais feia e mais complicada).

Desenhou
fonte
Importa-se de explicar os votos negativos? Existe algo incorreto nesta resposta?
Desenhou
11
Provavelmente é para as opções obsoletas e para o snark ("sofrer").