summaryrefslogtreecommitdiff
path: root/plugins/emacs/emacsclient.sh
diff options
context:
space:
mode:
authorMarc Cornellà <hello@mcornella.com>2021-09-28 12:30:29 +0200
committerMarc Cornellà <hello@mcornella.com>2021-09-29 16:50:12 +0200
commit2acae3797b713db2520bb27e76f25d3de6cee48e (patch)
tree25881e773758fe0b229aa2f44588471eb1f3c143 /plugins/emacs/emacsclient.sh
parent27dcca5967082474229d5efafb941e0d5229c760 (diff)
downloadzsh-2acae3797b713db2520bb27e76f25d3de6cee48e.tar.gz
zsh-2acae3797b713db2520bb27e76f25d3de6cee48e.tar.bz2
zsh-2acae3797b713db2520bb27e76f25d3de6cee48e.zip
fix(emacs): assess if there are open frames of the expected type
This change looks at the frame type of the open frames ('framep) and looks if they're of the type requested based on the arguments passed to emacsclient (-nw/-t/--tty require tty frames, otherwise we need graphical frames). NOTE: this code considers anything different than t as graphical terminals, including MS-DOS types (pc). I don't have such a setup to test if this is correct.
Diffstat (limited to 'plugins/emacs/emacsclient.sh')
-rwxr-xr-xplugins/emacs/emacsclient.sh14
1 files changed, 12 insertions, 2 deletions
diff --git a/plugins/emacs/emacsclient.sh b/plugins/emacs/emacsclient.sh
index 0702d7a33..53a3a428a 100755
--- a/plugins/emacs/emacsclient.sh
+++ b/plugins/emacs/emacsclient.sh
@@ -1,10 +1,20 @@
#!/bin/sh
emacsfun() {
- local frames="$(emacsclient --alternate-editor "" -n -e "(length (frame-list))" 2>/dev/null)"
+ local cmd frames
+
+ # Build the Emacs Lisp command to check for suitable frames
+ # See https://www.gnu.org/software/emacs/manual/html_node/elisp/Frames.html#index-framep
+ case "$*" in
+ *-t*|*--tty*|*-nw*) cmd="(memq 't (mapcar 'framep (frame-list)))" ;; # if != nil, there are tty frames
+ *) cmd="(delete 't (mapcar 'framep (frame-list)))" ;; # if != nil, there are graphical terminals (x, w32, ns)
+ esac
+
+ # Check if there are suitable frames
+ frames="$(emacsclient -a '' -n -e "$cmd" 2>/dev/null)"
# Only create another X frame if there isn't one present
- if [ -z "$frames" -o "$frames" -lt 2 ]; then
+ if [ -z "$frames" -o "$frames" = nil ]; then
emacsclient --alternate-editor "" --create-frame "$@"
return $?
fi