#!/bin/sh # ron@18james.com, 11 Dec 2003 # With modifications by Angus Leeming, tweaked by Bennett Helm 21 Jan 2007 parse_serverpipe() { test -r "$1" || { echo "Usage: parse_serverpipe lyxrc" >&2 exit 1 } # The output of this sed script is output to STDOUT LYXPIPE=`sed -n '/^\\\\serverpipe /{ # First consider that the file path may be quoted s/^ *\\\\serverpipe \{1,\}\"\([^"]\{1,\}\)\" *$/\1/ tfound # Now, unquoted s/^ *\\\\serverpipe \{1,\}\(.*\)/\1/ s/ *$// :found # Change from single to double shell quoting temporarily... '" s@^~/@${HOME}/@ # Revert to single shell quotes "' p q }' "$1"` echo "${LYXPIPE}" } USER_SUPPORT="${HOME}/Library/Application Support" test -d "${USER_SUPPORT}" || { echo "Something horrible is going on. No user support directory ${USER_SUPPORT}" >&2 exit 1 } # we prefer newer lyx releases here... for LYXDIR in LyX-2.4 LyX-2.3 LyX-2.2 LyX-2.1 LyX-2.0 LyX-1.6 LyX-1.5 LyX-1.4 LyX do ABS_USER_LYXDIR="${USER_SUPPORT}/${LYXDIR}" test -d "${ABS_USER_LYXDIR}" || { continue } PREFERENCES="${ABS_USER_LYXDIR}/preferences" test -r "${PREFERENCES}" || { echo "Failed to find PREFERENCES: ${PREFERENCES}" >&2 continue } # preferences file exists. # See if it contains a \\serverpipe entry LYXPIPE=$(parse_serverpipe "${PREFERENCES}") # break if pipe entry and pipe detected # hopefully it's the correct LyX instance... if [ -n "$LYXPIPE" -a -p "$LYXPIPE".in ]; then break fi done # echo "preferences file sets lyxpipe as ${LYXPIPE}" test -z "${LYXPIPE}" && { ABS_SYSTEM_LYXDIR=$(dirname "$0") ABS_SYSTEM_LYXDIR=$(dirname "${ABS_SYSTEM_LYXDIR}")"/Resources" test -d "${ABS_SYSTEM_LYXDIR}" || { echo "Failed to find ABS_SYSTEM_LYXDIR: ${ABS_SYSTEM_LYXDIR}" >&2 exit 1 } LYXRC_DIST="${ABS_SYSTEM_LYXDIR}/lyxrc.dist" test -r "${LYXRC_DIST}" || { echo "Failed to find LYXRC_DIST: ${LYXRC_DIST}" >&2 exit 1 } # lyxrc.dist exists # See if it contains a \\serverpipe entry LYXPIPE=$(parse_serverpipe "${LYXRC_DIST}") } if [ -n "$LYXPIPE" -a -p "$LYXPIPE".in ]; then file=$(echo "$1" | sed 's|^/private||') MAC_LYXPIPE_CONTENTS="LYXCMD:macdvix:server-goto-file-row:$file $2" # echo "$MAC_LYXPIPE_CONTENTS" echo "$MAC_LYXPIPE_CONTENTS" > "${LYXPIPE}".in || { echo "Cannot write to lyxpipe." ; exit 2 ; } while read line ; do echo LyX said: $line done < "${LYXPIPE}".out || { echo "Cannot read from lyxpipe." ; exit 2 ; } test -x /usr/bin/osascript && /usr/bin/osascript -e 'tell application id "org.lyx.lyx" to activate' else echo "Our best guess sets lyxpipe as ${LYXPIPE}" echo "But the lyxpipe could not be found." exit 1 fi # The end