Saya suka kemampuan untuk memilih kata / simbol pada titik yang saat ini saya lakukan dengan klik mouse ganda. Saya ingin dapat melakukannya dari keyboard, jadi saya ingin mengikatnya keystroke (atau mungkin sudah?), Jadi saya perlu nama fungsinya. Saya menganggap fungsi tersebut harus sudah ada, tetapi saya tidak tahu apa namanya.
Saya mencoba C-h k
tetapi kemudian ketika saya klik dua kali mouse bantuan untuk <down-mouse-1>
muncul (saya menganggap sistem bantuan tidak menunggu klik kedua atau sesuatu). Saya juga mencari dokumentasi di mana fungsi ini didefinisikan di bagian 21.2, tetapi tidak menyebutkan nama fungsinya.
Pembaruan: Untuk pengikatan kunci tipikal, saya kira itu sama dengan <C-left>
diikuti oleh <C-S-right>
yang mana left-word
dan right-word
masing - masing, meskipun tombol shift diadakan untuk yang terakhir. (Saya tidak sepenuhnya memahami hubungan antara penunjukan keyboard dengan tombol shift dan pemetaannya terhadap fungsi, bantuan untuk <C-S-right>
menerjemahkannya <C-right>
sebelum mengidentifikasi sebagai right-word
)
sumber
C-h b
dan mencari melalui buffer itu menunjukkan bahwa<double-mouse-1>
panggilanmouse-set-point
(dari "mouse.el") dengan beberapa peristiwa tertentu. Tidak yakin seberapa banyak ini membantu :)shift-selection-mode
(lihat(info "(emacs) Shift Selection")
). Lihat juga emacs.stackexchange.com/questions/12858/…<right>
<C-left>
<C-S-right>
cara saya tidak perlu sepenuhnya mengatasi masalah halus yang dibahas panjang lebar di tautan itu.Jawaban:
Ini sebenarnya agak rumit. Ketika Anda mengklik dua kali
mouse-1
ada beberapa tindakan.<down-mouse-1>
terjadi lebih dulu, ketika Anda menekan tombol. Kemudianmouse-1
terjadi, ketika Anda melepaskan tombol.<down-mouse-1>
terikat pada perintahmouse-drag-region
, dan perintah itu memanggilmouse-drag-track
. Fungsi itu menghitung klik tombol mouse dan melacak setiap gerakan mouse (jika Anda mengklik dua kali itu berarti Anda tidak menggerakkan mouse).mouse-drag-track
fungsi panggilanmouse-start-end
untuk menentukan rentang teks yang akan dipilih. Ini lolos kemouse-start-end
posisi di mana Anda mengklik, dua arg pertama, dan jumlah klik, sebagai arg ketiga. Ini adalahmouse-start-end
:Hitungan-klik yang dilewati sebagai arg ketiga (
MODE
) adalah 1 untuk klik-ganda.Anda tidak akan dapat hanya memanggil beberapa kode ini dari urutan tombol keyboard, tetapi memeriksa kode ini dapat membantu Anda menulis perintah yang dapat diikat dengan tombol keyboard untuk melakukan apa yang Anda inginkan.
sumber
C-h k
tidak berfungsi untuk acara mouse. Cara terbaik yang saya temukan untuk menyelidiki bagaimana Emacs "menangani mouse" adalah merekamnya sebagai keyboard makro, beri nama, dan kemudian lihat kode yang dihasilkan olehinsert-kbd-macro
Umumnya saya tidak akan mencoba menggunakan acara mouse dalam sebuah makro, jadi makro sementara ini hanya berguna untuk melihat apa yang sedang dilakukan Emacs.@Drew telah menjelaskan beberapa kompleksitas yang terkait dengan peristiwa yang terkait dengan tindakan mouse. Adapun tujuan akhir Anda menandai kata pada titik menggunakan keyboard, Anda mungkin tertarik dalam memperluas wilayah .
expand-region
memungkinkan Anda untuk memanipulasi wilayah oleh unit semantik. Misalnya, ketika tidak ada wilayah yang aktif, panggilaner/expand-region
(biasanya terikatC-=
) akan menandai kata saat ini. Menyebutnya lagi memperluas wilayah ke kalimat saat ini. Dan kemudian paragraf, bagian dll. Unit yang sebenarnya akan tergantung pada mode Anda, jadi dalam mode lisp mereka akan menjadi simbol, ekspresi melampirkan simbol, ekspresi melampirkan ekspresi itu dll.Halaman yang ditautkan memiliki penjelasan lebih lanjut dan video yang menunjukkan hal ini.
sumber
Berikut adalah fungsi yang saya ekstrak dari
mouse-set-region
yang melakukan penandaan saat Anda mengklik dua kali:sumber