|
58 | 58 | from gi.repository import Gtk as gtk, Gdk, GLib, GObject, Gio as gio |
59 | 59 |
|
60 | 60 | APP_NAME = 'indicator-chars' |
61 | | -APP_VERSION = '0.3' |
| 61 | +APP_VERSION = '0.4' |
62 | 62 |
|
63 | 63 | class IndicatorChars: |
64 | 64 | CHARS_PATH = os.path.join(os.getenv('HOME'), '.indicator-chars') |
65 | 65 | SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__)) |
66 | 66 |
|
67 | | - submenu_title_pattern = re.compile(r'\[([^]]+)\] *') |
68 | | - description_pattern = re.compile(r' *(\([^)]+\)) *') |
| 67 | + line_pattern = re.compile(r'^(\[(.*)\])?(.*)$') |
69 | 68 |
|
70 | 69 | def __init__(self): |
71 | 70 | self.ind = appindicator.Indicator.new( |
@@ -99,34 +98,30 @@ def update_menu(self, widget = None, data = None): |
99 | 98 | menu = gtk.Menu() |
100 | 99 |
|
101 | 100 | for charLine in charDef: |
102 | | - charLine = str(charLine).strip() |
| 101 | + charLine = charLine.strip() |
103 | 102 | if charLine == '' : |
104 | 103 | continue |
105 | | - submenu_match = self.submenu_title_pattern.match(charLine) |
106 | | - if submenu_match: |
107 | | - submenu_title = submenu_match.group(1) |
108 | | - # remove title part from remainder: |
109 | | - charLine = charLine[submenu_match.end():] |
110 | | - else: |
111 | | - submenu_title = ''.join( |
112 | | - self.description_pattern.split(charLine)[::2]) |
113 | | - parentItem = self.create_menu_item(submenu_title) |
114 | | - subMenu = gtk.Menu() |
115 | | - while charLine: |
116 | | - char = charLine[0] |
117 | | - charLine = charLine[1:] |
118 | | - description_match = self.description_pattern.match(charLine) |
119 | | - if description_match: |
120 | | - item_title = char + ' ' + description_match.group(1) |
121 | | - # remove description part from remainder: |
122 | | - charLine = charLine[description_match.end():] |
123 | | - else: |
124 | | - item_title = char |
125 | | - subItem = self.create_menu_item(item_title) |
126 | | - subItem.connect("activate", self.on_char_click, char) |
127 | | - subMenu.append(subItem) |
128 | | - parentItem.set_submenu(subMenu) |
129 | | - menu.append(parentItem) |
| 104 | + result = self.line_pattern.search(charLine) |
| 105 | + if not result : |
| 106 | + print('ERROR:','bad line format') |
| 107 | + continue |
| 108 | + if result.group(2) : |
| 109 | + #print('-> in a sub-menu') |
| 110 | + submenu_title = result.group(2) |
| 111 | + parentItem = self.create_menu_item(submenu_title) |
| 112 | + menu.append(parentItem) |
| 113 | + subMenu = gtk.Menu() |
| 114 | + parentItem.set_submenu(subMenu) |
| 115 | + for char in list(result.group(3)) : |
| 116 | + subItem = self.create_menu_item(char) |
| 117 | + subItem.connect("activate", self.on_char_click, char) |
| 118 | + subMenu.append(subItem) |
| 119 | + else : |
| 120 | + #print('-> in main-menu') |
| 121 | + for char in list(result.group(3)) : |
| 122 | + subMenu = self.create_menu_item(char) |
| 123 | + subMenu.connect("activate", self.on_char_click, char) |
| 124 | + menu.append(subMenu) |
130 | 125 |
|
131 | 126 | menu.append(gtk.SeparatorMenuItem()) |
132 | 127 | quit_item = self.create_menu_item('Quit') |
|
0 commit comments