在xfce4中的终端中自定义键绑定 - 这可能是不可能的吗?

时间:2014-11-13 20:45:18

标签: linux bash xorg xterm

您好我想在xfce4-terminal中稍微更改键映射 - 或者在xfce4 X环境下运行的任何终端。

特别是,我想让ctrl-backspace和meta-backspace删除最后一个单词,ctrl-delete和meta-delete删除下一个单词。

到目前为止的进展:我正在使用bash,而bash使用readline库和bash内置函数“bind”来将键序列映射到readline函数。我需要的功能是“shell-kill-word”和“shell-backward-kill-word”。原则上,我应该能够做到这样的事情:

"\C-Rubout":shell-backward-kill-word
"\C-Delete":shell-kill-word
"\M-Rubout":shell-backward-kill-word
"\M-Delete":shell-kill-word

然而,xfce4终端仿真器,或者进程中更高上游的某个组件(可能是窗口管理器,xfwm4,Xorg程序本身?)不合作。通常,元键被转换为Escape字符,例如,这可以:

"\ey":shell-kill-word  <-- Meta + y kills next word

但是使用退格键和删除键我运气不好。我测试了两个终端仿真器的密钥代码,xfce4-terminal和xterm,由我的键盘上的退格和删除以及控制键组合生成。正如emacs的C-h C-l命令所报告的那样:

xterm:
  backspace:    DEL
  delete:       \e[3~
  \C-backspace: \C-h
  \C-delete:    \e[3;5~
  \M-backspace: y-umlaut (y with two dots over it)
  \M-delete:    nothing

xfce4-terminal:
  backspace:    DEL
  delete:       \e[3~
  \C-backspace: DEL
  \C-delete:    \e[3;5~
  \M-backspace: \e DEL
  \M-delete:    nothing

特别是在xfce4-terminal中,不可能将\ C-backspace绑定到shell-backword-kill-word,因为它会发送与常规退格键完全相同的键码。并且将M-delete绑定到shell-kill-word是不可能的,因为它根本不会发送密钥代码。

不幸的是,我不是X窗口系统的专家。有更多Xorg生态系统知识的人能指出我正确的方向吗?也许还有另一种终端模拟器可以做得更好吗?我正在运行当前的Debian发行版,其中包含xfce4窗口管理器和Xorg。

我发现使用最新的Linux软件和典型的现代计算机设置无法实现此行为几乎是不可思议的。真的是这样吗?

最后一条信息:在X窗口中运行emacs,它只能正确获取其中一个密钥代码:

backspace:    <backspace>
delete:       <delete>
\C-backspace: <C-backspace>
\C-delete:    <C-delete>
\M-backspace: <M-backspace>
\M-delete:    nothing

1 个答案:

答案 0 :(得分:1)

好吧,我不得不放弃xfce4-terminal,因为键绑定是一场噩梦,然后回到xterm。事实证明,我实际上更喜欢有几个窗口到标签。这是我为xterm&lt; - &gt; bash

的键绑定所做的
# ctrl-backspace
"\C-h":shell-backward-kill-word

# meta-backspace
"ÿ":shell-backward-kill-word

# ctrl-delete
"\e[3;5~":shell-kill-word

# meta-delete
#  not detected

# ctrl-right-arrow
"\e[1;5C":shell-forward-word

# ctrl-left-arrow
"\e[1;5D":shell-backward-word

# meta-right-arrow
"\e[1;3C":forward-word

# meta-left-arrow
"\e[1;3D":shell-backward-word

我唯一缺少的是元删除...你能做什么。