我正在尝试在 bash 中重新映射一些键盘快捷键。问题是,当我尝试使用 显示按键代码时Ctrl-V
,并非所有按键都起作用。例如,键入Ctrl-V
,然后Home
将终端移至顶部,就像往常一样。输入Ctrl-V
,然后Ctrl
什么也不显示。键入Ctrl-V
,然后left arrow
显示^[OD
,键入Ctrl-V
,然后Ctrl-left arrow
显示相同的内容。
我正在尝试重新映射 Home 和 End 以将光标移动到行首或行尾,并使用 Ctrl-箭头来跳转单词。我在 Solaris 中,使用 DtTerm。
解决方案:
.X默认值:
Dtterm*DtTerm*Translations: #override \n\
<KeyPress>osfBeginLine: string("0x1B")string("[1~") \n\
<KeyPress>osfEndLine: string("0x1B")string("[4~") \n\
Ctrl<KeyPress>osfLeft: string("0x1B")string("OC") \n\
Ctrl<KeyPress>osfRight: string("0x1B")string("OD")
.inputrc:
"\e[1~": beginning-of-line
"\e[4~": end-of-line
"\eOD": forward-word
"\eOC": backward-word
答案1
我已经很多年没有使用 dtTerm 了。您可以通过将键盘模式和光标键模式设置为“应用程序模式”(在“终端”->“选项”下找到)来使其工作。
如果这不起作用,那么您可能必须沿着 Xresources 路线走下去,但令我印象深刻的是,该Home键(如escape键)对 DtTerm(ala OSF/Motif)具有特殊含义,这需要额外的工作才能获得它玩得很好。
显然,在翻译中使用 #override 并未得到“官方支持”,但作为一种黑客手段,它是有效的。
您需要通过从 shell 运行 dtTerm 来查找当前存在的键映射,然后发出 aShiftCtrl*来获取 dtTerm 以转储其键映射(它将出现在运行 dtTerm 的 shell 上的标准输出上)。*当谈论 X 键绑定时,是小键盘上的键(有时称为 KP_Multiply)。
我想 dtTerm 将分配的键映射类似于osfBeginLine
.
接下来你需要获得实际的您想要通过使用类似xev
.例如,home我的设置下的密钥是 keysym 0xff50
。
KeyPress event, serial 30, synthetic NO, window 0x3600001,
root 0x102, subw 0x0, time 643678606, (78,90), root:(1578,578),
state 0x0, keycode 110 (keysym 0xff50, Home), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
接下来,您需要编辑~/.Xdefaults
并添加如下内容:
Dtterm*DtTerm*translations:#override\n\
:<KeyPress>osfBeginLine: string("0xff50")
然后运行dtaction ReloadResources
,这应该会获取您的.Xdefaults
文件。
如果运气好的话,您应该获得映射,然后能够像往常一样进行键绑定。如果没有,你可能不得不在 Motif 的虚拟装订领域里闲逛,我记得那是一大堆意大利面条。
参考:
答案2
物理终端不会为与箭头一起使用的 CTRL 生成不同的代码序列。终端仿真器也纷纷效仿,因为它们试图以与物理祖先相同的方式运行。根据您使用的终端仿真器,您也许能够定义自己的序列。例如,我有
XTerm*VT100*Translations: #override \
Ctrl<Key>Prior:scroll-back(1,halfpage)\n\
<Key>Prior:string(0x1B)string([5~)\n\
Ctrl<Key> Next:scroll-forw(1,halfpage)\n\
<Key>Next:string(0x1B)string([6~)\n\
<Key>Delete:string(0x1B)string([3~)\n\
Ctrl<Key>Home:string(0x1B)string(CH~)\n\
Ctrl<Key>End:string(0x1B)string(CE~)\n\
<Key>Home:string(0x1B)string(H~)\n\
<Key>End:string(0x1B)string(E~)\n\
<Key>BackSpace:string(0x7F)\n\
Ctrl<Key>Left:string(0x1B)string(CL~)\n\
Ctrl<Key>Right:string(0x1B)string(CR~)\n\
Ctrl<Key>Up:string(0x1B)string(CU~)\n\
Ctrl<Key>Down:string(0x1B)string(CD~)\n
在我的 XTerm 资源文件中。