0

此快捷方式在 i3wm 中不起作用。它应该显示打开的应用程序的窗口列表。按下键盘快捷键时,什么都不会发生。
bindsym $mod+space exec bash -c "/home/george/./dmenu-i3-window-jumper.sh"

但是脚本从终端运行良好。

脚本的 bash 代码:
https ://github.com/minos-org/minos-desktop-tools/blob/master/tools/dmenu-i3-window-jumper

4

1 回答 1

3

这是一个两方面的问题

首先是一些小的配置内容:

  1. 我认为你在那里有一个额外的点,因为./在那个上下文中只代表它前面的文件夹(即/home/george:)
  2. 您可以使用该$HOME变量作为主文件夹的替代,i3 会选择它
  3. 我认为确实不需要bash -c,因为您的文件在第一行同时具有.sh扩展名和#!/bin/sh标题,这意味着您只需要授予它执行权限,chmod +x并且无论如何它都会使用 bash 运行。

所以在综合中,你必须

chmod +x /home/george/dmenu-i3-window-jumper.sh

因此脚本可以在不直接调用 bash 的情况下运行,并且您的 bindsym 可以简化为

bindsym $mod+space exec "$HOME/dmenu-i3-window-jumper.sh"

然后是脚本的东西:

您会看到,在第 44 行附近,脚本检查STDIN 是否在终端中,如果不是,则尝试将文件通过管道传输到 arg 数组

if [ ! -t 0 ]; then
    #add input comming from pipe or file to $@
    set -- "${@}" $(cat)
fi

这似乎是主要问题,因为您没有在终端中运行命令,也没有给它一个文件。

您的选择是 A: 更改,if因此它将始终将空字符串传递给参数数组

if [ ! -t 0 ]; then
    #add input comming from pipe or file to $@
    set -- "${@}" ""
fi

或 B:创建一个虚拟文件,touch ~/dummy然后将其传递给 bindsym 上的脚本

bindsym $mod+space exec "$HOME/dmenu-i3-window-jumper.sh < $HOME/dummy"

两者似乎在我的设置上都可以正常工作,祝你好运!

于 2020-05-28T08:42:35.617 回答