dmenu
dmenu 是一个为 X 编写的快速且轻量级的动态菜单。它从 stdin 读取任意文本,并为每一行创建一个菜单项。用户随后可以通过方向键或输入名称的一部分来选择一个项目,该行将被打印到 stdout。dmenu_run 是随 dmenu 发行版一起提供的一个包装程序,允许将其用作应用程序启动器。
安装
目前存在多种补丁变体,可以扩展 dmenu 的默认功能。
你可以使用以下命令运行 dmenu
$ dmenu_run
配置
现在,你可能想将 dmenu_run 命令绑定到某个快捷键组合。这可以通过你的窗口管理器或桌面环境配置来完成,也可以使用像 xbindkeys 这样的程序。更多信息请参阅 快捷键 (Hotkeys) 文章。
显示自定义项目
自定义项目可以通过换行符 (\n) 分隔并将其通过管道传输给 dmenu 来显示。例如
$ echo -e "first\nsecond\nthird" | dmenu
手动添加项目
dmenu 会在 $PATH 定义的目录中查找可执行文件。有关修改 $PATH 的信息,请参阅 环境变量。
字体
dmenu 可以使用 XFT 显示字体。这个例子将使用 ttf-droid 运行 dmenu
$ dmenu_run -fn 'Droid Sans Mono-9'
对 shell 别名的支持
dmenu 不支持 shell 别名 (aliases)。为了让 dmenu 识别你的别名,请 安装 dmenu-recent-aliases-gitAUR 软件包并运行 dmenu-recent-aliases。你的别名必须位于 ~/.bash_aliases 中才能被 dmenu-recent-aliases 识别。
对历史记录的支持
要根据最近使用时间对命令进行排序,请将 dmenu_run_history 下载到你的 $PATH 中,并使用 dmenu_run_history 代替 dmenu_run。
技巧与提示
使用 dmenu 获取输入
在脚本中(例如通过快捷键启动的脚本),有时需要获取用户输入。我们可以通过向 dmenu 传递一个 EOF(文件结束符)来实现这一点:选择字段将为空,dmenu 即可接收用户输入。
由于读取 /dev/null 会返回 EOF,因此可以通过以下命令简单实现
$ dmenu < /dev/null
嵌入到当前终端
Dmenu 可以使用 -w id 选项嵌入到任何窗口中。
要将其嵌入到当前活动窗口(例如运行它的终端),请使用 xdo 来获取其 ID
$ echo hello | dmenu -w $(xdo id)
故障排除
没有 locale 支持
运行 dmenu_run 时会出现以下错误消息
$ dmenu_run
no locale support
请确保环境变量 LANG 已正确设置。更多信息请参阅:Locale#Troubleshooting
菜单项缺失
如果 dmenu 中缺失某些条目,可能是缓存损坏。请删除缓存并重启 dmenu。
$ rm ~/.dmenu_cache $ rm ~/.cache/dmenu_run
请注意,根据是否设置了 $XDG_CACHE_HOME,可能只有一个缓存文件。更多信息请查看 /usr/bin/dmenu_run 的内容。
环境变量
应用程序所需的环境变量应改为添加到 /etc/environment 中。
参见
- dmenu – dmenu 官方网站
- Dmenu Hacking 讨论帖 – Arch Linux 论坛中的 Dmenu 破解讨论帖。在 dmenu_scripts 集合 中提供了脚本概览。