diff options
Diffstat (limited to 'ranger/container/tags.py')
-rw-r--r-- | ranger/container/tags.py | 55 |
1 files changed, 40 insertions, 15 deletions
diff --git a/ranger/container/tags.py b/ranger/container/tags.py index 9ef8a1b2..ed015d16 100644 --- a/ranger/container/tags.py +++ b/ranger/container/tags.py @@ -14,8 +14,12 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. from os.path import isdir, exists, dirname, abspath, realpath, expanduser +import string + +ALLOWED_KEYS = string.ascii_letters + string.digits + string.punctuation class Tags(object): + def __init__(self, filename): self._filename = realpath(abspath(expanduser(filename))) @@ -28,33 +32,47 @@ class Tags(object): def __contains__(self, item): return item in self.tags - def add(self, *items): + def add(self, *items, **others): + if 'mark' in others: + mark = others['mark'] + else: + mark = '*' self.sync() for item in items: - self.tags.add(item) + self.tags[item] = mark self.dump() def remove(self, *items): self.sync() for item in items: try: - self.tags.remove(item) + del(self.tags[item]) except KeyError: pass self.dump() - def toggle(self, *items): + def toggle(self, *items, **others): + if 'mark' in others: + mark = others['mark'] + else: + mark = '*' self.sync() for item in items: - if item in self: - try: - self.tags.remove(item) - except KeyError: - pass - else: - self.tags.add(item) + try: + if item in self and self.tags[item] == mark: + del(self.tags[item]) + else: + self.tags[item] = mark + except KeyError: + pass self.dump() + def marker(self, item): + if item in self.tags: + return self.tags[item] + else: + return '*' + def sync(self): try: f = open(self._filename, 'r') @@ -74,13 +92,20 @@ class Tags(object): f.close() def _compile(self, f): - for line in self.tags: - f.write(line + '\n') + for path, mark in self.tags.items(): + if mark in ALLOWED_KEYS: + f.write('{0}:{1}\n'.format(mark, path)) def _parse(self, f): - result = set() + result = dict() for line in f: - result.add(line.strip()) + line = line.strip() + if len(line) > 2 and line[1] == ':': + mark, path = line[0], line[2:] + if mark in ALLOWED_KEYS: + result[path] = mark + else: + result[line] = '*' return result def __nonzero__(self): |