J'aime la possibilité de sélectionner un mot / symbole au point que je fais actuellement avec un double clic de souris. Je voudrais pouvoir le faire à partir du clavier, et je voudrais donc le lier à une frappe (ou peut-être qu'il l'est déjà?), J'ai donc besoin du nom de la fonction. Je suppose que la fonction doit déjà exister, mais je ne peux pas comprendre son nom.
J'ai essayé C-h k
mais quand je double-clique sur la souris, l'aide pour <down-mouse-1>
s'affiche (je suppose que le système d'aide n'attend pas le deuxième clic ou quelque chose). J'ai également cherché dans la documentation où cette fonctionnalité est définie dans la section 21.2, mais elle ne dit pas le nom de la fonction.
Mise à jour: Pour la liaison de touches typique, je suppose que c'est l'équivalent de <C-left>
suivi de <C-S-right>
qui sont left-word
et right-word
respectivement, bien que la touche Maj soit maintenue pour ce dernier. (Je ne comprends pas complètement la relation entre les désignations de clavier avec la touche Maj et leur mappage aux fonctions, l'aide pour la <C-S-right>
traduire <C-right>
avant de l'identifier right-word
)
la source
C-h b
et la recherche dans ce tampon montrent que les<double-mouse-1>
appelsmouse-set-point
(depuis "mouse.el") avec un événement spécifique. Je ne sais pas combien cela aide :)shift-selection-mode
(voir(info "(emacs) Shift Selection")
). Voir aussi emacs.stackexchange.com/questions/12858/…<right>
<C-left>
<C-S-right>
signifie que je n'ai pas besoin de résoudre complètement les problèmes subtils longuement discutés dans ce lien.Réponses:
C'est en fait un peu compliqué. Lorsque vous double-cliquez,
mouse-1
il existe plusieurs actions.<down-mouse-1>
se produit en premier, lorsque vous appuyez sur le bouton. Semouse-1
produit ensuite , lorsque vous relâchez le bouton.<down-mouse-1>
est lié à la commandemouse-drag-region
, et cette commande appellemouse-drag-track
. Cette fonction compte les clics du bouton de la souris et garde la trace de tout mouvement de la souris (si vous double-cliquez, cela signifie que vous n'avez pas déplacé la souris).mouse-drag-track
appelle la fonctionmouse-start-end
pour déterminer la plage de texte à sélectionner. Il passe àmouse-start-end
la position où vous avez cliqué, les deux premiers arguments et le nombre de clics, comme troisième argument. C’estmouse-start-end
:Le nombre de clics passé comme troisième argument (
MODE
) est 1 pour un double-clic.Vous ne pourrez pas simplement appeler une partie de ce code à partir d'une séquence de touches du clavier, mais l'examen du code peut vous aider à écrire une commande de raccourci clavier pour faire ce que vous voulez.
la source
C-h k
cela ne fonctionne pas pour les événements de souris. Le meilleur moyen que j'ai trouvé pour étudier comment Emacs "gère la souris" est de l'enregistrer en tant que macro clavier, de le nommer, puis de regarder le code généré parinsert-kbd-macro
Généralement, je n'essaierais pas d'utiliser un événement de souris dans un macro, donc ces macros temporaires sont juste utiles pour voir ce que fait Emacs.@Drew a expliqué une partie de la complexité associée aux événements liés aux actions de la souris. Quant à votre objectif ultime de marquer le mot au point à l'aide du clavier, vous pourriez être intéressé par expand-region .
expand-region
vous permet de manipuler la région par unités sémantiques. Par exemple, lorsqu'aucune région n'est active, l'appeler/expand-region
(généralement lié àC-=
) marquera le mot actuel. L'appeler à nouveau étend la région à la phrase actuelle. Et puis le paragraphe, la section etc. Les unités réelles dépendront du mode dans lequel vous vous trouvez, donc dans les modes lisp, elles seraient le symbole, l'expression entourant le symbole, l'expression entourant cette expression, etc.La page liée contient des explications supplémentaires et une vidéo illustrant cela.
la source
Voici une fonction que j'ai extraite de
mouse-set-region
qui fait le marquage lorsque vous double-cliquez:la source