在Mac OS X上使用GUI(来自Dock)启动Emacsclient

时间:2016-09-13 08:01:13

标签: macos emacs automator dock emacsclient

如何在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,但两者都不起作用。

2 个答案:

答案 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