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-fakan berlaku untuk semua perintah navigasi lain yang Anda gunakan juga.
C-fsetelah M-ltidak memperluas wilayah karena tidak ada wilayah aktif di akhir M-l(yang terikat downcase-wordsecara default).
M-ldirujuk oleh OP bukan pengikatan default ( downcase-word), tetapi pengikatan kustommy-mark-current-line
C-S-fdianalogikan denganC-SPC(mengaktifkan suatu wilayah) +C-f(navigasi). Anda mungkin bisa mendapatkan apa yang Anda inginkan dengan mengikatC-fke fungsi pembungkus yang pertama menonaktifkan suatu wilayah jika aktif dan kemudian mulai melakukan apa yangC-fdilakukan (forward-char); dan ikatC-S-flangsung keforward-char. Perhatikan bahwa jika Anda pernah menggunakan emacs dalam mode terminal,C-fdanC-S-fkeduanya akan berperilaku sebagaiC-fterminal tidak dapat membedakan keduanya.