.inputrc 中 TAB 和 Ci 的单独映射

.inputrc 中 TAB 和 Ci 的单独映射

就我所尝试的而言,.inputrc 中的“TAB”和“Ci”似乎意味着同一件事,我将任何东西绑定到一个上,它也会绑定到另一个上。我知道最初它们是同一件事,而且这种行为是从旧时代继承下来的,但现在,除了终端仿真器外,所有 X 应用程序都会在 Ci 和 TAB 按下之间产生差异。

那么,有没有一种方法,当我按 TAB 键时运行终端命令(例如“complete”),当我按“Ci”时运行另一个命令?

(同样的问题也适用于 Cm 和 ENTER、Cz、Cd 以及所有这些控制序列,我想通过原始绑定以外的其他方式发送它们,并将我自己的命令应用于这些宝贵的键绑定)

顺便说一句,如果您能稍微解释一下从按键到 shell 解释的过程,那将有助于我理解。现在我明白了键盘事件由 Xmodmap 翻译,然后由 .inputrc 翻译,结果由 shell 或类似的东西解释。

答案1

xmodmap和之间没有直接联系.inputrc

根据终端仿真器的不同,有几种方法可以修改通过终端发送的键。其中包括

  • 修改 X 键盘配置(陳小嶺
  • 修改为给定事件发送的键码(修改映射
  • 终端特定的东西,例如translationsxterm 使用的资源。

然而,在正常情况下,control/I会发送一个tab字符,因为几乎所有终端都是这样设置的。

使用xkb,您可以(原则上)更改键盘的功能。反过来,X 应用程序会检测按键按下和释放事件,并将其转换为按键符号。 xev对于显示事件很有用。在 X 中运行的终端仿真器获取一系列事件,然后(使用 X 库调用)将其转换为字符。tab在这种情况下,A 只是另一个字符。

xmodmap在此过程中的作用是对 X 键盘配置进行临时更改。

如果您恰好使用xterm,该translations资源提供了许多可配置性。这是X工具包,它允许您将各种键组合与 xterm 的内置操作关联起来。默认键绑定列在手动的。您可以覆盖或添加这些绑定。有几个地方可以设置信息($HOME/.Xdefaults例如,尽管它很容易变得混乱)。例如,我设置了XAPPLRESDIR环境变量指向包含自定义 app-defaults 文件的用户目录。在一个名为 的文件中XTerm,我可以将其放入其中以更改 的结果ctrl/I

*VT100*translations:    #override \n\ 
    Ctrl ~Shift<Key>I:string("??")

由于该tab键具有自己特殊的键符号,因此不受此翻译的影响。

相关内容