Definizione della finestra indicata da "altra finestra"


10

In emacs, più spesso di quanto mi piaccia, finisco con 4 o più finestre.

Userò questo esempio:

+--------|-----------+
|        |           |
|   1    |   2       |
|        |           |
+--------+-----------+
|    3   |     4     |
|        +-----------+
|        |     5     |
+--------+-----------+

Molte funzioni possono agire other-window(di solito la stessa finestra puntata da C-x o). Sono particolarmente utili scroll-other-window. Tuttavia, quando si aprono 4 o più finestre, other windowè improbabile che sia quello che voglio.

C'è un modo semplice per gestire il set other-windowsenza cambiare il layout della finestra / buffer? Certo, è fattibile usando un sacco di C-x 4 be C-bma non voglio cambiare il layout. Per esempio:

  • se la modifica nella finestra 4 nella figura sopra, c'è un modo semplice per impostare C-M-vper scorrere la finestra 1 ?
  • O semplicemente, supponiamo che lo stato attivo sia nella finestra 3 , come impostare other-windowper puntare alla finestra 2 ?

Risposte:


7

Se ho letto correttamente la tua domanda, sei principalmente interessato a operare rapidamente sui buffer visualizzati in altre finestre (preservando l'attuale layout della finestra).

Cambiare la finestra a cui other-windowpunta è un modo per raggiungerlo, ma vorrei suggerire un flusso di lavoro alternativo:

Diversamente other-window, ace-windowti consente di passare rapidamente a una finestra specifica : quando chiami ace-window, mostra un numero univoco in ogni finestra. Per passare a una finestra specifica, è sufficiente digitare il numero corrispondente. Se hai solo due finestre, mette il punto nell'altra finestra senza chiederti di digitare un numero. Questo screencast mostra il passaggio a un'altra finestra, lo scorrimento e il ritorno alla finestra originale:

Dimostrazione dell'asso-finestra

Se si legano ace-windowa C-x o, non si dispone di memorizzare una chiave aggiuntiva vincolante, e vi sentirete come si sta utilizzando una versione sovralimentata other-window.

Inoltre, se si tocca il tipo e / o si preferisce non spostare le dita troppo lontano dalla riga principale, è possibile indicare ace-windowdi "numerare" le finestre utilizzando lettere anziché numeri (vedere di seguito).

ace-windowè disponibile in MELPA . Dopo averlo installato tramite M-x package-install RET ace-window RET, è possibile inserire quanto segue nel file init per configurarlo come descritto sopra:

(global-set-key (kbd "C-x o") 'ace-window)
(setq aw-keys '(?a ?b ?c ?d ?e ?f ?g ?h ?i))

Grazie per la demo, ho visto questo pacchetto su altri siti e mi chiedevo come funzionasse. In realtà posso cambiare facilmente la finestra in quanto ho M-1 M-2 ..scelto di selezionare la finestra numero 1, 2 usando il window-numberpacchetto
Lompik

1

Da una rapida rassegna della fonte other-windowsembra che sia effettivamente dipendente dalla finestra restituita da next-window, che è definita in c. Sfortunatamente scroll-other-windowè anche definito in c, e presumibilmente chiama la finestra successiva da lì. Non credo sia facile ignorarlo.

Tuttavia, switch-to-buffer-other-windowsembra usare pop-to-buffer, quindi potresti avere un po 'di fortuna lì.


1

Non esiste un modo semplice per manipolare l'elenco delle finestre, quindi il risultato restituito da other-windowè più o meno fisso. Questa non è una cosa negativa di per sé, poiché consente la coerenza durante la navigazione di Windows. Per quanto riguarda i due scenari che hai descritto, con alcuni elisp o macro puoi adattarti al tuo flusso di lavoro.

se si modifica nella finestra 4 nella figura sopra, c'è un modo semplice per impostare CMv per scorrere la finestra 1?

Puoi utilizzare un semplice frammento come quello qui sotto per utilizzare other-windowil numero appropriato di volte, scorrere verso il basso e tornare alla finestra originale.

 (defun my-scroll-down-other-window (&optional arg)
 "Like `scroll-other-window' but takes a prefix argument 
 that indicates which window to scroll."
  (interactive "p")
  (save-selected-window
    (other-window arg)
    (scroll-down)))

È possibile passare un argomento prefisso per specificare quale finestra scorrere. Come puoi dedurre, utilizza il meccanismo incorporato other-windowper saltare il argnumero di finestre prima di scorrere. La save-selected-windowmessa a fuoco assicura tornerà alla finestra originale. La documentazione di other-windowpuò fornire ulteriori informazioni sulla modifica di questo frammento in base al proprio comportamento.

O semplicemente, supponiamo che lo stato attivo sia nella finestra 3, come impostare other-windowper puntare alla finestra 2?

Usa di nuovo un prefix-argas in C-3 C-x oquando chiami other-window. Il numero effettivo da fornire varierà in base all'ordine in cui li dividi e non cambierà finché non creerai nuove finestre. In alternativa, è possibile utilizzare pacchetti di convenienza come window-numbero ace-windowda MELPA per cambiare velocemente le finestre selezionate.


giusto, nessun modo semplice per manipolare l'elenco delle finestre. Ho difficoltà a usare i prefissi. Sembra che aggiunga un'altra chiave irraggiungibile e rallenta la cosa
Lompik,

Ecco a cosa servono macro / combinazioni di tasti della tastiera. Se questa è una parte regolare del flusso di lavoro, è possibile definire facilmente una combinazione di tasti basata su una mappa di prefissi, ad esempio <f7> nper scorrere l'ennesima finestra. Crea associazioni temporanee di un tasto con le macro della tastiera.
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.