Files
emacs/lisp/treemacs/treemacs-git-commit-diff.py
2025-11-25 19:52:03 +01:00

49 lines
1.3 KiB
Python

from subprocess import Popen, PIPE
import sys
GIT_BIN = sys.argv[1]
STATUS_CMD = "{} status -sb".format(GIT_BIN)
def main():
proc = Popen(STATUS_CMD, shell=True, stdout=PIPE, bufsize=100, env={"LC_ALL": "C"})
if (proc.wait() != 0):
sys.exit(2)
line = proc.stdout.readline()
i_open = line.find(b"[")
i_close = line.find(b"]")
if (i_open == -1):
print("nil")
sys.exit(0)
ahead = 0
ahead_len = 0
behind = 0
behind_len = 0
for inf in line[i_open+1 : i_close].split(b", "):
split = inf.split(b" ")
status = split[0]
text = split[1]
number = int(text)
if status == b"ahead":
ahead = number
ahead_len = len(text)
elif status == b"behind":
behind = number
behind_len = len(text)
if ahead == 0 and behind != 0:
face_len = 2 + behind_len
print('#("{}" 0 {} (face treemacs-git-commit-diff-face))'.format(behind, face_len))
elif ahead != 0 and behind == 0:
face_len = 2 + ahead_len
print('#("{}" 0 {} (face treemacs-git-commit-diff-face))'.format(ahead, face_len))
else:
face_len = 4 + ahead_len + behind_len
print('#("{}{}" 0 {} (face treemacs-git-commit-diff-face))'.format(ahead, behind, face_len))
main()