你可以从 i3 配置中执行一个函数,它有点毛茸茸,但效果很好。要记住的关键事项是任何带有 a,
或;
需要引用的命令(即,您可以编写的每个函数,因为它是语法的必需部分),如果您在传递给exec
您的命令中有其他相同类型的引号,则需要\\
根据i3 文档逃避它们。
就我个人而言,我想要一个简单的关闭菜单,而无需创建单独的脚本来维护和拖动 i3 配置之外,我使用了内联函数定义和调用。这与在别名中运行外部命令的推荐方式非常相似git
(并且我认为它会起作用)。
bindsym $mod+Shift+q exec "bash -c 'f () { res=$(rofi -dmenu < <(echo -en \\"logout\nrestart\nshutdown\\")); case $res in logout) i3-msg exit;; restart) sudo shutdown -r +2;; shutdown) sudo shutdown -P +2;; esac; }; f;'"
这有点难以解压,但我定义了临时函数f () {...}; f;'
并在之后调用它。在函数内部,我使用进程替换和输入重定向将选项输入到菜单中,以将选择捕获到变量res=$(rofi -dmenu < <(echo -en \\"logout\nrestart\nshutdown\\"))
并注意额外的内容\\
以转义内部双引号。
最后,我正在评估用户选择的选项case
并根据该选项选择一个操作,重新启动和关闭命令有 2 分钟的超时时间,因此如果我以某种方式意外击中触发菜单所需的修饰符,我可以中止并选择一个项目,而不仅仅是按下Esc退出菜单。
在写完这篇文章并意识到注销和释放我当前的所有窗口/布局是多么容易之后,我将添加一个“no-op”选项,它首先出现在列表中,并在case
语句中最后评估,可能将通过orecho
做一些有趣的事情。cowsay
notify-send