Inspiriert von dieser Frage: Lassen Sie Emacs den Cursor vom Bildschirm entfernen. Ich denke darüber nach, einen Nebenmodus zu schreiben, der den Cursor an einer festen Position hält, die nicht von Bildlaufvorgängen betroffen ist. Ich habe einige Ideen, wie ich dies implementieren könnte, aber es würde einen Haken erfordern, um mich wissen zu lassen, wenn der Cursor vom Bildschirm "gedrückt" wird.
Irgendwo im Darm von Emacs gibt es Code, der aufgerufen wird, wenn der Ort von point
aus dem Display verschoben wird. Obwohl gesagt wurde, dass der Code, der dieses Verhalten steuert, tief mit dem C-Quellcode zusammenlebt, würde ich gerne wissen, ob ich auf irgendeine Weise benachrichtigt werden kann, wenn dies bevorsteht.
Kann ich auf irgendeine Weise benachrichtigt werden, wenn ein Bildlaufbefehl den Cursor bewegt? Oder gibt es zumindest eine Möglichkeit, wie ich benachrichtigt werden kann, wenn die Anzeige gescrollt werden soll?
Update: Ich bin nicht mehr Planung auf einen kleineren Modus schreibt dies zu erreichen , weil ein neues Paket nur auf veröffentlicht wurde GNU ELPA genannt , scroll-restore
dass bietet genau die Eigenschaften , dass ich dachte , mich Umsetzung!
(window-start)
horizontales Scrollen? (Beachten Sie, dasswindow-hscroll
dies nicht der Fall ist, wenn sich die Schriftart im Puffer von der Standardschriftart unterscheidet.)@ Gilles Antwort ist der richtige Weg. Ich werde dieses hier für die Informationen und die Hacks behalten.
Ich glaube, die
point
Bewegung wird von den C-Funktionen ausgeführtwindow_scroll_line_based
undwindow_scroll_pixel_based
(abhängig von Ihren Rahmenparametern). Diese Funktionen sind der Lisp-Maschine nicht ausgesetzt, daher können Sie sie nicht empfehlen. Sie müssten Funktionen beraten, die sie aufrufen.Zwei der (lisp-zugänglichen) Funktionen, die dies tun können, sind
scroll-up
undscroll-down
. So habe ich von ihnen erfahren:M-x (put-text-property (region-beginning) (region-end) 'point-left (lambda (&rest _) (error "Point leaving")))
. Dies löst einen Fehler aus, wenn der Punkt die Region verlässt.M-x toggle-debug-on-error
.Sie erhalten einen Backtrace-Puffer wie diesen, der die
scroll-down
Funktion deutlich macht.Ich folgte
scroll-down
seiner C-Definition, diewindow_scroll
mich zu diesen beiden obigen Funktionen führte.Was du tun kannst
Sie können
scroll-down/up
mit einemaround
Rat beraten (sowie alle anderen Funktionen, die ebenfalls zu einer Punktbewegung führen können). Verwenden Sie diesen Rat, um zu überprüfen, ob sich die Position vonpoint
geändert hat, und notieren Sie die alte Position. Und dann mach was du willst.Seien Sie gewarnt, Ratschläge sind sehr unzuverlässig, wenn es um C-Funktionen geht. Einige wichtige Funktionen haben spezielle Adressen in bytekompiliertem Code, was bedeutet, dass beim Kompilieren des Codes keine Hinweise dazu aufgerufen werden. Ich denke nicht, dass dies hier der Fall sein wird, aber ich dachte, Sie sollten nicht.
quelle
scroll-down
undscroll-up
wäre hier nützlich. Es gibt viele andere Möglichkeiten, wie gescrollt werden kann. Zumindest alle Befehle mit derisearch-scroll
Eigenschaft sollten als Bildlaufbefehle betrachtet werden.