以特定模式打开给定路径的emacs应用程序

时间:2019-05-09 15:51:34

标签: macos emacs magit

我在命令行上使用emacs,并且正在使用以下命令以magit模式打开当前git目录:

emacs -nw -f magit-status --eval "(call-interactively #'delete-other-windows)"

我改用emacs应用程序,而不是在命令行中打开它。我正在使用以下命令别名:

alias emacs='open -a /Applications/Emacs.app $1'

因为此magit命令不再起作用。有什么方法可以使用Emacs应用程序实现相同的功能吗?

也请按照注释中的建议尝试此功能:

function magit() {
 open -a /Applications/Emacs.app --args -f magit-status $1
}

致谢,
帕湾。

1 个答案:

答案 0 :(得分:0)

启动新的Emacs会话时,该功能

function magit() {
 open -a Emacs --args --file "$1" -f magit-status
}

将做您想要的。也就是说,将文件加载到缓冲区中(通过find-file),然后在该缓冲区上运行函数magit-status。请注意,订单在Emacs命令行上计数。从open -a Emacs myfile --args -f magit-status的角度来看,open -a Emacs --args -f magit-status myfileopen是正确的,但从Emacs的角度来看,它们是不正确的。 (magit-status一无所获,然后打开myfile。不是您想要的。)

如果要在当前运行的Emacs会话中执行此操作,则不能。线索在open的联机帮助页中。

--args
    All remaining arguments are passed to the opened application in the argv parameter to main().  These argu-
    ments are not opened or interpreted by the open tool.

main()已经执行,因此您无法再向其传递参数,因此--args is effectively ignored。因此,您必须借助Emacs服务器和emacsclient发挥创意。

如果您具有与关联服务器的开放Emacs会话(例如,通过server-start),则可以执行以下操作来“加载并执行”文件

# my emacs will load *.log files in `fundamental-mode`
# this will load them in `text-mode`

$ emacsclient -e '(find-file "/tmp/foo.log")' -e '(text-mode)'

# or

$ emacsclient -e '(progn (find-file "/tmp/foo.log") (text-mode))'