我正在尝试运行 xterm 并让它获取键绑定,例如
Ctrl-;
Ctrl-.
Ctrl-,
etc..
(我喜欢在 emacs -nw 中使用这些绑定)
在网上阅读一些内容后,我设法在我的 ~/.Xresources 文件中使用以下行在办公室的桌面(运行 fedora 20)上获得工作设置:
xterm*formatOtherKeys: 1
但这似乎不适用于我的家庭桌面,它运行 Windows 7 并在 VirtualBox 上运行 Ubuntu 12.04.5 LTS。我设法确认 ~/.Xresources 文件实际上正在加载(因为我可以从其中控制字体大小),但似乎 formatOtherKeys 的效果与办公室桌面上的效果不同。
有谁知道为什么它没有拾取这些键绑定?
编辑:
xterm -v 返回 XTerm(271)。
这就是当我按下(并释放)Ctrl- 时 xdev 打印的内容;
KeyPress event, serial 32, synthetic NO, window 0x3e00001,
root 0x139, subw 0x0, time 63644841, (806,220), root:(824,274),
state 0x10, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyPress event, serial 32, synthetic NO, window 0x3e00001,
root 0x139, subw 0x0, time 63645458, (806,220), root:(824,274),
state 0x14, keycode 47 (keysym 0x3b, semicolon), same_screen YES,
XLookupString gives 1 bytes: (3b) ";"
XmbLookupString gives 1 bytes: (3b) ";"
XFilterEvent returns: False
KeyRelease event, serial 32, synthetic NO, window 0x3e00001,
root 0x139, subw 0x0, time 63645579, (806,220), root:(824,274),
state 0x14, keycode 47 (keysym 0x3b, semicolon), same_screen YES,
XLookupString gives 1 bytes: (3b) ";"
XFilterEvent returns: False
KeyRelease event, serial 32, synthetic NO, window 0x3e00001,
root 0x139, subw 0x0, time 63645939, (806,220), root:(824,274),
state 0x14, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
答案1
显然我应该使用的配置是这样的:
xterm*modifyOtherKeys: 1
现在,emacs 可以正确识别以下所有键绑定。您可能需要将它们映射到 .emacs 中才能使用它们:
(define-key input-decode-map "\e[46;5u" (kbd "C-."))
(define-key input-decode-map "\e[44;5u" (kbd "C-,"))
(define-key input-decode-map "\e[60;6u" (kbd "C-<"))
(define-key input-decode-map "\e[62;6u" (kbd "C->"))
(define-key input-decode-map "\e[59;5u" (kbd "C-;"))
(define-key input-decode-map "\e[40;6u" (kbd "C-("))
(define-key input-decode-map "\e[41;6u" (kbd "C-)"))
(define-key input-decode-map "\e[49;5u" (kbd "C-1"))
(define-key input-decode-map "\e[39;5u" (kbd "C-'"))
(define-key input-decode-map "\e[45;5u" (kbd "C--"))
(define-key input-decode-map "\e[43;6u" (kbd "C-+"))
(define-key input-decode-map "\e[61;5u" (kbd "C-="))
(define-key input-decode-map "\e[63;6u" (kbd "C-?"))
答案2
有几种可能性需要检查:
formatOtherKeys
已添加到补丁 #235 中(“xterm -v”至少应该显示这一点)。- 不同的环境可能有不同的键码。您可能会发现
xev
您想要使用的组合存在一些差异。
您的问题没有提到必要的资源设置modifyOtherKeys
。这formatOtherKeys
资源改变所使用的控制序列modifyOtherKeys
(您可能在不同系统上重用设置时忽略了这一点)。
例如,我可以使用它(在不同的系统上......)来显示修改后的键:
xterm -xrm '*modifyOtherKeys:1' -xrm '*formatOtherKeys:1' -e cat -v