summary refs log tree commit diff stats
path: root/examples
diff options
context:
space:
mode:
authorhut <hut@lavabit.com>2012-12-04 21:20:09 +0100
committerhut <hut@lavabit.com>2012-12-04 21:20:09 +0100
commit972da7babcecbe47bd56a3d2d19157b4aba61e99 (patch)
tree4d3b5a9ecb992a80dd54e511bf00dd3bc3670a3d /examples
parent6f7e47d6a91627fab3e08f42df5114db3c22841a (diff)
downloadranger-972da7babcecbe47bd56a3d2d19157b4aba61e99.tar.gz
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/.
Diffstat (limited to 'examples')
-rw-r--r--examples/README2
-rw-r--r--examples/plugin_chmod_keybindings.py18
-rw-r--r--examples/plugin_file_filter.py17
-rw-r--r--examples/plugin_new_macro.py17
-rw-r--r--examples/plugin_new_sorting_method.py7
-rw-r--r--examples/plugin_skip_default_rc.py9
6 files changed, 69 insertions, 1 deletions
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