การแมป Super + hjkl กับปุ่มลูกศรภายใต้ X


18

ฉันพยายามทำแผนที่:

Super+h -> Left
Super+j -> Down
Super+k -> Up
Super+l -> Right

ทั่วโลกภายใต้ X แนวคิดคือฉันไม่ต้องการออกจากแถวบ้านของฉันซึ่งมักจะใช้ปุ่มลูกศรดังนั้นฉันจะใช้ Super modifier + hjkl เพื่อเลียนแบบปุ่มลูกศรภายใต้ X มีวิธีใดบ้างที่จะทำสิ่งนี้ ?

สิ่งหนึ่งที่ฉันได้ลองคือ xbindkeys + xte โดยใช้การกำหนดค่านี้:

"xte 'keydown Up' 'keyup Up'"
  Mod4+k

"xte 'keydown Down' 'keyup Down'"
  Mod4+j

"xte 'keydown Left' 'keyup Left'"
  Mod4+h

"xte 'keydown Right' 'keyup Right'"
  Mod4+l

แต่ดูเหมือนจะมีความล่าช้ามากระหว่างฉันกดปุ่มและสังเกตเห็นผลลัพธ์ใด ๆ และส่วนใหญ่ไม่มีอะไรเกิดขึ้นเลย

มีวิธีที่สง่างามกว่าในการทำสิ่งนี้ซึ่งใช้งานได้จริงโดยไม่ล่าช้าหรือไม่?


2
พบสิ่งนี้ดีสำหรับการทำสิ่งนี้: code.google.com/p/autokey
Tom Power

ระบบปฏิบัติการคืออะไร? ฉันคิดว่าคุณอาจจะดีกว่าด้วยการใช้ Control-Super หรือคอมโบบางอย่าง
harrymc

คำตอบ:


13

Capslock + HJKL เพื่อปุ่มลูกศร

  1. สร้าง ~ / .Xmodmap และวางไว้ข้างใน:

    clear Lock 
    keycode 66 = ISO_Level3_Shift
    
  2. เพิ่ม Left, Down, Up, Right เป็นรายการที่สามในรายการคีย์ h, j, k, l ใน /usr/share/X11/xkb/symbols/us (ส่วนแรก):

    key { [ h, H, Left, Left ] }; 
    key { [ j, J, Down, Down ] };
    key { [ k, K, Up, Up ] }; 
    key { [ l, L, Right, Right ] };
    
  3. วิ่ง xmodmap ~/.Xmodmap

ทางเลือก: Capslock เป็นปุ่มควบคุมและ Control_L + HJKL ไปยังปุ่มลูกศร

นี่คือการตั้งค่าปัจจุบันของฉัน ฉันเลิกใช้ Control_L เป็นคีย์ควบคุมและใช้เป็น ตัวดัดแปลงพิเศษ (ISO_Level3_Shift) ซึ่งสอดคล้องกับรายการที่สามใน /usr/share/X11/xkb/symbols/us ไฟล์สำหรับการแมป hjkl

  1. ฉันแก้ไขบทแรกของ / usr / share / X11 / xkb / symbols / us like before:

    key { [ h, H, Left, Left ] }; 
    key { [ j, J, Down, Down ] };
    key { [ k, K, Up, Up ] }; 
    key { [ l, L, Right, Right ] };
    
  2. จากนั้นฉันใส่สิ่งนี้ลงในไฟล์ ~ / .Xmodmap ของฉัน:

    clear Control
    keycode 66 = Control_L
    add Control = Control_L
    add Control = Control_R
    keycode 37 = ISO_Level3_Shift
    

keycode 66 เป็น capslock และ keycode 37 คือการควบคุมที่เหลือ

  1. เรียกใช้ xmodmap ~ / .Xmodmap

ด้วยการตั้งค่านี้ฉันสามารถใช้ปุ่มลูกศรพร้อม Control_L + hjkl และข้ามได้ มากกว่าคำที่มี Control_L + ตัวพิมพ์ใหญ่ + hl ง่าย!


1
สิ่งนี้ใช้ได้กับ Arch Linux ด้วย แต่ไม่ทันทีหลังจากคำสั่ง xmodmap หลังจากรีบูตทำงานได้อย่างสมบูรณ์แบบ เพียงแค่ไม่สามารถทำ CTRL + SHIFT + ลูกศรด้วย CTRL + SHIFT + CAPS + hjkl ซึ่งมักจะเป็นคำสำหรับการใส่คำ ความคิดใด ๆ วิธีการทำเช่นนี้?
koss

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

มันใช้งานได้ดีพอสำหรับฉัน ปัญหาเดียวที่ฉันมีมันไม่ทำงานใน Chrome และนั่นเป็นเรื่องน่ารำคาญ
Mood

คุณอาจต้องล้างไฟล์ xkb ที่แคชไว้ /var/lib/xkb/*.xkm สำหรับการเปลี่ยนแปลง /usr/share/X11/xkb/symbols/us เพื่อให้มีผล
solo

1
สิ่งนี้ใช้ได้กับ Ubuntu 14.04 ฉันต้องทำ xmodmap /home/alex/.Xmodmap แอปพลิเคชันเริ่มต้นและลบไฟล์ * .xkm ทั้งหมดในรูปแบบ / var / lib / xkb คำเตือน: ฉันทิ้งถังขยะ Ubuntu VM หนึ่งอันในขั้นตอนสุดท้ายจากนั้นแป้นพิมพ์ของฉันจะไม่ทำงานอีกต่อไปดังนั้นโปรดระวังและเตรียมการสำรองให้พร้อม :-) Shift + Control + Caps + hjkl เพื่อเลือกข้อความที่ทำงานได้ดีใน Firefox และ ธันเดอร์เบิร์ด แต่ในบางแอปพลิเคชั่นมันไม่ได้ (เช่น Chrome)
Alexander Rechsteiner

8

การเปลี่ยนแปลงดังกล่าวข้างต้นใน / usr / share / X11 / XKB / สัญลักษณ์ / เรา ไม่ทำงานสำหรับฉัน:
เกิดข้อผิดพลาดในการโหลดคำอธิบายแป้นพิมพ์ใหม่

แต่หลังจากที่ได้ดูวิธีการที่ขัดแย้งกันมากมายฉันได้คิดวิธีแก้ปัญหาซึ่งจับคู่ซุปเปอร์คีย์ซ้าย (คีย์ windows ซ้าย / Mod4) ร่วมกับ hjkl ไปซ้าย, ขึ้น, ขึ้น, ขวา นี่คือการตั้งค่าทั้งระบบ

เพิ่มบล็อกนี้ในตอนท้ายของส่วนแรก (ขวาก่อน }; ) ของคุณ / usr / share / X11 / XKB / สัญลักษณ์ / เรา :

//hjkl
//AltGr + hjkl
key <AC06> {        [         h, H, Left            ]       };
key <AC07> {        [         j, J, Down            ]       };
key <AC08> {        [         k, K, Up              ]       };
key <AC09> {        [         l, L, Right           ]       };
//Super_L -> Alt Gr
key <LWIN> { [ ISO_Level3_Shift ] }; //see below!

บรรทัดหลักแรกจับคู่ AltGr + h กับ Left
บรรทัดหลักสุดท้ายทำให้ซุปเปอร์คีย์ซ้ายทำงานเหมือน AltGr
ไปเลย:

สุดยอด + h - & gt; ซ้าย
Super + j - & gt; ลง
Super + k - & gt; ขึ้น
สุดยอด + l - & gt; ขวา

ในการใช้การตั้งค่าใหม่ให้เรียกใช้ setxkbmap หรือรีสตาร์ทระบบของคุณ

สำคัญ : สิ่งนี้จะปิดใช้งานซุปเปอร์คีย์อย่างชัดเจนดังนั้นหากคุณใช้ซุปเปอร์คีย์ในวัตถุประสงค์อื่น (เช่นย้ายหน้าต่างไปยังพื้นที่ทำงานอื่น) คุณไม่ควรทำการแมปใหม่เช่นนี้
ในการใช้ Caps Lock แทน Super ให้เปลี่ยนบรรทัดสุดท้ายด้วย:

key <CAPS> { [ ISO_Level3_Shift ] };

นี่คือส่วนแรกที่สมบูรณ์ของไฟล์กำหนดค่าของฉัน:

default
partial alphanumeric_keys modifier_keys
xkb_symbols "basic" {

    name[Group1]= "English (US)";

    // Alphanumeric section
    key <TLDE> {        [     grave,    asciitilde      ]       };
    key <AE01> {        [         1,    exclam          ]       };
    key <AE02> {        [         2,    at              ]       };
    key <AE03> {        [         3,    numbersign      ]       };
    key <AE04> {        [         4,    dollar          ]       };
    key <AE05> {        [         5,    percent         ]       };
    key <AE06> {        [         6,    asciicircum     ]       };
    key <AE07> {        [         7,    ampersand       ]       };
    key <AE08> {        [         8,    asterisk        ]       };
    key <AE09> {        [         9,    parenleft       ]       };
    key <AE10> {        [         0,    parenright      ]       };
    key <AE11> {        [     minus,    underscore      ]       };
    key <AE12> {        [     equal,    plus            ]       };

    key <AD01> {        [         q,    Q               ]       };
    key <AD02> {        [         w,    W               ]       };
    key <AD03> {        [         e,    E               ]       };
    key <AD04> {        [         r,    R               ]       };
    key <AD05> {        [         t,    T               ]       };
    key <AD06> {        [         y,    Y               ]       };
    key <AD07> {        [         u,    U               ]       };
    key <AD08> {        [         i,    I               ]       };
    key <AD09> {        [         o,    O               ]       };
    key <AD10> {        [         p,    P               ]       };
    key <AD11> {        [ bracketleft,  braceleft       ]       };
    key <AD12> {        [ bracketright, braceright      ]       };

    key <AC01> {        [         a,    A               ]       };
    key <AC02> {        [         s,    S               ]       };
    key <AC03> {        [         d,    D               ]       };
    key <AC04> {        [         f,    F               ]       };
    key <AC05> {        [         g,    G               ]       };
    key <AC06> {        [         h,    H               ]       };
    key <AC07> {        [         j,    J               ]       };
    key <AC08> {        [         k,    K               ]       };
    key <AC09> {        [         l,    L               ]       };
    key <AC10> {        [ semicolon,    colon           ]       };
    key <AC11> {        [ apostrophe,   quotedbl        ]       };

    key <AB01> {        [         z,    Z               ]       };
    key <AB02> {        [         x,    X               ]       };
    key <AB03> {        [         c,    C               ]       };
    key <AB04> {        [         v,    V               ]       };
    key <AB05> {        [         b,    B               ]       };
    key <AB06> {        [         n,    N               ]       };
    key <AB07> {        [         m,    M               ]       };
    key <AB08> {        [     comma,    less            ]       };
    key <AB09> {        [    period,    greater         ]       };
    key <AB10> {        [     slash,    question        ]       };

    key <BKSL> {        [ backslash,         bar        ]       };
    // End alphanumeric section

    //hjkl
    //AltGr + hjkl
    key <AC06> {        [         h, H, Left            ]       };
    key <AC07> {        [         j, J, Down            ]       };
    key <AC08> {        [         k, K, Up              ]       };
    key <AC09> {        [         l, L, Right           ]       };
    //Super_L -> Alt Gr
    key <LWIN> { [ ISO_Level3_Shift ] };


};

ฉันหวังว่านี่จะช่วยให้ใครบางคนที่นั่น ...

หากใครมีทางออกที่ดีกว่าโปรดแจ้งให้เราทราบ

แก้ไข: ทดสอบบน Fedora


ฉันใช้วิธีนี้ด้วยตัวเองแล้ว แต่มันไม่ได้ผลกับแอพพลิเคชั่นทั้งหมด! xev พูดอย่างชัดเจน Left และใช้งานได้กับแอปพลิเคชันส่วนใหญ่ แต่บางโปรแกรมจะตอบสนองต่อปุ่มลูกศร "ของจริง" เท่านั้น โปรแกรมแก้ไขข้อความประเสริฐ และคนอื่น ๆ.
Tarrasch

1
ทำงานตามที่อธิบายไว้ใน Redhat 6.2 ข้อมือเจ็บของฉันขอบคุณ!
BuckFilledPlatypus

ขอบคุณพื้นฐาน 6 มันทำงานบน Ubuntu หลังจากขั้นตอนที่อธิบายไว้ด้านล่าง มีปัญหาใน Ubuntu (ทดสอบกับ Ubuntu 14.04) ว่าไฟล์. xkm ไม่ได้รับการคอมไพล์ใหม่และทำให้การเปลี่ยนแปลงใน / usr / share / X11 / xkb / symbols / * ไม่มีผลกระทบ เพื่อปรับปรุงให้ลบไฟล์ * .xkm ทั้งหมดออกจากระบบ / var / lib / xkb และรีบูต หลังจากนั้นไฟล์ * .xkm จะถูกคอมไพล์ใหม่ สำหรับข้อมูลเพิ่มเติมโปรดดู: ubuntuforums.org/showthread.php?t=1589744
MPtr

3

ฉันไม่ได้ลองตัวเอง แต่ดูเหมือนว่า xkb อาจทำสิ่งที่คุณต้องการ http://en.wikipedia.org/wiki/X_keyboard_extension .

ฉันมีแพ็คเกจใน Ubuntu ที่เรียกว่า x11-xkb-utils ซึ่งฟังดูมีแนวโน้ม :)


xkb ไม่สามารถทำงานกับปุ่ม Super เป็นตัวดัดแปลง xkb ใช้งานได้เฉพาะกับ (ตามลำดับ) Unmodified, Shift, AltGr, Shift-AltGr นอกจากนี้ยังสามารถกำหนดตัวดัดแปลงระดับสูงกว่าได้ (เช่นในตัวอย่าง CapsLock ของ Bill Casarin) แต่ไม่มีการใช้แป้นพิมพ์มาตรฐาน การทำแผนที่ Super กับตัวแก้ไขที่สูงกว่าจะลบมันออกจากการทำงานเหมือน Super (ดังตัวอย่างของ basic6)
dotancohen

3

ไม่มี sudo จำเป็นมาจาก ที่นี่ แก้ไขเพื่อให้ทำงานได้เมื่อรวมกับ Alt .

สร้าง file w เนื้อหาต่อไปนี้:

! remove Caps Lock
clear lock
! remove Lock = Caps_Lock
! remove Shift = Caps_Lock
keycode 66 = NoSymbol NoSymbol
keycode 66 = ISO_Level3_Shift

keysym h = h H NoSymbol NoSymbol Left Left
keysym j = j J NoSymbol NoSymbol Down Down
keysym k = k K NoSymbol NoSymbol Up Up
keysym l = l L NoSymbol NoSymbol Right Right

! some sugar
keysym o = o O NoSymbol NoSymbol BackSpace NoSymbol
keysym i = i I NoSymbol NoSymbol Delete NoSymbol`

ขอร้อง

xmodmap file

มันแมป AltGr ไปยัง หมวก แทน ซูเปอร์ ดังนั้นคุณอาจตั้งค่าค่อนข้าง

keycode 66 = Super_L

(หรืออะไรก็ตาม xev ให้คุณกดปุ่ม ซูเปอร์ )

ส่วนน้ำตาลให้ backspace และ Del เป็นการมอบหมายพิเศษให้กับ i และ o คุณอาจละเว้นหรือเห็นว่าเป็นโบนัสหรือแรงจูงใจในการขยาย / ปรับด้วยตัวคุณเอง;)

PS: หากทำการทดสอบให้รีเซ็ตการแมป "เริ่มต้น" โดยเรียกใช้

setxkbmap

สิ่งนี้ไม่ได้ผลสำหรับฉัน แต่พาฉันไปในเส้นทางที่ถูกต้อง สิ่งนี้ใช้ได้กับฉัน: github.com/sblask/dotfiles/commit/...
Sebastian Blask

2

ในที่สุดดูเหมือนว่าฉันจะพบโซลูชันที่ทำงานร่วมกับตัวดัดแปลงทั้งหมด (Ctrl +, Shift +, Ctrl + Shift +) และ Sublime Text 2

ความรุ่งโรจน์ทั้งหมดไปที่การกำหนดค่าอัญมณีนี้ที่ฉันพบเมื่อเร็ว ๆ นี้ http://www.spinics.net/lists/xorg/msg35931.html . มันอธิบายลูกศร ijkl แต่มันสามารถปรับเปลี่ยนได้อย่างง่ายดายสำหรับการนำทาง hjkl คุณต้องอัปเดตไฟล์รูปแบบแป้นพิมพ์ / usr / share / X11 / xkb / symbols / * (ส่วนตัวฉันใช้ / usr / share / X11 / xkb / สัญลักษณ์ / typo ซึ่งฉันรวมอยู่ในรูปแบบแป้นพิมพ์ด้วย Xkb ตัวเลือก "misc: typo" ดังนั้นจึงใช้ได้กับรูปแบบแป้นพิมพ์ใด ๆ ) การกำหนดค่าจะถือว่ากุญแจตัวปรับเปลี่ยนส่ง ISO_Level3_Shift (มีหลายวิธีในการผูก Super หรือ Alt กับ ISO_Level3_Shift)

คำนิยามคีย์ควรมีลักษณะดังนี้ (ใช้ NoSymbol หากคุณกำลังแก้ไข ../symbols/typo):

key <AC07> {    
    type="MOD5_NAV",
    [NoSymbol, NoSymbol, Down, Down],   
    actions[Group1] = [NoAction(), NoAction(), RedirectKey(key=<DOWN>, clearmods=ISO_Level3_Shift)]
};

นอกจากนี้คุณต้องแก้ไข / usr / share / X11 / types / basic และพิมพ์ประเภท "MOD5_NAV":

type "MOD5_NAV" {
    modifiers = Shift+Mod5;
    map[None] = level1;
    map[Shift] = level2;
    map[Mod5] = level3;
    map[Mod5+Shift] = level3;
    level_name[Level1] = "Base";
    level_name[Level2] = "Caps";
    level_name[Level3] = "Arrows";
};

สำหรับ Sublime Text 2 ทางออกนั้นยากและแฮ็คมากขึ้น ดังที่ได้กล่าวไว้ข้างต้น Sublime Text 2 อ่านรหัสโดยตรงจากอุปกรณ์และละเว้นคุณสมบัติบางอย่างของ Xkb (และเคล็ดลับ xkb ที่มีลูกศรไม่มีผล) มีโครงการ Gizmo Daemon เกือบจะร้าง แต่ก็ยังทำงานอยู่ http://gizmod.sourceforge.net/ . หลังจากการดิ้นรนและ googling ฉันรวบรวมมันสำเร็จบน Debian Wheezy ของฉัน จากนั้นฉันสร้างสคริปต์ gizmod นี้และวางไว้ที่ ~ / .gizmod / modules.d / 010-KeyboardViMode-SublimeText2.py http://pastebin.com/HNQgGEwD

ป.ล. บน Linux ฉันพลาด KeyboardRemap4MacBook เป็นบางครั้ง ซอฟต์แวร์ OS X ที่ยอดเยี่ยมนี้สามารถเปิดใช้งานการนำทาง (และสิ่งอื่น ๆ อีกมากมาย) ด้วยช่องทำเครื่องหมายเพียงไม่กี่



1

อันนี้ใช้ได้กับฉันบน Arch มันทำการแมป Caps + hjkl ไปยังปุ่มลูกศรและ Shift + Caps to Caps

ใส่สิ่งต่อไปนี้ใน ~/.Xmodmap:

! Remap caps lock to special modifier, but still allow shift+caps to 
toggle caps lock
clear lock
clear mod5
add lock = Mode_switch
keycode 66 = Mode_switch Caps_Lock NoSymbol NoSymbol
keycode 43 = h H Left Left
keycode 44 = j J Down Down
keycode 45 = k K Up Up
keycode 46 = l L Right Right

รีบูทหรือตั้งค่าด้วย xmodmap ~/.Xmodmap

หากคุณได้รับข้อผิดพลาดเช่น:

X Error of failed request:  BadValue (integer parameter out of range for operation)

มันอาจหมายความว่าคุณต้องล้างสิ่งอื่นนอกจาก mod5 (สิ่งใดก็ตามที่ตั้งค่าเป็น Mode_switch ) ตรวจสอบการแมปตัวปรับแต่งปัจจุบันของคุณด้วย xmodmap.


0

ฉันเป็นผู้ใช้ HHKB บน Debian / Ubuntu และวิธีนี้ใช้ได้สำหรับฉัน

ใช้ Ctrl ซ้าย ไปยังรหัสที่ใช้งาน

$ vi ~/.Xmodmap
keycode 37 = ISO_Level3_Shift

เพิ่มรหัสนี้ภายใต้ // End alphanumeric section ใน ขั้นพื้นฐาน บล็อกใน / usr / share / X11 / XKB / สัญลักษณ์ / เรา

//hjkl
//Ctrl + hjkl
key <AC06> {    [   h,  H,  Left    ]   };
key <AC07> {    [   j,  J,  Down    ]   };
key <AC08> {    [   k,  K,  Up      ]   };
key <AC09> {    [   l,  L,  Right   ]   };

ตอนนี้คุณควรจะสามารถใช้ปุ่มซ้าย, ลง, ขึ้นและขวาด้วย Ctrl + ชั่วโมง , J , k , ล. .

โดยวิธีการถ้าคุณได้ใช้ pentadactyl บน Firefox คุณสามารถเพิ่มรหัสนี้ได้ ~ / .pentadactylrc

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