2014-06-06 13 views
8

Se un frame di Emacs viene diviso in diverse finestre e viene aperto un nuovo buffer, c'è la possibilità di dire a Emacs in quale finestra aprire il buffer.Comunica a Emacs di aprire un nuovo buffer in una finestra specifica

In particolare, se una finestra contiene un buffer dired e voglio dire a Emacs in quale delle altre finestre aperte deve essere visualizzato un nuovo file.

Se il telaio Emacs è per esempio diviso simili:

____________________ 
|  |   | 
|  |   | 
| A | B | 
|  |   | 
|  |   | 
-------------------- 
|  |   | 
| C | D | 
|  |   | 
-------------------- 

dove A, B, C e D sono le finestre. Se A contiene un buffer diretto, posso dire a Emacs di aprire un nuovo file in un nuovo buffer nella finestra D?

risposta

0

Altri probabilmente ti daranno risposte che rispondono più direttamente alla tua domanda. La mia risposta è semplicemente spostare lo stato attivo sulla finestra desiderata e quindi utilizzare C-x C-f o qualsiasi altra cosa per aprire il file o visualizzare il buffer desiderato nella finestra selezionata.

Per eseguire ciò che è stato richiesto direttamente, è comunque necessario utilizzare una sequenza di tasti che richiami il comando desiderato. E se si desidera qualcosa di generale che funzioni con comandi diversi (ad esempio find-file e switch-to-buffer), è necessario utilizzare un prefisso o riutilizzare il prefisso arg. Questo è in genere altrettante combinazioni di tasti che è necessario per passare alla finestra e quindi utilizzare il solito comando.

Naturalmente, con il mio suggerimento è necessario un comando per passare rapidamente alla finestra desiderata. Ci sono vari comandi là fuori che ti permettono di scorrere tra le finestre o utilizzare il completamento per selezionare rapidamente una finestra per nome o numero.

Ecco, questo è quello che vorrei suggerire: passare alla finestra e quindi visualizzare quello che vuoi lì, invece di cercare di coniugare (a) che designa la finestra di destinazione con (b) invocando il comando che consente di visualizzare il buffer. IOW, fallo alla vecchia maniera: vai alla finestra e poi mostra lì.

Ovviamente, se non si vuole finire nel nuovo buffer visualizzato e si desidera mantenere il punto focale da dove si è iniziato, quindi con il mio suggerimento si dovrebbe ricorrere al ciclo (ad es.) finestra di partenza. Non è chiaro dalla tua descrizione se questo è il tuo caso d'uso. Se lo è, la mia soluzione probabilmente non è così utile.

Ma anche in questo caso, potrebbe essere ancora utile dividere le cose: (a) un comando per (solo) designare la finestra da utilizzare per il seguente comando display-buffer e (b) il comando display-buffer . IOW, fa essenzialmente la stessa cosa che ho suggerito, ma il primo passo dovrebbe solo designare la finestra di destinazione invece di passare ad essa, e il secondo passo userebbe quella finestra designata. (Si avrebbe bisogno di definire (a) e (b), come un meccanismo generale.)

Anche in questo caso il mio suggerimento è diversa probabilmente da ciò che gli altri potrebbero pensare, nel senso che non cerca di combinare scelta finestra con comando di visualizzazione. Sono accoppiati sequenzialmente, ma non combinati in un unico comando.

+0

La domanda riguarda specificamente la scelta di dove un "link" o "comando" aprirà un buffer. È chiaro che si può passare a una finestra e aprire direttamente un buffer lì. Le domande sono: quando premo un "link" in dired (ad esempio), come posso specificare quale finestra verrà scelta per il nuovo buffer che verrà aperto? – UndeadKernel

+0

@UndeadKernel: non sono sicuro che la tua domanda indicata sia la domanda OP. Ma la risposta alla tua domanda è che qualunque comando invochi il "link" determina il comportamento. Niente di più, niente di meno. Quel comando può eseguire questa o quella azione specifica, oppure può richiedere all'utente di scegliere tra alcune azioni possibili, o ... Un comando è una funzione Elisp - può fare qualsiasi cosa che una funzione può fare. Il punto è che qualunque comando sia invocato (se si fa clic su un collegamento o meno) decide qual è il comportamento. Potrebbe darti una scelta o no. – Drew

3

Ecco un'altra risposta -

Si può fare ciò che si desidera utilizzare Icicles. Nella modalità Icicle, C-x o, che è normalmente other-window, è icicle-other-window-or-frame. Un prefisso arg dà diversi comportamenti alternativi, uno dei quali (per Emacs 24 e successivi) è quello di scegliere una finestra che verrà utilizzata dalla successiva operazione di visualizzazione del buffer (ad es., C-x C-f, C-x b).

Ecco cosa succede se si utilizza un prefisso double plain arg: C-u C-u C-x o. Ciò richiama il comando icicle-choose-window-for-buffer-display, che ovviamente si può anche associare a qualsiasi altra chiave.

Si sceglie la finestra di destinazione per nome (utilizzando il completamento o il ciclo ecc.).

Tutto quello che fa è impostare la variabile icicle-next-window-for-display-buffer nella finestra scelta. Icicles consiglia i comandi display-buffer, switch-to-buffer e switch-to-buffer-other-window in modo che al successivo richiamo utilizzino la finestra che corrisponde al valore di icicle-next-window-for-display-buffer. (Dopo quell'invocazione tornano al loro comportamento normale.)

Ciò significa anche che se si dispone di un altro metodo di scelta di una finestra, che si preferisce (ad esempio in bicicletta utilizzando uno degli altri metodi menzionati here), è possibile modificare questo metodo per impostare icicle-next-window-for-display-buffer nella finestra selezionata, per ottenere lo stesso effetto (nella modalità di Icicle). IOW, importa come scegli la finestra; basta impostare il valore della variabile su di esso e la prossima azione di visualizzazione del buffer lo userà.

+0

Grazie. Ci proverò. – Hypnotoad

Problemi correlati