diff options
-rw-r--r-- | README | 19 | ||||
-rw-r--r-- | TODO | 2 | ||||
-rw-r--r-- | ranger/__main__.py | 6 | ||||
-rw-r--r-- | ranger/core/environment.py | 3 | ||||
-rw-r--r-- | ranger/core/fm.py | 3 | ||||
-rw-r--r-- | ranger/defaults/keys.py | 4 | ||||
-rw-r--r-- | ranger/gui/widgets/console.py | 12 | ||||
-rw-r--r-- | ranger/gui/widgets/statusbar.py | 8 | ||||
-rw-r--r-- | ranger/shared/__init__.py | 7 |
9 files changed, 40 insertions, 24 deletions
diff --git a/README b/README index 429aefa1..7d042929 100644 --- a/README +++ b/README @@ -124,6 +124,25 @@ Also, see the file HACKING for more detailed instructions on modifying the program. +Roadmap +------- + +Short term: + +* A cleaner and more flexible key configuration file +* Performance improvements everywhere +* Simplification of the code + +Long term: + +* One stable branch that you can rely on not crashing +* A plugin system +* Separate ranger into multiple programs: + 1. One daemon running in the background for slow IO operations + 2. A file launcher (ideally an already existing one) + 3. The actual program containing unseparable parts + + Tips ---- diff --git a/TODO b/TODO index 6be34f8c..715ebc1b 100644 --- a/TODO +++ b/TODO @@ -71,7 +71,7 @@ Bugs (X) #54 10/01/23 max_dirsize_for_autopreview not working ( ) #60 10/02/05 utf support improvable (X) #62 10/02/15 curs_set can raise an exception - (X) #65 10/02/16 "source ranger ranger some/file.txt" shouldn't cd after exit + ( ) #65 10/02/16 "source ranger ranger some/file.txt" shouldn't cd after exit (X) #67 10/03/08 terminal title in tty (X) #69 10/03/11 tab-completion breaks with Apps subclass (X) #73 10/03/21 when clicking on the first column, it goes 1x down diff --git a/ranger/__main__.py b/ranger/__main__.py index 674ad8f6..827452ff 100644 --- a/ranger/__main__.py +++ b/ranger/__main__.py @@ -75,7 +75,8 @@ def main(): from ranger.ext import curses_interrupt_handler from ranger.core.fm import FM from ranger.core.environment import Environment - from ranger.shared.settings import SettingsAware + from ranger.shared import (EnvironmentAware, FileManagerAware, + SettingsAware) from ranger.gui.defaultui import DefaultUI as UI from ranger.fsobject.file import File @@ -111,11 +112,12 @@ def main(): else: path = '.' - Environment(path) + EnvironmentAware._assign(Environment(path)) try: my_ui = UI() my_fm = FM(ui=my_ui) + FileManagerAware._assign(my_fm) # Run the file manager my_fm.initialize() diff --git a/ranger/core/environment.py b/ranger/core/environment.py index 00b152d3..e5deda07 100644 --- a/ranger/core/environment.py +++ b/ranger/core/environment.py @@ -58,9 +58,6 @@ class Environment(SettingsAware, SignalDispatcher): self.hostname = socket.gethostname() self.home_path = os.path.expanduser('~') - from ranger.shared import EnvironmentAware - EnvironmentAware.env = self - self.signal_bind('move', self._set_cf_from_signal, priority=0.1, weak=True) diff --git a/ranger/core/fm.py b/ranger/core/fm.py index 626ce838..224ef06f 100644 --- a/ranger/core/fm.py +++ b/ranger/core/fm.py @@ -58,9 +58,6 @@ class FM(Actions, SignalDispatcher): self.run = Runner(ui=self.ui, apps=self.apps, logfunc=mylogfunc) - from ranger.shared import FileManagerAware - FileManagerAware.fm = self - self.log.append('Ranger {0} started! Process ID is {1}.' \ .format(__version__, os.getpid())) self.log.append('Running on Python ' + sys.version.replace('\n','')) diff --git a/ranger/defaults/keys.py b/ranger/defaults/keys.py index 44acd79f..136fe11d 100644 --- a/ranger/defaults/keys.py +++ b/ranger/defaults/keys.py @@ -116,7 +116,7 @@ def initialize_commands(map): ', or //l// to create symlinks') # ---------------------------------------------------- run programs - map('s', fm.execute_command(os.environ['SHELL'])) + map('S', fm.execute_command(os.environ['SHELL'])) map('E', fm.edit_file()) map(',term', fm.execute_command('x-terminal-emulator', flags='d')) map('du', fm.execute_command('du --max-depth=1 -h | less')) @@ -230,7 +230,7 @@ def initialize_commands(map): map(':', ';', fm.open_console(cmode.COMMAND)) map('>', fm.open_console(cmode.COMMAND_QUICK)) - map('!', fm.open_console(cmode.OPEN)) + map('!', 's', fm.open_console(cmode.OPEN)) map('r', fm.open_console(cmode.OPEN_QUICK)) map.rebuild_paths() diff --git a/ranger/gui/widgets/console.py b/ranger/gui/widgets/console.py index 3f00c3c5..677be2a3 100644 --- a/ranger/gui/widgets/console.py +++ b/ranger/gui/widgets/console.py @@ -20,15 +20,19 @@ commands, searching and executing files. import string import curses +import re from collections import deque from . import Widget from ranger.defaults import commands from ranger.gui.widgets.console_mode import is_valid_mode, mode_to_class from ranger import log, relpath_conf +from ranger.core.runner import ALLOWED_FLAGS from ranger.ext.shell_escape import shell_quote from ranger.ext.get_executables import get_executables from ranger.ext.direction import Direction +from ranger.container import CommandList, History +from ranger.container.history import HistoryEmptyException import ranger DEFAULT_HISTORY = 0 @@ -58,7 +62,6 @@ class Console(Widget): historypaths = [] def __init__(self, win): - from ranger.container import CommandList, History Widget.__init__(self, win) self.commandlist = CommandList() self.settings.keys.initialize_console_commands(self.commandlist) @@ -156,7 +159,6 @@ class Console(Widget): self.line = '' def press(self, key): - from curses.ascii import ctrl, ESC keytuple = self.env.keybuffer.tuple_with_numbers() try: @@ -198,7 +200,6 @@ class Console(Widget): self.on_line_change() def history_move(self, n): - from ranger.container.history import HistoryEmptyException try: current = self.history.current() except HistoryEmptyException: @@ -388,7 +389,6 @@ class SearchConsole(Console): self.history = self.histories[SEARCH_HISTORY] def execute(self): - import re if self.fm.env.cwd: regexp = re.compile(self.line, re.L | re.U | re.I) self.fm.env.last_search = regexp @@ -422,6 +422,8 @@ class OpenConsole(ConsoleWithTab): def init(self): self.history = self.histories[OPEN_HISTORY] + OpenConsole.prompt = "{0}@{1} $ ".format(self.env.username, + self.env.hostname) def execute(self): command, flags = self._parse() @@ -613,13 +615,11 @@ class QuickOpenConsole(ConsoleWithTab): return None - def _is_app(self, arg): return self.fm.apps.has(arg) or \ (not self._is_flags(arg) and arg in get_executables()) def _is_flags(self, arg): - from ranger.core.runner import ALLOWED_FLAGS return all(x in ALLOWED_FLAGS for x in arg) def _is_mode(self, arg): diff --git a/ranger/gui/widgets/statusbar.py b/ranger/gui/widgets/statusbar.py index 78666a3d..caf5786e 100644 --- a/ranger/gui/widgets/statusbar.py +++ b/ranger/gui/widgets/statusbar.py @@ -145,10 +145,7 @@ class StatusBar(Widget): target = self.column.target.pointed_obj else: target = self.env.at_level(0).pointed_obj - - if target is None \ - or not target.accessible \ - or (target.is_directory and target.files is None): + if target is None or not target.accessible: return perms = target.get_permission_string() @@ -204,9 +201,6 @@ class StatusBar(Widget): return target = self.column.target - if target is None: - return - if target is None \ or not target.accessible \ or (target.is_directory and target.files is None): diff --git a/ranger/shared/__init__.py b/ranger/shared/__init__.py index a476bd5f..048b9e7a 100644 --- a/ranger/shared/__init__.py +++ b/ranger/shared/__init__.py @@ -20,9 +20,16 @@ class Awareness(object): class EnvironmentAware(Awareness): env = None + @staticmethod + def _assign(instance): + EnvironmentAware.env = instance + class FileManagerAware(Awareness): fm = None + @staticmethod + def _assign(instance): + FileManagerAware.fm = instance from .mimetype import MimeTypeAware from .settings import SettingsAware |