Some git prompt fixes

This commit is contained in:
Alexander Rosenberg 2024-01-13 03:50:09 -08:00
parent 7a7f24844a
commit 3f5e53a83c
Signed by: Zander671
GPG Key ID: 5FD0394ADBD72730

28
init.el
View File

@ -854,6 +854,7 @@ Take directly from doom-modeline."
;; eat
(use-package eat
:bind ("C-c V" . my/project-eat-or-default)
:config
(defvar my/project-eat-hash-table (make-hash-table :test 'equal)
"Hash table that maps project root dirs to eat buffers.")
@ -869,7 +870,7 @@ Take directly from doom-modeline."
(let ((eat-buffer-name (concat "*eat for project " default-directory "*")))
(puthash default-directory
(eat)
my/project-eaeat-hash-table)))))
my/project-eat-hash-table)))))
(defun my/project-eat-or-default ()
"Open an eat for the current project, otherwise, open a normal eat."
(interactive)
@ -925,6 +926,13 @@ If no name is given, list all bookmarks instead."
(when my/eshell-bm-auto-ls
(eshell/ls)))
(eshell-print (string-join (bookmark-all-names) " "))))
(defun my/-git-process-lines (&rest flags)
"Run `vc-git-program' and return an array of its output lines."
(with-temp-buffer
(apply 'vc-git-command t 0 nil flags)
(if (zerop (buffer-size))
'()
(string-lines (buffer-substring-no-properties 1 (buffer-size))))))
(defun my/-replace-home-with-tilda (path)
(let ((home (getenv "HOME")))
(if (equal home path)
@ -951,10 +959,10 @@ If no name is given, list all bookmarks instead."
(my/-replace-home-with-tilda default-directory))))
(defun my/-eshell-prompt-status-char-for-branch (branch remote)
"Get the status char representing the relation between BRANCH and REMOTE."
(let ((lines (process-lines vc-git-program
"rev-list"
"--left-right"
(concat branch "..." remote)))
(let ((lines (my/-git-process-lines
"rev-list"
"--left-right"
(concat branch "..." remote)))
(to-remote nil)
(to-local nil))
(dolist (line lines)
@ -969,10 +977,10 @@ If no name is given, list all bookmarks instead."
(to-local ?󰜮))))
(defun my/-eshell-prompt-current-branch-status ()
"Get the status char for the current branch and its remote."
(let ((refs (process-lines vc-git-program
"for-each-ref"
"--format=%(HEAD)%00%(refname:short)%00%(upstream:short)"
"refs/heads")))
(let ((refs (my/-git-process-lines
"for-each-ref"
"--format=%(HEAD)%00%(refname:short)%00%(upstream:short)"
"refs/heads")))
(catch 'break
(dolist (ref refs)
(if-let ((split-ref (split-string ref "\0" nil nil))
@ -982,7 +990,7 @@ If no name is given, list all bookmarks instead."
(caddr split-ref))))))))
(defun my/-eshell-prompt-git-state-chars ()
"Get chars, like + and ✘ for `my/-eshell-prompt-function'."
(let ((lines (process-lines vc-git-program "status" "--porcelain=v1"))
(let ((lines (my/-git-process-lines "status" "--porcelain=v1"))
(branch-status (my/-eshell-prompt-current-branch-status))
(status-arr))
(dolist (line lines)