我在命令行上使用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
}
致谢,
帕湾。
答案 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 myfile
和open
是正确的,但从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))'