A. *_*nda 6 terminal keyboard-shortcuts bash command-line readline
从另一个命令行驱动的软件中,我习惯了以下行为:向上/向下箭头浏览命令历史记录,匹配与当前行中输入的字符匹配的行,Esc 删除到目前为止输入的所有内容在当前行。我试图让 bash(通过 readline)做同样的事情。这是我放入 .bashrc 的内容:
bind 'Escape: kill-whole-line'
bind '"\e[A": history-search-backward'
bind '"\e[B": history-search-forward'
Run Code Online (Sandbox Code Playgroud)
由于 Escape="\e" 的映射与转义序列 "\e[A" 和 "\e[B" 的映射的干扰,行为不符合预期。
我的问题:有没有办法使这项工作?一种可能性是基于时间的,即如果 \e 后面紧跟着另一个键,则它被视为序列的一部分,但如果在一些短暂的延迟期间没有其他任何东西出现,则它本身被视为一个键。然而,阅读 bash 和 readline 文档我无法想出这样的事情。
附带问题:是否有一个现代终端“模拟器”实际上并不试图模拟历史机器的复杂行为,而是为在其中运行的程序提供有关按下的键的明确信息?这也将启用诸如区分 CTRL-A 和 CTRL-SHIFT-A 之类的东西......我在 KDE 的 Konsole(其行为类似于 xterm)和 Linux 控制台上测试了这些东西。
如果您使用,您可以通过设置八位控制布尔资源xterm
让它发送CSI
(0x9B) 而不是序列。\e[
例如,像这样启动 xterm:
xterm -xrm '*eightBitControl:true'
Run Code Online (Sandbox Code Playgroud)
您可以通过编辑 XTerm 应用程序特定的资源文件来永久设置此资源(Ubuntu 似乎将其放入/etc/X11/app-defaults
,但我认为/usr/share/X11/app-defaults
更标准。)
但请注意:这基本上会破坏你的终端,直到你修复所有的键绑定。
至于更普遍的问题,我认为它比乍看起来更困难。Linux 控制台围绕生成八位字符代码进行了精心设计(因此它可以使用 UTF-8)。从实际的控制台(即不使用 X),您可以获得“原始”扫描码,但随后您必须自己完成所有键盘映射逻辑(实际上,这就是 X 所做的)。您也许可以使用 X 键映射工具为 alt+ctrl+字母组合生成一些特定代码,但我不知道您将在哪里将它们压缩到八位编码序列中。不过我能感觉到你的痛苦:)
归档时间: |
|
查看次数: |
1989 次 |
最近记录: |