Zathura:只打开同一个文件一次

Zathura:只打开同一个文件一次

在最近发现之前zathura我一直在使用evince

我有一个脚本来创建并打开我的简历,并想用 打开它zathura。我怎样才能强制zathura只打开一次?

我在脚本中使用的命令是,zathura file.pdf &但是每次运行脚本时这都会打开一个新实例?

答案1

在这种情况下,你的脚本可以通过在再次打开它之前杀死所有 zathura 实例来工作:

killall zathura #Kill all previous zathura instances zathura file.pdf & #Open zathura

希望能帮助到你。

答案2

当将 SyncTeX 与 zathura 一起使用时,它会自动执行此操作:

zathura --synctex-forward 10:1:main.tex main.pdf

搜索正在查看的 zathura 实例main.pdf并向它们发送命令以查看 main.tex 中第 10 行第 1 列的输出。如果没有打开实例,它会打开一个新实例。所有后续调用都只关注已打开的实例。

当 pdf 没有 synctex 文件时,它可以正常工作。但是,如果有相应的 synctex 文件并且您输入了无效地址,zathura 会在标准输出中抱怨,因此我用于查看(不使用 synctex)的命令是

zathura --synctex-forward :: main.pdf > /dev/null &

其中,是::为了让 zathura 能够解析 synctex 命令并使> /dev/null输出静音

也许除了劫持 SyncTeX 功能之外还有其他选择。

答案3

如果文件已在 zathura 中打开,您可以编写脚本来启动相同的窗口。

将下面的脚本保存到您的本地驱动器。例如。现在,您使用而不是~/unique_zathura_launcher.sh打开文件。您可以创建一个别名来保存击键。~/unique_zathura_launcher.sh filename.pdfzathura filename.pdf

您可以将此脚本用作 pdf 文件的默认应用程序。只需右键单击 pdf 文件并选择“使用命令打开”并添加~/unique_zathura_launcher.sh为命令。这样,您将不再在多个 zathura 实例中打开同一个文件。

下面的脚本只是检查是否有任何 zathrua 进程包含输入文件路径。如果是,则查找窗口 ID 并激活它。否则,启动一个新的 zathura 实例。

#!/bin/bash

# This script assumes all files are passed with an absolute path. Otherwise, it may not work properly.

inputAbsPath=$(realpath -s $1)
inputBasename=$(basename "$1")
zathuraProcess=$(ps aux | grep zathura | grep -v grep)

if [[ -z $zathuraProcess ]]
then
    # open the file directly if no zathura process is detected
    zathura "$1" &
    exit
fi

pdfProcessWindowId="undefined"

while read -r pdfProcess; do
    pdfProcessPid=$(echo $pdfProcess | awk '{print $2}')
    if [[ -n $(wmctrl -l -p | grep $pdfProcessPid | grep -v grep) ]] && [[ -n $(wmctrl -l -p | grep $pdfProcessPid | grep -v grep | awk '{print $1}') ]]
    then
        pdfProcessWindowId=$(wmctrl -l -p | grep $pdfProcessPid | grep -v grep | awk '{print $1}' | head -n 1)
    fi
done <<< "$(ps aux | grep zathura | grep "$inputAbsPath" | grep -v grep)"


if [[ $pdfProcessWindowId == "undefined" ]]
then
    zathura "$1" &
else
    wmctrl -ia $pdfProcessWindowId
fi

相关内容