При запуске нового сеанса 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))'