如何将 tmux 前缀绑定到 Super?

如何将 tmux 前缀绑定到 Super?

我发现甚至Ctrl+b很像,emacs但我理解这一点。我想知道是否可以将其绑定到我不使用的按键的单个按键上?即Super_L(也称为左 Windows 键。这就是为什么我说 Super_Lxev在终端中启动并按该键)

答案1

Super_L是 X 键符号。 Tmux 在终端中运行。由您的终端模拟器将键盘符号转换为字符序列。因此,您必须配置终端模拟器和 tmux。

查看 tmux 文档,前缀只能是带有可选修饰符的已知键名。因此,您可以将 tmux 前缀设置为您不使用的组合键,例如M-F12,并让终端在M-F12您按 时发送字符序列Super_L。通过更多的工作,您可以使用键盘可能没有的键(tmux 接受F13throughF20作为键名称,但它们必须在 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 配置工具来完成。

答案2

你不能。绑定一个键将调用该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

我无法为自定义修饰键设置前缀,但我确实设法结合 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 等)。

答案4

相关内容