将 rxvt 中点击的链接传递给脚本

jas*_*yan 7 bash perl shell-script rxvt

我以选项卡方式启动我的浏览器vimprobable,如下所示:

"`tabbed -d > /tmp/tabbed.xid`; vimprobable2 -e `cat /tmp/tabbed.xid`" [1]

然后,我可以将所有新的 vimprobable 实例发送到选项卡式(并且没有打开新的主窗口),在其他应用程序中,例如,mutt,通过:

vimprobable2 -e $(cat /tmp/tabbed.xid) %s
Run Code Online (Sandbox Code Playgroud)

我想在 Urxvt 中实现同样的目标。

目前我.Xdefaults包含匹配器参数:

URxvt.perl-ext-common: default,matcher
URxvt.urlLauncher: vimprobable2
URxvt.matcher.button: 1
Run Code Online (Sandbox Code Playgroud)

我已将启动器行更改为指向包装器脚本:

URxvt.urlLauncher: vimprobtab.sh

这只是:

vimprobable2 -e $(cat /tmp/tabbed.xid) %s &

但这只是在选项卡中打开一个浏览器实例,其中包含默认搜索引擎结果&(或者%s如果我删除了&符号)。

我曾尝试使用其他明显的变量,例如"$1""$@"- 它们也不起作用。

如何将 URL 传递给包装器脚本?

[1] 这也感觉像cat 的无用用法,因此欢迎其他建议

Ric*_*rri 6

urxvt匹配器PERL 扩展的帮助文本 指出:

当单击matcher.button 资源中指定的鼠标按钮(默认为 2 或中间)时,matcher.launcher资源中指定的程序 (默认为urlLauncher资源 sensible-browser)将以匹配的文本作为第一个参数启动。

因此,您需要设置URxvt.matcher.launcher一个接受单个参数的脚本(在 sh 类型的 shell 中,拼写为$1)并打开它。例如:

#! /bin/sh

exec vimprobable2 -e $(cat /tmp/tabbed.xid) "$1"
Run Code Online (Sandbox Code Playgroud)

注:这是最好引用$1,以防止解释元字符的外壳,可能出现在URL(如参数 &;)。