Làm cách nào để liên kết tiền tố tmux với Super?


20

Tôi thấy thậm chí Ctrl+blà rất emacsthích nhưng tôi hiểu điểm. Tôi đang tự hỏi liệu tôi có thể liên kết nó với một phím bấm duy nhất mà tôi không sử dụng khôn ngoan khác không? cụ thể là Super_L(còn được gọi là phím cửa sổ bên trái. tại sao tôi nói Super_L bắt đầu xevtrong một thiết bị đầu cuối và nhấn phím đó)

Câu trả lời:


15

Super_Llà một phím X. Tmux chạy trong một thiết bị đầu cuối. Tùy thuộc vào trình giả lập thiết bị đầu cuối của bạn để chuyển đổi một keyym thành chuỗi ký tự. Vì vậy, bạn sẽ phải cấu hình cả trình giả lập thiết bị đầu cuối và tmux.

Nhìn vào tài liệu tmux, tiền tố chỉ có thể là một tên khóa được biết đến với một công cụ sửa đổi tùy chọn. Vì vậy, bạn có thể đặt tiền tố tmux thành tổ hợp phím mà bạn không sử dụng, giả sử M-F12và nhận thiết bị đầu cuối của bạn để gửi chuỗi ký tự M-F12khi bạn nhấn Super_L. Với một chút công việc, bạn có thể sử dụng một phím mà bàn phím của bạn có thể không có (tmux chấp nhận F13thông qua F20như tên khóa, nhưng chúng phải được khai báo trong terminfo).

Về phía trình giả lập thiết bị đầu cuối, bạn sẽ phải sắp xếp Super_Lđể tạo chuỗi khóa \e\e[24~(for M-F12) hoặc \e[34~(for F20) (trong đó \elà ký tự thoát). Cách thực hiện việc này phụ thuộc vào trình giả lập thiết bị đầu cuối (và một số không đủ cấu hình để thực hiện). Với xterm, nó được thực hiện thông qua các tài nguyên X:

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

Bạn có thể gặp một snag Super_Lthường là công cụ sửa đổi và các phím bổ trợ không phải lúc nào cũng hoạt động khi không cần phải sửa đổi. Nếu bạn không muốn Super_Ltrở thành người sửa đổi, bạn có thể mang công cụ sửa đổi đi, hoặc (ít gây nhầm lẫn hơn) sử dụng một từ khóa khác cho khóa vật lý. Điều này có thể được thực hiện thông qua xmodmap (kiểu cũ và dễ hiểu), thông qua xkb (cách hiện đại, tài liệu kém, mạnh mẽ và phức tạp) hoặc có thể thông qua công cụ cấu hình GUI của môi trường máy tính để bàn của bạn.


Điều này sẽ chỉ làm việc trong X sau đó? ví dụ: nếu tôi shell vào hệ thống của mình từ xa mà không chuyển tiếp X thì nó sẽ không hoạt động.
xenoterracide

2
@xenoterracide: hoặc tôi không hiểu câu hỏi của bạn hoặc bạn không hiểu câu trả lời của tôi. Super_Llà một phím X, vì vậy bạn có thể có một máy chủ X ở đâu đó (nếu bạn đang đăng nhập từ Windows, tôi cho rằng bạn gọi khóa đó là phím Windows bên trái). Tmux chạy trong một thiết bị đầu cuối và đọc đầu vào của nó dưới dạng byte, với các phím chức năng được dịch thành các chuỗi thoát. Một đăng nhập từ xa là trong suốt, ssh chỉ truyền các byte tạo nên chuỗi thoát.
Gilles 'SO- ngừng trở nên xấu xa'

1
Chỉ cần thử điều này trên máy Mac và tôi có thể tiết kiệm thời gian cho người khác. Có vẻ như iTerm2 không hỗ trợ gửi F13-F20. Xem code.google.com/p/iterm2/issues/detail?id=1630
balu

3

Bạn không thể. Liên kết một khóa sẽ gọi cmd_bind_key_parsehàm cmd-bind-key.cmà từ đó sẽ ( từ đó) sẽ gọi key_string_get_modifierstừ 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     } 

Việc tmux.cchứa các #definekhai báo khóa bổ trợ và từ tệp đó chúng ta có:

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

Nhìn bề ngoài, nó không quá khó để sửa đổi; có thể là một dự án cuối tuần (nổi tiếng cuối cùng;))?


3
bạn đang thiếu một bước ở đây: tmux là một chương trình chế độ văn bản, nó đọc các chuỗi khóa, không phải là các phím X. Vì vậy, nó thực sự có thể, bằng cách cấu hình cả trình giả lập thiết bị đầu cuối và tmux đúng cách.
Gilles 'SO- ngừng trở nên xấu xa'

2

Tôi chưa thể đặt tiền tố thành khóa sửa đổi tùy chỉnh, nhưng tôi đã quản lý để xác định các ràng buộc tmux kết hợp với khóa sửa đổi tùy chỉnh trong Gnome kết hợp với Metacity. Ví dụ: để ánh xạ Mod4+ kMod4+ jđể di chuyển lên bảng hiện tại lên và xuống tương ứng:

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"

Điều này cho phép các ràng buộc tmux kết hợp với ví dụ như khóa Windows. Một cái gì đó dọc theo các dòng đó hoạt động cho bất kỳ trình quản lý cửa sổ nào cho phép xác định các phím tắt toàn cầu (Compiz, KWin, v.v.).


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.