From a3540c6c7e7e9af4ea9ec666f495fe853dcd822b Mon Sep 17 00:00:00 2001 From: hut Date: Tue, 27 Apr 2010 00:02:11 +0200 Subject: api.apps: added generic app handlers --- ranger/api/apps.py | 25 +++++++++++++++ ranger/defaults/apps.py | 82 ++++++++++++------------------------------------- 2 files changed, 45 insertions(+), 62 deletions(-) diff --git a/ranger/api/apps.py b/ranger/api/apps.py index 90162e0b..ad598879 100644 --- a/ranger/api/apps.py +++ b/ranger/api/apps.py @@ -134,3 +134,28 @@ def depends_on(*args): fnc.dependencies = args return fnc return decorator + + +def _generic_app_handler(name, detached=None): + 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" + 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 6c09298a..c9dfd51e 100644 --- a/ranger/defaults/apps.py +++ b/ranger/defaults/apps.py @@ -49,6 +49,26 @@ 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?""" @@ -95,10 +115,6 @@ class CustomApplications(Applications): def app_pager(self, c): return tup('less', *c) - @depends_on('vim') - def app_vim(self, c): - return tup('vim', *c) - def app_editor(self, c): try: default_editor = os.environ['EDITOR'] @@ -135,16 +151,6 @@ class CustomApplications(Applications): else: return tup('mplayer', *c) - @depends_on("eog") - def app_eye_of_gnome(self, c): - c.flags += 'd' - return tup('eog', *c) - - @depends_on('mirage') - def app_mirage(self, c): - c.flags += 'd' - return tup('mirage', *c) - @depends_on('feh') def app_feh(self, c): arg = {1: '--bg-scale', 2: '--bg-tile', 3: '--bg-center'} @@ -171,10 +177,6 @@ class CustomApplications(Applications): except: return tup('feh', *c) - @depends_on("gimp") - def app_gimp(self, c): - return tup('gimp', *c) - @depends_on('aunpack') def app_aunpack(self, c): if c.mode is 0: @@ -182,15 +184,6 @@ class CustomApplications(Applications): return tup('aunpack', '-l', c.file.path) return tup('aunpack', c.file.path) - @depends_on('fceux') - def app_fceux(self, c): - return tup('fceux', *c) - - @depends_on('apvlv') - def app_apvlv(self, c): - c.flags += 'd' - return tup('apvlv', *c) - @depends_on('make') def app_make(self, c): if c.mode is 0: @@ -200,25 +193,6 @@ class CustomApplications(Applications): if c.mode is 2: return tup("make", "clear") - @depends_on('elinks') - def app_elinks(self, c): - c.flags += 'D' - return tup('elinks', *c) - - @depends_on('opera') - def app_opera(self, c): - c.flags += 'd' - return tup('opera', *c) - - @depends_on('firefox') - def app_firefox(self, c): - c.flags += 'd' - return tup("firefox", *c) - - @depends_on('javac') - def app_javac(self, c): - return tup("javac", *c) - @depends_on('java') def app_java(self, c): def strip_extensions(file): @@ -228,22 +202,6 @@ class CustomApplications(Applications): files_without_extensions = map(strip_extensions, c.files) return tup("java", files_without_extensions) - @depends_on('zsnes') - def app_zsnes(self, c): - return tup("zsnes", c.file.path) - - @depends_on('evince') - def app_evince(self, c): - return tup("evince", *c) - - @depends_on('zathura') - def app_zathura(self, c): - return tup("zathura", *c) - - @depends_on('wine') - def app_wine(self, c): - return tup("wine", c.file.path) - @depends_on('totem') def app_totem(self, c): if c.mode is 0: -- cgit 1.4.1-2-gfad0