From 972da7babcecbe47bd56a3d2d19157b4aba61e99 Mon Sep 17 00:00:00 2001 From: hut Date: Tue, 4 Dec 2012 21:20:09 +0100 Subject: removed options.py, improved plugins. *UPDATE YOUR COMMANDS.PY* Previously, you could change settings in both rc.conf and options.py. With this commit, options.py is deprecated and you are encouraged to use rc.conf to change settings. I chose to do this because it is more elegant to use a simple list of ranger commands for configuration rather than a python file with lots of magic around it and potential syntax errors for inexperienced users. The existing "set" command doesn't evaluate python objects anymore, instead it always takes strings and converts to the proper type automatically. This means that the old set command will not work anymore and you have to update your commands.py if it still uses the old definition of the "set" command. This is how to convert your options.py: old way, in options.py | new way, in rc.conf ---------------------------+------------------------ show_hidden = False | set show_hidden false sort = 'basename' | set sort basename column_ratios = (1, 5, 3) | set column_ratios 1,5,3 For backward compatibility, you still can use options.py, but you get a warning when you start ranger. You can pipe stderr to /dev/null to silence the warning, or just move your stuff from options.py to rc.conf and plugins and delete the options.py. Finally, to extend ranger, which you previously could do through monkey-patching in options.py, you should now use the plugin system. This was an experimental, undocumented feature of ranger for some time, but this and the following commits will imrpove and document it. You can simply move all the monkey-patching code from options.py to a *.py file in ~/.config/ranger/plugins/. --- examples/README | 2 +- examples/plugin_chmod_keybindings.py | 18 ++++++++++++++++++ examples/plugin_file_filter.py | 17 +++++++++++++++++ examples/plugin_new_macro.py | 17 +++++++++++++++++ examples/plugin_new_sorting_method.py | 7 +++++++ examples/plugin_skip_default_rc.py | 9 +++++++++ 6 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 examples/plugin_chmod_keybindings.py create mode 100644 examples/plugin_file_filter.py create mode 100644 examples/plugin_new_macro.py create mode 100644 examples/plugin_new_sorting_method.py create mode 100644 examples/plugin_skip_default_rc.py (limited to 'examples') diff --git a/examples/README b/examples/README index 60f29ac6..8606a89d 100644 --- a/examples/README +++ b/examples/README @@ -1,2 +1,2 @@ -Thes files in this directory contain applications or extensions of ranger which +The files in this directory contain applications or extensions of ranger which are put here for your inspiration and as references. diff --git a/examples/plugin_chmod_keybindings.py b/examples/plugin_chmod_keybindings.py new file mode 100644 index 00000000..c04cc492 --- /dev/null +++ b/examples/plugin_chmod_keybindings.py @@ -0,0 +1,18 @@ +# This plugin serves as an example for adding key bindings through a plugin. +# It could replace the ten lines in the rc.conf that create the key bindings +# for the "chmod" command. + +import ranger.core.fm +old_init_hook = ranger.core.fm.init_hook + +def init_hook(fm): + old_init_hook(fm) + + # Generate key bindings for the chmod command + command = "map {0}{1}{2} shell -d chmod {1}{0}{2} %s" + for mode in list('ugoa') + '': + for perm in "rwxXst": + fm.execute_console(command.format('-', mode, perm)) + fm.execute_console(command.format('+', mode, perm)) + +ranger.core.fm.init_hook = init_hook diff --git a/examples/plugin_file_filter.py b/examples/plugin_file_filter.py new file mode 100644 index 00000000..99d026bb --- /dev/null +++ b/examples/plugin_file_filter.py @@ -0,0 +1,17 @@ +# This plugin hides the directories "boot", "sbin", "proc" and "sys" in the +# root directory. + +# Save the original filter function +import ranger.fsobject.directory +old_accept_file = ranger.fsobject.directory.accept_file + +# Define a new one +def custom_accept_file(fname, mypath, hidden_filter, name_filter): + if hidden_filter and mypath == '/' and fname in ('boot', 'sbin', 'proc', 'sys'): + return False + else: + return old_accept_file(fname, mypath, hidden_filter, name_filter) + +# Overwrite the old function +import ranger.fsobject.directory +ranger.fsobject.directory.accept_file = custom_accept_file diff --git a/examples/plugin_new_macro.py b/examples/plugin_new_macro.py new file mode 100644 index 00000000..ec0c487c --- /dev/null +++ b/examples/plugin_new_macro.py @@ -0,0 +1,17 @@ +# This plugin adds the new macro %date which is substituted with the current +# date in commands that allow macros. You can test it with the command +# ":shell echo %date; read" + +# Save the original macro function +import ranger.core.actions +old_get_macros = ranger.core.actions.Actions._get_macros + +# Define a new macro function +import time +def get_macros_with_date(self): + macros = old_get_macros(self) + macros['date'] = time.strftime('%m/%d/%Y') + return macros + +# Overwrite the old one +ranger.core.actions.Actions._get_macros = get_macros_with_date diff --git a/examples/plugin_new_sorting_method.py b/examples/plugin_new_sorting_method.py new file mode 100644 index 00000000..2500c1c1 --- /dev/null +++ b/examples/plugin_new_sorting_method.py @@ -0,0 +1,7 @@ +# This plugin adds the sorting algorithm called 'random'. To enable it, type +# ":set sort=random" or create a key binding with ":map oz set sort=random" + +from ranger.fsobject.directory import Directory +from random import random +Directory.sort_dict['random'] = lambda path: random() + diff --git a/examples/plugin_skip_default_rc.py b/examples/plugin_skip_default_rc.py new file mode 100644 index 00000000..6a657a99 --- /dev/null +++ b/examples/plugin_skip_default_rc.py @@ -0,0 +1,9 @@ +# This plugin inhibits the loading of the default rc.conf. This serves to +# speed up starting time by avoiding to load rc.conf twice if you have a full +# copy of it in ~/.config/ranger. +# +# Don't use this if you have a supplementary rc.conf or no rc.conf at all, or +# you will end up without key bindings and options. + +import ranger.core.main +ranger.core.main.load_default_config = False -- cgit 1.4.1-2-gfad0