NB: Der Beitrag Wie verschiebe ich einen Punkt an das Ende eines anderen Puffers, indem ich "with-current-buffer" und "goto-char" verwende? Vermutlich stellt sich dieselbe Frage wie diese, aber die Antworten darauf lassen sich hier nicht ohne weiteres auf meinen Fall übertragen. Diese Antworten beinhalten beispielsweise das Einfügen von Text in den anderen Puffer usw. Die Frage, die ich hier stelle, ist erheblich einfacher, und ich erwarte, dass die Antwort darauf auch entsprechend einfach sein sollte.
Nehme an, dass
- Der Emacs-Frame ist in zwei Fenster unterteilt, wobei eines der Fenster einen aufgerufenen Puffer
*whatever*
und das andere den Standardpuffer enthält*scratch*
. - Der
*whatever*
Puffer enthält mehrere Textzeilen. - der Cursor im
*whatever*
Puffer befindet sich am Anfang dieses Puffers (dh an seinem(point-min)
); - der
*scratch*
Puffer ist der aktuelle;
Wenn ich jetzt Folgendes im *scratch*
Puffer auswerte , *whatever*
bleibt die Position des Cursors im Puffer unverändert:
(with-current-buffer "*whatever*"
(goto-char (point-max)))
(with-current-buffer "*whatever*"
(end-of-buffer))
(save-excursion
(set-buffer "*whatever*")
(goto-char (point-max)))
(save-excursion
(set-buffer "*whatever*")
(end-of-buffer))
Ich vermute , dass, was auch immer (goto-char (point-max))
oder (end-of-buffer)
tut *whatever*
Position ‚s Cursor anschließend verworfen wird.
Wie muss ich eines der obigen Snippets so ändern, dass der Cursor des
*whatever*
Puffers (dauerhaft!) Am Ende dieses Puffers positioniert wird?Was hätte ich tun sollen, um diese Frage mithilfe der Emacs-Dokumente selbst zu beantworten? Ich habe alles versucht, was mir einfiel.
Nachdem ich Jules Tamagnans aufschlussreiche Antwort gelesen hatte, wurde mir klar, dass ich eine weitere Bestimmung explizit machen muss:
Ich suche nach einer Lösung, die unabhängig davon funktioniert, ob der betreffende Puffer in einem Fenster sichtbar ist oder nicht.
Wenn ich Puffer B in einem Fenster W ansehe, den Cursor an eine bestimmte Stelle L bewege , dann einen anderen Puffer C im selben Fenster W ansehe und schließlich W zurück zu Puffer B zeige , erwarte ich, dass sich der Cursor an befindet der gleiche Ort L, an dem ich es verlassen habe. IOW, es muss eine Möglichkeit geben, dass sich ein Puffer daran erinnert, wo sich sein Punkt befindet, unabhängig davon, ob er einem Fenster zugeordnet ist oder nicht.
Was ist mit dem Fall, in dem der Zielpuffer derzeit in zwei oder mehr Fenstern sichtbar ist ( W1 , W2 , W3 , ...)? Für diesen Fall gibt es viele vernünftige Möglichkeiten. Die vorgeschlagene Lösung könnte beispielsweise die Position des Cursors ändern
- im zuletzt aktiven Fenster zwischen W1 , W2 , W3 , ...;
- in allen Fenstern W1 , W2 , W3 , ...; oder
- usw. usw.
(Ich habe keine feste Meinung zu diesem Eckfall, da ich davon ausgehe, dass er in der Praxis äußerst selten ist.)