Eng bis zur vorherigen Einschränkung

8

Gibt es eine bequeme Möglichkeit, die vorherige Einschränkung wiederherzustellen? Also nach der folgenden Abfolge von Ereignissen:

  • Markieren Sie eine Region
  • Rufen Sie an narrow-to-regionund erledigen Sie Ihre Arbeit.
  • Rufen Sie widenan, um herumzuspringen und nach etwas zu suchen

Ich möchte mich wieder auf die ursprüngliche Region beschränken, ohne sie erneut markieren zu müssen.

Glucas
quelle
Dies ist schwierig, da sich der Inhalt des Puffers natürlich zwischen dem Aufruf wideneines hypothetischen renarrowBefehls und dem Aufruf eines hypothetischen Befehls ändern kann . Vielleicht ist der beste Ansatz, die Grenzen der Region irgendwo zu speichern und einen Befehl zum Markieren der zuletzt gespeicherten Region zu haben.
Glucas

Antworten:

2

Anstatt den Hauptpuffer einzugrenzen, können Sie einen neuen indirekten Puffer öffnen und Folgendes eingrenzen :

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

Dadurch wird ein neuer indirekter Puffer Ihres aktuellen Puffers geöffnet, der auf Ihre aktuelle Region eingegrenzt ist. Das Bearbeiten dieses Puffers entspricht dem Bearbeiten des Hauptpuffers, und Sie können zwischen diesen hin und her wechseln.

Wie so:

Geben Sie hier die Bildbeschreibung ein

Sie könnten dies mit netten Funktionen wie erweitern

  • Automatische Verengung auf die aktuelle Funktion
  • Benennen des neuen Puffers nach der aktuellen Funktion
  • Eine Tastenkombination zum Wechseln zwischen dem indirekten Puffer einer Funktion und dem Hauptpuffer
  • Es wird kein neuer indirekter Puffer für Funktionen erstellt, für die bereits einer geöffnet ist

Das liegt aber ganz bei Ihnen.

Jordon Biondo
quelle
Danke, das könnte der richtige Weg sein. Ich konnte auch das Gegenteil sehen: Erstellen Sie aus einem verengten Puffer einen erweiterten indirekten Puffer, um etwas nachzuschlagen.
Glucas
7

Entschuldigung, ich habe Ihre Frage nicht früher gesehen.

Dies ist genau einer der Gründe für Library Zones ( zones.el).

Wenn Sie den Puffer eingrenzen , wird jede Verengung einem Ring von Verengungen hinzugefügt , der den vollständigen (nicht gekrümmten) Puffer enthält. Die Verengungen können verschachtelt sein, müssen es aber nicht. Sie können beliebige Regionen sein.

Sie können zwischen den Verengungen wechseln (mit C-x n x x x...). Sie können direkt zur N- ten vorherigen Verengung gehen, indem Sie ein numerisches Präfix arg verwenden. zB , C-3 C-x n x. Die Ebene verbreitert C-usich vollständig (wie beim C-x n wRadfahren zum ungepfeilten Ringeintritt). C-0leert den Ring.

Die Moduszeile zeigt an, welche Verengung (Pufferbeschränkung) aktuell ist.

Sie können den Ring der aktuellen Pufferbeschränkungen sogar dauerhaft speichern und später wiederherstellen. Wenn Sie die Bibliothek Lesezeichen + verwenden , können Sie einen Ring von Einschränkungen mit einem Lesezeichen versehen und später wiederherstellen, indem Sie zum Lesezeichen springen.

Weitere Informationen finden Sie unter Mehrere Verengungen .


Siehe auch Narrow Indirect (Bibliothek narrow-indirect.el). Sie können auf einfache Weise eine beliebige Anzahl indirekter Puffer erstellen, die Klone des Hauptpuffers sind und auf bestimmte Teile davon eingegrenzt sind.

Drew
quelle
@phils: Thx; erledigt. Eigentlich wurde es auf der Seite " Zonen " erwähnt, aber ich habe es auch der Seite " Mehrere Eingrenzungen" hinzugefügt .
Drew