summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorrandnobx <randynobx@gmail.com>2015-03-20 21:02:30 -0400
committerrandnobx <randynobx@gmail.com>2015-04-11 13:46:14 -0400
commitc56bf8705f75301d4dabf49991e4c509b71d5901 (patch)
tree07cbf372bf27c59054c858e291bb2ed991a5f72c
parent3160c4a7ebedf85c068baa4bae6747cafc123d4b (diff)
downloadranger-c56bf8705f75301d4dabf49991e4c509b71d5901.tar.gz
added tag management for rename, delete, bulkrename, and moving of files
fixed typo in rename

added recursive checking to move, rename, and delete; refactored previos code

bugfix: moved recursive tag checking for delete to commands.py
-rw-r--r--ranger/config/commands.py26
-rw-r--r--ranger/core/loader.py7
2 files changed, 33 insertions, 0 deletions
diff --git a/ranger/config/commands.py b/ranger/config/commands.py
index 8797cb6b..38b4f598 100644
--- a/ranger/config/commands.py
+++ b/ranger/config/commands.py
@@ -523,10 +523,16 @@ class delete(Command):
                 self._question_callback, ('n', 'N', 'y', 'Y'))
         else:
             # no need for a confirmation, just delete
+            for f in self.fm.tags.tags:
+                if str(f).startswith(self.fm.thisfile.path):
+                    self.fm.tags.remove(f)
             self.fm.delete()
 
     def _question_callback(self, answer):
         if answer == 'y' or answer == 'Y':
+            for f in self.fm.tags.tags:
+                if str(f).startswith(self.fm.thisfile.path):
+                    self.fm.tags.remove(f)
             self.fm.delete()
 
 
@@ -725,6 +731,13 @@ class rename(Command):
 
         new_name = self.rest(1)
 
+        tagged = {}
+        old_name = self.fm.thisfile.basename
+        for f in self.fm.tags.tags:
+            if str(f).startswith(self.fm.thisfile.path):
+                tagged[f] = self.fm.tags.tags[f]
+                self.fm.tags.remove(f)
+
         if not new_name:
             return self.fm.notify('Syntax: rename <newname>', bad=True)
 
@@ -738,6 +751,9 @@ class rename(Command):
             f = File(new_name)
             self.fm.thisdir.pointed_obj = f
             self.fm.thisfile = f
+            for t in tagged:
+                self.fm.tags.tags[t.replace(old_name,new_name)] = tagged[t]
+                self.fm.tags.dump()
 
     def tab(self):
         return self._tab_directory_content()
@@ -813,6 +829,11 @@ class bulkrename(Command):
 
         # Create and edit the file list
         filenames = [f.relative_path for f in self.fm.thistab.get_selection()]
+        tagged = {}
+        for f in self.fm.thistab.get_selection():
+            if f.path in self.fm.tags:
+                tagged[f.relative_path] = self.fm.tags.tags[f.path]
+                self.fm.tags.remove(f.path)
         listfile = tempfile.NamedTemporaryFile(delete=False)
         listpath = listfile.name
 
@@ -846,6 +867,11 @@ class bulkrename(Command):
         self.fm.run(['/bin/sh', cmdfile.name], flags='w')
         cmdfile.close()
 
+        for old,new in zip(filenames, new_filenames):
+            if old != new and old in tagged:
+                newpath = self.fm.thisdir.path + '/' + new
+                self.fm.tags.tags[newpath] = tagged[old]
+                self.fm.tags.dump()
 
 class relink(Command):
     """:relink <newpath>
diff --git a/ranger/core/loader.py b/ranger/core/loader.py
index 86a591f0..8eda544f 100644
--- a/ranger/core/loader.py
+++ b/ranger/core/loader.py
@@ -85,6 +85,13 @@ class CopyLoader(Loadable, FileManagerAware):
                 else:
                     self.description = "moving files from: " + self.one_file.dirname
                 for f in self.copy_buffer:
+                    for tf in self.fm.tags.tags:
+                        if tf == f.path or str(tf).startswith(f.path):
+                            tag = self.fm.tags.tags[tf]
+                            self.fm.tags.remove(tf)
+                            self.fm.tags.tags[tf.replace(f.path, self.original_path \
+                                    + '/' + f.basename)] = tag
+                            self.fm.tags.dump()
                     for _ in shutil_g.move(src=f.path,
                             dst=self.original_path,
                             overwrite=self.overwrite):