나는 심지어 Ctrl+b매우 emacs
비슷 하다고 생각하지만 요점을 이해합니다. 다른 현명하게 사용하지 않는 키를 한 번만 누르면 바인딩 할 수 있는지 궁금합니다. 즉 Super_L(왼쪽 창 키라고도합니다. Super_L xev
이 터미널에서 시작 하여 해당 키를 누르는 이유)
나는 심지어 Ctrl+b매우 emacs
비슷 하다고 생각하지만 요점을 이해합니다. 다른 현명하게 사용하지 않는 키를 한 번만 누르면 바인딩 할 수 있는지 궁금합니다. 즉 Super_L(왼쪽 창 키라고도합니다. Super_L xev
이 터미널에서 시작 하여 해당 키를 누르는 이유)
답변:
Super_L
X keysym입니다. Tmux는 터미널에서 실행됩니다. 키 심을 문자 시퀀스로 변환하는 것은 터미널 에뮬레이터에 달려 있습니다. 따라서 터미널 에뮬레이터와 tmux를 모두 구성해야합니다.
tmux 문서를 보면 접두어는 선택적 수정자가있는 알려진 키 이름 일 수 있습니다. 따라서 tmux 접두사를 사용하지 않는 키 조합으로 설정하고을 누를 때 M-F12
터미널에서 문자 시퀀스를 보내도록 M-F12
할 수 있습니다 Super_L
. 좀 더 많은 작업으로, 당신은 (TMUX 받아들이 키보드 아마하지 않는 키를 사용할 수 F13
를 통해 F20
키 이름으로,하지만 그들은 terminfo의 선언되어야한다).
터미널 에뮬레이터 측에서는 Super_L
키 시퀀스 \e\e[24~
(for M-F12
) 또는 \e[34~
(for 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
수정자가되고 싶지 않다면 수정자를 빼거나 물리적 키에 대해 다른 키 심을 사용하십시오. 이것은 xmodmap (구식이고 이해하기 쉬운), xkb (현대하고 문서화가 잘되지 않은 강력하고 복잡한 방법) 또는 데스크탑 환경의 GUI 구성 도구를 통해 수행 할 수 있습니다.
Super_L
는 X keysym이므로 아마도 어딘가에 X 서버가 있습니다 (Windows에서 로그인하는 경우 왼쪽 Windows 키라고 부를 것입니다). Tmux는 터미널에서 실행되며 이스케이프 시퀀스로 변환 된 기능 키를 사용하여 입력을 바이트로 읽습니다. 원격 로그인은 투명하며 ssh는 이스케이프 시퀀스를 구성하는 바이트 만 전송합니다.
당신은 할 수 없습니다. 키를 바인딩하면 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
그러나 표면적 으로는 수정하기가 너무 어렵지 않습니다 . 아마도 주말 (유명한 마지막 단어;)) 프로젝트입니까?
사용자 지정 수정 자 키에 접두사를 설정할 수 없었지만 메타 시티와 함께 Gnome에서 사용자 지정 수정 자 키와 함께 tmux 바인딩을 정의 할 수있었습니다. 예를 들어 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"
이를 통해 Windows 키와 같은 tmux 바인딩이 가능합니다. 이 줄에있는 것은 전역 키보드 단축키 (Compiz, KWin 등)를 정의 할 수있는 모든 창 관리자에서 작동합니다.
당신이 이것을 원하는 것 같습니다 : https://lists.gnu.org/archive/html/screen-users/2009-12/msg00144.html