@ 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ührt
window_scroll_line_based
und window_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
und
scroll-down
. So habe ich von ihnen erfahren:
- Gehe zu einem langen Puffer.
- Wählen Sie eine kleine Region.
- Rufen Sie an ,
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.
- Aktivieren
M-x toggle-debug-on-error
.
- Stellen Sie sicher, dass sich der Punkt innerhalb dieser Region befindet.
- Scrollen Sie mit dem Mausrad, bis der Punkt aus dem Bereich gezogen wird.
Sie erhalten einen Backtrace-Puffer wie diesen, der die scroll-down
Funktion deutlich macht.
Debugger entered--Lisp error: (error "Point leaving")
signal(error ("Point leaving"))
error("Point leaving")
(lambda (&rest _) (error "Point leaving"))(1508 1192)
scroll-down(10)
funcall(scroll-down 10)
mwheel-scroll((double-mouse-4 (#<window 50 on *Backtrace*> 1299 (578 . 545) 77086296 nil 1299 (57 . 25) nil (398 . 20) (10 . 21)) 2))
funcall-interactively(mwheel-scroll (double-mouse-4 (#<window 50 on *Backtrace*> 1299 (578 . 545) 77086296 nil 1299 (57 . 25) nil (398 . 20) (10 . 21)) 2))
call-interactively(mwheel-scroll nil nil)
command-execute(mwheel-scroll)
Ich folgte scroll-down
seiner C-Definition, die
window_scroll
mich zu diesen beiden obigen Funktionen führte.
Was du tun kannst
Sie können scroll-down/up
mit einem around
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 von point
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.