พฤติกรรมปกติของ Emacs เมื่อโหมด transient-mark-active นั้นทำงานเมื่อคุณทำการเลือก shift แล้วหากคำสั่งถัดไปเป็นการเคลื่อนที่แบบ non-shift เครื่องหมายนั้นจะถูกปิดการใช้งาน ตัวอย่างเช่นหลังจากคำสั่งM-l(เพื่อทำเครื่องหมายบรรทัดปัจจุบันด้วยฟังก์ชั่นด้านล่าง) และC-fเครื่องหมายถูกปิดการใช้งาน จะเลียนแบบพฤติกรรมดังกล่าวจาก elisp ได้(set-mark-command nil)อย่างไร
ตัวอย่างเช่น:
(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)
ตอนนี้ Ml Cf และภูมิภาคจะเติบโตขึ้น แต่ฉันต้องการพฤติกรรมเริ่มต้นเช่นพื้นที่จะปิดใช้งานเมื่อ Cf และเติบโตด้วย CSf
แก้ไข : ควรใช้ฟังก์ชั่นที่แตกต่างเพื่อ set-mark-command ที่อนุญาตสิ่งนี้หรือไม่ ฉันไม่พบอะไรเลย
C-fจะใช้กับคำสั่งการนำทางอื่น ๆ ทั้งหมดที่คุณใช้ด้วย
C-fหลังจากM-lไม่ขยายขอบเขตเนื่องจากไม่มีพื้นที่ที่ใช้งานอยู่ที่ส่วนท้ายของM-l(ซึ่งถูกผูกไว้downcase-wordตามค่าเริ่มต้น)
M-lอ้างอิงโดย OP ไม่ใช่การเชื่อมโยงเริ่มต้น ( downcase-word) แต่การเชื่อมโยงแบบกำหนดเองของmy-mark-current-line
C-S-fนั้นคล้ายคลึงกับC-SPC(การเปิดใช้งานภูมิภาค) +C-f(การนำทาง) คุณอาจได้สิ่งที่คุณต้องการโดยผูกC-fเข้ากับฟังก์ชั่น wrapper ซึ่งจะปิดการใช้งานพื้นที่ก่อนหากใช้งานอยู่และจะทำสิ่งที่C-fทำ (forward-char); และผูกโดยตรงกับC-S-fforward-charโปรดทราบว่าหากคุณเคยใช้ emacs ในโหมดเทอร์มินัลC-fและC-S-fทั้งคู่จะทำงานC-fเหมือนที่เทอร์มินัลไม่สามารถแยกความแตกต่างระหว่างทั้งสองได้