Adoro a capacidade de selecionar palavras / símbolos no ponto que atualmente faço com o clique duplo do mouse. Gostaria de poder fazer isso a partir do teclado e, portanto, gostaria de vinculá-lo a um pressionamento de tecla (ou talvez já o seja?), Por isso preciso do nome da função. Presumo que a função já deva existir, mas não consigo descobrir qual é o nome.
Tentei, C-h k
mas quando clico duas vezes no mouse, <down-mouse-1>
aparece a ajuda (presumo que o sistema de ajuda não aguarde o segundo clique ou algo assim). Também procurei na documentação em que essa funcionalidade está definida na seção 21.2, mas ela não diz o nome da função.
Atualização: para atalhos de teclado típicos, suponho que seja o equivalente ao <C-left>
seguido pelos <C-S-right>
quais são left-word
e right-word
respectivamente, embora a tecla shift seja mantida para o último. (Eu não entendo completamente a relação entre as designações do teclado com a tecla shift e o mapeamento para funções, a ajuda para <C-S-right>
traduzi-lo <C-right>
antes de identificá-lo como right-word
)
fonte
C-h b
e a pesquisa nesse buffer mostram as<double-mouse-1>
chamadasmouse-set-point
(de "mouse.el") com algum evento específico. Não tenho certeza quanto isso ajuda :)shift-selection-mode
(consulte(info "(emacs) Shift Selection")
). Veja também emacs.stackexchange.com/questions/12858/…<right>
<C-left>
<C-S-right>
meios que eu não preciso abordar completamente questões sutis discutidas detalhadamente nesse link.Respostas:
Na verdade, é um pouco complicado. Quando você clica duas vezes,
mouse-1
há várias ações.<down-mouse-1>
ocorre primeiro quando você pressiona o botão. Entãomouse-1
ocorre, quando você solta o botão.<down-mouse-1>
está vinculado ao comandomouse-drag-region
, e esse comando chamamouse-drag-track
. Essa função conta os cliques do botão do mouse e acompanha qualquer movimento do mouse (se você clicar duas vezes, significa que não moveu o mouse).mouse-drag-track
chama a funçãomouse-start-end
para determinar o intervalo de texto a ser selecionado. Ele passa paramouse-start-end
a posição em que você clicou, os dois primeiros argumentos e a contagem de cliques, como o terceiro argumento. Isto émouse-start-end
:A contagem de cliques passada como o terceiro arg (
MODE
) é 1 para um clique duplo.Você não poderá chamar apenas parte desse código a partir de uma sequência de teclas do teclado, mas examinar o código poderá ajudá-lo a escrever um comando de ligação de teclas do teclado para fazer o que deseja.
fonte
C-h k
que não funciona para eventos do mouse. A melhor maneira que descobri para investigar como o Emacs "está manipulando o mouse" é gravá-lo como uma macro de teclado, nomeá-lo e, em seguida, ver o código gerado peloinsert-kbd-macro
Geralmente, eu não tentaria usar um evento de mouse em um macro, essas macros temporárias são úteis apenas para ver o que o Emacs está fazendo.O @Drew explicou algumas das complexidades associadas aos eventos vinculados às ações do mouse. Quanto ao seu objetivo final de marcar a palavra no momento usando o teclado, você pode estar interessado na região de expansão .
expand-region
permite manipular a região por unidades semânticas. Por exemplo, quando nenhuma região está ativa, a chamadaer/expand-region
(normalmente vinculada aC-=
) marcará a palavra atual. A chamada novamente expande a região para a frase atual. E então o parágrafo, seção etc. As unidades reais dependerão do modo em que você está; portanto, nos modos lisp, eles seriam símbolo, expressão que encerra o símbolo, expressão que encerra essa expressão etc.A página vinculada tem mais explicações e um vídeo demonstrando isso.
fonte
Aqui está uma função que eu extraí
mouse-set-region
que faz a marcação quando você clica duas vezes:fonte