วิธีแยกความแตกต่าง Ci จาก TAB


20

โดยทั่วไปแล้วด้วยเหตุผลทางประวัติศาสตร์ emacs จะปฏิบัติกับTABรหัสและรหัสC-iเดียวกัน cf เอกสารเสียงกระเพื่อม emacs บนปุ่มฟังก์ชั่นหรือคำตอบของ abo-abo สำหรับคำถาม "ความแตกต่างระหว่าง TAB และอะไร" .

หมายเหตุ:ในบทความนี้พิมพ์ซ้ำเป็นTAB, <tab>และC-i; tabและCtrl+ iในขณะที่ปุ่มทางกายภาพบนแป้นพิมพ์

อย่างไรก็ตามในขณะนี้ emacs ปฏิบัติTABและC-iเป็นสิ่งเดียวกันคือ->(equal (kbd "TAB") (kbd "C-i"))t

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

  • "ฉันจะผูกคำสั่งกับ Ci โดยไม่เปลี่ยน TAB ได้อย่างไร"

    • โซลูชันของ Treyไม่ทำงานสำหรับฉันตัวแปรlocal-function-key-mapsจะไม่เปลี่ยนแปลง การแก้ไขให้ใช้deleteแทนที่จะdelqส่งผลให้เกิดตัวแปรที่แก้ไข แต่ไม่นำการแก้ไข ... tabและCtrl+ iยังคงเหมือนเดิม
    • การแปลไปที่แผนที่ไฮเปอร์ดูเหมือนว่าจะเป็นวิธีแก้ปัญหาในยุค 1980 ... ฉันอาจต้องการใช้Hyper+ iเช่นกัน
  • การใช้input-decode-mapแผนที่ถึงCtrl+ iกับโค้ดควบคุม post-ASCII บางอย่างเกือบเป็นสิ่งที่ฉันกำลังมองหา ยกเว้นว่ามันไม่ทำงานอย่างถูกต้องกับkbdความหมายแมโครที่หนึ่งจะต้องปรับเปลี่ยนทุกบิตของรหัสที่มาที่จะผูก+Ctrl iเนื้อหานี้เป็นทางออกที่ดีที่สุดเนื่องจากรหัสต้นฉบับทั้งหมดได้รับการแก้ไขอย่างถูกต้อง

  • ใช้(kbd "<tab>")สำหรับการtabและ(kbd "C-i")(ซึ่งแปลว่าจะ(kbd "TAB")คือ\tตัวอักษร) สำหรับCtrl+ i ไม่ทำงานแต่คุณจะมีการปรับเปลี่ยนทุกไฟล์ที่มาซึ่งใช้ผิดประเภทของtab[อ่านที่: keycode TAB] ซึ่งเป็นที่น่ารำคาญ
    นี้ได้รับการแนะนำเช่นปัญหาใน GitHubและใน emacs.sx เช่นกัน

ไม่มีวิธีแก้ปัญหาเหล่านี้ดูเหมือนจะเป็นทางออกที่แท้จริงฉันควรพิจารณาวิธีแก้ปัญหาหรือแฮ็ก ( ข้อผิดพลาดที่มีอยู่)

มีวิธีออกมีไปบังคับ emacs เพื่อทำแผนที่tabการ(kbd "<tab>")และ(kbd "TAB")ในขณะที่Ctrl+ iถูกแมปไป(kbd "C-i")สั้น ๆ ของ modyfing รหัส emacs แหล่งที่มา?

วิธีการนี้ควรไม่ปรากฏแก่ผู้ใช้อย่างสมบูรณ์ซึ่งหมายความว่ารหัสที่tabคล้ายกัน<tab>และTABควรแมปไปที่การรวมหนึ่งในขณะที่รหัสCtrl+ ilike C-iควรแมปไปที่การรวมอื่น

ในหมายเหตุที่จริงจังน้อยกว่า: นักพัฒนา emacs ที่นี่ใครสามารถแสดงความคิดเห็นว่าจะมีการเปลี่ยนแปลง / แก้ไขในซอร์สโค้ด emacs ในบางจุด?


2
โปรดทราบว่าTABและC-i(รหัสที่ไม่คีย์) TABเป็นหนึ่งเดียวกันโดยความหมายของ
สเตฟาน

@ Stefan นั่นเป็นเหตุผลที่ฉันเพิ่มหมายเหตุสิ่ง ฉันจะแก้ไขโพสต์และใส่ไว้ในนั้น
elemakil


IMO คำถามนี้ไม่ซ้ำกันเนื่องจากต้องการย้ายการโยงคีย์ทั้งหมดที่กำหนดบน TAB (แม้แต่จากแพ็คเกจภายนอก) เพื่อใช้ <tab> แทน ในขณะที่คำถามอื่น ๆ ที่ถูกถามวิธีการแยกพวกเขาในรหัสของคุณเอง
Malabarba

ข้อเสนอแนะของฉันคือแนะนำkbdให้แปลแท็บเป็น [แท็บ] มันจะไม่ทำงานสำหรับส่วนที่โหลดไว้ของ Emacs
Malabarba

คำตอบ:


21

อนาคตหายไปนานและยุคหินของการคำนวณกำลังใกล้เข้ามา ขั้วข้อความทั้งหมดที่ฉันรู้ว่ายังคงส่งตรงไบต์ลำดับ Emacs สำหรับC-iสำหรับTABดังนั้นความต้องการเดิม "รวมกัน" พวกเขายังคงเป็นอย่างมากกับเรา

อินพุท - ถอดรหัส - แผนที่ (la (define-key input-decode-map "\C-i" [C-i])) น่าจะดีพอ ๆ กับตอนนี้

ในฐานะผู้ดูแลระบบเก่าของ Emacs ฉันยินดีต้อนรับทางออกที่ดีกว่าสำหรับปัญหานี้เพื่อเพิ่มปุ่มC-i(และC-mและC-[) ภายใต้ GUI (อาจทำให้พวกเขา "สงวนไว้สำหรับผู้ใช้") แต่ฉันไม่รู้ว่าจะทำอย่างไรโดยไม่ทำให้เกิดปัญหากับแพ็คเกจที่มีอยู่มากมาย



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