diff options
author | hut <hut@lavabit.com> | 2010-04-27 03:17:49 +0200 |
---|---|---|
committer | hut <hut@lavabit.com> | 2010-04-27 03:17:49 +0200 |
commit | a5e1ccdd9e6cc4cf555d140b4ff2216a2dd9ea55 (patch) | |
tree | 08810ff20f99a4205bd187ecf45c0c2449ffb200 | |
parent | a3540c6c7e7e9af4ea9ec666f495fe853dcd822b (diff) | |
download | ranger-a5e1ccdd9e6cc4cf555d140b4ff2216a2dd9ea55.tar.gz |
api.apps: simplified generic app handler
-rw-r--r-- | ranger/api/apps.py | 27 | ||||
-rw-r--r-- | ranger/defaults/apps.py | 38 |
2 files changed, 27 insertions, 38 deletions
diff --git a/ranger/api/apps.py b/ranger/api/apps.py index ad598879..d44f92e1 100644 --- a/ranger/api/apps.py +++ b/ranger/api/apps.py @@ -116,6 +116,13 @@ class Applications(FileManagerAware): result |= set(m[4:] for m in cls.__dict__ if m.startswith('app_')) return sorted(result) + @classmethod + def generic(cls, *args, **keywords): + flags = 'flags' in keywords and keywords['flags'] or "" + for name in args: + assert isinstance(name, str) + setattr(cls, "app_" + name, _generic_app(name, flags=flags)) + def tup(*args): """ @@ -136,26 +143,10 @@ def depends_on(*args): return decorator -def _generic_app_handler(name, detached=None): +def _generic_app(name, flags=''): assert isinstance(name, str) @depends_on(name) def handler(self, context): - if detached: - context.flags += "d" - elif not detached and detached is not None: - context.flags += "D" + context.flags += flags return tup(name, *context) return handler - - -def generic(simple=(), detached=()): - simple = tuple(simple) - detached = tuple(detached) - def class_decorator(cls): - for name in simple: - setattr(cls, "app_" + name, _generic_app_handler(name)) - for name in detached: - setattr(cls, "app_" + name, - _generic_app_handler(name, detached=True)) - return cls - return class_decorator diff --git a/ranger/defaults/apps.py b/ranger/defaults/apps.py index c9dfd51e..f53e8734 100644 --- a/ranger/defaults/apps.py +++ b/ranger/defaults/apps.py @@ -49,26 +49,6 @@ This example modifies the behaviour of "feh" and adds a custom media player: from ranger.api.apps import * from ranger.ext.get_executables import get_executables -# Often a program is just started like this: `programname filename [...]` -# For example: `vim test.py readme.txt`. This can be implemented like: -# @depends_on("programname") -# def app_programname(self, c): -# return tup("programname", *c) -# Instead of creating such a generic function for each program, just add -# its name into this array: -generic_apps = ''' -vim fceux elinks wine zsnes javac -'''.split() - -# Sometimes you don't want the program to block ranger's terminal. You could -# add this line before the return statement: -# c.flags += "d" # "d" for "detached" -# Write the name of those programs into this array: -detached_apps = ''' -opera firefox apvlv evince zathura gimp mirage eog -'''.split() - -@generic(simple=generic_apps, detached=detached_apps) class CustomApplications(Applications): def app_default(self, c): """How to determine the default application?""" @@ -209,6 +189,24 @@ class CustomApplications(Applications): if c.mode is 1: return tup("totem", "--fullscreen", *c) + +# Often a programs invocation is trivial. For example: +# vim test.py readme.txt [...] +# This could be implemented like: +# @depends_on("vim") +# def app_vim(self, c): +# return tup("vim", *c.files) +# Instead of creating such a generic function for each program, just add +# its name here and it will be automatically done for you. +CustomApplications.generic('vim', 'fceux', 'elinks', 'wine', + 'zsnes', 'javac') + +# By setting flags='d', this programs will not block ranger's terminal: +CustomApplications.generic('opera', 'firefox', 'apvlv', 'evince', + 'zathura', 'gimp', 'mirage', 'eog', flags='d') + +# What filetypes are recognized as scripts for interpreted languages? +# This regular expression is used in app_default() INTERPRETED_LANGUAGES = re.compile(r''' ^(text|application)/x-( haskell|perl|python|ruby|sh |