summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xbin/emacsclient17
1 files changed, 16 insertions, 1 deletions
diff --git a/bin/emacsclient b/bin/emacsclient
index 928badb2..5279effd 100755
--- a/bin/emacsclient
+++ b/bin/emacsclient
@@ -93,7 +93,7 @@ get_listener () {
listener=$rematch_listener
listener_age=$rematch_age
fi
- done < <(ss -plx src "$socket")
+ done < <(ss -plx src "$(realpath "$socket")")
if [ -z "$listener" -a -e "$socket" ]; then
# Nothing is listening: remove dangling socket.
rm "$socket"
@@ -205,6 +205,21 @@ $want_version || spw_flock 3 "${daemon_name:-server}"
socket="$socket_dir${daemon_name:-server}"
listener="$(get_listener $socket)"
+
+# Special case: perhaps something like a cron @reboot job started a daemon
+# outside of any XDG session. Symlink so as to avoid us starting up another.
+if [ -n "$XDG_RUNTIME_DIR" -a -z "$listener" ]; then
+ tmpdir_d="${TMPDIR:-/tmp}/emacs${euid:=$(id -u)}/"
+ tmpdir_s="$tmpdir_d${daemon_name:-server}"
+ if [ -d "$tmpdir_d" -a -S "$tmpdir_s" \
+ -a -O "$tmpdir_d" -a -O "$tmpdir_s" \
+ -a "$(ls -ld "$tmpdir_d" | awk '{ print $1 }')" = drwx------ \
+ -a -n "${tmpdir_listener:=$(get_listener "$tmpdir_s")}" ]; then
+ ln -s "$tmpdir_s" "$socket"
+ listener=$tmpdir_listener
+ fi
+fi
+
if [ -n "$listener" ]; then
case "$(ps h -o exe $listener | sed -e 's/ (deleted)$//')" in
"$devel_emacs") devel_running=true ;;