To make Emacs.app open files in an existing frame instead of a new frame, add (setq ns-pop-up-frames nil)
to a configuration file like ~/.emacs
.
You can open a file from a terminal with open -a emacs file
or emacsclient -n file
. If Emacs.app is not open but there is an Emacs --daemon
process, for some reason emacsclient -n file
doesn't work but emacsclient -nc file
does.
Make sure you use the emacsclient
binary included with the version of Emacs you use, like /Applications/Emacs.app/Contents/MacOS/bin/emacsclient
, or /usr/local/bin/emacsclient
if you installed Emacs with Homebrew.
To start an Emacs server at login, for example save this plist as ~/Library/LaunchAgents/my.emacsdaemon.plist
:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>my.emacsdaemon</string>
<key>ProgramArguments</key>
<array>
<string>/Applications/Emacs.app/Contents/MacOS/Emacs</string>
<string>--daemon</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/> <!-- run the program again if it terminates -->
</dict>
</plist>
The plist is loaded automatically the next time you login, but you can load it immediately by running launchctl load ~/Library/LaunchAgents/my.emacsdaemon.plist
.
Edit: I still don't know why people are associating file types with an AppleScript application instead of just Emacs.app. The script in kuzzooroo's answer could also be written as a shell script though:
macos=/Applications/Emacs.app/Contents/MacOS
if pgrep -qf 'Emacs.*--daemon'; then
[[ $($macos/bin/emacsclient -e '(<= 2 (length (visible-frame-list)))') = t ]] && args=-nc || args=-n
else
$macos/Emacs --daemon
args=-nc
fi
$macos/bin/emacsclient $args "$@"
open -a /Applications/Emacs.app
You can use Platypus to save the script as an application:
I just started using Emacs, but I have a completely different setup. I made my own Emacs application by making a copy of iTerm.app, changing the CFBundleIdentifier in the Info.plist so that the application uses a different preference file, and setting the default command to /usr/local/bin/emacs
. I have added (server-start)
to ~/.emacs
and I open the custom Emacs application at login. I used Platypus to create an application that runs emacsclient -n "$@";open -b my.emacs
and I made it the default application for text files.
Best Answer
I don't think there is a native way to do it, so I am relying on a 3rd-party tool: http://code.kliu.org/misc/elevate whenever i need to do this.
Enter your credentials in the UAC dialog box and your program will be run with administrative rights.