Merge lp:~costales/folder-color/files_emblem into lp:folder-color

Proposed by costales
Status: Merged
Approved by: costales
Approved revision: 288
Merged at revision: 276
Proposed branch: lp:~costales/folder-color/files_emblem
Merge into: lp:folder-color
Diff against target: 547 lines (+225/-166)
5 files modified
debian/changelog (+1/-1)
debian/control (+1/-1)
install_scripts/caja.sh (+1/-1)
nautilus-extension/folder-color.py (+220/-161)
setup.py (+2/-2)
To merge this branch: bzr merge lp:~costales/folder-color/files_emblem
Reviewer Review Type Date Requested Status
costales Pending
Review via email: mp+328948@code.launchpad.net

Description of the change

File emblems

To post a comment you must log in.
285. By costales

WIP

286. By costales

WIP

287. By costales

WIP

288. By costales

WIP

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'debian/changelog'
2--- debian/changelog 2017-08-01 13:58:16 +0000
3+++ debian/changelog 2017-08-13 16:41:50 +0000
4@@ -1,4 +1,4 @@
5-folder-color (0.0.83) xenial; urgency=low
6+folder-color (0.0.84) xenial; urgency=low
7
8 * Fixed #1705546
9 * Updated translations
10
11=== modified file 'debian/control'
12--- debian/control 2017-08-01 13:33:14 +0000
13+++ debian/control 2017-08-13 16:41:50 +0000
14@@ -1,7 +1,7 @@
15 Source: folder-color
16 Section: utils
17 Priority: extra
18-Standards-Version: 0.0.83
19+Standards-Version: 0.0.84
20 Maintainer: costales <costales.marcos@gmail.com>
21 Build-Depends: python-distutils-extra, debhelper (>=7)
22 Homepage: https://code.launchpad.net/folder-color
23
24=== modified file 'install_scripts/caja.sh'
25--- install_scripts/caja.sh 2017-07-02 15:39:18 +0000
26+++ install_scripts/caja.sh 2017-08-13 16:41:50 +0000
27@@ -16,7 +16,7 @@
28 sed -i 's/nautilus/caja/g' ../caja-extension/folder-color.py
29 sed -i 's/Nautilus/Caja/g' ../caja-extension/folder-color.py
30 sed -i 's/is_uri=False/is_uri=True/' ../caja-extension/folder-color.py
31-sed -i "s/self.foldercolor.set_icon(folder_name, self._get_skel_folder(folder_name, icon)\['name'\])/self.foldercolor.set_icon(folder_name, self._get_skel_folder(folder_name, icon)\['filename'\], True)/" ../caja-extension/folder-color.py
32+sed -i "s/self.foldercolor.set_color(item_path, self._get_skel_folder(item_path, icon)\['name'\])/self.foldercolor.set_color(item_path, self._get_skel_folder(item_path, icon)\['filename'\], True)/" ../caja-extension/folder-color.py
33 sed -i 's/Gtk.ColorChooserDialog()/Gtk.ColorSelectionDialog()/g' ../caja-extension/folder-color.py
34 sed -i 's/dialog.set_use_alpha(False)//g' ../caja-extension/folder-color.py
35 sed -i 's/color = dialog.get_rgba()/color = dialog.get_color_selection().get_current_color()/g' ../caja-extension/folder-color.py
36
37=== modified file 'nautilus-extension/folder-color.py'
38--- nautilus-extension/folder-color.py 2017-08-01 13:40:45 +0000
39+++ nautilus-extension/folder-color.py 2017-08-13 16:41:50 +0000
40@@ -1,4 +1,4 @@
41-# Folder Color 0.0.83
42+# Folder Color 0.0.84
43 # Copyright (C) 2012-2017 Marcos Alvarez Costales https://launchpad.net/~costales
44 #
45 # Folder Color is free software; you can redistribute it and/or modify
46@@ -26,55 +26,53 @@
47 class FolderColor:
48 """Folder Color Class"""
49 def __init__(self):
50- # Colors
51+ # Folder colors
52 self.COLORS = [
53- 'black',
54- 'blue',
55- 'brown',
56- 'cyan',
57- 'green',
58- 'grey',
59- 'magenta',
60- 'orange',
61- 'pink',
62- 'purple',
63- 'red',
64- 'violet',
65- 'yellow'
66- ]
67+ 'black',
68+ 'blue',
69+ 'brown',
70+ 'cyan',
71+ 'green',
72+ 'grey',
73+ 'magenta',
74+ 'orange',
75+ 'pink',
76+ 'purple',
77+ 'red',
78+ 'violet',
79+ 'yellow'
80+ ]
81 self.I18N_COLORS = {
82- 'black' : _("Black"),
83- 'blue' : _("Blue"),
84- 'brown' : _("Brown"),
85- 'cyan' : _("Cyan"),
86- 'green' : _("Green"),
87- 'grey' : _("Grey"),
88- 'magenta': _("Magenta"),
89- 'orange' : _("Orange"),
90- 'pink' : _("Pink"),
91- 'purple' : _("Purple"),
92- 'red' : _("Red"),
93- 'violet' : _("Violet"),
94- 'yellow' : _("Yellow")
95- }
96-
97+ 'black' : _("Black"),
98+ 'blue' : _("Blue"),
99+ 'brown' : _("Brown"),
100+ 'cyan' : _("Cyan"),
101+ 'green' : _("Green"),
102+ 'grey' : _("Grey"),
103+ 'magenta': _("Magenta"),
104+ 'orange' : _("Orange"),
105+ 'pink' : _("Pink"),
106+ 'purple' : _("Purple"),
107+ 'red' : _("Red"),
108+ 'violet' : _("Violet"),
109+ 'yellow' : _("Yellow")
110+ }
111 # Emblems
112 self.EMBLEMS = [
113- 'emblem-important',
114- 'emblem-urgent',
115- 'emblem-favorite',
116- 'emblem-default',
117- 'emblem-new'
118- ]
119+ 'emblem-important',
120+ 'emblem-urgent',
121+ 'emblem-favorite',
122+ 'emblem-default',
123+ 'emblem-new'
124+ ]
125 self.I18N_EMBLEMS = {
126- 'emblem-important': _("Important"),
127- 'emblem-urgent' : _("In Progress"),
128- 'emblem-favorite' : _("Favorite"),
129- 'emblem-default' : _("Finished"),
130- 'emblem-new' : _("New")
131- }
132-
133- # Custom color
134+ 'emblem-important': _("Important"),
135+ 'emblem-urgent' : _("In Progress"),
136+ 'emblem-favorite' : _("Favorite"),
137+ 'emblem-default' : _("Finished"),
138+ 'emblem-new' : _("New")
139+ }
140+ # Custom folder color
141 self.PATH_CUSTOM_COLOR = os.path.join(os.getenv('HOME'), '.local', 'share', 'folder-color', 'icons')
142 self.GRADIENT_RANGE = 15
143 self.VALUE_LIGHT = 'value_light'
144@@ -92,48 +90,65 @@
145 return {'name': '',
146 'filename': ''}
147
148- def set_icon(self, folder_name, color, is_uri=False):
149- """Set color to a folder"""
150- folder, info = self._unset_icon(folder_name) # Restore because I don't know if I set previously with custom-icon or custom-icon-name
151+ def set_color(self, item_path, color, is_uri=False):
152+ """Set color to a file/directory"""
153+ # Restore
154+ self._unset_color(item_path)
155+ # Set
156+ item = Gio.File.new_for_path(item_path)
157 if not is_uri:
158+ info = item.query_info('metadata::custom-icon-name', 0, None)
159 info.set_attribute_string("metadata::custom-icon-name", color)
160 else:
161+ info = item.query_info('metadata::custom-icon', 0, None)
162 info.set_attribute_string('metadata::custom-icon', 'file://'+color)
163- folder.set_attributes_from_info(info, 0, None)
164- self._refresh_icon(folder_name)
165-
166- def restore_icon(self, folder_name):
167- """Restore by default"""
168- folder, info = self._unset_icon(folder_name)
169- folder.set_attributes_from_info(info, 0, None)
170- self.set_emblem(folder_name, '')
171-
172- def set_emblem(self, folder_name, emblem_name=''):
173+ item.set_attributes_from_info(info, 0, None)
174+ # Refresh
175+ self._refresh(item_path)
176+
177+ def set_emblem(self, item_path, emblem_name=''):
178 """Set emblem"""
179- emblem = []
180+ # Restore
181+ self._unset_emblem(item_path)
182+ # Set
183 if emblem_name:
184+ emblem = []
185 emblem.append(emblem_name)
186- emblems = list(emblem)
187- emblems.append(None) # Needs
188-
189- folder = Gio.File.new_for_path(folder_name)
190- info = folder.query_info('metadata::emblems', 0, None)
191- info.set_attribute_stringv('metadata::emblems', emblems)
192- folder.set_attributes_from_info(info, 0, None)
193-
194- self._refresh_icon(folder_name)
195-
196- def _unset_icon(self, folder_name):
197- """Restore to default"""
198- folder = Gio.File.new_for_path(folder_name)
199- info = folder.query_info('metadata::custom-icon-name', 0, None)
200+ emblems = list(emblem)
201+ emblems.append(None) # Needs
202+ item = Gio.File.new_for_path(item_path)
203+ info = item.query_info('metadata::emblems', 0, None)
204+ info.set_attribute_stringv('metadata::emblems', emblems)
205+ item.set_attributes_from_info(info, 0, None)
206+ # Refresh
207+ self._refresh(item_path)
208+
209+ def restore(self, item_path):
210+ """Restore folder icon to default"""
211+ # Restore
212+ self._unset_color(item_path)
213+ self._unset_emblem(item_path)
214+ # Refresh
215+ self._refresh(item_path)
216+
217+ def _unset_emblem(self, item_path):
218+ """Restore emblem to default"""
219+ item = Gio.File.new_for_path(item_path)
220+ info = item.query_info('metadata::emblems', 0, None)
221+ info.set_attribute('metadata::emblems', Gio.FileAttributeType.INVALID, 0)
222+ item.set_attributes_from_info(info, 0, None)
223+
224+ def _unset_color(self, item_path):
225+ """Restore folder color to default"""
226+ item = Gio.File.new_for_path(item_path)
227+ info = item.query_info('metadata::custom-icon-name', 0, None)
228 info.set_attribute('metadata::custom-icon', Gio.FileAttributeType.INVALID, 0)
229 info.set_attribute('metadata::custom-icon-name', Gio.FileAttributeType.INVALID, 0)
230- return folder, info
231+ item.set_attributes_from_info(info, 0, None)
232
233- def _refresh_icon(self, folder_name):
234- """Reload the current folder icon"""
235- os.utime(folder_name, None)
236+ def _refresh(self, item_path):
237+ """Reload the current file/directory icon"""
238+ os.utime(item_path, None)
239
240
241
242@@ -142,6 +157,8 @@
243 def __init__(self):
244 self.foldercolor = FolderColor()
245 self.theme_dirname = ''
246+ self.all_are_directories = True
247+ self.all_are_files = True
248
249 def get_file_items(self, window, items):
250 """Nautilus invoke this function in its startup > Create menu entry"""
251@@ -161,72 +178,112 @@
252 if not len(items):
253 return False
254
255+ self.all_are_directories = True
256+ self.all_are_files = True
257 for item in items:
258 # GNOME can only handle files
259 if item.get_uri_scheme() != 'file':
260 return False
261
262- # Only folders
263- if not item.is_directory():
264- return False
265+ if item.is_directory():
266+ self.all_are_files = False
267+ else:
268+ self.all_are_directories = False
269+
270+ if not self.all_are_directories and not self.all_are_files: # Only all folders or files
271+ return False
272
273 # All OK? > Generate menu
274 return True
275
276 def _generate_menu(self, items):
277- """Menu: Color | Custom | Restore | Emblems"""
278- # Menu title
279- if len(items) > 1:
280- top_menuitem = Nautilus.MenuItem(name='ChangeFolderColorMenu::Top', label=_("Folders' Color"), icon='folder_color_picker')
281+ """Menu for [directories|files]: [Color,Custom,Restore,Emblems|Emblems,Restore]"""
282+ # Directories
283+ if self.all_are_directories:
284+ # Title menu
285+ if len(items) > 1:
286+ top_menuitem = Nautilus.MenuItem(name='ChangeFolderColorMenu::Top', label=_("Folders' Color"), icon='folder_color_picker')
287+ else:
288+ top_menuitem = Nautilus.MenuItem(name='ChangeFolderColorMenu::Top', label=_("Folder's Color"), icon='folder_color_picker')
289+ submenu = Nautilus.Menu()
290+ top_menuitem.set_submenu(submenu)
291+
292+ # Colors
293+ for color in self.foldercolor.COLORS:
294+ icon = self._legacy_filename(color)
295+ if not icon['name']:
296+ continue
297+ if not self._check_same_theme(icon['filename']):
298+ continue
299+
300+ name = ''.join(['ChangeFolderColorMenu::Colors"', color, '"'])
301+ item = Nautilus.MenuItem(name=name, label=self.foldercolor.I18N_COLORS[color], icon=icon['name'])
302+ item.connect('activate', self._menu_activate_color, icon['name'], items)
303+ submenu.append_item(item)
304+
305+ # Custom color
306+ custom_icon = self._legacy_filename('custom')
307+ if custom_icon['name'] and self._check_same_theme(custom_icon['filename']) and custom_icon['filename'].lower().endswith('.svg'): # exists + same theme + SVG
308+ name = ''.join(['ChangeFolderColorMenu::Colors"', 'custom', '"'])
309+ item = Nautilus.MenuItem(name=name, label=_("Custom"), icon='gtk-edit')
310+ item.connect('activate', self._menu_activate_custom_color, custom_icon['name'], items)
311+ submenu.append_item(item)
312+
313+ # Restore
314+ if self._check_generate_restore(items):
315+ item_sep = Nautilus.MenuItem(name='ChangeFolderEmblemMenu::Sep', label=_("Restore:"), sensitive=False)
316+ submenu.append_item(item_sep)
317+
318+ item_restore = Nautilus.MenuItem(name='ChangeFolderColorMenu::Restore', label=_("Default"), icon='undo')
319+ item_restore.connect('activate', self._menu_activate_restore, items)
320+ submenu.append_item(item_restore)
321+
322+ # Separator if there are emblems
323+ for emblem in self.foldercolor.EMBLEMS:
324+ if self.foldercolor.get_icon(emblem)['name']:
325+ item_sep = Nautilus.MenuItem(name='ChangeFolderColorMenu::Sep1', label=_("Emblem:"), sensitive=False)
326+ submenu.append_item(item_sep)
327+ break
328+
329+ # Emblems
330+ for emblem in self.foldercolor.EMBLEMS:
331+ if self.foldercolor.get_icon(emblem)['name']:
332+ name = ''.join(['ChangeFolderColorMenu::Colors"', emblem, '"'])
333+ item = Nautilus.MenuItem(name=name, label=self.foldercolor.I18N_EMBLEMS[emblem], icon=emblem)
334+ item.connect('activate', self._menu_activate_emblem, emblem, items)
335+ submenu.append_item(item)
336+
337+ # Files
338 else:
339- top_menuitem = Nautilus.MenuItem(name='ChangeFolderColorMenu::Top', label=_("Folder's Color"), icon='folder_color_picker')
340- submenu = Nautilus.Menu()
341- top_menuitem.set_submenu(submenu)
342-
343- # Colors
344- for color in self.foldercolor.COLORS:
345- icon = self._legacy_filename(color)
346- if not icon['name']:
347- continue
348- if not self._check_same_theme(icon['filename']):
349- continue
350-
351- name = ''.join(['ChangeFolderColorMenu::Colors"', color, '"'])
352- item = Nautilus.MenuItem(name=name, label=self.foldercolor.I18N_COLORS[color], icon=icon['name'])
353- item.connect('activate', self._menu_activate_color, icon['name'], items)
354- submenu.append_item(item)
355-
356- # Custom color
357- custom_icon = self._legacy_filename('custom')
358- if custom_icon['name'] and self._check_same_theme(custom_icon['filename']) and custom_icon['filename'].lower().endswith('.svg'): # exists + same theme + SVG
359- name = ''.join(['ChangeFolderColorMenu::Colors"', 'custom', '"'])
360- item = Nautilus.MenuItem(name=name, label=_("Custom"), icon='gtk-edit')
361- item.connect('activate', self._menu_activate_custom_color, custom_icon['name'], items)
362- submenu.append_item(item)
363-
364- # Restore
365- if self._check_generate_restore(items):
366- item_sep = Nautilus.MenuItem(name='ChangeFolderEmblemMenu::Sep', label=_("Restore:"), sensitive=False)
367- submenu.append_item(item_sep)
368-
369- item_restore = Nautilus.MenuItem(name='ChangeFolderColorMenu::Restore', label=_("Default"), icon='undo')
370- item_restore.connect('activate', self._menu_activate_restore, items)
371- submenu.append_item(item_restore)
372-
373- # Separator if there are emblems
374- for emblem in self.foldercolor.EMBLEMS:
375- if self.foldercolor.get_icon(emblem)['name']:
376- item_sep = Nautilus.MenuItem(name='ChangeFolderColorMenu::Sep1', label=_("Categorize:"), sensitive=False)
377+ # Title menu
378+ if self.all_are_files:
379+ if len(items) > 1:
380+ top_menuitem = Nautilus.MenuItem(name='ChangeFolderColorMenu::Top', label=_("Files' Emblem"), icon='folder_color_picker')
381+ else:
382+ top_menuitem = Nautilus.MenuItem(name='ChangeFolderColorMenu::Top', label=_("File's Emblem"), icon='folder_color_picker')
383+ else:
384+ top_menuitem = Nautilus.MenuItem(name='ChangeFolderColorMenu::Top', label=_("Emblem"), icon='folder_color_picker')
385+ submenu = Nautilus.Menu()
386+ top_menuitem.set_submenu(submenu)
387+
388+ # Emblems
389+ exist_emblems = False
390+ for emblem in self.foldercolor.EMBLEMS:
391+ if self.foldercolor.get_icon(emblem)['name']:
392+ exist_emblems = True
393+ name = ''.join(['ChangeFolderColorMenu::Colors"', emblem, '"'])
394+ item = Nautilus.MenuItem(name=name, label=self.foldercolor.I18N_EMBLEMS[emblem], icon=emblem)
395+ item.connect('activate', self._menu_activate_emblem, emblem, items)
396+ submenu.append_item(item)
397+
398+ # Restore
399+ if exist_emblems and self._check_generate_restore(items):
400+ item_sep = Nautilus.MenuItem(name='ChangeFolderEmblemMenu::Sep', label=_("Restore:"), sensitive=False)
401 submenu.append_item(item_sep)
402- break
403-
404- # Emblems
405- for emblem in self.foldercolor.EMBLEMS:
406- if self.foldercolor.get_icon(emblem)['name']:
407- name = ''.join(['ChangeFolderColorMenu::Colors"', emblem, '"'])
408- item = Nautilus.MenuItem(name=name, label=self.foldercolor.I18N_EMBLEMS[emblem], icon=emblem)
409- item.connect('activate', self._menu_activate_emblem, emblem, items)
410- submenu.append_item(item)
411+
412+ item_restore = Nautilus.MenuItem(name='ChangeFolderColorMenu::Restore', label=_("Default"), icon='undo')
413+ item_restore.connect('activate', self._menu_activate_restore, items)
414+ submenu.append_item(item_restore)
415
416 return top_menuitem,
417
418@@ -244,9 +301,11 @@
419 if item.is_gone():
420 continue
421
422- folder_name = urllib.unquote(item.get_uri()[7:])
423- folder = Gio.File.new_for_path(folder_name)
424- info = folder.query_info('metadata', 0, None)
425+ # Get metadata file/folder
426+ item_path = urllib.unquote(item.get_uri()[7:])
427+ item = Gio.File.new_for_path(item_path)
428+ info = item.query_info('metadata', 0, None)
429+ # If any metadata > restore menu
430 if info.get_attribute_as_string('metadata::custom-icon-name'):
431 return True
432 if info.get_attribute_as_string('metadata::custom-icon'):
433@@ -256,51 +315,51 @@
434
435 return False
436
437- def _menu_activate_color(self, menu, icon, folders):
438+ def _menu_activate_color(self, menu, icon, items):
439 """Menu: Clicked color"""
440- for each_folder in folders:
441- if each_folder.is_gone():
442+ for each_item in items:
443+ if each_item.is_gone():
444 continue
445
446- folder_name = urllib.unquote(each_folder.get_uri()[7:])
447- self.foldercolor.set_icon(folder_name, self._get_skel_folder(folder_name, icon)['name'])
448+ item_path = urllib.unquote(each_item.get_uri()[7:])
449+ self.foldercolor.set_color(item_path, self._get_skel_folder(item_path, icon)['name'])
450
451- def _menu_activate_restore(self, menu, folders):
452+ def _menu_activate_restore(self, menu, items):
453 """Menu: Clicked restore"""
454- for each_folder in folders:
455- if each_folder.is_gone():
456+ for each_item in items:
457+ if each_item.is_gone():
458 continue
459
460- folder_name = urllib.unquote(each_folder.get_uri()[7:])
461- self.foldercolor.restore_icon(folder_name)
462+ item_path = urllib.unquote(each_item.get_uri()[7:])
463+ self.foldercolor.restore(item_path)
464
465- def _menu_activate_emblem(self, menu, emblem, folders):
466+ def _menu_activate_emblem(self, menu, emblem, items):
467 """Menu: Clicked emblem"""
468- for each_folder in folders:
469- if each_folder.is_gone():
470+ for each_item in items:
471+ if each_item.is_gone():
472 continue
473
474- folder_name = urllib.unquote(each_folder.get_uri()[7:])
475- self.foldercolor.set_emblem(folder_name, emblem)
476+ item_path = urllib.unquote(each_item.get_uri()[7:])
477+ self.foldercolor.set_emblem(item_path, emblem)
478
479- def _menu_activate_custom_color(self, menu, icon, folders):
480+ def _menu_activate_custom_color(self, menu, icon, items):
481 """Menu: Clicked custom"""
482 custom_color = self.custom_color_dialog()
483 if custom_color == None: # Cancel
484 return
485
486- for each_folder in folders:
487- if each_folder.is_gone():
488+ for each_item in items:
489+ if each_item.is_gone():
490 continue
491
492- folder_name = urllib.unquote(each_folder.get_uri()[7:])
493- custom_icon = self._get_skel_folder(folder_name, icon)
494+ item_path = urllib.unquote(each_item.get_uri()[7:])
495+ custom_icon = self._get_skel_folder(item_path, icon)
496
497 src_file = custom_icon['filename']
498 dst_file = ''.join([self.foldercolor.PATH_CUSTOM_COLOR, '/', custom_icon['name'], '-', custom_color['middle'], '.svg'])
499 self._cp_file(src_file, dst_file, custom_color)
500
501- self.foldercolor.set_icon(folder_name, dst_file, True)
502+ self.foldercolor.set_color(item_path, dst_file, True)
503
504 def custom_color_dialog(self):
505 """Pick color dialog"""
506@@ -405,14 +464,14 @@
507 skel_color = color + '_templates'
508 if folder == GLib.get_user_special_dir(GLib.USER_DIRECTORY_VIDEOS):
509 skel_color = color + '_videos'
510- skel_icon = self.foldercolor.get_icon(skel_color)
511- if skel_icon['name'] and self._check_same_theme(skel_icon['filename']):
512- return skel_icon
513+ skel_folder = self.foldercolor.get_icon(skel_color)
514+ if skel_folder['name'] and self._check_same_theme(skel_folder['filename']):
515+ return skel_folder
516
517 # Search folder-blue-<desktop>
518 skel_color = skel_color.replace('_', '-')
519- skel_icon = self.foldercolor.get_icon(skel_color)
520- if skel_icon['name'] and self._check_same_theme(skel_icon['filename']):
521- return skel_icon
522+ skel_folder = self.foldercolor.get_icon(skel_color)
523+ if skel_folder['name'] and self._check_same_theme(skel_folder['filename']):
524+ return skel_folder
525
526 return self.foldercolor.get_icon(color)
527
528=== modified file 'setup.py'
529--- setup.py 2017-08-01 13:33:14 +0000
530+++ setup.py 2017-08-13 16:41:50 +0000
531@@ -1,6 +1,6 @@
532 #!/usr/bin/env python3
533
534-# Folder Color 0.0.83 - http://launchpad.net/folder-color
535+# Folder Color 0.0.84 - http://launchpad.net/folder-color
536 # Copyright (C) 2012-2017 Marcos Alvarez Costales https://launchpad.net/~costales
537 #
538 # folder-color is free software; you can redistribute it and/or modify
539@@ -32,7 +32,7 @@
540 # Setup stage
541 DistUtilsExtra.auto.setup(
542 name = "folder-color",
543- version = "0.0.83",
544+ version = "0.0.84",
545 description = "Change your folder color with just a click",
546 author = "Marcos Alvarez Costales https://launchpad.net/~costales",
547 author_email = "https://launchpad.net/~costales",

Subscribers

People subscribed via source and target branches

to all changes: