2013-05-24 12:47:07 +02:00
|
|
|
#!/bin/bash
|
|
|
|
#
|
|
|
|
# Launch a GNU Emacs
|
|
|
|
#
|
|
|
|
# The environment variable EMACS_TOOLKIT is used to determine
|
|
|
|
# the prefered GUI. Possible values/types of EMACS_TOOLKIT are
|
|
|
|
#
|
|
|
|
# nox -- for pure console based GNU Emacs
|
|
|
|
# gtk -- for full GTK2/3 based GNU Emacs
|
|
|
|
# x11 -- for full LUCID based GNU Emacs (used Xaw3d)
|
|
|
|
#
|
|
|
|
# Should work but remember history
|
|
|
|
# bnc#345669 -- Emacs doesn't un-maximize in KDE/KWin
|
|
|
|
# bnc#342385 -- Emacs doesn't keep the iconic information in KDE/KWin
|
|
|
|
#
|
|
|
|
# if test -z "$EMACS_TOOLKIT" ; then
|
|
|
|
# EMACS_TOOLKIT=gtk
|
|
|
|
# KDE_FULL_SESSION=$(xprop -root KDE_FULL_SESSION 2>/dev/null)
|
|
|
|
# case "$KDE_FULL_SESSION" in
|
|
|
|
# *true*) EMACS_TOOLKIT=x11
|
|
|
|
# esac
|
|
|
|
# fi
|
|
|
|
#
|
|
|
|
: ${EMACS_TOOLKIT:=gtk}
|
|
|
|
if test "$EMACS_TOOLKIT" = gtk; then
|
|
|
|
# Currently (2013/05/24) the parser of the GNOME libs
|
|
|
|
# are broken that is it is not independent from locale
|
|
|
|
LC_NUMERIC=POSIX
|
2016-11-11 11:02:59 +01:00
|
|
|
XLIB_SKIP_ARGB_VISUALS=1
|
|
|
|
GDK_RGBA=0
|
|
|
|
export LC_NUMERIC XLIB_SKIP_ARGB_VISUALS GDK_RGBA
|
2013-05-24 12:47:07 +02:00
|
|
|
fi
|
|
|
|
arg0=$0
|
|
|
|
argv=("$@")
|
2016-02-26 14:37:45 +01:00
|
|
|
if test -x ${arg0}-${EMACS_TOOLKIT}
|
2013-05-24 12:47:07 +02:00
|
|
|
then
|
|
|
|
set -- ${arg0}-${EMACS_TOOLKIT}
|
2016-02-26 14:37:45 +01:00
|
|
|
elif test -x ${arg0}-x11
|
2013-05-24 12:47:07 +02:00
|
|
|
then
|
|
|
|
set -- ${arg0}-x11
|
2016-02-26 14:37:45 +01:00
|
|
|
elif test -x ${arg0}-nox
|
2013-05-24 12:47:07 +02:00
|
|
|
then
|
|
|
|
set -- ${arg0}-nox
|
|
|
|
else
|
|
|
|
echo "no emacs binary found"
|
|
|
|
exit 1
|
|
|
|
fi
|
2013-12-03 12:05:04 +01:00
|
|
|
dbusdaemon=$(type -p dbus-daemon 2>/dev/null)
|
2013-05-24 12:47:07 +02:00
|
|
|
#
|
|
|
|
# Now check for valid dbus, e.g. after su/sudo/slogin
|
|
|
|
#
|
2013-12-03 12:05:04 +01:00
|
|
|
if test -n "$dbusdaemon" ; then
|
2013-05-24 12:47:07 +02:00
|
|
|
#
|
|
|
|
# Currently (2013/05/24) the option --autolaunch for scanning for an
|
|
|
|
# already existing session is an internal option of dbus-launch(1).
|
|
|
|
#
|
|
|
|
if test -s /var/lib/dbus/machine-id ; then
|
|
|
|
read -t1 mid < /var/lib/dbus/machine-id
|
|
|
|
elif test -s /etc/machine-id ; then
|
|
|
|
read -t1 mid < /etc/machine-id
|
|
|
|
else
|
|
|
|
mid=
|
|
|
|
fi
|
|
|
|
if test -n "$DBUS_SESSION_BUS_ADDRESS" ; then
|
|
|
|
# Determine dbus identifier
|
|
|
|
for guid in ${DBUS_SESSION_BUS_ADDRESS//,/ } ; do
|
|
|
|
case "$guid" in
|
|
|
|
guid=*) break
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
# Check if dbus-daemon is active
|
|
|
|
dpid=
|
|
|
|
for suid in "${HOME}/.dbus/session-bus/"${mid}* ; do
|
|
|
|
test -e "$suid" || break
|
|
|
|
grep -q $guid "$suid" || continue
|
|
|
|
dpid=$(grep -E '^DBUS_SESSION_BUS_PID=[[:digit:]]+' "$suid")
|
|
|
|
test /proc/${dpid#*=}/exe -ef $dbusdaemon && continue
|
|
|
|
unset DBUS_SESSION_BUS_ADDRESS
|
|
|
|
break
|
|
|
|
done
|
2017-04-25 16:51:56 +02:00
|
|
|
if test -z "$dpid" ; then
|
|
|
|
case ":$DBUS_SESSION_BUS_ADDRESS" in
|
|
|
|
*:path=/run/user/${UID}/bus*) ;;
|
|
|
|
*) unset DBUS_SESSION_BUS_ADDRESS
|
|
|
|
esac
|
|
|
|
fi
|
2013-05-24 12:47:07 +02:00
|
|
|
fi
|
|
|
|
# Find a valid dbus-daemon if active
|
|
|
|
if test -z "$DBUS_SESSION_BUS_ADDRESS" ; then
|
|
|
|
for suid in "${HOME}/.dbus/session-bus/"${mid}* ; do
|
|
|
|
test -e "$suid" || break
|
|
|
|
dpid=$(grep -E '^DBUS_SESSION_BUS_PID=[[:digit:]]+' "$suid")
|
|
|
|
test /proc/${dpid#*=}/exe -ef $dbusdaemon || continue
|
|
|
|
dadd=$(grep -E '^DBUS_SESSION_BUS_ADDRESS=' "$suid")
|
|
|
|
DBUS_SESSION_BUS_ADDRESS=${dadd#*=}
|
|
|
|
export DBUS_SESSION_BUS_ADDRESS
|
|
|
|
done
|
2017-04-26 09:34:32 +02:00
|
|
|
if test -z "$DBUS_SESSION_BUS_ADDRESS" -a -S "${XDG_RUNTIME_DIR}/bus" ; then
|
|
|
|
DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus"
|
2017-04-25 16:51:56 +02:00
|
|
|
export DBUS_SESSION_BUS_ADDRESS
|
|
|
|
fi
|
2013-05-24 12:47:07 +02:00
|
|
|
fi
|
|
|
|
unset mid guid suid dadd
|
|
|
|
# Oops ... no dbus-daemon then launch a new session
|
|
|
|
if test -z "$DBUS_SESSION_BUS_ADDRESS" ; then
|
2016-02-26 14:37:45 +01:00
|
|
|
dbuslaunch=$(type -p dbus-launch 2>/dev/null)
|
|
|
|
dbusession=$(type -p dbus-run-session 2>/dev/null)
|
2013-12-03 12:05:04 +01:00
|
|
|
if test -z "$dbusession" -a -n "$dbuslaunch" ; then
|
|
|
|
set -- $dbuslaunch --sh-syntax --close-stderr --exit-with-session ${1+"$@"}
|
|
|
|
arg0=$dbuslaunch
|
|
|
|
elif test -n "$dbusession" ; then
|
|
|
|
set -- $dbusession -- ${1+"$@"}
|
|
|
|
arg0=$dbusession
|
|
|
|
else
|
|
|
|
arg0=emacs
|
|
|
|
fi
|
2017-04-26 09:34:32 +02:00
|
|
|
elif test -S "${XDG_RUNTIME_DIR}/bus" ; then
|
|
|
|
dbusupdate=$(type -p dbus-update-activation-environment 2>/dev/null)
|
|
|
|
dbusstatus=$(systemctl --user is-active dbus.service 2>/dev/null)
|
|
|
|
if test -n "$dbusupdate" -a "$dbusstatus" != active ; then
|
|
|
|
$dbusupdate --systemd DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus"
|
|
|
|
fi
|
2013-05-24 12:47:07 +02:00
|
|
|
fi
|
|
|
|
unset dbuslaunch dbusdaemon
|
|
|
|
fi
|
2016-02-26 14:37:45 +01:00
|
|
|
#
|
|
|
|
# Disable AT bridge if not accessible
|
|
|
|
#
|
|
|
|
if test -z "NO_AT_BRIDGE" ; then
|
|
|
|
gsettings=$(gsettings get org.gnome.desktop.interface toolkit-accessibility 2>/dev/null)
|
|
|
|
if test -z "$gsettings" -o "$gsettings" = false ; then
|
|
|
|
NO_AT_BRIDGE=1
|
|
|
|
export NO_AT_BRIDGE
|
|
|
|
fi
|
|
|
|
unset gsettings
|
|
|
|
fi
|
|
|
|
unset G_MESSAGES_DEBUG G_DEBUG G_MESSAGES_PREFIXED
|
2013-05-24 12:47:07 +02:00
|
|
|
exec -a $arg0 ${1+"$@"} "${argv[@]}"
|