有没有一个工具可以查看我所有的快捷方式解释级别?

有没有一个工具可以查看我所有的快捷方式解释级别?

语境

我成为 Linux(高级)用户已经大约一年了。我学会了自己解决大部分问题,并编写了许多有助于我完成工作流程的脚本。具体来说,我学会了使用大量的快捷方式来完成频繁的任务。这就是麻烦开始的地方。

问题

我希望能够使用“ctrl+Tab”切换到 Tmux 会话中的下一个窗口,并使用“ctrl+shift+Tab”切换回上一个窗口没有使用前缀 (ctrl+b)。我在 ~/.tmux.conf 中设置的绑定是

bind-key -n C-Tab next-window
bind-key -n C-S-Tab previous-window

应该有效,因为它是公认的答案https://stackoverflow.com/a/15471269/5273299。 (区别在于我的“-n”已被证明可以与以下绑定一起使用:

# Remap window navigation to vim-like keys
bind -n C-h select-pane -L
bind -n C-j select-pane -D
bind -n C-k select-pane -U
bind -n C-l select-pane -R

我不知道该去哪里寻找。我的观察是 tmux 不将“ctrl+shift”识别为映射的快捷方式。相反,“tab”被传递到 vim(当我在该终端实例中打开 VIM 时),或者在我的默认命令行解释器 Fish 中作为“完整”。

系统

我在跑https://solus-project.com/作为我的 Linux 发行版——与桌面环境 GNOME 一起安装,但安装并使用 i3-wm 作为我的窗口管理器。我的终端模拟器是 xrvt-unicode (urxvt)。 Shell FISH 如前所述。

明显的问题是,有人知道为什么 tmux 不解释 ctrl+shift 吗?更通用的解决方案是,有人知道我如何获得所有这些快捷解释器之间的解释级别的总体概述吗?

例如:

  • 首先 - 按键从硬件键盘发送到 X11 服务器
  • 然后,从 X11 开始,如果 CTRL+Tab 未映射到任何内容,则会发送到 i3
  • 然后,从 i3 开始,如果 CTRL+Tab 未映射到任何内容,则会将其发送到 urxvt
  • 然后等等。

我想知道快捷方式在哪里无法被解释以及如何解决这个问题。

提前谢谢了!

答案1

您的终端模拟器正在“吃掉”您的密钥,因为没有已知的表示/转义可以将它们发送到终端中运行的程序。

Shift-Tab 通常映射到“\e[Z”(kcbt/kB/back-tab 键,请参阅 terminfo(5)),这就是 tmux 对 Shift-Tab 和 Control-Shift-Tab 所看到的情况;但这并不重要,因为 tmux(显然)无法将任意键序列绑定到命令,而只能将其知道的“标准”键绑定。

考虑到这一点,您可以配置 urxvt 将 Control-Tab 和 Control-Shift-Tab 重新映射到“Control-b n”和“Control-b p”(tmux 中下一个/上一个窗口的默认键)

$ cat | xrdb -override
URxvt.keysym.ISO_Left_Tab: string:\002n
URxvt.keysym.Control-ISO_Left_Tab: string:\002p
! disable the built-in control-shift
URxvt.iso14755:false
^D

“\002”是 ^B 或 Control-b;如果您在 tmux 中使用另一个键前缀(例如“\001”代表 ^A),您应该更改它。

另请注意,在您的 X 服务器上,Shift-Tab 可能不是映射到 ISO_Left_Tab;使用 xev(1) 查看它实际发送的密钥。

如果有效,您可以将这些行添加到~/.Xresources-- 并确保该文件是从 X 会话脚本加载的(现代桌面可能不具备这一点!)。

相关内容