我正在寻找类似 Zenity 或 Yad 的东西,但我想要一些行为类似于菜单的东西,即:它在光标旁边打开;只需单击一下即可选择内容;可以有多个级别。
我发现的最接近的东西实际上是 Autokey 的文件夹,但 Autokey 需要始终运行(即使我调用autokey-run
),我宁愿避免这种情况。
关键的要求是我能够单击在出现的东西上在我的光标附近。
有任何想法吗?
答案1
锯鳐使用配套程序管理其菜单sawfish-menu
。即使您没有运行 Sawfish 作为窗口管理器,您也可以使用该程序。 sawfish 和 sawfish-menu 之间的协议似乎没有在任何地方记录;它的灵感来自于菜单规格格式在锯鳐本身。
echo '(popup-menu (("_toplevel" 0) ("_submenu" ("_foo" 1) () ("_bar" 2))))' |
/usr/lib/sawfish/1.5.3/x86_64-pc-linux-gnu/sawfish-menu
sawfish-menu
0
如果用户选择“toplevel”等,则打印。您可以为条目指定字符串(用双引号括起来,或者甚至不带引号,如果它们是有效的 Lisp 标识符)而不是数字。如果用户中止(例如按Esc),则输出为()
。
以下是 的输入语法摘要sawfish-menu
。
- 以 开始
(popup-menu
并以 结束)
。 - 对于可点击的菜单条目,请使用where
("TEXT" OUTPUT)
文本是条目的文本,并且输出是选择此菜单项时程序打印的内容。- 如果里面有下划线文本,下一个字符是该条目的加速键。
(check . t)
您可以通过添加例如,在菜单项前面打上复选标记("Foo" 42 (check . t))
。- 您可以通过添加 来将项目符号(单选按钮)放在菜单项前面。给定组中只有一个条目可以具有该按钮。
(group . SOMETHING) (check . t)
- 您可以通过添加 使条目变灰且不可选择
(insensitive . t)
。
- 对于子菜单,请使用.
("TEXT" ENTRY…)
- 对于分隔符,请使用
()
.
显然,不要指望人们会安装这个实用程序。它通常不会与 Sawfish 分开打包,但实际上它不需要 Sawfish 本身的任何东西;这是一个代表脚本,代表Sawfish(基本上没有其他)是用 Lisp 方言编写的。在 Debian 上,您需要rep-gtk
运行软件包sawfish-menu
以及脚本本身。