2

Как я могу показать текущую ветку git как часть приглашения shell Emacs?

Например, у меня есть это в моем ~/.bash_profile (я на Mac OSX 10.9 Terminal):

parse_git_branch() {
  git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
export PS1="\[\033[00m\]\u@\h\[\033[01;33m\] \w \[\033[31m\]\$(parse_git_branch)\[\033[00m\]$\[\033[00m\] "

который производит красиво окрашенную оболочку bash, например:

name@my-computer ~/code/sample (master)$

Как я могу создать нечто похожее в оболочке emacs?

В настоящее время, когда я открываю M-x shell она открывается так:

bash: parse_git_branch: command not found
name@my-computer ~/code/sample $ 

1 ответ1

0

Возникла такая же проблема, после некоторых исследований нашел этот репозиторий и применил мой код к следующему решению:

Получить название филиала:

  (defun git-prompt-branch-name ()
    "Get current git branch name"
    (let ((args '("symbolic-ref" "HEAD" "--short")))
      (with-temp-buffer
        (apply #'process-file "git" nil (list t nil) nil args)
        (unless (bobp)
          (goto-char (point-min))
          (buffer-substring-no-properties (point) (line-end-position))))))

Пользовательская функция подсказки:

  (defun 4lex1v:eshell-prompt ()
    (let ((branch-name (git-prompt-branch-name)))
      (concat
       "\n# " (user-login-name) " in " (abbreviate-file-name (eshell/pwd)) "\n"
       (if branch-name (format "git:(%s) >> " branch-name) ">> ")
       )))

Настройка:

  (setq eshell-prompt-function #'4lex1v:eshell-prompt
        eshell-prompt-regexp ".*>>+ ")

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .