Uwielbiam możliwość wyboru słowa / symbolu w punkcie, który obecnie robię podwójnym kliknięciem myszy. Chciałbym móc to zrobić z klawiatury, więc chciałbym powiązać to z naciśnięciem klawisza (a może już jest?), Więc potrzebuję nazwy funkcji. Zakładam, że funkcja musi już istnieć, ale nie mogę zrozumieć, jak się nazywa.
Próbowałem, C-h k
ale potem po dwukrotnym kliknięciu myszą <down-mouse-1>
pojawia się pomoc (zakładam, że system pomocy nie czeka na drugie kliknięcie). Przeszukałem również dokumentację, w której ta funkcjonalność jest zdefiniowana w sekcji 21.2, ale nie podaje nazwy funkcji.
Aktualizacja: W przypadku typowego kombinacja klawiszy Przypuszczam, że jest to równoznaczne z <C-left>
zastosowaną przez <C-S-right>
które left-word
i right-word
odpowiednio, chociaż klawisz Shift jest przeznaczone do tego ostatniego. (Nie do końca rozumiem związek między oznaczeniami klawiatury za pomocą klawisza Shift a ich mapowaniem do funkcji, pomoc w <C-S-right>
tłumaczeniu go <C-right>
przed identyfikacją jako right-word
)
źródło
C-h b
i przeszukiwanie tego bufora pokazuje, że<double-mouse-1>
wywołaniamouse-set-point
(z „mouse.el”) z określonym zdarzeniem. Nie wiesz, ile to pomaga :)shift-selection-mode
(patrz(info "(emacs) Shift Selection")
). Zobacz także emacs.stackexchange.com/questions/12858/...<right>
<C-left>
<C-S-right>
oznacza, że nie muszę w pełni zajmować się subtelnymi kwestiami omówionymi szczegółowo w tym linku.Odpowiedzi:
To jest trochę skomplikowane. Po dwukrotnym kliknięciu
mouse-1
dostępnych jest wiele akcji.<down-mouse-1>
występuje najpierw po naciśnięciu przycisku. Następniemouse-1
następuje po zwolnieniu przycisku.<down-mouse-1>
jest zobowiązany do poleceniamouse-drag-region
, a to polecenie wywołujemouse-drag-track
. Ta funkcja zlicza kliknięcia przycisku myszy i śledzi każdy ruch myszy (dwukrotne kliknięcie oznacza, że nie poruszyłeś myszą).mouse-drag-track
wywołuje funkcję,mouse-start-end
aby określić zakres tekstu do wyboru. Przechodzi domouse-start-end
pozycji, w której kliknąłeś, pierwsze dwa argumenty i kliknięcie liczą się jako trzeci argument. To jestmouse-start-end
:Liczba kliknięć przekazana jako trzeci argument arg (
MODE
) wynosi 1 dla podwójnego kliknięcia.Nie będziesz w stanie wywołać części tego kodu z sekwencji klawiszy na klawiaturze, ale sprawdzenie kodu może pomóc w napisaniu komendy, którą można przypisać do klawisza, aby zrobić to, co chcesz.
źródło
C-h k
nie działa w przypadku zdarzeń myszy. Najlepszym sposobem, w jaki doszedłem do zbadania, w jaki sposób Emacs „obsługuje mysz”, jest zarejestrowanie go jako makra klawiatury, nazwanie go, a następnie spojrzenie na kod wygenerowany przezinsert-kbd-macro
Generalnie nie próbowałbym używać zdarzenia myszy w makro, więc te tymczasowe makra są po prostu przydatne, aby zobaczyć, co robi Emacs.@Drew wyjaśnił część złożoności związanej ze zdarzeniami związanymi z działaniami myszy. Jeśli chodzi o ostateczny cel oznaczenia słowa w punkcie przy użyciu klawiatury, możesz zainteresować się rozwinięciem regionu .
expand-region
pozwala manipulować regionem za pomocą jednostek semantycznych. Na przykład, gdy żaden region nie jest aktywny, wywołanieer/expand-region
(zwykle powiązaneC-=
) spowoduje zaznaczenie bieżącego słowa. Ponowne wywołanie powoduje rozszerzenie regionu na bieżące zdanie. A potem akapit, sekcja itp. Rzeczywiste jednostki będą zależeć od trybu, w którym się znajdujesz, więc w trybach seplacji będą to symbol, wyrażenie otaczające symbol, wyrażenie otaczające to wyrażenie itp.Strona, do której prowadzi link, zawiera dodatkowe objaśnienia i film wideo.
źródło
Oto funkcja, którą wyodrębniłem,
mouse-set-region
która wykonuje oznaczenie po dwukrotnym kliknięciu:źródło