Como posso impedir que um quadro seja dividido?

16

Atualmente trabalho com ruby ​​e rspec. Eu realmente gosto da idéia de ter um quadro separado em outro monitor, mostrando o buffer de compilação. Minha configuração atual usa um quadro de 'código' (no qual trabalho efetivamente) e um quadro de 'resultado do teste' (no qual vejo os resultados do rspec)

O problema é que, quando tento abrir algum arquivo ou erro de compilação no quadro 'resultado do teste', a janela se divide nesse quadro. O que eu realmente gostaria de fazer é abrir no meu quadro de 'código'.

Eu já uso a opção display-buffer-reuse-frames. Também tentei definir a janela de resultados da compilação dedicated, mas sempre que o emacs tenta abrir uma nova janela, um novo quadro é criado (o que é particularmente horrível se você usar o Helm.)

Existe alguma maneira fácil de conseguir isso?

Renan Ranelli
fonte
1
Usar o emacs como um IDE seria muito mais conveniente se houvesse um fácil "fixar" um buffer no lugar para que ele sempre apareça no mesmo local a partir de agora. Um dos recursos do Visual Studio que mais sinto falta ao usar o emacs é a maneira simples e intuitiva de dividir, fixar, encaixar, ocultar e manipular janelas.
Nispio 26/09/14
1
Sim. Eu também venho de um plano de fundo vs, e sinto falta disso também, embora eu sinta que a interface do emacs limpa, sem botão, sem besteira é melhor na maioria das vezes.
Renan Ranelli 26/09
@nispio Eu não uso o VS, então você pode especificar o que você quer dizer com "pin". Os quadros do Emacs geralmente são exclusivos e não mudam, a menos que você interaja com eles.
Vamsi
@vamsi: O VS usa muitas janelas pequenas que você pode anexar à parte superior / inferior / lateral do seu quadro, ou você pode abri-las e criar um novo quadro. Você pode encaixar uma janela nas bordas de um quadro e configurá-lo para ocultar automaticamente. Por exemplo, a janela de saída da compilação aparecerá magicamente da parte inferior quando a compilação iniciar e se ocultará novamente logo após o término da compilação. Se você não deseja que a janela oculte automaticamente, é possível fixá-la no lugar e desmarcar novamente quando terminar de fazer referência a ela.
Nispio 26/09/14
@nispio eu vejo. Eu uso popwin.eldo MELPA para pop-up compilar e ajudar buffers que persistem até que C-gseja pressionado. Se eu precisar deles em tempo integral, basta mudar para eles em outra janela. Eu não pensei em fixar janelas porque o emacs faz split-windows-sensibly.
Vamsi

Respostas:

9

Você precisa configurar o gorila de 100 kg display-buffer-alistque determina como display-bufferescolhe onde exibir um buffer. Torna display-buffer-reuse-framesobsoleto no emacsen mais recente. Aqui está uma configuração que deve guiá-lo (pelo menos no emacs 24.3).

;; all buffers, try to reuse windows across all frames
(add-to-list 'display-buffer-alist
           '(".*". (display-buffer-reuse-window .
                                  ((reusable-frames . t)))))

;; except for compilation buffers where you want new and dedicated frames when necessary
(add-to-list 'display-buffer-alist
         '("^\\*Compile-Log\\*". ((display-buffer-reuse-window
                                   display-buffer-pop-up-frame) .
                                  ((reusable-frames . t)
                                  (inhibit-same-window . t)))))

Como você pode ver, eu uso um regexp para corresponder ao buffer de compilação do log. A documentação de display-bufferdeve fornecer uma idéia do que está acontecendo. Apenas um aviso de que não é a parte da documentação mais agradável que você jamais lerá. Eu os adicionei sequencialmente para que o regexp do compile-log seja comparado com o regexp genérico. Adapte o regexp às suas necessidades.

EDIT Para tornar qualquer quadro inviável, você pode avaliar M-: (set-frame-parameter nil 'unsplittable t)nesse quadro específico. Substitua zero por necessário FRAMEse estiver fazendo isso da elisp. Entre essas duas configurações, ele deve tornar o quadro de compilação exclusivo, a menos que você encontre especificamente um arquivo nesse quadro.

Vamsi
fonte
O problema é que eu não quero abrir novos quadros o tempo todo. O que eu quero é restringir todas as janelas ao quadro 'code', com exceção do buffer 'compilation-log', que sempre deve ser exibido no quadro 'test'. Não consegui encontrar uma maneira de redirecionar todas as novas janelas para o quadro principal de 'código'. Talvez eu não tenha sido claro o suficiente na pergunta = (
Renan Ranelli
Isso deve abrir apenas um novo quadro para o log de compilação, somente se não houver quadro existente. Você pode me dizer o que está errado? Consulte a edição sobre como tornar qualquer quadro desagradável.
Vamsi