Limiter à la restriction précédente

8

Existe-t-il un moyen pratique de restaurer la restriction précédente? Donc, après la séquence d'événements suivante:

  • Marquer une région
  • Appelez narrow-to-regionet faites du travail.
  • Appelez widenpour sauter et chercher quelque chose

Je voudrais à nouveau me restreindre à la région d'origine sans avoir à la marquer de nouveau.

glucas
la source
C'est délicat car, bien sûr, le contenu du tampon peut changer entre l'appel à widenet l'appel à une renarrowcommande hypothétique . Peut-être que la meilleure approche consiste à enregistrer les limites de la région quelque part et à avoir une commande pour marquer la dernière région enregistrée.
glucas

Réponses:

2

Au lieu de rétrécir le tampon principal, vous pouvez ouvrir un nouveau tampon indirect et le réduire:

(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)))

Cela ouvrira un nouveau tampon indirect de votre tampon actuel restreint à votre région actuelle, éditer ce tampon est comme éditer le tampon principal, et vous pourrez basculer entre eux.

Ainsi:

entrez la description de l'image ici

Vous pouvez développer cela avec de belles fonctionnalités comme

  • rétrécissement automatique à la fonction actuelle
  • nommer le nouveau tampon après la fonction actuelle
  • une liaison de touches pour sauter entre le tampon indirect d'une fonction et le tampon principal
  • ne pas créer de nouveau tampon indirect pour les fonctions qui en ont déjà un ouvert

Cela ne dépend que de vous.

Jordon Biondo
la source
Merci, c'est peut-être la voie à suivre. Je pouvais également voir l'inverse: à partir d'un tampon rétréci, créez un tampon indirect élargi pour rechercher quelque chose.
glucas
7

Désolé, je n'ai pas vu votre question plus tôt.

C'est précisément l'une des raisons pour lesquelles les zones de bibliothèque ( zones.el).

Lorsque vous rétrécissez le tampon, chaque rétrécissement est ajouté à un anneau de rétrécissements , qui comprend le tampon complet (non rétréci). Les rétrécissements peuvent être imbriqués, mais ils n'ont pas besoin de l'être. Il peut s'agir de n'importe quelle région.

Vous pouvez parcourir les rétrécissements (en utilisant C-x n x x x...). Vous pouvez aller directement au N ème rétrécissement précédent en utilisant un préfixe numérique arg; par exemple C-3 C-x n x. Plain C-us'élargit complètement (comme C-x n wou à vélo jusqu'à l'entrée d'anneau non marquée). C-0vide l'anneau.

La ligne de mode vous indique quel rétrécissement (restriction de tampon) est en cours.

Vous pouvez même enregistrer de manière persistante l'anneau des restrictions de tampon actuelles et le restaurer plus tard. Si vous utilisez la bibliothèque Bookmark +, vous pouvez mettre en signet un anneau de restrictions, puis le restaurer plus tard en sautant au signet.

Pour plus d'informations, voir Réductions multiples .


Voir aussi Narrow Indirect (bibliothèque narrow-indirect.el). Il vous permet de créer facilement un nombre quelconque de tampons indirects qui sont des clones du tampon principal et qui sont restreints à des parties particulières de celui-ci.

A dessiné
la source
@phils: Thx; terminé. En fait, il a été mentionné sur la page Zones , mais je l'ai également ajouté à la page Multiple Narrowings .
Tiré le