Ich liebe die Möglichkeit, Wort / Symbol an einem Punkt auszuwählen, den ich derzeit mit einem Doppelmausklick mache. Ich möchte es über die Tastatur tun können, und deshalb möchte ich es an einen Tastenanschlag binden (oder ist es vielleicht schon?), Also brauche ich den Namen der Funktion. Ich gehe davon aus, dass die Funktion bereits vorhanden sein muss, kann aber nicht herausfinden, wie sie heißt.
Ich habe es versucht, C-h k
aber dann, wenn ich mit der Maus doppelklicke, wird die Hilfe für <down-mouse-1>
angezeigt (ich gehe davon aus, dass das Hilfesystem nicht auf den zweiten Klick wartet oder so). Ich habe auch die Dokumentation durchsucht, in der diese Funktionalität in Abschnitt 21.2 definiert ist, aber sie enthält nicht den Namen der Funktion.
Update: Für typische Keybinding Ich nehme an, es ist das Äquivalent zu , <C-left>
gefolgt von <C-S-right>
denen sind left-word
und right-word
jeweils obwohl die Shift - Taste für den letzteren gehalten wird. (Ich verstehe die Beziehung zwischen Tastaturbezeichnungen mit der Umschalttaste und deren Zuordnung zu Funktionen nicht vollständig. Die Hilfe für die <C-S-right>
Übersetzung in, <C-right>
bevor sie identifiziert wird als right-word
)
quelle
C-h b
und Durchsuchen dieses Puffers zeigt, dass<double-mouse-1>
Aufrufemouse-set-point
(von "mouse.el") mit einem bestimmten Ereignis erfolgen. Ichshift-selection-mode
(siehe(info "(emacs) Shift Selection")
). Siehe auch emacs.stackexchange.com/questions/12858/…<right>
<C-left>
<C-S-right>
bedeutet, dass ich subtile Probleme, die in diesem Link ausführlich behandelt werden, nicht vollständig ansprechen muss.Antworten:
Es ist eigentlich ein bisschen kompliziert. Wenn Sie doppelklicken,
mouse-1
gibt es mehrere Aktionen.<down-mouse-1>
tritt zuerst auf, wenn Sie die Taste drücken. Tritt dannmouse-1
auf, wenn Sie die Taste loslassen.<down-mouse-1>
ist an den Befehl gebundenmouse-drag-region
, und dieser Befehl ruft aufmouse-drag-track
. Diese Funktion zählt die Mausklicks und verfolgt jede Mausbewegung (wenn Sie doppelklicken, bedeutet dies, dass Sie die Maus nicht bewegt haben).mouse-drag-track
ruft die Funktionmouse-start-end
auf, um den zu wählenden Textbereich zu bestimmen. Es wird anmouse-start-end
die Position übergeben, auf die Sie geklickt haben, die ersten beiden Argumente und die Anzahl der Klicks als drittes Argument. Dies istmouse-start-end
:Die als drittes arg (
MODE
) übergebene Klickzahl ist 1 für einen Doppelklick.Sie können nicht nur einen Teil dieses Codes über eine Tastaturtastenfolge aufrufen, aber wenn Sie den Code untersuchen, können Sie möglicherweise einen Befehl zum Binden der Tastaturtaste schreiben, um das zu tun, was Sie möchten.
quelle
C-h k
dies bei Mausereignissen nicht funktioniert. Der beste Weg, um herauszufinden, wie Emacs "mit der Maus umgeht", besteht darin, sie als Tastaturmakro aufzuzeichnen, zu benennen und dann den voninsert-kbd-macro
Generell generierten Code zu betrachten. Ich würde nicht versuchen, ein Mausereignis in einem zu verwenden Makro, daher sind diese temporären Makros nur nützlich, um zu sehen, was Emacs tut.@Drew hat einige der Komplexitäten erklärt, die mit Ereignissen verbunden sind, die an Mausaktionen gebunden sind. Was Ihr letztendliches Ziel betrifft, das Wort an einer bestimmten Stelle mit der Tastatur zu markieren, könnte Sie die Erweiterungsregion interessieren .
expand-region
Mit dieser Option können Sie die Region nach semantischen Einheiten bearbeiten. Wenn beispielsweise keine Region aktiv ist, markiert ein Aufrufer/expand-region
(normalerweise gebunden anC-=
) das aktuelle Wort. Durch erneutes Aufrufen wird die Region auf den aktuellen Satz erweitert. Und dann der Absatz, der Abschnitt usw. Die tatsächlichen Einheiten hängen von dem Modus ab, in dem Sie sich befinden. In den Lisp-Modi sind dies also Symbol, Ausdruck, der das Symbol einschließt, Ausdruck, der diesen Ausdruck einschließt usw.Die verlinkte Seite enthält weitere Erklärungen und ein Video, das dies demonstriert.
quelle
Hier ist eine Funktion, die ich extrahiert
mouse-set-region
habe und die beim Doppelklicken die Markierung übernimmt:quelle