2016-12-31 139 views
0

我想重命名工作区,但默认保留工作区编号,在i3用户指南中,我找到了以下脚本来完成此操作。如何在i3 config中执行一个函数?

bindsym $mod+r exec i3-input -F 'rename workspace to "%s"' -P 'New name: ' 

但问题是,它不会保留工作区编号默认情况下,所以我必须记住键入工作区编号。

我找到了一种方法来获得具有以下命令的焦点工作区号码的数量,但我不知道如何在i3 config中将输入名称连接到一起。

i3-msg -t get_workspaces | jq '.[] | select(.focused == true) | .num' 

所以,我想知道是否在i3的配置文件,我可以执行某种功能Concat的工作区数与用户输入来实现我的目的是什么?

回答

1

我不认为你可以。但是,如果您创建脚本并在您的i3-config中使用exec进行调用,则始终可以随心所欲地执行任何操作。因此,举例来说:

〜/斌/ I3-重命名工作空间(或其它地方,方便你):

N=$(i3-msg -t get_workspaces | jq '.[] | select(.focused == true).num') 
i3-input -F "rename workspace to \"$N: %s\"" -P 'New name: ' 

在某处,I3-配置:

bindsym $mod+r exec i3-rename-workspace 

记住提供脚本的完整路径,或将其放在i3的$PATH中的某处。

+0

您还可以将脚本目录添加到PATH变量,但不使用'.bashrc':https://askubuntu.com/a/920572/75083 – yPhil

0

你可以从i3配置执行一个函数,它有点毛茸茸的,但它工作得很好。需要记住的关键事项是需要引用,;的任何命令(即,可能会编写的每个函数都是语法的必需部分),并且如果在传递给exec的命令中有更多相同类型的引号你需要按照i3 documentation\\来逃避它们。

就我个人而言,我想要一个简单的关机菜单,而不必创建一个单独的脚本来维护和拖动我的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声明可能会echo通过cowsaynotify-send好笑。

相关问题