From 0bd6f609686d16bbf3625ef861fcf5cb9788f650 Mon Sep 17 00:00:00 2001 From: Sean Whitton Date: Sat, 28 Jan 2023 10:42:08 -0700 Subject: emacsclient wrapper: create symlinks to sockets under /tmp --- bin/emacsclient | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'bin/emacsclient') 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 ;; -- cgit v1.2.3