66Requires:
77 * xcwd
88 * Python module 'pygit2'
9+
10+ Parameters:
11+ * git.draw_order: String to specify draw order of the widgets; Options are "ltr" for left to right, and "rtl" for right to left (defaults to "ltr")
912"""
1013
1114import os
@@ -20,7 +23,11 @@ class Module(core.module.Module):
2023 def __init__ (self , config , theme ):
2124 super ().__init__ (config , theme , [])
2225
23- self .__error = False
26+ self ._draw_order = self .parameter ("draw_order" , "ltr" )
27+ if self ._draw_order not in [ "ltr" , "rtl" ]:
28+ self .__error = True
29+ else :
30+ self .__error = False
2431
2532 def hidden (self ):
2633 return self .__error
@@ -33,32 +40,11 @@ def update(self):
3340 directory = self .__get_git_root (directory )
3441 repo = pygit2 .Repository (directory )
3542
36- self .add_widget (name = "git.main" , full_text = repo .head .shorthand )
37-
38- for filepath , flags in repo .status ().items ():
39- if (
40- flags == pygit2 .GIT_STATUS_WT_NEW
41- or flags == pygit2 .GIT_STATUS_INDEX_NEW
42- ):
43- state ["new" ] = True
44- if (
45- flags == pygit2 .GIT_STATUS_WT_DELETED
46- or flags == pygit2 .GIT_STATUS_INDEX_DELETED
47- ):
48- state ["deleted" ] = True
49- if (
50- flags == pygit2 .GIT_STATUS_WT_MODIFIED
51- or flags == pygit2 .GIT_STATUS_INDEX_MODIFIED
52- ):
53- state ["modified" ] = True
43+ for info in self ._get_widget_infos (repo ):
44+ self .add_widget (name = info [0 ], full_text = info [1 ])
45+
5446 self .__error = False
55- if "new" in state :
56- self .add_widget (name = "git.new" )
57- if "modified" in state :
58- self .add_widget (name = "git.modified" )
59- if "deleted" in state :
60- self .add_widget (name = "git.deleted" )
61-
47+
6248 except Exception as e :
6349 self .__error = True
6450
@@ -72,5 +58,29 @@ def __get_git_root(self, directory):
7258 directory = "/" .join (directory .split ("/" )[0 :- 1 ])
7359 return "/"
7460
61+ def _get_widget_infos (self , repo ):
62+ widget_infos = [ ("git.main" , repo .head .shorthand ) ]
63+ state = {}
64+ for _ , flags in repo .status ().items ():
65+ if flags & (pygit2 .GIT_STATUS_WT_NEW | pygit2 .GIT_STATUS_INDEX_NEW ):
66+ state ["new" ] = True
67+ if flags & (pygit2 .GIT_STATUS_WT_DELETED | pygit2 .GIT_STATUS_INDEX_DELETED ):
68+ state ["deleted" ] = True
69+ if flags & (pygit2 .GIT_STATUS_WT_MODIFIED | pygit2 .GIT_STATUS_INDEX_MODIFIED ):
70+ state ["modified" ] = True
71+
72+ if "new" in state :
73+ widget_infos .append (("git.new" , "" ))
74+ if "modified" in state :
75+ widget_infos .append (("git.modified" , "" ))
76+ if "deleted" in state :
77+ widget_infos .append (("git.deleted" , "" ))
78+
79+ if self ._draw_order == "ltr" :
80+ return widget_infos
81+ elif self ._draw_order == "rtl" :
82+ return reversed (widget_infos )
83+
84+ raise RuntimeError ("Draw order is not specified correctly" )
7585
7686# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
0 commit comments