Come posso bloccare la divisione di un frame?


16

Attualmente lavoro con ruby ​​e rspec. Mi piace molto l'idea di avere un frame separato in un altro monitor che mi mostri il buffer di compilazione. La mia configurazione attuale utilizza un frame "code" (in cui lavoro effettivamente) e un frame "test-result" (in cui vedo i risultati rspec)

Il problema è che quando provo ad aprire qualche errore di compilazione o file nel frame "risultato del test", la finestra si divide in quel frame. Quello che mi piacerebbe davvero fare è che si apra nel mio frame 'code'.

Uso già l'opzione display-buffer-reuse-frames. Ho anche provato a impostare la finestra dei risultati della compilation dedicated, ma ogni volta che emacs prova ad aprire una nuova finestra, viene creato un nuovo frame (che è particolarmente terribile se usi Helm.)

C'è un modo semplice per raggiungere questo obiettivo?


1
Usare emacs come IDE sarebbe molto più conveniente se esistesse un semplice "pin" per bloccare un buffer in modo che appaia sempre nello stesso punto da ora in poi. Una delle funzionalità di Visual Studio che mi manca di più quando utilizzo emacs è il modo semplice e intuitivo di dividere, bloccare, agganciare, nascondere e manipolare Windows in altro modo.
nispio,

1
Sì. Vengo anche da uno sfondo vs, e mi manca anche questo, anche se sento che l'interfaccia clean-no-button-no-bullshit di emacs è migliore per la maggior parte del tempo.
Renan Ranelli,

@nispio Non uso VS quindi puoi specificare cosa intendi con "pin". I frame di Emacs sono in genere esclusivi e non cambiano se non interagisci con essi.
Vamsi,

@vamsi: VS utilizza molte piccole finestre che è possibile collegare in alto / in basso / ai lati della cornice, oppure è possibile estrarle e creare una nuova cornice. È possibile agganciare una finestra ai bordi di una cornice e impostarla per nascondere automaticamente. Ad esempio, la finestra di output della compilation apparirà magicamente dal basso all'avvio della compilation e si nasconderà di nuovo poco dopo la fine della compilation. Se non si desidera che la finestra si nasconda automaticamente, è possibile bloccarla in posizione, quindi sbloccarla nuovamente dopo aver fatto riferimento a essa.
nispio,

@nispio vedo. Uso popwin.elda MELPA per compilare popup e aiutare i buffer che persistono fino a quando non C-gviene premuto. Se ne ho bisogno a tempo pieno, posso passare a loro in un'altra finestra. Non ho pensato di bloccare Windows perché Emacs lo fa split-windows-sensibly.
Vamsi,

Risposte:


9

È necessario configurare il gorilla da 600 libbre che è display-buffer-alistche determina come display-buffersceglie dove visualizzare un buffer. Rende display-buffer-reuse-framesobsoleto nei nuovi emacsen. Ecco una configurazione che dovrebbe guidarti (almeno in 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)))))

Come puoi vedere, utilizzo un regexp per abbinare il buffer del registro di compilazione. La documentazione di display-bufferdovrebbe darti un'idea di ciò che sta accadendo. Solo un avvertimento che non è il pezzo di documentazione più divertente che tu abbia mai letto. Li ho aggiunti in sequenza in modo che il regexp del registro di compilazione verrà abbinato prima del regexp generico. Adatta regexp alle tue esigenze.

MODIFICA Per rendere instabile qualsiasi frame è possibile valutare M-: (set-frame-parameter nil 'unsplittable t)in quel frame specifico. Sostituire lo zero con richiesto FRAMEse lo si fa da elisp. Tra queste due impostazioni, dovrebbe rendere esclusivo il frame di compilazione a meno che non si trovi specificamente un file in quel frame.


Il fatto è che non voglio aprire sempre nuovi frame. Quello che voglio è limitare tutte le finestre al frame "code", ad eccezione del buffer "compilation-log", che dovrebbe essere sempre visualizzato nel frame "test". Non sono riuscito a trovare un modo per reindirizzare tutte le nuove finestre al mio frame principale di "codice". Forse non ero abbastanza chiaro nella domanda = (
Renan Ranelli,

Questo dovrebbe aprire solo un nuovo frame per il registro di compilazione anche solo se non esiste un frame esistente. Puoi dirmi cosa non va? Vedi modifica su come rendere qualsiasi frame instabile.
Vamsi,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.