พฤติกรรมปกติของ 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-f
forward-char
โปรดทราบว่าหากคุณเคยใช้ emacs ในโหมดเทอร์มินัลC-f
และC-S-f
ทั้งคู่จะทำงานC-f
เหมือนที่เทอร์มินัลไม่สามารถแยกความแตกต่างระหว่างทั้งสองได้