Откройте приложение emacs в определенном режиме для указанного пути - PullRequest
0 голосов
/ 09 мая 2019

Я использовал emacs в командной строке и использовал следующую команду, чтобы открыть текущий каталог git в режиме magit:

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 голосов
/ 13 мая 2019

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