Limita alla restrizione precedente


8

C'è un modo conveniente per ripristinare la restrizione precedente? Quindi dopo la seguente sequenza di eventi:

  • Segna una regione
  • Chiama narrow-to-regione fai un po 'di lavoro.
  • Chiama widenper saltare e cercare qualcosa

Mi piacerebbe restringere di nuovo la regione originale senza dover contrassegnarla di nuovo.


Ciò è complicato perché, naturalmente, il contenuto del buffer potrebbe cambiare tra la chiamata a widene la chiamata a un renarrowcomando ipotetico . Forse l'approccio migliore è quello di salvare i confini della regione da qualche parte e avere un comando per contrassegnare l'ultima regione salvata.
Glucas,

Risposte:


2

Invece di restringere il buffer principale, è possibile aprire un nuovo buffer indiretto e restringere quello:

(defun indirect-region (beg end name)
  "Open a new named indirect buffer of the current buffer,
narrowed to region [BEG, END]."
  (interactive "r\nsname of narrowed buffer: ")
  (let ((new-buff
         (make-indirect-buffer (current-buffer)
                               (generate-new-buffer-name name)
                               t)))
    (switch-to-buffer new-buff nil t)
    (narrow-to-region beg end)))

Questo aprirà un nuovo buffer indiretto del tuo buffer attuale ristretto alla tua regione corrente, modificando questo buffer è proprio come modificare il buffer principale e sarai in grado di passare da uno all'altro.

Così:

inserisci qui la descrizione dell'immagine

Potresti ampliarlo con funzionalità come

  • restringimento automatico alla funzione corrente
  • nominare il nuovo buffer dopo la funzione corrente
  • un keybinding per saltare tra il buffer indiretto di una funzione e il buffer principale
  • non creare un nuovo buffer indiretto per le funzioni che ne hanno già uno aperto

Dipende tutto da te però.


Grazie, questa potrebbe essere la strada da percorrere. Ho potuto vedere anche l'inverso: da un buffer ristretto, creare un buffer indiretto allargato per cercare qualcosa.
Glucas,

7

Scusa se non ho visto prima la tua domanda.

Questo è precisamente uno dei motivi della libreria Zones ( zones.el).

Quando restringi il buffer, ogni restringimento viene aggiunto a un anello di restringimenti , che include il buffer completo (non ristretto). I restringimenti possono essere nidificati, ma non è necessario. Possono essere tutte le regioni.

È possibile scorrere tra i restringimenti (utilizzando C-x n x x x...). Si può andare direttamente al N ° restringimento precedente utilizzando un prefisso numerico arg; ad es C-3 C-x n x. La pianura si C-uallarga completamente (uguale C-x n wo ciclica alla voce dell'anello non ristretto). C-0svuota l'anello.

La riga della modalità indica quale restringimento (limitazione del buffer) è attuale.

È anche possibile salvare persistentemente l'anello delle attuali restrizioni del buffer e ripristinarlo in un secondo momento. Se si utilizza la libreria Segnalibro +, è possibile aggiungere un segnalibro a un anello di restrizioni e ripristinarlo successivamente saltando al segnalibro.

Per ulteriori informazioni, vedere Restringimenti multipli .


Vedi anche Narrow Indirect (libreria narrow-indirect.el). Ti consente di creare facilmente qualsiasi numero di buffer indiretti che sono cloni del buffer principale e che sono ristretti a parti particolari di esso.


@phils: Thx; fatto. In realtà, è stato menzionato nella pagina Zone , ma l'ho aggiunto anche alla pagina Multiple Narrowings .
Ha
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.