summary refs log tree commit diff stats
path: root/ranger/core
diff options
context:
space:
mode:
Diffstat (limited to 'ranger/core')
-rw-r--r--ranger/core/actions.py22
-rw-r--r--ranger/core/environment.py111
-rw-r--r--ranger/core/fm.py4
-rw-r--r--ranger/core/linemode.py18
-rw-r--r--ranger/core/loader.py7
-rw-r--r--ranger/core/shared.py7
6 files changed, 41 insertions, 128 deletions
diff --git a/ranger/core/actions.py b/ranger/core/actions.py
index c7bdcfec..58f7aa20 100644
--- a/ranger/core/actions.py
+++ b/ranger/core/actions.py
@@ -21,8 +21,7 @@ from ranger.ext.keybinding_parser import key_to_string, construct_keybinding
 from ranger.ext.shell_escape import shell_quote
 from ranger.ext.next_available_filename import next_available_filename
 from ranger.ext.rifle import squash_flags, ASK_COMMAND
-from ranger.core.shared import FileManagerAware, EnvironmentAware, \
-        SettingsAware
+from ranger.core.shared import FileManagerAware, SettingsAware
 from ranger.core.tab import Tab
 from ranger.container.file import File
 from ranger.core.loader import CommandLoader, CopyLoader
@@ -36,7 +35,7 @@ class _MacroTemplate(string.Template):
     delimiter = ranger.MACRO_DELIMITER
     idpattern = r"[_a-z0-9]*"
 
-class Actions(FileManagerAware, EnvironmentAware, SettingsAware):
+class Actions(FileManagerAware, SettingsAware):
     # --------------------------
     # -- Basic Commands
     # --------------------------
@@ -210,6 +209,7 @@ class Actions(FileManagerAware, EnvironmentAware, SettingsAware):
         macros = {}
 
         macros['rangerdir'] = ranger.RANGERDIR
+        macros['space'] = ' '
 
         if self.fm.thisfile:
             macros['f'] = self.fm.thisfile.relative_path
@@ -306,13 +306,17 @@ class Actions(FileManagerAware, EnvironmentAware, SettingsAware):
                             (line, str(e)), bad=True)
 
     def execute_file(self, files, **kw):
-        """Execute a file.
+        """Uses the "rifle" module to open/execute a file
 
-        app is the name of a method in Applications, without the "app_"
-        flags is a string consisting of runner.ALLOWED_FLAGS
-        mode is a positive integer.
-        Both flags and mode specify how the program is run."""
-        # TODO: docstring out of date
+        Arguments are the same as for ranger.ext.rifle.Rifle.execute:
+
+        files: a list of file objects (not strings!)
+        number: a number to select which way to open the file, in case there
+            are multiple choices
+        label: a string to select an opening method by its label
+        flags: a string specifying additional options, see `man rifle`
+        mimetyle: pass the mimetype to rifle, overriding its own guess
+        """
 
         mode = kw['mode'] if 'mode' in kw else 0
 
diff --git a/ranger/core/environment.py b/ranger/core/environment.py
deleted file mode 100644
index fddb8f9f..00000000
--- a/ranger/core/environment.py
+++ /dev/null
@@ -1,111 +0,0 @@
-# This file is part of ranger, the console file manager.
-# License: GNU GPL version 3, see the file "AUTHORS" for details.
-
-# THIS WHOLE FILE IS OBSOLETE AND EXISTS FOR BACKWARDS COMPATIBILITIY
-
-import os
-from ranger.ext.signals import SignalDispatcher
-from ranger.core.shared import SettingsAware, FileManagerAware
-
-# COMPAT
-class Environment(SettingsAware, FileManagerAware, SignalDispatcher):
-    def __init__(self, path):
-        SignalDispatcher.__init__(self)
-
-    def _get_copy(self): return self.fm.copy_buffer
-    def _set_copy(self, obj): self.fm.copy_buffer = obj
-    copy = property(_get_copy, _set_copy)
-
-    def _get_cut(self): return self.fm.do_cut
-    def _set_cut(self, obj): self.fm.do_cut = obj
-    cut = property(_get_cut, _set_cut)
-
-    def _get_keymaps(self): return self.fm.ui.keymaps
-    def _set_keymaps(self, obj): self.fm.ui.keymaps = obj
-    keymaps = property(_get_keymaps, _set_keymaps)
-
-    def _get_keybuffer(self): return self.fm.ui.keybuffer
-    def _set_keybuffer(self, obj): self.fm.ui.keybuffer = obj
-    keybuffer = property(_get_keybuffer, _set_keybuffer)
-
-    def _get_username(self): return self.fm.username
-    def _set_username(self, obj): self.fm.username = obj
-    username = property(_get_username, _set_username)
-
-    def _get_hostname(self): return self.fm.hostname
-    def _set_hostname(self, obj): self.fm.hostname = obj
-    hostname = property(_get_hostname, _set_hostname)
-
-    def _get_home_path(self): return self.fm.home_path
-    def _set_home_path(self, obj): self.fm.home_path = obj
-    home_path = property(_get_home_path, _set_home_path)
-
-    def _get_get_directory(self): return self.fm.get_directory
-    def _set_get_directory(self, obj): self.fm.get_directory = obj
-    get_directory = property(_get_get_directory, _set_get_directory)
-
-    def _get_garbage_collect(self): return self.fm.garbage_collect
-    def _set_garbage_collect(self, obj): self.fm.garbage_collect = obj
-    garbage_collect = property(_get_garbage_collect, _set_garbage_collect)
-
-    def _get_cwd(self): return self.fm.thisdir
-    def _set_cwd(self, obj): self.fm.thisdir = obj
-    cwd = property(_get_cwd, _set_cwd)
-
-    def _get_cf(self): return self.fm.thisfile
-    def _set_cf(self, obj): self.fm.thisfile = obj
-    cf = property(_get_cf, _set_cf)
-
-    def _get_history(self): return self.fm.thistab.history
-    def _set_history(self, obj): self.fm.thistab.history = obj
-    history = property(_get_history, _set_history)
-
-    def _get_last_search(self): return self.fm.thistab.last_search
-    def _set_last_search(self, obj): self.fm.thistab.last_search = obj
-    last_search = property(_get_last_search, _set_last_search)
-
-    def _get_path(self): return self.fm.thistab.path
-    def _set_path(self, obj): self.fm.thistab.path = obj
-    path = property(_get_path, _set_path)
-
-    def _get_pathway(self): return self.fm.thistab.pathway
-    def _set_pathway(self, obj): self.fm.thistab.pathway = obj
-    pathway = property(_get_pathway, _set_pathway)
-
-    def _get_enter_dir(self): return self.fm.thistab.enter_dir
-    def _set_enter_dir(self, obj): self.fm.thistab.enter_dir = obj
-    enter_dir = property(_get_enter_dir, _set_enter_dir)
-
-    def _get_at_level(self): return self.fm.thistab.at_level
-    def _set_at_level(self, obj): self.fm.thistab.at_level = obj
-    at_level = property(_get_at_level, _set_at_level)
-
-    def _get_get_selection(self): return self.fm.thistab.get_selection
-    def _set_get_selection(self, obj): self.fm.thistab.get_selection = obj
-    get_selection = property(_get_get_selection, _set_get_selection)
-
-    def _get_assign_cursor_positions_for_subdirs(self):
-        return self.fm.thistab.assign_cursor_positions_for_subdirs
-    def _set_assign_cursor_positions_for_subdirs(self, obj):
-        self.fm.thistab.assign_cursor_positions_for_subdirs = obj
-    assign_cursor_positions_for_subdirs = property(
-            _get_assign_cursor_positions_for_subdirs,
-            _set_assign_cursor_positions_for_subdirs)
-
-    def _get_ensure_correct_pointer(self):
-        return self.fm.thistab.ensure_correct_pointer
-    def _set_ensure_correct_pointer(self, obj):
-        self.fm.thistab.ensure_correct_pointer = obj
-    ensure_correct_pointer = property(_get_ensure_correct_pointer,
-            _set_ensure_correct_pointer)
-
-    def _get_history_go(self): return self.fm.thistab.history_go
-    def _set_history_go(self, obj): self.fm.thistab.history_go = obj
-    history_go = property(_get_history_go, _set_history_go)
-
-    def _set_cf_from_signal(self, signal):
-        self.fm._cf = signal.new
-
-    def get_free_space(self, path):
-        stat = os.statvfs(path)
-        return stat.f_bavail * stat.f_frsize
diff --git a/ranger/core/fm.py b/ranger/core/fm.py
index c95ec905..0ba0f546 100644
--- a/ranger/core/fm.py
+++ b/ranger/core/fm.py
@@ -15,7 +15,7 @@ import sys
 import ranger.api
 from ranger.core.actions import Actions
 from ranger.core.tab import Tab
-from ranger.container.tags import Tags
+from ranger.container.tags import Tags, TagsDummy
 from ranger.gui.ui import UI
 from ranger.container.bookmarks import Bookmarks
 from ranger.core.runner import Runner
@@ -100,6 +100,8 @@ class FM(Actions, SignalDispatcher):
 
         if not ranger.arg.clean and self.tags is None:
             self.tags = Tags(self.confpath('tagged'))
+        elif ranger.arg.clean:
+            self.tags = TagsDummy("")
 
         if self.bookmarks is None:
             if ranger.arg.clean:
diff --git a/ranger/core/linemode.py b/ranger/core/linemode.py
index 7993af82..56fd3522 100644
--- a/ranger/core/linemode.py
+++ b/ranger/core/linemode.py
@@ -3,6 +3,7 @@
 # License: GNU GPL version 3, see the file "AUTHORS" for details.
 # Author: Wojciech Siewierski <wojciech.siewierski@onet.pl>, 2015
 
+import sys
 from abc import *
 
 DEFAULT_LINEMODE = "filename"
@@ -84,3 +85,20 @@ class PermissionsLinemode(LinemodeBase):
 
     def infostring(self, file, metadata):
         return ""
+
+
+class FileInfoLinemode(LinemodeBase):
+    name = "fileinfo"
+
+    def filetitle(self, file, metadata):
+        return file.relative_path
+
+    def infostring(self, file, metadata):
+        if not file.is_directory:
+            from subprocess import check_output
+            fileinfo = check_output(["file", "-bL", file.path]).strip()
+            if sys.version_info[0] >= 3:
+                fileinfo = fileinfo.decode("utf-8")
+            return fileinfo
+        else:
+            raise NotImplementedError
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):
diff --git a/ranger/core/shared.py b/ranger/core/shared.py
index ab76b511..177ba15d 100644
--- a/ranger/core/shared.py
+++ b/ranger/core/shared.py
@@ -16,10 +16,3 @@ class SettingsAware(object):
     @staticmethod
     def _setup(settings):
         SettingsAware.settings = settings
-
-class EnvironmentAware(object):  # COMPAT
-    """DO NOT USE.  This is for backward compatibility only."""
-    @lazy_property
-    def env(self):
-        from ranger.core.environment import Environment
-        return Environment(".")