Мне нравится возможность выбирать слово / символ в точке, которую я сейчас делаю двойным щелчком мыши. Я хотел бы иметь возможность делать это с клавиатуры, и поэтому я хотел бы привязать его к нажатию клавиши (или, может быть, это уже есть?), Поэтому мне нужно имя функции. Я предполагаю, что функция уже должна существовать, но я не могу понять, как она называется.
Я пытался, C-h k
но затем, когда я дважды щелкаю мышью, появляется справка <down-mouse-1>
(я предполагаю, что справочная система не ждет второго щелчка или чего-то еще). Я также искал документацию, где эта функциональность определена в разделе 21.2, но там не указано название функции.
Обновление: Для типичного сочетания клавиш я полагаю , что это эквивалентно <C-left>
затем , <C-S-right>
которые являются left-word
и , right-word
соответственно, хотя смена ключ проводятся для последнего. (Я не до конца понимаю взаимосвязь между назначениями клавиатуры с помощью клавиши Shift и их отображением в функциях, справка по <C-S-right>
переводит их до того, <C-right>
как он идентифицирует их как right-word
)
источник
C-h b
и поиск в этом буфере показывает, что<double-mouse-1>
вызовыmouse-set-point
(из "mouse.el") с каким-то конкретным событием. Не уверен, насколько это помогает :)shift-selection-mode
(см.(info "(emacs) Shift Selection")
). См. Также emacs.stackexchange.com/questions/12858/…<right>
<C-left>
<C-S-right>
что мне не нужно полностью решать тонкие вопросы, подробно обсуждаемые в этой ссылке.Ответы:
Это на самом деле немного сложно. При двойном щелчке
mouse-1
происходит несколько действий.<down-mouse-1>
происходит первым, когда вы нажимаете кнопку. Затемmouse-1
происходит, когда вы отпустите кнопку.<down-mouse-1>
связан с командойmouse-drag-region
, и эта команда вызываетmouse-drag-track
. Эта функция считает нажатия кнопки мыши и отслеживает любое движение мыши (если вы дважды щелкнете, это означает, что вы не двигали мышь).mouse-drag-track
вызывает функцию,mouse-start-end
чтобы определить диапазон текста для выбора. Он переходитmouse-start-end
в позицию, в которой вы щелкнули, первые два аргумента и количество кликов в качестве третьего аргумента. Этоmouse-start-end
:Счетчик кликов, переданный в качестве третьего аргумента (
MODE
), равен 1 для двойного щелчка.Вы не сможете просто вызвать часть этого кода из последовательности клавиш клавиатуры, но изучение кода может помочь вам написать команду привязки клавиш клавиатуры, чтобы сделать то, что вы хотите.
источник
C-h k
не работает для событий мыши. Лучший способ выяснить, как Emacs «обрабатывает мышь», - это записать его как макрос клавиатуры, назвать его, а затем посмотреть на код, сгенерированный.insert-kbd-macro
Обычно я не буду пытаться использовать событие мыши в макрос, так что эти временные макросы просто полезны, чтобы увидеть, что делает Emacs.@Drew объяснил некоторые сложности, связанные с событиями, связанными с действиями мыши. Что касается вашей конечной цели пометки слова в точке с помощью клавиатуры, вас может заинтересовать расширение области .
expand-region
позволяет манипулировать регионом семантическими единицами. Например, когда ни одна область не активна, вызовer/expand-region
(обычно связанный сC-=
) помечает текущее слово. Повторный вызов расширяет регион до текущего предложения. А затем параграф, раздел и т. Д. Фактические единицы измерения будут зависеть от режима, в котором вы находитесь, поэтому в режимах lisp они будут символом, выражением, содержащим символ, выражением, содержащим это выражение, и т. Д.На связанной странице есть дополнительное объяснение и видео, демонстрирующее это.
источник
Вот функция, которую я извлек,
mouse-set-region
которая делает маркировку при двойном щелчке:источник