Quali sono i vantaggi dell'utilizzo di buffer indiretti ? In quali circostanze sono utili?
Quali sono i vantaggi dell'utilizzo di buffer indiretti ? In quali circostanze sono utili?
Risposte:
Per visualizzare e modificare più posizioni dello stesso buffer. Quindi, non è necessario scorrere un buffer lungo ma semplicemente passare la finestra alla regione visibile. Ogni buffer clonato presenta inoltre diversi contrassegni, restringimenti e altre proprietà del buffer. Se non si utilizza il buffer indiretto ma si crea un'altra finestra dello stesso buffer, tutto viene condiviso e non è possibile eseguire altre funzionalità avanzate oltre a visualizzare e modificare posizioni diverse. Ad esempio, con un buffer indiretto, è possibile piegare tutto il blocco di codice, creare in modo efficace un "albero di tag" senza influire sul buffer originale. Utilizzando una finestra, entrambi i buffer in entrambe le finestre vengono piegati perché entrambi i buffer sono uguali.
In conclusione, il buffer indiretto è un buffer completamente diverso che condivide lo stesso testo e file nel buffer originale, quindi quando si salva il buffer clonato, salva anche il file originale.
Un caso d'uso sta usando una diversa modalità principale su una parte di un file.
Ad esempio stavo lavorando contemporaneamente con documenti XML con codice all'interno di determinati elementi. Volevo essere in grado di modificare l'intero documento come se fosse xml, ma ho ancora tutte le principali funzionalità della modalità per il linguaggio di programmazione incorporato in alcuni elementi, quindi ho ristretto al corpo di quegli elementi in un buffer indiretto che stava eseguendo il modalità principale appropriata.
Ecco una funzione della mia configurazione che uso per fare questo:
(defun indirect-region (start end)
"Edit the current region in another indirect buffer.
Prompt for a major mode to activate."
(interactive "r")
(let ((buffer-name (generate-new-buffer-name "*indirect*"))
(mode (intern
(completing-read
"Mode: "
(mapcar (lambda (e)
(list (symbol-name e)))
(apropos-internal "-mode$" 'commandp))
nil t))))
(pop-to-buffer (make-indirect-buffer (current-buffer) buffer-name))
(funcall mode)
(narrow-to-region start end)
(goto-char (point-min))
(shrink-window-if-larger-than-buffer)))
Nota: questo non è perfetto, cose come il blocco dei caratteri richiedono un lavoro speciale aggiuntivo per l'uso in questo scenario.
I buffer indiretti offrono più viste dello stesso buffer, in particolare più restringimenti, ognuno dei quali agisce, per molti aspetti, come un buffer separato.
Come narrow-indirect.el
dice il Commentario per la biblioteca :
È possibile utilizzare buffer indiretti per più di quanto si pensi. È possibile utilizzare cloni prelevati da porzioni di buffer Dired, ad esempio, per offrire utili visualizzazioni (attive) in un elenco di directory. Esistono solo alcuni tasti / comandi (come l'
g
aggiornamento dell'elenco) che non funzionano, poiché dipendono da una vista dell'intero buffer Dired. Sperimenta e troverai sicuramente nuovi interessanti usi per i buffer indiretti.