summaryrefslogtreecommitdiff
path: root/bin/emacsclient
diff options
context:
space:
mode:
authorSean Whitton <spwhitton@spwhitton.name>2023-01-28 10:42:08 -0700
committerSean Whitton <spwhitton@spwhitton.name>2023-01-28 10:42:08 -0700
commit0bd6f609686d16bbf3625ef861fcf5cb9788f650 (patch)
tree1b381abe9fa9fa44424012cca2fcc1958104ff1b /bin/emacsclient
parent29cff70c83e7b614055cbb01965a5177e99272a5 (diff)
downloaddotfiles-0bd6f609686d16bbf3625ef861fcf5cb9788f650.tar.gz
emacsclient wrapper: create symlinks to sockets under /tmp
Diffstat (limited to 'bin/emacsclient')
-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 ;;