如何在Mac OS X上从Dock(或者也可能从终端)启动带有GUI的Emacsclient?
EmacsWiki describes如何使用Automator创建“来自Dock的Emacs”应用程序。它对我有用,但我不想推出Emacs而是Emacsclient。因此,我尝试用/Applications/Emacs.app/Contents/MacOS/Emacs
和/Applications/Emacs.app/Contents/MacOS/bin/emacsclient
替换/Applications/Emacs.app/Contents/MacOS/bin/emacsclient -c
,但两者都不起作用。
答案 0 :(得分:2)
编辑:我现在建议使用khd来完成此操作而不是Automator应用程序,因为使用khd更快更灵活。 khd允许您以模式方式在指定的键序列上运行$SHELL
(您的默认shell)命令。例如,您可以在任何键上创建一个全局前缀,例如 Control - o ,仅用于打开应用程序:在 Control 之后 - o ,按 e 可以运行emacsclient -n -c -a ""
(或者,例如, f 用于新的Finder窗口。)
在.khdrc
:
khd mode openapp color 0xFF932092
khd mode openapp prefix on
khd mode openapp timeout 5
# from default mode, press ctrl - o to enter openapp mode
ctrl - o : khd -e "mode activate openapp"
# then press e to open emacs and return to normal operation
openapp - e : khd -e "mode activate default";\
emacsclient -n -c -a ""
# or f to open Finder and return to normal operation
openapp - f : khd -e "mode activate default";\
open -a Finder
# or--in case we change our mind--press escape to return directly
# to normal operation instead of opening an application
openapp - escape : khd -e "mode activate default"
我仍然有一个Automator应用程序,但是对于.app文件很方便的其他情况(比如设置打开文件类型的默认应用程序为emacsclient
) - 可能有也可能没有更好的方法来设置这种东西直接用于shell命令,但Automator应用程序似乎就足够了。)
Automator应用程序:
您可以在shell中使用which
找到emacsclient的相应路径(假设emacsclient -c
来自所述shell):
$ which emacsclient
/usr/local/bin/emacsclient
使用上述路径(以及您可能想要的一些emacsclient标志 - 请参阅$ man emacsclient
了解详细信息):
/usr/local/bin/emacsclient -n -c -a "" -- "$@"
答案 1 :(得分:1)
一个想法是创建一个可以完成原始海报所需的AppleScript,并使用platypus或automator之类的东西将其包装在应用程序中。有关其他提示,请参阅https://superuser.com/questions/685111/basic-setup-of-emacs-server-under-osx,例如使用--daemon
命令行参数,而不是将(server-start)
放在用户配置文件中。
以下是一个示例applescript:
# (server-start) must be inside `init.el` or `.emacs` file.
#
# This script can also be used in the terimal: osascript path-to-script arguments
# Terminal Example:
# osascript /absolute/path/to/applescript/file "-e '(progn (dired \"/Applications\") (message \"Hello-World\!\"))'"
on run argv
set arg to item 1 of argv
set emacs to application "Emacs"
set appIsRunning to emacs is running
if appIsRunning then
say "Emacs is already running."
do shell script "/Applications/Emacs.app/Contents/MacOS/bin/emacsclient " & arg
else
tell application "/Applications/Emacs.app/Contents/MacOS/Emacs" to activate
say "Please wait five seconds for Emacs to load."
delay 5
do shell script "/Applications/Emacs.app/Contents/MacOS/bin/emacsclient " & arg
end if
end run