This works: $ mac-emacs -Q --batch --eval '(message "%S" (boundp '\''ns-version-string))' t But not the below. It looks like no accessible event loop so no sleep/wake in batch on macOS. This could be addressed by the current NS experts. It's not really clear why it was done this way. Running applescript scripts doesn't have to be tied to a GUI. Neither does sleep/wake. $ mac-emacs -Q --batch --eval '(ns-do-applescript "display notification \"foo\"")' + exec /Applications/Emacs.app/Contents/MacOS/Emacs -Q --batch --eval '(ns-do-applescript "display notification \"foo\"")' Error: error ("Window system is not in use or not initialized") mapbacktrace(#f(compiled-function (evald func args flags) #)) debug-early-backtrace() debug-early(error (error "Window system is not in use or not initialized")) ns-do-applescript("display notification \"foo\"") command-line-1(("--eval" "(ns-do-applescript \"display notification \\\"foo\\\"\")")) command-line() normal-top-level() Window system is not in use or not initialized On Fri, Feb 7, 2025 at 10:29 AM Eli Zaretskii wrote: > > From: Ship Mints > > Date: Fri, 7 Feb 2025 08:20:09 -0500 > > Cc: acohen@ust.hk, 63620@debbugs.gnu.org, monnier@iro.umontreal.ca, > > michael.albinus@gmx.de > > > > In nsterm.m, it says: > > > > /* emacs -nw doesn't have an NSApp, so we're done. */ > > if (NSApp == nil) > > > > That may influence if sleep/wake features are available in batch, at > least for macos, yes? > > Could be. I know almost nothing about how Emacs's inner loops work on > macOS, sorry. Only that it's different from every other platform. >