# -------------------------------------------------------------------
#
# Shell program to start an instance of "acroread" on localhost via
# "pdfopen" and call "pdfopen" again every time when catching the SIGUSR1
# signal. This provides the same behaviour as "xdvi" for reloading changed
# files. Acrobat Reader doesn't come with a "watch file" option, hence
# this workaround, sigh...
#
# Copyright 2005, Thorsten Bonow
# ( thorsten.bonow at post.rwth-aachen.de ).
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 2 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# Description:
#
#
#
# Usage:
#
# startacrobat [ -h | --help ] [PDF document]
#
# Options:
#
# -h, --help Display this help message and exit.
#
# Known Bugs:
#
# No other instance of Acrobat Reader should be running: this script kills
# all of them on exit!
#
# Revision History:
#
# 01/05/2005 Initial version, adapted from "startxpdf"
# 28/08/2005 Adapted to "pdfopen" and "acrobat"
# 01/14/2006 Use HUP or USR1 signal for update to be fully
# compatible with latexmk 3.07 and 3.08
# (modification by John Collins (collins at phys.psu.edu))
#
#
# -------------------------------------------------------------------
# -----------------------------------------------------------------------
# Function to kill remote instance of acrobat
# No arguments
# -----------------------------------------------------------------------
return
}
function error_exit
{
# -----------------------------------------------------------------------
# Function for exit due to fatal program error
# Accepts 1 argument:
# string containing descriptive error message
# -----------------------------------------------------------------------
# -----------------------------------------------------------------------
# Function called for a graceful exit
# No arguments
# -----------------------------------------------------------------------
clean_up
exit
}
function usage
{
# -----------------------------------------------------------------------
# Function to display usage message (does not exit)
# No arguments
# -----------------------------------------------------------------------
# -----------------------------------------------------------------------
# Function to display help message for program
# No arguments
# -----------------------------------------------------------------------
local tab=$(echo -en "\t\t")
cat <<- -EOF-
${PROGNAME} ver. ${VERSION}
Shell program to start an instance of "acroread" on localhost via
"acro-reload" and call "acro-reload" again every time when catching the
SIGUSR1 signal. This provides the same behaviour as "xdvi" for reloading
changed files. Acrobat Reader doesn't come with a "watch file" option,
hence this workaround, sigh...
$(usage)
Options:
-h, --help Display this help message and exit.
-EOF-
}
function signal_handle
{
# -----------------------------------------------------------------------
# Function to handle signals
# Accepts 1 argument:
# signal_spec
# -----------------------------------------------------------------------
case $1 in
INT) echo "$PROGNAME: Program aborted by user" >&2
clean_up
exit
;;
TERM) echo "$PROGNAME: Program terminated" >&2
clean_up
exit
;;
USR1) echo "$PROGNAME: Reloading..." >&2
$ACRO_RELOAD_EXEC $PDF_FILE
;;
*) error_exit "$PROGNAME: Terminating on unknown signal"
;;
esac
}
# -------------------------------------------------------------------
# Program starts here
# -------------------------------------------------------------------
##### Command Line Processing #####
if [ "$1" = "--help" ]; then
helptext
graceful_exit
fi
trap "signal_handle TERM" TERM
trap "signal_handle INT" INT
# Trap HUP and USR1 signals for reloading the PDF document
# Convert to USR1
# (Note HUP is used by gv, and USR1 by xdvi, so both signals have precedent)
trap "signal_handle USR1" HUP USR1
##### Main Logic #####
$ACRO_RELOAD_EXEC $PDF_FILE
while [ 1 ];
do
# sleeps again after being interrupted by SIGUSR1, breaks if Acrobat Reader is
# killed
sleep 1
eval pgrep "-f" "$ACROBAT_EXEC" ">/dev/null" || break
done