dmenu

出自 ArchWiki

dmenu 是一个快速且轻量级的 X 动态菜单。它从 stdin 读取任意文本,并为每一行创建一个菜单项。用户随后可以通过方向键或键入名称的一部分来选择一个项目,选中的行将被打印到 stdout。dmenu_run 是 dmenu 发行版附带的包装器,允许将其用作应用程序启动器。

安装

安装 dmenu 软件包,或者安装 dmenu-gitAUR 以获取开发版本。

存在各种修补过的变体,它们扩展了 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 别名。要让 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)

故障排除

缺少本地化支持

运行 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 破解主题 – Arch Linux 论坛中的 dmenu 破解主题。dmenu_scripts 合集中提供了脚本概述。