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 kpero 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-wordy right-wordrespectivamente, 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 by 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-1hay varias acciones.<down-mouse-1>ocurre primero, cuando presiona el botón. Entoncesmouse-1ocurre, 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-trackllama a la funciónmouse-start-endpara determinar el rango de texto a seleccionar. Pasa amouse-start-endla 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 kno 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-macroGeneralmente, 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-regionle 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-regionque marca cuando hace doble clic:fuente