กำหนดปุ่มควบคุม + Shift โดยไม่ต้อง kbd


11

ฉันพยายามเพิ่มฟังก์ชั่นบางอย่างให้กับแพ็คเกจของคนอื่นดังนั้นฉันจึงต้องการเคารพรูปแบบของพวกเขา kbdแต่น่าเสียดายที่หนึ่งในรูปแบบเหล่านี้คือการไม่ใช้

ฉันจำเป็นต้องผูกฟังก์ชั่นให้C-S-bแต่ฉันไม่สามารถหาวิธีได้ ฉันรู้วิธีการทำสิ่งนี้ด้วยตัวดัดแปลงเดียว (เช่น"\S-b") แต่ฉันไม่สามารถทำให้มันทำงานร่วมกับตัวดัดแปลงหลายตัวได้ ฉันรู้ว่าฉันสามารถประเมิน(kbd "C-S-b")และใช้ผลลัพธ์ของมัน ( [33554434]) แต่ฉันต้องการให้อ่านง่ายขึ้น

นี่คือบางสิ่งที่ฉันได้ลอง:

(define-key emacs-lisp-mode-map
  "\C-\S-b" 'test-command)
;;; Invalid modifier

(define-key emacs-lisp-mode-map
  [C-S-b] 'test-command)
;;; Does nothing

(define-key emacs-lisp-mode-map
  "\C-B" 'test-command)
;;; Binds C-b

คำตอบ:


15

คุณหายไป?และเครื่องหมายแบ็กสแลชสองรายการในการแทนเวกเตอร์:

(global-set-key [?\C-\S-b] 'test-command)

ส่วนของKey Sequencesในคู่มือ Elisp พูดว่า:

ลำดับของคีย์ที่มีปุ่มฟังก์ชัน, เหตุการณ์ปุ่มเมาส์, เหตุการณ์ของระบบ, หรืออักขระที่ไม่ใช่ ASCII เช่นC-=หรือH-aไม่สามารถแสดงเป็นสตริงได้; พวกเขาจะต้องแสดงเป็นเวกเตอร์

ในการเป็นตัวแทนเวกเตอร์องค์ประกอบของเวกเตอร์แต่ละหมายถึงเหตุการณ์การป้อนข้อมูลในรูปแบบของเสียงกระเพื่อม ยกตัวอย่างเช่นเวกเตอร์แสดงให้เห็นถึงลำดับที่สำคัญ[?\C-x ?l]C-x l

และภายใต้ตัวดัดแปลงตัวละครอื่น ๆ บิตมันบอกว่า:

ไวยากรณ์เสียงกระเพื่อมสำหรับบิตการเปลี่ยนแปลงคือ\S-; ดังนั้น?\C-\S-oหรือ?\C-\S-Oแสดงให้เห็นถึงตัวละครขยับควบคุม -o


1
ฉันพยายามเข้าใจว่าเครื่องหมายคำถามหมายถึงอะไร ขอบคุณที่ตอบกลับของคุณฉันพบสิ่งเหล่านี้: ไวยากรณ์ของ Ctl-Char? \ C-และไวยากรณ์ของ Meta-Char? \ M-
Kaushal Modi

และใช่คำถาม Malabarba จะได้รับคำตอบในหน้านี้เกี่ยวกับการปรับปรุงบิตอื่น
Kaushal Modi

@kaushalmodi ขอบคุณสำหรับลิงค์! มันมีประโยชน์มากในการทำความเข้าใจอย่างลึกซึ้งยิ่งขึ้นว่าเกิดอะไรขึ้น
itsjeyd
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.