我正在使用 xterm,它附带了手册页中列举的一组默认翻译。或我编辑我的文件的翻译#augment
;这按预期工作。#override
$XAPPLRESDIR/XTerm
但是,我找不到办法消除特定的默认翻译(并将事件传递给在 xterm 中运行的应用程序)。
具体来说,我希望将Meta <Btn2Down>
事件传递给应用程序。 xterm 默认翻译将其绑定到clear-saved-lines()
操作
默认按键绑定
[...]
元 <Btn2Down>:clear-saved-lines() \n\
我需要做什么才能让应用程序接收 Meta-Btn2Down 事件?
答案1
据我了解,X Toolkit 中没有可以消除一个翻译。你可以覆盖或者增加但不选择性地删除转换表的一部分。
这就是添加的原因之一省略翻译资源在补丁#269。在该版本中,翻译表被分为更易于管理的部分,这允许更好的定制:
在启动时有选择地忽略 xterm 默认翻译的一个或多个部分。资源值是逗号分隔的关键字列表,可以缩写: “全屏”,“滚动锁定”,“移动字体”或者“滚轮鼠标”。 Xterm 还识别“默认”,但省略它将使程序无法使用,除非您在资源设置中提供类似的定义。
然而,同意 StéphaneChazelas 的观点,目前还不清楚如何有效地使用建议的更改,因为传递给应用程序的转义序列是在 xterm 内部基于按钮事件构建的。也许您可以使用字符串操作进行特殊翻译。
答案2
如果您正在寻找要传递的已绑定键而不需要 xterm 处理它,那么您可能正在寻找insert()
或insert-eight-bit()
操作。
来自 xterm 手册页:
insert()
此操作插入与按下的键关联的字符或字符串。
insert-eight-bit()
此操作插入与按下的键关联的字符或字符串的八位(元)版本。仅对单字节值进行特殊处理。确切的操作取决于alt发送转义和元发送转义和八位输入资源。这元发送转义首先测试资源。请参阅八位输入进行充分讨论的资源。“八位”一词具有误导性:xterm检查密钥是否在 128 到 255 范围内(第八位已设置)。如果该值在该范围内,则取决于资源值,xterm然后可以执行以下操作之一:
- 将该值加 128,设置其第八位,
- 在按键之前发送 ESC 字节,或者
- 发送未更改的密钥。
例如,
Meta <Btn2Down>:insert-eight-bit() \n\
PS:我刚刚解决了同样的问题,以避免 biding Alt <Key>Return:fullscreen() \n\
,以便能够将 Alt-return 传递给应用程序。