如何将tmux前缀绑定到Super?


20

我什Ctrl+b至觉得emacs很像,但我明白要点。我想知道是否可以将它绑定到我没有其他明智使用的按键上?即Super_L(也称为左Windows键。为什么我说Super_L xev在终端中启动并按该键)

Answers:


15

Super_L是X键符。Tmux在终端中运行。由终端仿真器将keyym转换为字符序列由您决定。因此,您必须同时配置终端仿真器和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键符号,因此您大概在某个地方有一个X服务器(如果您是从Windows登录的,我想您将键称为左Windows键)。Tmux在终端中运行,并以字节为单位读取其输入,并将功能键转换为转义序列。远程登录是透明的,ssh只是传输构成转义序列的字节。
吉尔(Gilles)“所以,别再邪恶了”,2010年

1
刚在Mac上尝试过,我可能会节省一些时间。看起来iTerm2不支持发送F13-F20。请参阅code.google.com/p/iterm2/issues/detail?id=1630
balu 2012年

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键符。因此,实际上可以通过正确配置终端仿真器和tmux来实现。
吉尔斯(Gillles)“所以-别再作恶了”

2

我无法为自定义修饰键设置前缀,但是我确实结合了Gnome和Metacity下的自定义修饰键定义了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"

这允许将tmux绑定与Windows键结合使用。对于那些允许定义全局键盘快捷方式(Compiz,KWin等)的窗口管理器,这些内容都适用。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.