Me encanta la capacidad de seleccionar palabra / símbolo en el punto que actualmente hago con doble clic del mouse. Me gustaría poder hacerlo desde el teclado, por lo que me gustaría vincularlo a una pulsación de tecla (¿o tal vez ya lo es?), Así que necesito el nombre de la función. Supongo que la función ya debe existir, pero no puedo entender cuál es su nombre.
Lo intenté, C-h k
pero cuando hago doble clic con el mouse <down-mouse-1>
aparece la ayuda (supongo que el sistema de ayuda no espera el segundo clic o algo así). También busqué en la documentación donde esta funcionalidad se define en la sección 21.2, pero no dice el nombre de la función.
Actualización: para la combinación de teclas típica, supongo que es el equivalente a <C-left>
seguido de <C-S-right>
cuáles son left-word
y right-word
respectivamente, aunque la tecla Mayús se mantiene para este último. (No entiendo completamente la relación entre las designaciones de teclado con la tecla Mayús y su asignación a funciones, la ayuda se <C-S-right>
traduce <C-right>
antes de que se identifique como right-word
)
fuente
C-h b
y la búsqueda a través de ese búfer muestra que las<double-mouse-1>
llamadasmouse-set-point
(desde "mouse.el") tienen algún evento específico. No estoy seguro de cuánto ayuda esto :)shift-selection-mode
(ver(info "(emacs) Shift Selection")
). Ver también emacs.stackexchange.com/questions/12858/…<right>
<C-left>
<C-S-right>
significa que no necesito abordar completamente los problemas sutiles discutidos en detalle en ese enlace.Respuestas:
En realidad es un poco complicado. Cuando hace doble clic,
mouse-1
hay varias acciones.<down-mouse-1>
ocurre primero, cuando presiona el botón. Entoncesmouse-1
ocurre, cuando sueltas el botón.<down-mouse-1>
está obligado a ordenarmouse-drag-region
, y ese comando llamamouse-drag-track
. Esa función cuenta los clics del botón del mouse y realiza un seguimiento de cualquier movimiento del mouse (si hace doble clic, significa que no movió el mouse).mouse-drag-track
llama a la funciónmouse-start-end
para determinar el rango de texto a seleccionar. Pasa amouse-start-end
la posición donde hizo clic, los dos primeros argumentos y el recuento de clics, como el tercer argumento. Esto esmouse-start-end
:El recuento de clics pasado como el tercer argumento (
MODE
) es 1 para un doble clic.No podrá llamar solo parte de este código desde una secuencia de teclas del teclado, pero examinar el código podría ayudarlo a escribir un comando enlazable con la tecla del teclado para hacer lo que desee.
fuente
C-h k
no funciona para eventos de mouse. La mejor manera que he descubierto para investigar cómo Emacs "maneja el mouse" es grabarlo como una macro de teclado, nombrarlo y luego mirar el código generado porinsert-kbd-macro
Generalmente, no trataría de usar un evento de mouse en un macro, por lo que estas macros temporales son útiles para ver qué está haciendo Emacs.@Drew ha explicado algo de la complejidad asociada con los eventos vinculados a las acciones del mouse. En cuanto a su objetivo final de marcar la palabra en el punto usando el teclado, es posible que le interese expandir la región .
expand-region
le permite manipular la región por unidades semánticas. Por ejemplo, cuando no hay ninguna región activa, la llamadaer/expand-region
(generalmente vinculada aC-=
) marcará la palabra actual. Llamarlo nuevamente expande la región a la oración actual. Y luego el párrafo, la sección, etc. Las unidades reales dependerán del modo en el que se encuentre, por lo que en los modos lisp serían símbolo, expresión que encierra el símbolo, expresión que encierra esa expresión, etc.La página vinculada tiene más explicaciones y un video que lo demuestra.
fuente
Aquí hay una función que extraje de
mouse-set-region
que marca cuando hace doble clic:fuente