Come devo ottenere il nome file del buffer originale in un buffer clonato indiretto?


8

Volevo guardare porzioni diverse di un buffer in due frame diversi, poiché ho due monitor di forme diverse che non riesco facilmente a estendere su un singolo frame. Alcuni googling mi hanno portato a usare clone-indirect-buffer, che funziona bene.

Tuttavia, buffer-file-nameper il nuovo buffer è nil. Come posso determinare in modo affidabile il nome del file del buffer originale (di cui questo è un clone)?


2
Qual è la differenza / vantaggio nel clonare il buffer e semplicemente visitare il buffer in entrambi i frame contemporaneamente?
Nathanael Farley,

5
I cloni rispondono ad eventi come restringimento / allargamento, piegatura del codice e piegatura dei contorni indipendentemente l'uno dall'altro. Se fosse lo stesso buffer in due finestre, questo tipo di eventi verrebbe rispecchiato in ciascuna finestra. I cloni sono utili, ad esempio, per avere viste diverse di diverse parti del buffer contemporaneamente.
Dan

In realtà non sono sicuro se è possibile visualizzare il buffer in due frame contemporaneamente. Ovviamente puoi farlo in due finestre nello stesso frame, ma se provo a passare al buffer in un altro frame con lo stato C-x battivo passa al frame che mostra già il buffer.
rneatherway,

1
@NathanaelFarley Uso i buffer indiretti quando condivido il terminale con i miei college inclinati che possono usare il buffer indiretto con qualcosa di simile alla modalità malvagia.
stsquad,

Risposte:


12

Conservo il manuale Emacs e il manuale Elisp sulla composizione rapida per domande come queste.

Dal manuale Elisp sui buffer indiretti :

Funzione: buffer-base-buffer e buffer opzionale

Questa funzione restituisce il buffer di base del buffer, che per impostazione predefinita è il buffer corrente. Se il buffer non è indiretto, il valore è zero. Altrimenti, il valore è un altro buffer, che non è mai un buffer indiretto.

Probabilmente vuoi (buffer-file-name (buffer-base-buffer))o qualcosa del genere.


Sì, tutto qui. Mi piace ancora la mia defadviceopzione, però. ;)
Dan

3

Questa è una risposta indiretta alla tua domanda: non sono sicuro di come sia il nome del file del buffer originale senza fare quanto segue. (EDIT: la risposta di @ purple_arrows inserisce i dettagli: è possibile utilizzare buffer-base-buffer. Si prega di accettare quella risposta come più corretta.)

Il seguente consiglio assocerà il nome file del buffer originale a ciascuno dei suoi cloni indiretti:

(defadvice clone-indirect-buffer (around associate-filename activate)
  "Associate the original filename with the cloned buffer."
  (let ((filename buffer-file-name))
    ad-do-it
    (setq buffer-file-name filename)))

Ora, ciascuno dei cloni ha lo stesso nome file del buffer originale.

Uso molto i buffer clonati indirettamente e mi piacerebbe, ad esempio, salvare il file associato quando lavoro con uno dei buffer, piuttosto che con l'originale. Questo consiglio è stato la mia soluzione al flusso di lavoro desiderato.

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.