![如何从zathura获取当前文档目录路径](https://linux22.com/image/133742/%E5%A6%82%E4%BD%95%E4%BB%8Ezathura%E8%8E%B7%E5%8F%96%E5%BD%93%E5%89%8D%E6%96%87%E6%A1%A3%E7%9B%AE%E5%BD%95%E8%B7%AF%E5%BE%84.png)
在 zathura 中使用$FILE
(或%
) 我可以运行另一个查看器(例如 Okular)来打开当前文档,如下所示:
:exec okular $FILE
我想要同样的东西,但对于目录。我想在我的默认资源管理器中打开包含文档的文件夹:
:exec ranger $DIR
但这行不通。我找不到获取目录路径的方法。我也尝试过,:exec ranger % | sed 's|\(.*\)/.*|\1|'
但这不起作用。能够在 exec 中使用管道可能会解决这个问题。
ps 作为我可以使用的解决方法exec nemo $FILE
,nemo 使用文件名来选择它。但这只是一个解决方法。
答案1
看着源代码,看起来无论如何都没有办法做到这一点。 Zathura 只是在执行命令之前将$FILE
和替换为文件路径。%
所以无论如何你都必须使用解决方法。也许是这样的:
exec sh -c 'xdg-open $(dirname $FILE)'
或者:
exec xterm -e 'ranger $(dirname $FILE)'
这里确实需要更多的引用,但我不知道 Zathura 的解析器在处理引用方面有多好。
答案2
根据 @muru 的回答并记录解决方案,我也提出了这个解决方法。我在我的文件中创建了一个 bash 脚本~/bin/selectInRanger
,我只是从 zathura 调用它来逃避其命令行限制:
#!/bin/bash
address=$1;
urxvt -e sh -c "ranger --selectfile='$address'"
这更好,因为它可以处理名称中带有空格的目录并且更灵活。它还会$FILE
在打开的文件资源管理器中选择传递给它的文件。
为了将其映射到 zathura 的组合键,~/.config/zathura/zathurarc
我添加了这一行:
map <C-o> feedkeys ":exec selectInRanger $FILE<Return>"
PS 这非常有用,特别是使用 Zotero pdf 管理器,您可以轻松导航到存储目录中适当的 pdf,等等。