tmux 접두사를 Super에 어떻게 바인딩합니까?


20

나는 심지어 Ctrl+b매우 emacs비슷 하다고 생각하지만 요점을 이해합니다. 다른 현명하게 사용하지 않는 키를 한 번만 누르면 바인딩 할 수 있는지 궁금합니다. 즉 Super_L(왼쪽 창 키라고도합니다. Super_L xev이 터미널에서 시작 하여 해당 키를 누르는 이유)

답변:


15

Super_LX 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 구성 도구를 통해 수행 할 수 있습니다.


이것은 X에서만 작동합니까? 예를 들어 X를 전달하지 않고 원격으로 시스템에 쉘하면 작동하지 않습니다.
xenoterracide

2
@ xenoterracide : 귀하의 질문을 이해하지 못하거나 내 대답을 이해하지 못합니다. Super_L는 X keysym이므로 아마도 어딘가에 X 서버가 있습니다 (Windows에서 로그인하는 경우 왼쪽 Windows 키라고 부를 것입니다). Tmux는 터미널에서 실행되며 이스케이프 시퀀스로 변환 된 기능 키를 사용하여 입력을 바이트로 읽습니다. 원격 로그인은 투명하며 ssh는 이스케이프 시퀀스를 구성하는 바이트 만 전송합니다.
Gilles 'SO- 악마 그만'

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가 아닌 키 시퀀스를 읽습니다. 따라서 터미널 에뮬레이터와 tmux를 올바르게 구성하면 실제로 가능합니다.
Gilles 'SO- 악마 그만'

2

사용자 지정 수정 자 키에 접두사를 설정할 수 없었지만 메타 시티와 함께 ​​Gnome에서 사용자 지정 수정 자 키와 함께 tmux 바인딩을 정의 할 수있었습니다. 예를 들어 Mod4+ kMod4+ 를 매핑 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 등)를 정의 할 수있는 모든 창 관리자에서 작동합니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.