我正在尝试自定义 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.c
是xterm
扩展。Shift 光标键的字符串可能由"kUP"
、"kDN"
、"kLFT"
、"kRGT"
— 以及 和"kri"
提供"kind"
。
最后两个是有问题的:
tmux
有一个表条目"ri"
(发送的字符串到终端),但没有"kri"
和"kind"
(你的上/下光标键)- 因为(n)诅咒”
wgetch
只会看到字符串列表中具有给定值的第一个功能,ncurses 的数据库仅定义一可能性。 kUP
和kDN
是扩展,而不是标准功能,因此 ncurses 定义了"kri"
和"kind"
,它是标准。
问题不在于您的配置,而在于一个简单的错误,tmux
可以通过向该表添加条目来解决。 类似这样的方法(未经测试)是继续进行的方法:
{ TTYC_KUP2, TTYCODE_STRING, "kri" },
{ TTYC_KDN2, TTYCODE_STRING, "kind" },