i3布局加载脚本没有任何效果

时间:2016-08-17 17:25:47

标签: i3

我按照文档保存了工作区的布局:

i3-save-tree --workspace 1 > ~/.i3/layouts/ws1.json

因为我的工作区名称是带引号的字符串变量,所以我必须创建一个脚本(~/.i3/scripts/load_layout.sh)才能正确调用i3-msg

i3-msg "workspace $1"
i3-msg "append_layout /home/villasv/.i3/layouts/ws$2.json"

然后我的~/.i3/config文件具有以下工作空间设置:

set $ws1 "1 "
bindsym $mod+1 workspace $ws1
bindsym $mod+Shift+1 move container to workspace $ws1
exec --no-startup-id 'sh ~/.i3/scripts/load_layout.sh $ws1 1'
exec firefox

但退出并登录后,布局更改不会发生。我已尝试使用exec_always并重新启动i3,但仍无效果。

成功运行sh ~/.i3/scripts/load_layout.sh "dummy" 1会创建一个带有布局的工作区。

此外,使用exec --no-startup-id "i3-msg 'workspace 1; append_layout ~/.i3/layouts/ws1.json'"几乎也可以。我想这个问题发生在脚本或脚本调用中,但我不知道是什么。

使用工作区变量名进行此操作我缺少什么?

2 个答案:

答案 0 :(得分:2)

这有两个原因不起作用:

  1. 您使用单引号(')引用了整个命令。单引号在 i3 配置中并不特殊。这意味着它们不会被“解析掉”,因此整个'sh ~/.i3/scripts/load_layout.sh $ws1 1'被视为命令的名称,空格和全部,而不是带有多个参数的命令sh
  2. 您的工作区名称包含空格。因此,即使1.不是问题,它也会失败,因为你的脚本的第一个参数 - $ws1 - 本身没有被引用。这将导致脚本获得三个 - 1 1 - 而不是两个参数 - 1 1
  3. 请尝试使用此exec命令:

    exec --no-startup-id sh ~/.i3/scripts/load_layout.sh '$ws1' 1
    

    如上所述, i3 配置解析器不会删除$ws1周围的单引号,因此在传递参数时它们将出现。此外,由于 i3 正在进行$ws1的替换,因此通常的规则是shell变量不会在单引号内扩展。

答案 1 :(得分:1)

好吧,我无法找出问题所在,但我发现了一个简单的解决方法,我通过反复试验发现了。

只需定义不带引号的工作区名称就可以正常工作,并且不会破坏文档中提供的单行程序。

所以我的解决方案就是改变 set $ws1 "1 " - > set $ws1 1 