ฉันจะแมปปุ่ม Shift ซ้ายและขวาทีละตัวได้อย่างไร


10

ก่อนอื่นขอแก้ตัวความไม่รู้ของฉันของ X และ XKB; ฉันพยายามแฮ็คโซลูชันด้วยกันโดยหวังว่าจะสามารถบรรลุสิ่งที่ฉันต้องการโดยไม่ต้องมีความเข้าใจอย่างละเอียด

ฉันกำลังพยายามสร้างแผนที่แป้นพิมพ์ XKB บน Ubuntu 12.04 ที่ให้ฉันกำหนดว่าปุ่ม Shift แบบใดในสองตัวที่ถือว่าเป็นตัวปรับระดับ Level2 โดยเฉพาะอย่างยิ่งที่4สำคัญควรผลิต$เมื่อมีการเปลี่ยนแปลงที่ถูกต้องไม่ใช่ด้านซ้าย

การอ่านของฉันจนถึงตอนนี้:

ฉันพยายามกำหนดประเภทที่กำหนดเองแล้วอ้างถึงอย่างชัดเจนในแผนที่สัญลักษณ์:

/usr/share/X11/xkb/types/mbfisher:

default xkb_types "mbfisher" {
  type "RIGHT_SHIFT" {
    modifiers = None+Shift_R;
    map[None] = Level1;
    map[Shift_R] = Level2;
  };
}

/usr/share/X11/xkb/symbols/mbfisher:

default
partial alphanumeric_keys
xkb_symbols "basic" {

  name[Group1]= "mbfisher";

  key <AE04> {
    type= "RIGHT_SHIFT",
    symbols[Group1]= [ 4,  dollar ]
  };

};

ฉันเลือกแผนที่ด้วย GUI Keyboard Layout GUI

สิ่งนี้ทำให้ปิดการใช้งานแป้นพิมพ์ตัวอักษรและตัวเลขนอกเหนือจาก4คีย์ได้อย่างชัดเจน แต่เครื่องหมายดอลลาร์ยังสามารถพิมพ์ด้วยปุ่ม Shift อย่างใดอย่างหนึ่ง

ฉันมีสติในการเขียนคำถามจำนวนมากที่มีข้อมูลที่ไร้ประโยชน์มากมายดังนั้นฉันจะหยุดที่นี่ โปรดขออะไรที่ฉันพลาดไป

ความคิดใด ๆ

คำตอบ:


2

ฉันไม่รู้ว่านี่เป็นวิธีแก้ปัญหาที่คุณต้องการหรือไม่ แต่ความเป็นไปได้ทางหนึ่งในการปิดใช้งานแป้น Shift ด้านซ้ายจะใช้ xmodmap สร้างไฟล์ที่~/.Xmodmapมีเนื้อหา

clear shift
add shift = Shift_R

xmodmap ~/.Xmodmapและเรียกใช้


ดูความเห็น / แชท:

คุณอาจพบปัญหาหากมีการแก้ไขอื่น ๆ ที่ทำกับ xkbmap ของคุณโดยโปรแกรมอื่น ๆ ดังนั้นการรีเซ็ตเป็น xkbmap เริ่มต้นด้วยสิ่งที่คล้ายกันsetxkbmap usอาจจำเป็น

หากคุณต้องการที่จะทำให้บางปุ่มตอบสนองเพียงปุ่ม shift หนึ่งที่คุณสามารถให้คุณได้รับรูปแบบแป้นพิมพ์ในปัจจุบันมีการxmodmap -pke > .Xmodmapนี้จะช่วยให้คุณมีรายชื่อของคีย์ของคุณทั้งหมดในรูปแบบของ.Xmodmap keycode XX = functionsในการมอบหมายนี้แต่ละรหัสสามารถมีฟังก์ชั่นได้หลายอย่างทางด้านขวา แต่ละตัวสอดคล้องกับตัวดัดแปลงอื่น + แป้นนั้น คุณสามารถแทรกกว่า + add mod5 = Shift_Lเพิ่มความชัดเจนจากด้านบนและเพิ่มสิ่งที่ต้องการ ปุ่ม Shift ด้านขวาจะดีกว่าที่จะตรงกับ mod2 ในขณะที่ปุ่มด้านซ้ายจะเป็น mod5 คุณสามารถไปต่อและย้ายฟังก์ชั่น mod2 ของปุ่มที่คุณต้องการโทรด้วยปุ่ม Shift ซ้ายไปยัง mod5 เพียงแค่ใส่NoSymbolและเว้นช่องว่างจนกว่าคุณจะไปถึงคอลัมน์ด้านขวา ( keycode 57 = n N-> keycode 57 = n NoSymbol NoSymbol NoSymbol N)


ดีใจที่ได้ช่วยเหลือ มันใช้งานได้หรือ
Trudbert

ขออภัยวันที่วุ่นวาย ฉันยังมีปุ่ม Shift ทั้งสองพร้อมใช้งานหลังจากเรียกใช้ xmodmap ฉันต้องทำอะไรอย่างอื่นเพื่อรับการเปลี่ยนแปลงหรือไม่
mbfisher

ลอง xmodmap -e "กะชัดเจน" หลังจากที่คุณไม่ควรจะมีปุ่ม shift ใด ๆ ที่พร้อมว่าที่ทำงานส่วนที่เหลือควรจะทำงานมากเกินไป
Trudbert

ไม่ยังมีปุ่ม Shift อยู่ # xmodmap -verbose -e "clear shift" ! 1: clear shift clear shift ! ! executing work queue ! clear shift
mbfisher

แปลก. ไม่มีข้อความแสดงข้อผิดพลาด? clear ควรลบทุกอย่างที่เกี่ยวข้องกับโมดิฟายเออร์ดังนั้นจึงไม่มีอะไรเหลือ ฉันจะใช้ระบบลินุกซ์ในอีกหนึ่งชั่วโมงข้างหน้าและลองดูอีกครั้ง
Trudbert

2

นี่คือสิ่งที่ใช้งานได้ในที่สุด! ฉันใช้xmodmapและ~/.Xmodmapไฟล์แทนการกำหนดค่า xkb

~/.Xmodmap:

clear Shift

! Key Shift+Key mode_switch+Key mode_switch+Shift+Key AltGr+Key AltGr+Shift+Key
! Key Shift_L+Key Shift_R+Key Shift_R+Shift_L+Key AltGr+Key AltGr+Shift_L+Key

keycode 10 = 1 1 exclam 1
keycode 11 = 2 2 at 2
keycode 12 = 3 3 numbersign 3
keycode 13 = 4 4 dollar 4
keycode 14 = 5 5 percent 5

keysym Shift_R = Mode_switch
add Shift = Shift_L

2 ความเห็นบรรทัด (จ้องมองด้วย!) แสดงส่วนหัวของคอลัมน์ก่อนและหลังการเปลี่ยนแปลงของฉัน สิ่งนี้ทำให้ฉันสามารถระบุ col2 เป็น Shift_L และ col 3 เป็น Shift_R เนื่องจากฉันได้ทำแผนที่ shift_R เป็น Mode_switch

การเปลี่ยนแปลงเกิดขึ้นจากการทำงาน:

 # setxkbmap us
 # xmodmap ~/.Xmodmap

setxkbmap usตั้งค่าแผนที่สหรัฐอเมริกาเริ่มต้นเพื่อให้คุณใช้งานได้จากกระดานชนวนใหม่ทั้งหมดและxmodmapผนวกการเปลี่ยนแปลงที่กำหนดเองไว้

เมื่อดำเนินการ!, @, #, $และ%ตัวอักษรเท่านั้นที่สามารถพิมพ์ด้วยปุ่ม Shift ขวาและ^, &, *, (และ)สามารถได้รับการพิมพ์ที่มีปุ่ม shift ซ้าย

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

พบลิงค์ที่มีประโยชน์อื่น ๆ ตลอดเส้นทาง:

ขอบคุณมากที่ @Trudbert ที่ช่วยให้ฉันได้คำตอบที่ดีที่สุด!

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