在 z-shell 中将 caps lock 绑定到 escape

在 z-shell 中将 caps lock 绑定到 escape

我想在 z-shell 中重新绑定 Caps Lock 以退出,以便更好地使用 z-shell 行编辑器中的 vi 模式。我不想为整个系统重新绑定它。这可能吗?

(如果这很重要的话,我在用 Debian)

答案1

不,因为这不是由 Z shell 完成的。

原始键盘通断事件来自键盘设备。它们由终端仿真器处理 — 要么是内置于操作系统内核的终端仿真器,要么是 GUI 终端仿真器,例如xtermgnome-terminal等等lxterminal。终端仿真器将键盘事件转换为字符序列,并将它们推送到伪终端的“主”端或虚拟控制台的(通常隐藏的)“主”端。它们通过终端线路规程,并且只有那时Z shell 是否看到结果,作为从伪终端/虚拟控制台的“从属”端读取的输入。

行规程中没有处理“锁定”和“修饰”键。回想一下真实的终端(而不是“伪”和“虚拟”终端)通过串行线路连接才能理解这一点。从终端到系统通过串行线路传递的字符有已经有了所应用的修饰符。plus caps locka被终端翻译为“A”,这就是终端发送的内容,也是到达线路规程的内容。(类似地,controlandc已被终端翻译为 ASCIIETX字符。)

因此,要调整caps lock(或者任何其他修饰符)的作用,您必须调整终端。对于你的情况,你必须调整任何终端模拟器您正在使用。

  • 使用基于 X Window 系统的终端仿真器,您可以使用 X 键盘映射,因为原始键盘设备和终端仿真器程序之间存在一层 X。
  • 对于内置于操作系统中的终端仿真器,通常会有一个完全不同的键盘映射系统,其中包括操作系统内核中的操作系统键码到字符映射层,您可以使用它。它因内核而异(例如从 Linux 到 BSD),并且您用来调整它的工具甚至因 Linux 发行版而异(例如从localectldpkg-reconfigure console-setupinvoke-rc.d console-screen.sh

但因为这会改变你的终端它会影响从该终端接收输入的每个程序。对于 GUI 终端仿真器,它会影响每个程序您运行的程序会从该伪终端获取输入。对于内核中处理虚拟控制台的终端仿真器,它将影响每个程序它从虚拟控制台获取输入。

它不会影响整个系统,但它的影响远远超出你想要的,而这只是影响 Z shell。

进一步阅读

相关内容