我想在 z-shell 中重新绑定 Caps Lock 以退出,以便更好地使用 z-shell 行编辑器中的 vi 模式。我不想为整个系统重新绑定它。这可能吗?
(如果这很重要的话,我在用 Debian)
答案1
不,因为这不是由 Z shell 完成的。
原始键盘通断事件来自键盘设备。它们由终端仿真器处理 — 要么是内置于操作系统内核的终端仿真器,要么是 GUI 终端仿真器,例如xterm
、gnome-terminal
等等lxterminal
。终端仿真器将键盘事件转换为字符序列,并将它们推送到伪终端的“主”端或虚拟控制台的(通常隐藏的)“主”端。它们通过终端线路规程,并且只有那时Z shell 是否看到结果,作为从伪终端/虚拟控制台的“从属”端读取的输入。
行规程中没有处理“锁定”和“修饰”键。回想一下真实的终端(而不是“伪”和“虚拟”终端)通过串行线路连接才能理解这一点。从终端到系统通过串行线路传递的字符有已经有了所应用的修饰符。plus caps lock已a被终端翻译为“A”,这就是终端发送的内容,也是到达线路规程的内容。(类似地,controlandc已被终端翻译为 ASCIIETX
字符。)
因此,要调整caps lock(或者任何其他修饰符)的作用,您必须调整终端。对于你的情况,你必须调整任何终端模拟器您正在使用。
- 使用基于 X Window 系统的终端仿真器,您可以使用 X 键盘映射,因为原始键盘设备和终端仿真器程序之间存在一层 X。
- 对于内置于操作系统中的终端仿真器,通常会有一个完全不同的键盘映射系统,其中包括操作系统内核中的操作系统键码到字符映射层,您可以使用它。它因内核而异(例如从 Linux 到 BSD),并且您用来调整它的工具甚至因 Linux 发行版而异(例如从
localectl
到dpkg-reconfigure console-setup
)invoke-rc.d console-screen.sh
。
但因为这会改变你的终端它会影响从该终端接收输入的每个程序。对于 GUI 终端仿真器,它会影响每个程序您运行的程序会从该伪终端获取输入。对于内核中处理虚拟控制台的终端仿真器,它将影响每个程序它从虚拟控制台获取输入。
它不会影响整个系统,但它的影响远远超出你想要的,而这只是影响 Z shell。
进一步阅读
- Andries Brouwer (2002-10-12)。“2. 键盘概述”。 Linux 键盘和控制台操作方法. 版本 2.13。Linux 文档项目。