某些 Shift+箭头键在 tmux 中不起作用?

某些 Shift+箭头键在 tmux 中不起作用?

我正在尝试自定义 tmux,以便

  • Ctrl-箭头用于选择窗格
  • Shift-箭头用于调整窗格大小
  • Alt 箭头(左、右)用于选择窗口

...除了 Shift-Up 和 Shift-Down 之外,其他都正常工作。(令人费解的是,Shift-Left 和 Shift-Right 可以按预期工作。)

这是在 xfce4-terminal 中运行 tmux 2.0(虽然我在 Ubuntu 上也看到过这个问题,使用 Ubuntu 的默认终端程序。)

我做错了什么吗?这是我的 .tmux.conf 文件的全部内容:

# split <h>orizontal and <v>ertical
bind-key h split-window -v
bind-key v split-window -h

# Use Ctrl-arrow keys without prefix key to switch panes
bind -n C-Up    select-pane -U
bind -n C-Down  select-pane -D
bind -n C-Left  select-pane -L
bind -n C-Right select-pane -R

# Use Shift-arrow keys without prefix key to resize panes
bind -n S-Up    resize-pane -U
bind -n S-Down  resize-pane -D
bind -n S-Left  resize-pane -L
bind -n S-Right resize-pane -R

# Use Alt-arrow keys without prefix key to switch windows
bind -n M-Left  previous-window
bind -n M-Right next-window

# No delay for escape key press
set -sg escape-time 0

# Reload tmux config
bind-key r source-file ~/.config/.tmux.conf \; display-message "Configuration reloaded"

答案1

这个问题不太可能与应用模式相对正常模式,因为xterm对于移位和非移位的光标键发送相同的字符序列。

问题的一个线索是,各种ctrl物品都是延长 xterm功能。tmux使用几个表:

  • 其中一个列出了在终端条目中不太可能找到的特殊键
  • 另一个列出了可能从常规终端数据库条目中获取的终端功能。

对于后者,tmux表中的这些行是相关的:

    { TTYC_KDN2, TTYCODE_STRING, "kDN" },
    { TTYC_KDN3, TTYCODE_STRING, "kDN3" },
    { TTYC_KDN4, TTYCODE_STRING, "kDN4" },
    { TTYC_KDN5, TTYCODE_STRING, "kDN5" },
    { TTYC_KDN6, TTYCODE_STRING, "kDN6" },
    { TTYC_KDN7, TTYCODE_STRING, "kDN7" },
    { TTYC_KEND, TTYCODE_STRING, "kend" },

    { TTYC_KLFT2, TTYCODE_STRING, "kLFT" },
    { TTYC_KLFT3, TTYCODE_STRING, "kLFT3" },
    { TTYC_KLFT4, TTYCODE_STRING, "kLFT4" },
    { TTYC_KLFT5, TTYCODE_STRING, "kLFT5" },
    { TTYC_KLFT6, TTYCODE_STRING, "kLFT6" },
    { TTYC_KLFT7, TTYCODE_STRING, "kLFT7" },

    { TTYC_KRIT2, TTYCODE_STRING, "kRIT" },
    { TTYC_KRIT3, TTYCODE_STRING, "kRIT3" },
    { TTYC_KRIT4, TTYCODE_STRING, "kRIT4" },
    { TTYC_KRIT5, TTYCODE_STRING, "kRIT5" },
    { TTYC_KRIT6, TTYCODE_STRING, "kRIT6" },
    { TTYC_KRIT7, TTYCODE_STRING, "kRIT7" },
    { TTYC_KUP2, TTYCODE_STRING, "kUP" },
    { TTYC_KUP3, TTYCODE_STRING, "kUP3" },
    { TTYC_KUP4, TTYCODE_STRING, "kUP4" },
    { TTYC_KUP5, TTYCODE_STRING, "kUP5" },
    { TTYC_KUP6, TTYCODE_STRING, "kUP6" },
    { TTYC_KUP7, TTYCODE_STRING, "kUP7" },

    { TTYC_RI, TTYCODE_STRING, "ri" },

这些行(在 中)中的大多数tty-term.cxterm扩展。Shift 光标键的字符串可能由"kUP""kDN""kLFT""kRGT"— 以及 和"kri"提供"kind"

最后两个是有问题的:

  • tmux有一个表条目"ri"(发送的字符串终端),但没有"kri""kind"(你的上/下光标键)
  • 因为(n)诅咒”wgetch只会看到字符串列表中具有给定值的第一个功能,ncurses 的数据库仅定义可能性。
  • kUPkDN是扩展,而不是标准功能,因此 ncurses 定义了"kri""kind",它标准。

问题不在于您的配置,而在于一个简单的错误,tmux可以通过向该表添加条目来解决。 类似这样的方法(未经测试)是继续进行的方法:

    { TTYC_KUP2, TTYCODE_STRING, "kri" },
    { TTYC_KDN2, TTYCODE_STRING, "kind" },

相关内容