ใน Linux ฉันจะแมป SHIFT_L / SHIFT_R ได้อย่างไรเมื่อกดโดยไม่มีคีย์เพิ่มเติม


13

วันนี้ฉันพบบทความที่ดีมากนี้โดยสตีเวนโลชซึ่งเขาได้นำเสนอการเพิ่มประสิทธิภาพของการแมปคีย์บอร์ด ในหมู่พวกเขาคือการทำแผนที่แบบไดนามิกของปุ่ม Shift ซ้ายและขวา

ความคิด

เมื่อ Shift_L หรือ Shift_R ถูกกดโดยไม่มีคีย์เพิ่มเติมพวกเขาจะถูกแมปกับ '(' และ ')' ตามลำดับมิฉะนั้นจะทำงานตามปกติ

ปัญหา

เขาทำทั้งหมดนี้ภายใต้ OSX ฉันพยายามบรรลุเป้าหมายเดียวกันภายใต้ Linux ไม่มีวิธีที่ตรงไปตรงมาสำหรับเรื่องนี้เนื่องจากฉันเข้าใจว่าคุณไม่สามารถใช้ xmodmap เพื่อกำหนดค่าหนึ่งคีย์สำหรับ Shift_L เพียงอย่างเดียวและอีกอันสำหรับ Shift เมื่อใช้เป็นคีย์ตัวปรับเปลี่ยน

ฉันลองใช้งานอีกซักนิดและพบว่าผู้คนพยายามทำสิ่งเดียวกันภายใต้ Windows ซึ่งเห็นได้ว่าเป็นไปได้โดยใช้ AutoHotKey แต่ฉันไม่สามารถหาสิ่งใดสำหรับ Linux

มีวิธีแก้ปัญหาภายใต้ Linux หรือไม่


ฉันไม่ได้ลอง แต่สิ่งนี้อาจช่วยให้askubuntu.com/q/24916/11352
Mansuro

2
มันเกือบจะซ้ำกับคำถามนี้ =)
teika kazura

คำตอบ:


4

ว้าว! ความคิดเห็นของผู้ใช้ teika kazura เกี่ยวกับคำถามเดิมค่อนข้างถูกต้อง - ไม่เพียง แต่มันจะซ้ำซ้อนกับคำถามอื่น ๆ ได้อย่างมีประสิทธิภาพแต่คำตอบที่ให้ไว้ที่นั่น ("ใช้xcape ") แก้ปัญหานี้ได้!

หลังจากการโคลน repository xcape และคอมไพล์ (ฉันต้องติดตั้ง libXtst-devel บนกล่อง Fedora ของฉันก่อน) ฉันสามารถรับพฤติกรรมที่แน่นอนที่ร้องขอด้วยคำสั่งต่อไปนี้:

xcape -e "Shift_L=parenleft;Shift_R=parenright"

หลังจากการทดสอบที่ยอมรับ-คร่าวๆก็ดูเหมือนว่าจะทำงานมากดี ดี!

ตัวเลือกอื่น

หากคุณใช้ปุ่ม Shift เป็นตัวดัดแปลงเมาส์ (เช่นถ้าคุณเคยกดปุ่ม Shift อะไรก็ตาม) คุณอาจต้องการรวมตัวเลือกการหมดเวลาของ xcape และหาค่าการหมดเวลาที่สะดวกสบายดังนั้นการกดปุ่ม Shift แบบเดี่ยวที่ใช้ร่วมกับเมาส์ ไม่สร้างวงเล็บปลอม จาก xcape README:

-t <timeout ms>

หากคุณถือกุญแจนานกว่าการหมดเวลานี้ xcape จะไม่สร้างเหตุการณ์สำคัญ ค่าเริ่มต้นคือ 500 ms

ดังนั้นโดยการรวมการ-tตั้งค่าสถานะด้วยค่าการหมดเวลาที่เหมาะกับคุณคุณจะยังสามารถเลื่อนคลิกด้วยเมาส์ได้ตราบใดที่คุณกด Shift ค้างไว้อย่างน้อย timeout msมิลลิวินาที

(ขอเครดิตให้กับteika kazuraอีกครั้งเพื่อชี้ให้เห็นคำถามอื่น ๆ และเพื่อdon_crisstiสำหรับคำตอบเดิมที่นั่น)


ปัญหาอย่างหนึ่งของวิธีนี้คือฉันกด [Shift] + [LMouse] บ่อยครั้งเพื่อเลือกข้อความในตัวแก้ไข ข้อความประเสริฐที่น่าสนใจก็ใช้ [Ctrl] + [LMouse] ดังนั้นคำถามเกี่ยวกับการแมป [Ctrl] ก็ทำให้เกิดปัญหาเช่นกัน
Annan

@Annan คุณได้ทดลองปรับตัวเลือกการหมดเวลาของ xcape แล้วหรือยัง? จาก README: " -t <timeout ms>หากคุณถือกุญแจนานกว่าการหมดเวลานี้ xcape จะไม่สร้างเหตุการณ์กุญแจค่าเริ่มต้นคือ 500 ms" ... เว้นเสีย แต่ xcape จะขัดขวางการกดปุ่มลงของเหตุการณ์ (ฉันจำไม่ได้) ว่ามันควรป้องกันการสร้างปุ่มกดแบบลวงตาในขณะที่ยังคงให้คุณใช้มันเป็นตัวดัดแปลงการเลือกเมาส์ตราบใดที่คุณเก็บไว้นานพอ .
FeRD

@ อันนันดีมากที่ได้ยินฉันได้ปรับปรุงคำตอบของฉันเพื่อแนะนำการใช้-tธง!
2560

1

มันเป็นความท้าทายที่น่าสนใจและฉันยอมรับสิ่งที่ xinput ไม่เหมาะที่จะเป็น ฉันใช้เวลาในการเล่นกับความสามารถของ xmodmap และเข้าใกล้ความผิดหวังอย่างมากที่จะบรรลุสิ่งที่คุณต้องการ ... โดยไม่ต้องจัดการให้ได้

การใช้ xmodmap เป็นไปได้ที่จะกำหนด parenleft เป็น keysymbol ที่ถูกเลื่อนบนคีย์ left-shift:

xmodmap -e 'keysym Shift_L = Shift_L parenleft Shift_L parenleft'

ซึ่งsorta ใช้งานได้อย่างน้อยในการทดสอบกับกล่อง Fedora 17 ของฉัน แต่ไม่ใช่ในลักษณะที่น่าพอใจ ฉันพบว่าเมื่อใช้การแมปนี้แทนปุ่ม Shift ยังคงทำงานได้ตามปกติและไม่ทำให้การเลียนแบบปลอมแปลงใด ๆ (แต่น่าผิดหวัง) มันไม่ได้สร้าง parens ซ้ายอย่างน่าเชื่อถือ ไม่ว่าด้วยเหตุผลใดก็ตามกุญแจไม่ปรากฏขึ้นเพื่อแก้ไขตัวเองอย่างน่าเชื่อถือซึ่งทำให้การบ้านที่ได้รับมอบหมายเปลี่ยนไป ... ในขั้นต้น ไม่ว่าจะด้วยเหตุผลใดก็ตามการกดปุ่มซ้าย - ขวาสองสามครั้งติดต่อกันในที่สุดก็จะทำให้เกิดการเริ่มต้นสร้าง parens ซ้าย แต่หลังจากกดครั้งที่สี่หรือห้า

พฤติกรรมหนึ่งที่ผมได้แจ้งให้ทราบ แต่ที่คุณอาจจะสามารถที่จะทำงานกับเป็น "ใกล้พอ" อะนาล็อก: ผมพบว่าหลังจากที่ parenleft การทำแผนที่และ parenright บน Shift_L และ Shift_R ผมน่าเชื่อถือสามารถพิมพ์ parens โดย "รีด" ทั่วปุ่ม shift ทั้ง - กล่าวอีกนัยหนึ่งด้วยการทำแผนที่นี้:

xmodmap -e 'keysym Shift_L = Shift_L parenleft Shift_L parenleft'
xmodmap -e 'keysym Shift_R = Shift_R parenright Shift_R parenright'

กด Shift_L แล้วตามด้วย Shift_R จากนั้นปล่อยทั้งสองจะส่งออกขวาพาร์เรนหรือซ้ายซ้ายในทิศทางอื่น (แน่นอนว่าการแมปอาจจะย้อนกลับได้ฉันไม่สามารถตัดสินใจได้ว่าจะให้ "ธรรมชาติ" ไปทางไหนมากกว่านี้)

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

ฉันเชื่อครึ่งทางว่ามันเป็นไปไม่ได้เป็นช่วงเวลา แต่จากนั้นฉันก็รู้ว่ามีคีย์อย่างน้อยหนึ่งคีย์ที่ทำงานตรงตามที่คุณอธิบาย: คีย์ Super ("Windows") ภายใต้ Gnome Shell เป็นปุ่มตัวดัดแปลง (mod4) ซึ่งสร้างเอฟเฟกต์ที่แตกต่าง (เรียกใช้ภาพรวม) เมื่อกดเพียงอย่างเดียว อย่างน้อยก็ในทางทฤษฎีอาจเป็นไปได้ที่จะใช้การกดปุ่ม Shift ที่คุณต้องการในลักษณะเดียวกัน

... แต่ฉันไม่รู้จริง ๆ ว่าจะทำอย่างไรหรือวิธีการบุกรุกจะต้องจมอยู่กับการประมวลผลที่จำเป็นทุกครั้งที่คุณกดปุ่ม Shift :-)


0

อาจจะดู xbindkeys เพื่อเปลี่ยนการแมปคีย์หรือเพียงแค่หาปลั๊กอินการเข้ารหัสที่ดีสำหรับเสียงเรียกเข้าหรือ gedit หรือสิ่งที่คุณต้องการใช้หรือรหัสของคุณเอง

เครื่องมือในการเปลี่ยน keymaps https://stackoverflow.com/questions/6812/mapping-my-custom-keys-in-debian

อาจhttp://www.tldp.org/HOWTO/Keyboard-and-Console-HOWTO-14.html

และเขียนสคริปต์เพื่อเปิดใช้งาน

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