6
6
Requires:
7
7
* xcwd
8
8
* 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")
9
12
"""
10
13
11
14
import os
@@ -20,7 +23,11 @@ class Module(core.module.Module):
20
23
def __init__ (self , config , theme ):
21
24
super ().__init__ (config , theme , [])
22
25
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
24
31
25
32
def hidden (self ):
26
33
return self .__error
@@ -33,32 +40,11 @@ def update(self):
33
40
directory = self .__get_git_root (directory )
34
41
repo = pygit2 .Repository (directory )
35
42
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
+
54
46
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
+
62
48
except Exception as e :
63
49
self .__error = True
64
50
@@ -72,5 +58,29 @@ def __get_git_root(self, directory):
72
58
directory = "/" .join (directory .split ("/" )[0 :- 1 ])
73
59
return "/"
74
60
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" )
75
85
76
86
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
0 commit comments