跳转至

使用 rofi 实现自定义菜单

rofi

rofi 是一款可以用于替代 dmenu 的程序启动器和窗口切换器, 同时其在 dmenu 模式下对脚本的支持也使它成为自定义菜单的良好选择

原理

rofi 在 -modi 模式下会将脚本中的输出按照分行作为自己的菜单选项, 而在 -dmenu 模式下则会将管道输出作为自己的菜单选项, 同时,当脚本后续仍有对 rofi 的调用时,前一次调用中选中的选项都会作为这次调用的入参

选项显示

编辑一个脚本 test.sh 填入如下内容并为其添加执行权限:

echo -e "option1\noption2\noption3"

case $* in
  "option1")
    notify-send "select option1"
    ;;
esac

之后执行命令 rofi -show test -modi "test:./test.sh", 选中 option1option1 便会成为下一个入参被 case $* 捕捉到,从而执行 case 语句中的内容

dmenu 模式

dmenu 模式下,rofi 会将管道的输出作为自己的输入,以此进行选项显示:

selection=($(bluetoothctl devices | awk '{print $2,$3}' | rofi -i -p 'Connect:' -dmenu))