lyx_mirror/development/MacOSX/lyxeditor
Stephan Witt c22119eb1c Use real path names for buffer lookup by name of temporary external files.
In case of path names for external files containing symbolic links the real path
and the logical path name may be different for the same file or directory.
LyX is using QDir::tempPath() to create the path name of the temporary directory.
The Qt implementation is free to return the logical or the real path name here and
it happens to be different for various platforms and versions.
The most stable and clean solution is to use the real path name consistently.

(cherry picked from commit f2f861f017)
2022-02-20 14:18:26 +01:00

98 lines
2.4 KiB
Bash
Executable File

#!/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
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 ; }
else
echo "Our best guess sets lyxpipe as ${LYXPIPE}"
echo "But the lyxpipe could not be found."
exit 1
fi
# The end