此快捷方式在 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
此快捷方式在 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
这是一个两方面的问题
首先是一些小的配置内容:
./
在那个上下文中只代表它前面的文件夹(即/home/george
:)$HOME
变量作为主文件夹的替代,i3 会选择它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"
两者似乎在我的设置上都可以正常工作,祝你好运!