Como mostrar o branch git no shell do Emacs

2

Como posso mostrar o ramo git atual como parte do prompt Emacs shell ?

Por exemplo, eu tenho isso no meu ~/.bash_profile (estou no Mac OSX 10.9 Terminal):

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

que produz um shell bash bem colorido como este:

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

Como posso produzir algo semelhante no shell do emacs?

Atualmente, quando abro M-x shell , ele abre assim:

bash: parse_git_branch: command not found
name@my-computer ~/code/sample $ 
    
por mark 18.03.2015 / 06:07

1 resposta

0

Tive o mesmo problema, depois que algumas pesquisas descobriram que isso repo e adotei meu código para a seguinte solução:

Obter nome da agência:

  (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))))))

Função de solicitação personalizada:

  (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) ">> ")
       )))

Configurar:

  (setq eshell-prompt-function #'4lex1v:eshell-prompt
        eshell-prompt-regexp ".*>>+ ")
    
por 03.11.2017 / 15:36