Perilaku normal Emacs ketika mode tanda-transien aktif adalah bahwa ketika Anda melakukan pemilihan-shift, maka jika perintah berikutnya adalah gerakan non-shift, tanda dinonaktifkan. Misalnya, setelah perintah M-l
(untuk menandai baris saat ini dengan fungsi di bawah) dan C-f
, tanda dinonaktifkan. Bagaimana cara meniru perilaku itu dari elisp sesudahnya (set-mark-command nil)
?
Sebagai contoh:
(defun my-mark-current-line ()
(interactive)
(beginning-of-line)
(set-mark-command nil)
(end-of-line)
(forward-char))
(global-set-key (kbd "M-l") 'my-mark-current-line)
Sekarang lakukan Ml Cf dan wilayah akan tumbuh, tetapi sebaliknya, saya ingin perilaku default, yaitu wilayah untuk menonaktifkan saat Cf, dan tumbuh dengan CSf.
EDIT : haruskah menggunakan fungsi yang berbeda untuk set-mark-command yang memungkinkan ini? Saya tidak dapat menemukannya.
C-f
akan berlaku untuk semua perintah navigasi lain yang Anda gunakan juga.
C-f
setelah M-l
tidak memperluas wilayah karena tidak ada wilayah aktif di akhir M-l
(yang terikat downcase-word
secara default).
M-l
dirujuk oleh OP bukan pengikatan default ( downcase-word
), tetapi pengikatan kustommy-mark-current-line
C-S-f
dianalogikan denganC-SPC
(mengaktifkan suatu wilayah) +C-f
(navigasi). Anda mungkin bisa mendapatkan apa yang Anda inginkan dengan mengikatC-f
ke fungsi pembungkus yang pertama menonaktifkan suatu wilayah jika aktif dan kemudian mulai melakukan apa yangC-f
dilakukan (forward-char
); dan ikatC-S-f
langsung keforward-char
. Perhatikan bahwa jika Anda pernah menggunakan emacs dalam mode terminal,C-f
danC-S-f
keduanya akan berperilaku sebagaiC-f
terminal tidak dapat membedakan keduanya.