parse_serverpipe()
{
- test -r "$1" || {
- echo "Usage: parse_serverpipe lyxrc" >&2
- exit 1
- }
+ 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 /{
+ # 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
p
q
}' "$1"`
-
- echo "${LYXPIPE}"
- unset LYXPIPE
+ 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
+ echo "Something horrible is going on. No user support directory ${USER_SUPPORT}" >&2
exit 1
}
-for LYXDIR in LyX-1.6 LyX-1.5 LyX-1.4 LyX
+# 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}" || {
- echo "Failed to find ABS_USER_LYXDIR: ${ABS_USER_LYXDIR}" >&2
continue
}
PREFERENCES="${ABS_USER_LYXDIR}/preferences"
}
# preferences file exists.
# See if it contains a \\serverpipe entry
- # Whether it does or not, break out of the loop because we've
- # found the preferences file.
- LYXPIPE=`parse_serverpipe "${PREFERENCES}"`
- break
+ 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
+ # now check for default pipe location
+ if [ -p "${ABS_USER_LYXDIR}"/.lyxpipe.in ]; then
+ LYXPIPE="${ABS_USER_LYXDIR}/.lyxpipe"
+ break
+ fi
done
-echo "preferences file sets lyxpipe as ${LYXPIPE}"
+# echo "preferences file sets lyxpipe as ${LYXPIPE}"
test -z "${LYXPIPE}" && {
- ABS_SYSTEM_LYXDIR='/Applications/LyX.app/Contents/Resources'
+ 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
- }
+ 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}"`
+ LYXPIPE=$(parse_serverpipe "${LYXRC_DIST}")
}
-echo "Our best guess sets lyxpipe as ${LYXPIPE}"
-
+if [ -n "$LYXPIPE" -a -p "$LYXPIPE".in ]; then
+ MAC_LYXPIPE_CONTENTS="LYXCMD:macdvix:server-goto-file-row:$1 $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
-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 || exit
-read < "${LYXPIPE}".out || exit