dtterm 中 bash 中的光标键无法按预期工作

dtterm 中 bash 中的光标键无法按预期工作

我正在尝试在 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 的虚拟装订领域里闲逛,我记得那是一大堆意大利面条。

参考:

dtTerm 手册,dtTerm 终端选项页面

标准 Xresources dtTerm 解析

答案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 资源文件中。

相关内容