From 0d1b5bac1f0a5ee78f2de80e8dfecb19fccbe596 Mon Sep 17 00:00:00 2001 From: hut Date: Thu, 2 Aug 2012 05:41:40 +0200 Subject: core.helper: moved functions to ranger and ranger.core.main --- ranger/__init__.py | 23 ++++++ ranger/core/helper.py | 174 ---------------------------------------------- ranger/core/main.py | 150 ++++++++++++++++++++++++++++++++++++++- ranger/gui/colorscheme.py | 2 +- 4 files changed, 172 insertions(+), 177 deletions(-) delete mode 100644 ranger/core/helper.py diff --git a/ranger/__init__.py b/ranger/__init__.py index a740c18a..85ec0b5e 100644 --- a/ranger/__init__.py +++ b/ranger/__init__.py @@ -31,4 +31,27 @@ VERSION = 'ranger-git based on %s' % __version__ # and the configuration directory will be $XDG_CONFIG_HOME/ranger instead. CONFDIR = '~/.config/ranger' +# Debugging functions. These will be activated when run with --debug. +# Example usage in the code: +# import ranger; ranger.log("hello world") +def log(*objects, **keywords): + """ + Writes objects to a logfile (for the purpose of debugging only.) + Has the same arguments as print() in python3. + """ + from ranger import arg + if LOGFILE is None or not arg.debug or arg.clean: return + start = 'start' in keywords and keywords['start'] or 'ranger:' + sep = 'sep' in keywords and keywords['sep'] or ' ' + _file = 'file' in keywords and keywords['file'] or open(LOGFILE, 'a') + end = 'end' in keywords and keywords['end'] or '\n' + _file.write(sep.join(map(str, (start, ) + objects)) + end) + + +def log_traceback(): + from ranger import arg + if LOGFILE is None or not arg.debug or arg.clean: return + import traceback + traceback.print_stack(file=open(LOGFILE, 'a')) + from ranger.core.main import main diff --git a/ranger/core/helper.py b/ranger/core/helper.py deleted file mode 100644 index e46e686d..00000000 --- a/ranger/core/helper.py +++ /dev/null @@ -1,174 +0,0 @@ -# Copyright (C) 2009, 2010, 2011 Roman Zimbelmann -# This software is distributed under the terms of the GNU GPL version 3. - -"""Helper functions""" - -from errno import EEXIST -import os.path -import sys -from ranger import CONFDIR, USAGE, VERSION - -def parse_arguments(): - """Parse the program arguments""" - from optparse import OptionParser - from ranger.ext.openstruct import OpenStruct - from os.path import expanduser - - if 'XDG_CONFIG_HOME' in os.environ and os.environ['XDG_CONFIG_HOME']: - default_confdir = os.environ['XDG_CONFIG_HOME'] + '/ranger' - else: - default_confdir = CONFDIR - - parser = OptionParser(usage=USAGE, version=VERSION) - - parser.add_option('-d', '--debug', action='store_true', - help="activate debug mode") - parser.add_option('-c', '--clean', action='store_true', - help="don't touch/require any config files. ") - parser.add_option('--copy-config', type='string', metavar='which', - help="copy the default configs to the local config directory. " - "Possible values: all, rc, rifle, commands, options, scope") - parser.add_option('--fail-unless-cd', action='store_true', - help="experimental: return the exit code 1 if ranger is" \ - "used to run a file (with `ranger filename`)") - parser.add_option('-r', '--confdir', type='string', - metavar='dir', default=default_confdir, - help="the configuration directory. (%default)") - parser.add_option('-m', '--mode', type='int', default=0, metavar='n', - help="if a filename is supplied, run it with this mode") - parser.add_option('-f', '--flags', type='string', default='', - metavar='string', - help="if a filename is supplied, run it with these flags.") - parser.add_option('--choosefile', type='string', metavar='TARGET', - help="Makes ranger act like a file chooser. When opening " - "a file, it will quit and write the name of the selected " - "file to TARGET.") - parser.add_option('--choosefiles', type='string', metavar='TARGET', - help="Makes ranger act like a file chooser for multiple files " - "at once. When opening a file, it will quit and write the name " - "of all selected files to TARGET.") - parser.add_option('--choosedir', type='string', metavar='TARGET', - help="Makes ranger act like a directory chooser. When ranger quits" - ", it will write the name of the last visited directory to TARGET") - parser.add_option('--list-unused-keys', action='store_true', - help="List common keys which are not bound to any action.") - parser.add_option('--selectfile', type='string', metavar='filepath', - help="Open ranger with supplied file selected.") - parser.add_option('--list-tagged-files', type='string', default=None, - metavar='tag', - help="List all files which are tagged with the given tag, default: *") - parser.add_option('--profile', action='store_true', - help="Print statistics of CPU usage on exit.") - parser.add_option('--cmd', action='append', type='string', metavar='COMMAND', - help="Execute COMMAND after the configuration has been read. " - "Use this option multiple times to run multiple commands.") - - options, positional = parser.parse_args() - arg = OpenStruct(options.__dict__, targets=positional) - arg.confdir = expanduser(arg.confdir) - - return arg - - -def load_settings(fm, clean): - from ranger.core.actions import Actions - import ranger.core.shared - import ranger.api.commands - from ranger.config import commands - - # Load default commands - fm.commands = ranger.api.commands.CommandContainer() - exclude = ['settings'] - include = [name for name in dir(Actions) if name not in exclude] - fm.commands.load_commands_from_object(fm, include) - fm.commands.load_commands_from_module(commands) - - if not clean: - allow_access_to_confdir(ranger.arg.confdir, True) - - # Load custom commands - try: - import commands - fm.commands.load_commands_from_module(commands) - except ImportError: - pass - - # Load rc.conf - custom_conf = fm.confpath('rc.conf') - default_conf = fm.relpath('config', 'rc.conf') - load_default_rc = fm.settings.load_default_rc - - if load_default_rc: - fm.source(default_conf) - if os.access(custom_conf, os.R_OK): - fm.source(custom_conf) - - # XXX Load plugins (experimental) - try: - plugindir = fm.confpath('plugins') - plugins = [p[:-3] for p in os.listdir(plugindir) \ - if p.endswith('.py') and not p.startswith('_')] - except: - pass - else: - if not os.path.exists(fm.confpath('plugins', '__init__.py')): - f = open(fm.confpath('plugins', '__init__.py'), 'w') - f.close() - - ranger.fm = fm - for plugin in sorted(plugins): - try: - module = __import__('plugins', fromlist=[plugin]) - fm.log.append("Loaded plugin '%s'." % module) - except Exception as e: - fm.log.append("Error in plugin '%s'" % plugin) - import traceback - for line in traceback.format_exception_only(type(e), e): - fm.log.append(line) - ranger.fm = None - - allow_access_to_confdir(ranger.arg.confdir, False) - else: - fm.source(fm.relpath('config', 'rc.conf')) - - -def allow_access_to_confdir(confdir, allow): - if allow: - try: - os.makedirs(confdir) - except OSError as err: - if err.errno != EEXIST: # EEXIST means it already exists - print("This configuration directory could not be created:") - print(confdir) - print("To run ranger without the need for configuration") - print("files, use the --clean option.") - raise SystemExit() - if not confdir in sys.path: - sys.path[0:0] = [confdir] - else: - if sys.path[0] == confdir: - del sys.path[0] - - -# Debugging functions. These will be activated when run with --debug. -# Example usage in the code: -# import ranger; ranger.log("hello world") -def log(*objects, **keywords): - """ - Writes objects to a logfile (for the purpose of debugging only.) - Has the same arguments as print() in python3. - """ - from ranger import arg - if LOGFILE is None or not arg.debug or arg.clean: return - start = 'start' in keywords and keywords['start'] or 'ranger:' - sep = 'sep' in keywords and keywords['sep'] or ' ' - _file = 'file' in keywords and keywords['file'] or open(LOGFILE, 'a') - end = 'end' in keywords and keywords['end'] or '\n' - _file.write(sep.join(map(str, (start, ) + objects)) + end) - - -def log_traceback(): - from ranger import arg - if LOGFILE is None or not arg.debug or arg.clean: return - import traceback - traceback.print_stack(file=open(LOGFILE, 'a')) diff --git a/ranger/core/main.py b/ranger/core/main.py index 961bbb8c..55d52f59 100644 --- a/ranger/core/main.py +++ b/ranger/core/main.py @@ -5,16 +5,16 @@ The main function responsible to initialize the FM object and stuff. """ +import os.path + def main(): """initialize objects and run the filemanager""" import locale - import os.path import ranger import sys from ranger.core.shared import (EnvironmentAware, FileManagerAware, SettingsAware) from ranger.core.fm import FM - from ranger.core.helper import parse_arguments, load_settings if not sys.stdin.isatty(): sys.stderr.write("Error: Must run ranger from terminal\n") @@ -164,3 +164,149 @@ def main(): print("http://savannah.nongnu.org/bugs/?group=ranger&func=additem") return 1 return 0 + + +def parse_arguments(): + """Parse the program arguments""" + from optparse import OptionParser + from os.path import expanduser + from ranger import CONFDIR, USAGE, VERSION + from ranger.ext.openstruct import OpenStruct + + if 'XDG_CONFIG_HOME' in os.environ and os.environ['XDG_CONFIG_HOME']: + default_confdir = os.environ['XDG_CONFIG_HOME'] + '/ranger' + else: + default_confdir = CONFDIR + + parser = OptionParser(usage=USAGE, version=VERSION) + + parser.add_option('-d', '--debug', action='store_true', + help="activate debug mode") + parser.add_option('-c', '--clean', action='store_true', + help="don't touch/require any config files. ") + parser.add_option('--copy-config', type='string', metavar='which', + help="copy the default configs to the local config directory. " + "Possible values: all, rc, rifle, commands, options, scope") + parser.add_option('--fail-unless-cd', action='store_true', + help="experimental: return the exit code 1 if ranger is" \ + "used to run a file (with `ranger filename`)") + parser.add_option('-r', '--confdir', type='string', + metavar='dir', default=default_confdir, + help="the configuration directory. (%default)") + parser.add_option('-m', '--mode', type='int', default=0, metavar='n', + help="if a filename is supplied, run it with this mode") + parser.add_option('-f', '--flags', type='string', default='', + metavar='string', + help="if a filename is supplied, run it with these flags.") + parser.add_option('--choosefile', type='string', metavar='TARGET', + help="Makes ranger act like a file chooser. When opening " + "a file, it will quit and write the name of the selected " + "file to TARGET.") + parser.add_option('--choosefiles', type='string', metavar='TARGET', + help="Makes ranger act like a file chooser for multiple files " + "at once. When opening a file, it will quit and write the name " + "of all selected files to TARGET.") + parser.add_option('--choosedir', type='string', metavar='TARGET', + help="Makes ranger act like a directory chooser. When ranger quits" + ", it will write the name of the last visited directory to TARGET") + parser.add_option('--list-unused-keys', action='store_true', + help="List common keys which are not bound to any action.") + parser.add_option('--selectfile', type='string', metavar='filepath', + help="Open ranger with supplied file selected.") + parser.add_option('--list-tagged-files', type='string', default=None, + metavar='tag', + help="List all files which are tagged with the given tag, default: *") + parser.add_option('--profile', action='store_true', + help="Print statistics of CPU usage on exit.") + parser.add_option('--cmd', action='append', type='string', metavar='COMMAND', + help="Execute COMMAND after the configuration has been read. " + "Use this option multiple times to run multiple commands.") + + options, positional = parser.parse_args() + arg = OpenStruct(options.__dict__, targets=positional) + arg.confdir = expanduser(arg.confdir) + + return arg + + +def load_settings(fm, clean): + from ranger.core.actions import Actions + import ranger.core.shared + import ranger.api.commands + from ranger.config import commands + + # Load default commands + fm.commands = ranger.api.commands.CommandContainer() + exclude = ['settings'] + include = [name for name in dir(Actions) if name not in exclude] + fm.commands.load_commands_from_object(fm, include) + fm.commands.load_commands_from_module(commands) + + if not clean: + allow_access_to_confdir(ranger.arg.confdir, True) + + # Load custom commands + try: + import commands + fm.commands.load_commands_from_module(commands) + except ImportError: + pass + + # Load rc.conf + custom_conf = fm.confpath('rc.conf') + default_conf = fm.relpath('config', 'rc.conf') + load_default_rc = fm.settings.load_default_rc + + if load_default_rc: + fm.source(default_conf) + if os.access(custom_conf, os.R_OK): + fm.source(custom_conf) + + # XXX Load plugins (experimental) + try: + plugindir = fm.confpath('plugins') + plugins = [p[:-3] for p in os.listdir(plugindir) \ + if p.endswith('.py') and not p.startswith('_')] + except: + pass + else: + if not os.path.exists(fm.confpath('plugins', '__init__.py')): + f = open(fm.confpath('plugins', '__init__.py'), 'w') + f.close() + + ranger.fm = fm + for plugin in sorted(plugins): + try: + module = __import__('plugins', fromlist=[plugin]) + fm.log.append("Loaded plugin '%s'." % module) + except Exception as e: + fm.log.append("Error in plugin '%s'" % plugin) + import traceback + for line in traceback.format_exception_only(type(e), e): + fm.log.append(line) + ranger.fm = None + + allow_access_to_confdir(ranger.arg.confdir, False) + else: + fm.source(fm.relpath('config', 'rc.conf')) + + +def allow_access_to_confdir(confdir, allow): + import sys + from errno import EEXIST + + if allow: + try: + os.makedirs(confdir) + except OSError as err: + if err.errno != EEXIST: # EEXIST means it already exists + print("This configuration directory could not be created:") + print(confdir) + print("To run ranger without the need for configuration") + print("files, use the --clean option.") + raise SystemExit() + if not confdir in sys.path: + sys.path[0:0] = [confdir] + else: + if sys.path[0] == confdir: + del sys.path[0] diff --git a/ranger/gui/colorscheme.py b/ranger/gui/colorscheme.py index c77c1500..b36048e2 100644 --- a/ranger/gui/colorscheme.py +++ b/ranger/gui/colorscheme.py @@ -32,7 +32,7 @@ from curses import color_pair import ranger from ranger.gui.color import get_color from ranger.gui.context import Context -from ranger.core.helper import allow_access_to_confdir +from ranger.core.main import allow_access_to_confdir from ranger.core.shared import SettingsAware from ranger.ext.cached_function import cached_function from ranger.ext.iter_tools import flatten -- cgit 1.4.1-2-gfad0