ฉันจะผูกคำเสริมหน้า tmux กับ Super ได้อย่างไร


20

ฉันพบว่าCtrl+bเป็นคนที่emacsชอบมากแต่ฉันก็เข้าใจประเด็นนี้ ฉันสงสัยว่าฉันจะผูกมันไว้กับปุ่มกดอันเดียวของคีย์ที่ฉันไม่ได้ใช้อย่างชาญฉลาดหรือไม่? คือSuper_L(หรือที่รู้จักกันว่าปุ่มซ้ายของ Windows เพราะเหตุใดฉันถึงบอกว่า Super_L เริ่มต้นxevในเทอร์มินัลแล้วกดปุ่มนั้น)

คำตอบ:


15

Super_Lเป็น X keysym Tmux ทำงานใน terminal มันขึ้นอยู่กับเทอร์มินัลอีมูเลเตอร์ของคุณเพื่อเปลี่ยน keysym ให้เป็นลำดับอักขระ ดังนั้นคุณจะต้องกำหนดค่าทั้งเทอร์มินัลอีมูเลเตอร์และ tmux ของคุณ

ดูที่เอกสารคู่มือ tmux คำนำหน้าสามารถเป็นชื่อคีย์ที่รู้จักพร้อมกับโมดิฟายเออร์เผื่อเลือก เพื่อให้คุณสามารถตั้งค่า tmux คำนำหน้าไปรวมกันที่สำคัญที่คุณไม่ได้ใช้การพูดM-F12และได้รับของคุณ terminal เพื่อส่งลำดับตัวอักษรสำหรับเมื่อคุณกดM-F12 Super_Lด้วยการทำงานเพิ่มขึ้นเล็กน้อยคุณสามารถใช้คีย์ที่แป้นพิมพ์ของคุณอาจไม่มี (tmux ยอมรับF13ผ่านF20เป็นชื่อคีย์ แต่ต้องประกาศใน terminfo)

ที่ด้านเทอร์มินัลอีมูเลเตอร์คุณจะต้องจัดเรียงSuper_Lเพื่อสร้างลำดับคีย์\e\e[24~(สำหรับM-F12) หรือ\e[34~(สำหรับF20) (โดยที่\eอักขระเลี่ยง) วิธีการทำสิ่งนี้ขึ้นอยู่กับเทอร์มินัลอีมูเลเตอร์ (และบางเครื่องไม่สามารถกำหนดค่าได้พอที่จะทำ) ด้วย xterm สามารถทำได้ผ่านแหล่งข้อมูล X:

! Make Super_L act as Meta+F12
XTerm.VT100.translations:       #override \
    <Key>Super_L:  string("\033\033[24~")

คุณอาจพบอุปสรรค์ที่Super_Lโดยปกติแล้วจะเป็นตัวดัดแปลงและปุ่มตัวดัดแปลงจะไม่ทำงานเมื่อจำเป็นต้องมีตัวดัดแปลง หากคุณไม่ต้องการSuper_Lเป็นตัวดัดแปลงคุณสามารถนำตัวดัดแปลงไปใช้หรือ (ลดความสับสน) ให้ใช้ keysym อื่นสำหรับฟิสิคัลคีย์ สิ่งนี้สามารถทำได้ผ่าน xmodmap (สมัยเก่าและง่ายต่อการเข้าใจ) ผ่าน xkb (วิธีที่ทันสมัยไม่มีเอกสารมีประสิทธิภาพและซับซ้อน) หรือผ่านเครื่องมือกำหนดค่า GUI ของสภาพแวดล้อมเดสก์ท็อปของคุณ


สิ่งนี้จะใช้งานได้ใน X เท่านั้นไหม เช่นถ้าฉันปอกเปลือกเข้าสู่ระบบจากระยะไกลโดยไม่ต้องส่งต่อ X มันจะไม่ทำงาน
xenoterracide

2
@xenoterracide: ฉันไม่เข้าใจคำถามของคุณหรือคุณไม่เข้าใจคำตอบของฉัน Super_Lเป็น X keysym ดังนั้นคุณน่าจะมีเซิร์ฟเวอร์ X อยู่ที่ไหนสักแห่ง (ถ้าคุณลงชื่อเข้าใช้จาก Windows ฉันคิดว่าคุณเรียกปุ่มนั้นเป็นปุ่ม Windows ซ้าย) Tmux รันในเทอร์มินัลและอ่านอินพุตเป็นไบต์ด้วยปุ่มฟังก์ชันที่แปลเป็น escape sequences รีโมตล็อกอินมีความโปร่งใส ssh เพียงส่งไบต์ที่ประกอบขึ้นเป็นลำดับ escape
Gilles 'หยุดชั่วร้าย'

1
เพิ่งลองทำสิ่งนี้ใน Mac และฉันอาจช่วยคนอื่นได้บ้าง ดูเหมือนว่า iTerm2 ไม่รองรับการส่ง F13-F20 ดูcode.google.com/p/iterm2/issues/detail?id=1630
balu

3

คุณทำไม่ได้ การผูกคีย์จะเรียกใช้cmd_bind_key_parseฟังก์ชันcmd-bind-key.cที่จะเรียก (ในที่สุด) key_string_get_modifiersจากkey-string.c:

/* Find modifiers. */
105     int
106     key_string_get_modifiers(const char **string)
107     {
108         int modifiers;
109         
110         modifiers = 0;
111         while (((*string)[0] != '\0') && (*string)[1] == '-') {
112             switch ((*string)[0]) {
113                 case 'C':
114                 case 'c':
115                 modifiers |= KEYC_CTRL;
116                 break;
117                 case 'M':
118                 case 'm':
119                 modifiers |= KEYC_ESCAPE;
120                 break;
121                 case 'S':
122                 case 's':
123                 modifiers |= KEYC_SHIFT;
124                 break;
125             }
126             *string += 2;
127         }
128         return (modifiers);
129     } 

tmux.cมีคีย์ตัวปรับ#defineการประกาศและจากไฟล์ที่เรามี:

106     /* Key modifier bits. */
107     #define KEYC_ESCAPE 0x2000
108     #define KEYC_CTRL 0x4000
109     #define KEYC_SHIFT 0x8000
110     #define KEYC_PREFIX 0x10000 

บนพื้นผิวมันไม่ได้ดูยากเกินไปที่จะปรับเปลี่ยน; อาจเป็นวันหยุดสุดสัปดาห์ (คำพูดสุดท้ายที่มีชื่อเสียง;))


3
คุณพลาดขั้นตอนหนึ่งไปที่นี่: tmux เป็นโปรแกรมโหมดข้อความมันอ่านลำดับของคีย์ไม่ใช่ X keysyms ดังนั้นจึงเป็นไปได้จริงโดยการกำหนดค่าทั้ง terminal emulator และ tmux อย่างถูกต้อง
Gilles 'หยุดความชั่วร้าย'

2

ฉันไม่สามารถตั้งค่าส่วนนำหน้าเป็นคีย์ตัวดัดแปลงที่กำหนดเองได้ แต่ฉันจัดการเพื่อกำหนดการเชื่อมโยง tmux ร่วมกับคีย์ตัวดัดแปลงแบบกำหนดเองภายใต้ Gnome ร่วมกับ Metacity ตัวอย่างเช่นหากต้องการ map Mod4+ kและMod4+ jเพื่อเลื่อนไปยังพาเนลปัจจุบันขึ้นและลงตามลำดับ:

gconftool-2 --set /apps/metacity/keybinding_commands/command_1 --type string "tmux select-pane -D"
gconftool-2 --set /apps/metacity/keybinding_commands/command_2 --type string "tmux select-pane -U"
gconftool-2 --set /apps/metacity/global_keybindings/run_command_1 --type string "<Mod4>j"
gconftool-2 --set /apps/metacity/global_keybindings/run_command_2 --type string "<Mod4>k"

สิ่งนี้อนุญาตให้รวม tmux ร่วมกับตัวอย่างเช่นคีย์ Windows บางสิ่งตามบรรทัดเหล่านี้ใช้ได้กับตัวจัดการหน้าต่างที่อนุญาตให้กำหนดแป้นพิมพ์ลัดทั่วโลก (Compiz, KWin ฯลฯ )


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