在 tmux 中,arrow 和 ctrl+arrow 都产生相同的代码

在 tmux 中,arrow 和 ctrl+arrow 都产生相同的代码

Ubuntu 12.10,在 putty 和 tmux.conf 中将 TERM 设置为 screen-256color,我在export进入和退出 tmux 会话时都进行了确认。

如果我运行cat > /dev/null然后按下<down><c-down>我就会^[[B^[OB退出 tmux 会话,但^[[B^[[B仍在会话内。

我已经setw -g xterm-keys on在 .tmux.conf 中尝试过,但没有成功。

答案1

screen-256color是有效的 TERM 值,可在内部使用tmux,但 xterm-256color可能更适合tmux(你“就在里面”油灰)附加到tmux会话中不准确的 TERM 值相当于对tmux关于终端仿真器使用的控制序列(即油灰可能不完全支持 terminfo 数据库条目描述的控制序列screen-256color)。

我不使用油灰,但搜索了一下后我发现油灰不支持发送实际表示(例如)Control+ 的序列Down Arrow。您观察到的不同序列实际上是普通的两个不同序列Down Arrow^[[B是正常序列,^[OB用于程序请求“应用程序光标键”模式时。

那么,当油灰发送^[OB,任何期望xterm- 样式序列的程序都会将该序列解释为“Down Arrow在应用程序光标键模式下”(或只是Down Arrow),但永远不会解释为Control+ Down Arrow。具体来说,当tmux看到这两个序列中的任何一个,它都会将其解释为一个简单的Down Arrowtmux然后为其窗格生成取决于该特定窗格是否已配置为应用程序光标键模式。

就你的情况而言,你还没有问tmux将其窗格切换到应用程序光标键模式,因此它在两种情况下都将序列转换为其“正常”序列。您应该能够通过运行以下命令来观察差异(在tmux) (这输出命令生成激活和停用所需终端模式的控制序列):

# Activate "Application Cursor Keys" (and "Application Keypad")
tput smkx ; cat
# Press Down Arrow to see '^[OB', then Control-C to kill the cat

# Activate "Normal Cursor Keys" (and "Normal Keypad")
tput rmkx ; cat 
# Press Down Arrow to see '^[[B', then Control-C to kill the cat

如果你能以某种方式说服油灰发送 xterm 样式的修改后的箭头键序列(即^[[1;5B+ ControlDown Arrow,然后tmuxxterm-keys启用后将为其窗格生成相同的序列。

相关内容