如何将 Esc 映射到 Motif 小部件中的操作
How to map Esc to an action in a Motif widget
这个最小的示例创建了一个带有按钮小部件的 Motif window。
#include <Xm/PushB.h>
int main(int argc, char **argv) {
XtAppContext app;
Widget toplevel, b;
char *translations="<Key>Escape: ArmAndActivate()\n\
<Key>a: ArmAndActivate()";
toplevel = XtVaOpenApplication(&app, "tl", NULL, 0, &argc, argv, NULL,
sessionShellWidgetClass, NULL);
b = XtVaCreateManagedWidget("button", xmPushButtonWidgetClass, toplevel, NULL);
XtOverrideTranslations(b, XtParseTranslationTable(translations));
XtRealizeWidget(toplevel);
XtAppMainLoop(app);
return(0);
}
Esc 和 a 都映射到同一个动作,
ArmAndActivate
,但小部件仅响应 a 按键,不响应
Esc。 如何让它响应 Esc? 请注意
根据 xev
.
,Escape
确实是正确的键符
Escape
is the osfCancel
Motif virtual binding;从这个意义上说,它是
已经“占领”了。所以使用
<Key>osfCancel: ArmAndActivate()
可以通过~/.motifbind
文件修改虚拟绑定,参见
Motif 编程模型 和man VirtualBindings
.
这个最小的示例创建了一个带有按钮小部件的 Motif window。
#include <Xm/PushB.h>
int main(int argc, char **argv) {
XtAppContext app;
Widget toplevel, b;
char *translations="<Key>Escape: ArmAndActivate()\n\
<Key>a: ArmAndActivate()";
toplevel = XtVaOpenApplication(&app, "tl", NULL, 0, &argc, argv, NULL,
sessionShellWidgetClass, NULL);
b = XtVaCreateManagedWidget("button", xmPushButtonWidgetClass, toplevel, NULL);
XtOverrideTranslations(b, XtParseTranslationTable(translations));
XtRealizeWidget(toplevel);
XtAppMainLoop(app);
return(0);
}
Esc 和 a 都映射到同一个动作,
ArmAndActivate
,但小部件仅响应 a 按键,不响应
Esc。 如何让它响应 Esc? 请注意
根据 xev
.
Escape
确实是正确的键符
Escape
is the osfCancel
Motif virtual binding;从这个意义上说,它是
已经“占领”了。所以使用
<Key>osfCancel: ArmAndActivate()
可以通过~/.motifbind
文件修改虚拟绑定,参见
Motif 编程模型 和man VirtualBindings
.