我想重命名工作区但默认保留工作区编号,在i3用户指南中,我找到以下脚本来执行此操作。
bindsym $mod+r exec i3-input -F 'rename workspace to "%s"' -P 'New name: '
但问题是它默认不保留工作区编号,所以我必须记住输入工作区编号。
我找到了一种通过以下命令获取聚焦工作空间编号的方法,但我不知道如何在i3配置中将数字与输入名称连在一起。
i3-msg -t get_workspaces | jq '.[] | select(.focused == true) | .num'
所以,我想知道在i3配置文件中,我是否可以执行某种功能来连接用户输入的工作区号码来实现我的目的?
答案 0 :(得分:3)
我认为你不能。但是,如果您创建脚本并在i3-config中使用exec
进行调用,则可以随时执行任何操作。所以,例如:
〜/ bin / i3-rename-workspace(或方便的地方):
N=$(i3-msg -t get_workspaces | jq '.[] | select(.focused == true).num')
i3-input -F "rename workspace to \"$N: %s\"" -P 'New name: '
你的i3-config中的某个地方:
bindsym $mod+r exec i3-rename-workspace
请记住提供脚本的完整路径,或将其放在i3的$PATH
中。
答案 1 :(得分:1)
你可以从i3配置执行一个功能,它有点毛茸茸,但效果很好。要记住的关键事项是需要引用,
或;
的任何命令(即,您可以编写的每个函数,因为它是语法的必需部分),如果您有其他引号,传递给exec
的命令中的相同类型,您需要使用\\
git
转义它们。
我个人想要一个简单的关机菜单,而不必创建一个单独的脚本来维护和拖动我的i3配置,我使用内联函数定义和调用。这与在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
以转义内部双引号。
最后,我正在评估用户通过case
选择的选项,并根据该选项选择一个操作,重启和关机命令超时2分钟,所以如果不知怎的话,我可以中止意外触发修改器触发菜单并选择一个项目而不是仅按 Esc 退出菜单。
写完这篇文章并意识到登出和松开所有当前窗口/布局是多么容易之后,我将添加一个“no-op”选项,它首先出现在列表中,并在最后一次评估通过echo
或cowsay
notify-send
可能{{1}}有趣的陈述{/ 1}}。