Skip to content

Commit d2ef55d

Browse files
Merge pull request #1050 from morgabm/git-rtl
Updated git module to support drawing widgets right to left
2 parents 8eab450 + 5866d90 commit d2ef55d

File tree

2 files changed

+39
-26
lines changed

2 files changed

+39
-26
lines changed

bumblebee_status/modules/core/git.py

Lines changed: 36 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
Requires:
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

1114
import 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

docs/modules.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,9 @@ Requires:
8383
* xcwd
8484
* Python module 'pygit2'
8585

86+
Parameters:
87+
* 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")
88+
8689
.. image:: ../screenshots/git.png
8790

8891
keys

0 commit comments

Comments
 (0)