summary refs log tree commit diff stats
path: root/doc
diff options
context:
space:
mode:
Diffstat (limited to 'doc')
-rw-r--r--doc/HACKING74
-rw-r--r--doc/examples/plugin_file_filter.py18
-rw-r--r--doc/examples/vim_file_chooser.vim2
-rw-r--r--doc/howto-publish-a-release.txt27
-rw-r--r--doc/ranger.1137
-rw-r--r--doc/ranger.pod153
-rw-r--r--doc/rifle.14
-rw-r--r--doc/screenshot.pngbin0 -> 55571 bytes
-rwxr-xr-xdoc/tools/convert_papermode_to_metadata.py69
9 files changed, 382 insertions, 102 deletions
diff --git a/doc/HACKING b/doc/HACKING
deleted file mode 100644
index 68a1a942..00000000
--- a/doc/HACKING
+++ /dev/null
@@ -1,74 +0,0 @@
-Guidelines on Code Modification
-===============================
-
-Coding Style
-------------
-
-* Use syntax compatible to both python 2.6 and 3.1.
-* Use docstrings with pydoc in mind
-* Follow the style guide for python code:
-    http://www.python.org/dev/peps/pep-0008/
-* Test the code with "doctest" where it makes sense
-
-
-Patches
--------
-
-Send patches, created with "git format-patch", to the email adress
-
-    hut@lepus.uberspace.de
-
-If you plan to do major changes, or many changes over time, I encourage
-you to create a fork on GitHub, Gitorious or any other site.
-
-
-Starting Points
----------------
-
-Good places to read about ranger internals are:
-ranger/core/actions.py
-ranger/container/fsobject.py
-
-About the UI:
-ranger/gui/widgets/browsercolumn.py
-ranger/gui/widgets/browserview.py
-ranger/gui/ui.py
-
-
-Common Changes
---------------
-
-* Change which files are previewed in the auto preview:
-In ranger/container/file.py
-the constant PREVIEW_BLACKLIST
-
-* Adding options:
-In ranger/config/rc.conf
-add the default value, like: my_option = True
-In ranger/container/settings.py
-add the name of your option to the constant ALLOWED_SETTINGS
-
-The setting is now accessible at self.settings.my_option,
-assuming <self> is a "SettingsAware" object.
-
-* Adding colorschemes:
-Copy ranger/colorschemes/default.py to ranger/colorschemes/myscheme.py
-and modify it according to your needs.  Alternatively, mimic the jungle
-colorscheme.  It subclasses the default scheme and just modifies a few things.
-In ranger/config/rc.conf (or ~/.config/ranger/rc.conf), add the line:
-
-    set colorscheme myscheme
-
-* Change the file type => application associations:
-Edit the configuration file ~/.config/ranger/rifle.conf.  The default one can
-be obtained by running "ranger --copy-config rifle".
-
-* Change the file extension => mime type associations:
-Modify ranger/data/mime.types
-
-
-Version Numbering
------------------
-
-Three numbers;  The first changes on a rewrite, the second changes when major
-configuration incompatibilities occur and the third changes with each release.
diff --git a/doc/examples/plugin_file_filter.py b/doc/examples/plugin_file_filter.py
index bad5a368..b9bea1f3 100644
--- a/doc/examples/plugin_file_filter.py
+++ b/doc/examples/plugin_file_filter.py
@@ -1,18 +1,20 @@
-# Compatible with ranger 1.6.*
+# Compatible since ranger 1.6.1, git commit c82a8a76989c
 #
-# This plugin hides the directories "boot", "sbin", "proc" and "sys" in the
-# root directory.
+# This plugin hides the directories "/boot", "/sbin", "/proc" and "/sys" unless
+# the "show_hidden" option is activated.
 
 # Save the original filter function
 import ranger.container.directory
 old_accept_file = ranger.container.directory.accept_file
 
+HIDE_FILES = ("/boot", "/sbin", "/proc", "/sys")
+
 # Define a new one
-def custom_accept_file(fname, directory, hidden_filter, name_filter):
-       if hidden_filter and directory.path == '/' and fname in ('boot', 'sbin', 'proc', 'sys'):
-               return False
-       else:
-               return old_accept_file(fname, directory, hidden_filter, name_filter)
+def custom_accept_file(file, filters):
+    if not file.fm.settings.show_hidden and file.path in HIDE_FILES:
+        return False
+    else:
+        return old_accept_file(file, filters)
 
 # Overwrite the old function
 import ranger.container.directory
diff --git a/doc/examples/vim_file_chooser.vim b/doc/examples/vim_file_chooser.vim
index 68947d2d..df6aacc9 100644
--- a/doc/examples/vim_file_chooser.vim
+++ b/doc/examples/vim_file_chooser.vim
@@ -14,11 +14,13 @@ function! RangeChooser()
     "exec 'silent !ranger --choosefile=' . shellescape(temp)
     exec 'silent !ranger --choosefiles=' . shellescape(temp)
     if !filereadable(temp)
+        redraw!
         " Nothing to read.
         return
     endif
     let names = readfile(temp)
     if empty(names)
+        redraw!
         " Nothing to open.
         return
     endif
diff --git a/doc/howto-publish-a-release.txt b/doc/howto-publish-a-release.txt
new file mode 100644
index 00000000..2ef99afe
--- /dev/null
+++ b/doc/howto-publish-a-release.txt
@@ -0,0 +1,27 @@
+( ) test everything one last time:
+( ) * make test
+( ) * ./ranger.py [--clean]
+( ) * ranger/ext/rifle.py
+( ) * make install
+( ) make a release commit:
+( ) * update the number in the README
+( ) * update the number in ranger/__init__.py
+( ) * update the version number in ranger/ext/rifle.py
+( ) * rebuild the man page with the updated number
+( ) * write changelog entry
+( ) * think of a witty commit message
+( ) * change VERSION in ranger/__init__.py to something with "stable"
+( ) * push the commit
+( ) build .tar.gz with "make snapshot"
+( ) make, make install and test the snapshot one last time
+( ) update the website:
+( ) * add the new version as ranger-stable.tar.gz
+( ) * add the new version as ranger-X.Y.Z.tar.gz
+( ) * update both signatures (gpg -sb <file>)
+( ) * update the changelog
+( ) * update the man page
+( ) * rerun boobies.py
+( ) announce the update
+( ) * to the mailing list
+( ) * in the arch linux forum
+( ) * write a news entry on savannah
diff --git a/doc/ranger.1 b/doc/ranger.1
index c0971d47..b27aa9f3 100644
--- a/doc/ranger.1
+++ b/doc/ranger.1
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.27 (Pod::Simple 3.28)
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -133,7 +133,7 @@
 .\" ========================================================================
 .\"
 .IX Title "RANGER 1"
-.TH RANGER 1 "ranger-1.6.1" "04/11/2014" "ranger manual"
+.TH RANGER 1 "ranger-1.6.1" "01/17/2015" "ranger manual"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -142,7 +142,7 @@
 ranger \- visual file manager
 .SH "SYNOPSIS"
 .IX Header "SYNOPSIS"
-\&\fBranger\fR [\fB\-\-version\fR] [\fB\-\-help\fR] [\fB\-\-debug\fR] [\fB\-\-clean\fR] 
+\&\fBranger\fR [\fB\-\-version\fR] [\fB\-\-help\fR] [\fB\-\-debug\fR] [\fB\-\-clean\fR]
 [\fB\-\-confdir\fR=\fIdirectory\fR] [\fB\-\-copy\-config\fR=\fIwhich\fR]
 [\fB\-\-choosefile\fR=\fItarget\fR] [\fB\-\-choosefiles\fR=\fItarget\fR]
 [\fB\-\-choosedir\fR=\fItarget\fR] [\fB\-\-selectfile\fR=\fIfilepath\fR]
@@ -160,7 +160,7 @@ commands and \fI3?\fR for settings.
 .PP
 The \fI\s-1README\s0\fR contains install instructions.
 .PP
-The file \fIdoc/HACKING\fR contains guidelines for code modification.
+The file \fI\s-1HACKING\s0.md\fR contains guidelines for code modification.
 .PP
 The directory \fIdoc/configs\fR contains configuration files.  They are usually
 installed to \fI/usr/lib/python*/site\-packages/ranger/config\fR and can be
@@ -235,7 +235,7 @@ efficiently.
 .SS "\s-1TAGS\s0"
 .IX Subsection "TAGS"
 Tags are single characters which are displayed left of a filename.  You can use
-tags however you want.  Press \*(L"t\*(R" to toggle tags and \*(L"T\*(R" to remove any tags of
+tags however you want.  Press \*(L"t\*(R" to toggle tags and \*(L"ut\*(R" to remove any tags of
 the selection. The default tag is an Asterisk (\*(L"*\*(R"), but you can use any tag by
 typing \fI"<tagname>\fR.
 .SS "\s-1PREVIEWS\s0"
@@ -411,6 +411,8 @@ Move to the top
 .IP "G" 14
 .IX Item "G"
 Move to the bottom
+.IP "[, ]" 14
+Move up and down in the parent directory.
 .IP "^R" 14
 .IX Item "^R"
 Reload everything
@@ -419,7 +421,7 @@ Reload everything
 Redraw the screen
 .IP "i" 14
 .IX Item "i"
-Display the current file in a bigger window.
+Inspect the current file in a bigger window.
 .IP "E" 14
 .IX Item "E"
 Edit the current file in \f(CW$EDITOR\fR (\*(L"nano\*(R" by default)
@@ -428,6 +430,19 @@ Edit the current file in \f(CW$EDITOR\fR (\*(L"nano\*(R" by default)
 Open a shell in the current directory
 .IP "?" 14
 Opens this man page
+.IP "W" 14
+.IX Item "W"
+Opens the log window where you can review messages that pop up at the bottom.
+.IP "w" 14
+.IX Item "w"
+Opens the task window where you can view and modify background processes that
+currently run in ranger.  In there, you can type \*(L"dd\*(R" to abort a process and
+\&\*(L"J\*(R" or \*(L"K\*(R" to change the priority of a process.  Only one process is run at a
+time.
+.IP "^C" 14
+.IX Item "^C"
+Stop the currently running background process that ranger has started, like
+copying files, loading directories or file previews.
 .IP "<octal>=, +<who><what>, \-<who><what>" 14
 .IX Item "<octal>=, +<who><what>, -<who><what>"
 Change the permissions of the selection.  For example, \f(CW\*(C`777=\*(C'\fR is equivalent to
@@ -445,6 +460,16 @@ modern \s-1GUI\s0 programs.
 .IP "po" 14
 .IX Item "po"
 Paste the copied/cut files, overwriting existing files.
+.IP "pl, pL" 14
+.IX Item "pl, pL"
+Create symlinks (absolute or relative) to the copied files
+.IP "phl" 14
+.IX Item "phl"
+Create hardlinks to the copied files
+.IP "pht" 14
+.IX Item "pht"
+Duplicate the subdirectory tree of the copied directory, then create
+hardlinks for each contained file into the new directory tree.
 .IP "m\fIX\fR" 14
 .IX Item "mX"
 Create a bookmark with the name \fIX\fR
@@ -488,6 +513,19 @@ the cursor until you press \s-1ESC. \s0 To unselect files in the same way, use \
 Search for files in the current directory.
 .IP ":" 14
 Open the console.
+.IP "!" 14
+Open the console with the content \*(L"shell \*(R" so you can quickly run commands
+.IP "@" 14
+Open the console with the content \*(L"shell  \f(CW%s\fR\*(R", placing the cursor before the
+\&\*(L" \f(CW%s\fR\*(R" so you can quickly run commands with the current selection as the
+argument.
+.IP "r" 14
+.IX Item "r"
+Open the console with the content \*(L"open with \*(R" so you can decide which program
+to use to open the current file selection.
+.IP "cd" 14
+.IX Item "cd"
+Open the console with the content \*(L"cd \*(R"
 .IP "Alt\-\fIN\fR" 14
 .IX Item "Alt-N"
 Open a tab. N has to be a number from 0 to 9. If the tab doesn't exist yet, it
@@ -501,6 +539,11 @@ Go to the next or previous tab. You can also use \s-1TAB\s0 and \s-1SHIFT+TAB\s0
 .IP "gc, ^W" 14
 .IX Item "gc, ^W"
 Close the current tab.  The last tab cannot be closed this way.
+.IP "M" 14
+.IX Item "M"
+A key chain that allows you to quickly change the line mode of all the files of
+the current directory.  For a more permanent solution, use the command
+\&\*(L"default_linemode\*(R" in your rc.conf.
 .SS "READLINE-LIKE \s-1BINDINGS IN THE CONSOLE\s0"
 .IX Subsection "READLINE-LIKE BINDINGS IN THE CONSOLE"
 .IP "^B, ^F" 14
@@ -631,6 +674,11 @@ this pattern will hide all files that start with a dot or end with a tilde.
 .Vb 1
 \& set hidden_filter ^\e.|~$
 .Ve
+.IP "idle_delay [integer]" 4
+.IX Item "idle_delay [integer]"
+The delay that ranger idly waits for user input, in milliseconds, with a
+resolution of 100ms.  Lower delay reduces lag between directory updates but
+increases \s-1CPU\s0 load.
 .IP "max_console_history_size [integer, none]" 4
 .IX Item "max_console_history_size [integer, none]"
 How many console commands should be kept in history?  \*(L"none\*(R" will disable the
@@ -638,6 +686,11 @@ limit.
 .IP "max_history_size [integer, none]" 4
 .IX Item "max_history_size [integer, none]"
 How many directory changes should be kept in history?
+.IP "metadata_deep_search [bool]" 4
+.IX Item "metadata_deep_search [bool]"
+When the metadata manager module looks for metadata, should it only look for a
+\&\*(L".metadata.json\*(R" file in the current directory, or do a deep search and check
+all directories above the current one as well?
 .IP "mouse_enabled [bool] <zm>" 4
 .IX Item "mouse_enabled [bool] <zm>"
 Enable mouse input?
@@ -694,10 +747,10 @@ Sort directories first?
 .IP "sort_reverse [bool] <or>" 4
 .IX Item "sort_reverse [bool] <or>"
 Reverse the order of files?
-.IP "sort [string] <oa>, <ob>, <oc>, <om>, <on>, <ot>, <os>" 4
-.IX Item "sort [string] <oa>, <ob>, <oc>, <om>, <on>, <ot>, <os>"
+.IP "sort [string] <oa>, <ob>, <oc>, <om>, <on>, <ot>, <os>, <oz>" 4
+.IX Item "sort [string] <oa>, <ob>, <oc>, <om>, <on>, <ot>, <os>, <oz>"
 Which sorting mechanism should be used?  Choose one of \fBatime\fR, \fBbasename\fR,
-\&\fBctime\fR, \fBmtime\fR, \fBnatural\fR, \fBtype\fR, \fBsize\fR
+\&\fBctime\fR, \fBmtime\fR, \fBnatural\fR, \fBtype\fR, \fBsize\fR, \fBrandom\fR
 .Sp
 Note: You can reverse the order by typing an uppercase second letter in the key
 combination, e.g. \*(L"oN\*(R" to sort from Z to A.
@@ -755,23 +808,30 @@ ranger.  For your convenience, this is a list of the \*(L"public\*(R" commands i
 \& copypmap key newkey [newkey2...]
 \& copytmap key newkey [newkey2...]
 \& cunmap keys...
+\& default_linemode [path=regexp | tag=tags] linemodename
 \& delete
 \& edit [filename]
 \& eval [\-q] python_code
 \& filter [string]
+\& filter_inode_type [dfl]
 \& find pattern
+\& flat level
 \& grep pattern
+\& linemode linemodename
 \& load_copy_buffer
 \& map key command
 \& mark pattern
 \& mark_tag [tags]
+\& meta key value
 \& mkdir dirname
 \& open_with [application] [flags] [mode]
 \& pmap key command
+\& prompt_metadata [key1 [key2 [...]]]
 \& punmap keys...
 \& quit
 \& quit!
 \& relink newpath
+\& rename_append
 \& rename newname
 \& save_copy_buffer
 \& scout [\-FLAGS] pattern
@@ -855,6 +915,20 @@ See \f(CW\*(C`copymap\*(C'\fR
 .IP "cunmap [\fIkeys...\fR]" 2
 .IX Item "cunmap [keys...]"
 Removes key mappings of the console. Works like the \f(CW\*(C`unmap\*(C'\fR command.
+.IP "default_linemode [\fIpath=regexp\fR | \fItag=tags\fR] \fIlinemodename\fR" 2
+.IX Item "default_linemode [path=regexp | tag=tags] linemodename"
+Sets the default linemode.  See \fIlinemode\fR command.
+.Sp
+Examples:
+.Sp
+Set the global default linemode to \*(L"permissions\*(R":
+ :default_linemode permissions
+.Sp
+Set the default linemode to \*(L"permissions\*(R" for all files tagged with \*(L"p\*(R" or \*(L"P\*(R":
+ :default_linemode tag=pP permissions
+.Sp
+Set the default linemode for all files in ~/books/ to \*(L"metatitle\*(R":
+ :default_linemode path=/home/.*?/books/.* metatitle
 .IP "delete" 2
 .IX Item "delete"
 Destroy all files in the selection with a roundhouse kick.  ranger will ask for
@@ -879,6 +953,12 @@ Displays only the files which contain the \fIstring\fR in their basename.  Runni
 this command without any parameter will reset the fitler.
 .Sp
 This command is based on the \fIscout\fR command and supports all of its options.
+.IP "filter_inode_type [dfl]" 2
+.IX Item "filter_inode_type [dfl]"
+Displays only the files of specified inode type. To display only directories,
+use the 'd' parameter. To display only files, use the 'f' parameter. To display
+only links, use the 'l' parameter. Parameters can be combined. To remove this
+filter, use no parameter.
 .IP "find \fIpattern\fR" 2
 .IX Item "find pattern"
 Search files in the current directory that contain the given (case-insensitive)
@@ -886,9 +966,25 @@ string in their name as you type.  Once there is an unambiguous result, it will
 be run immediately. (Or entered, if it's a directory.)
 .Sp
 This command is based on the \fIscout\fR command and supports all of its options.
+.IP "flat level" 2
+.IX Item "flat level"
+Flattens the directory view up to the specified level. Level \-1 means infinite
+level. Level 0 means standard view without flattened directory view. Level
+values \-2 and less are invalid.
 .IP "grep \fIpattern\fR" 2
 .IX Item "grep pattern"
 Looks for a string in all marked files or directories.
+.IP "linemode \fIlinemodename\fR" 2
+.IX Item "linemode linemodename"
+Sets the linemode of all files in the current directory.  The linemode may be:
+.Sp
+.Vb 5
+\& "filename": display each line as "<basename>...<size>"
+\& "permissions": display each line as "<permissions> <owner> <group> <basename>"
+\& "metatitle": display metadata from .metadata.json files if
+\&     available, fall back to the "filename" linemode if no
+\&     metadata was found.  See :meta command.
+.Ve
 .IP "load_copy_buffer" 2
 .IX Item "load_copy_buffer"
 Load the copy buffer from \fI~/.config/ranger/copy_buffer\fR.  This can be used to
@@ -912,6 +1008,17 @@ This command is based on the \fIscout\fR command and supports all of its options
 .IX Item "mark_tag [tags]"
 Mark all tags that are tagged with either of the given tags.  When leaving out
 the tag argument, all tagged files are marked.
+.IP "meta \fIkey\fR \fIvalue\fR" 2
+.IX Item "meta key value"
+Set the metadata of the currently highlighted file.  Example:
+.Sp
+.Vb 2
+\& :meta title The Hitchhiker\*(Aqs Guide to the Galaxy
+\& :meta year 1979
+.Ve
+.Sp
+This metadata can be displayed by, for example, using the \*(L"metatitle\*(R" line mode
+by typing Mt.
 .IP "mkdir \fIdirname\fR" 2
 .IX Item "mkdir dirname"
 Creates a directory with the name \fIdirname\fR.
@@ -928,6 +1035,10 @@ Note that if you specify an application, the mode is ignored.
 .IP "pmap \fIkey\fR \fIcommand\fR" 2
 .IX Item "pmap key command"
 Binds keys for the pager. Works like the \f(CW\*(C`map\*(C'\fR command.
+.IP "prompt_metadata [\fIkeys ...\fR]" 2
+.IX Item "prompt_metadata [keys ...]"
+Prompt the user to input metadata with the \f(CW\*(C`meta\*(C'\fR command for multiple keys in
+a row.
 .IP "punmap [\fIkeys ...\fR]" 2
 .IX Item "punmap [keys ...]"
 Removes key mappings of the pager. Works like the \f(CW\*(C`unmap\*(C'\fR command.
@@ -942,6 +1053,10 @@ it by typing `` or '' the next time you start ranger.
 .IX Item "relink newpath"
 Change the link destination of the current symlink file to <newpath>. First
 <tab> will load the original link.
+.IP "rename_append" 2
+.IX Item "rename_append"
+Opens the console with \*(L":rename <current file>\*(R" with the cursor automatically
+placed before the file extension
 .IP "rename \fInewname\fR" 2
 .IX Item "rename newname"
 Rename the current file.  If a file with that name already exists, the renaming
@@ -1163,6 +1278,8 @@ provided along with the source code.
 .IX Item "The project page: <http://ranger.nongnu.org/>"
 .IP "The mailing list: <http://savannah.nongnu.org/mail/?group=ranger>" 4
 .IX Item "The mailing list: <http://savannah.nongnu.org/mail/?group=ranger>"
+.IP "\s-1IRC\s0 channel: #ranger on freenode.net" 4
+.IX Item "IRC channel: #ranger on freenode.net"
 .PD
 .PP
 ranger is maintained with the git version control system.  To fetch a fresh
@@ -1176,7 +1293,7 @@ copy, run:
 \&\fIrifle\fR\|(1)
 .SH "BUGS"
 .IX Header "BUGS"
-Report bugs here: <http://savannah.nongnu.org/bugs/?group=ranger>
+Report bugs here: <https://github.com/hut/ranger/issues>
 .PP
 Please include as much relevant information as possible.  For the most
 diagnostic output, run ranger like this: \f(CW\*(C`PYTHONOPTIMIZE= ranger \-\-debug\*(C'\fR
diff --git a/doc/ranger.pod b/doc/ranger.pod
index 7dc50d32..67297d18 100644
--- a/doc/ranger.pod
+++ b/doc/ranger.pod
@@ -7,7 +7,7 @@ ranger - visual file manager
 
 =head1 SYNOPSIS
 
-B<ranger> [B<--version>] [B<--help>] [B<--debug>] [B<--clean>] 
+B<ranger> [B<--version>] [B<--help>] [B<--debug>] [B<--clean>]
 [B<--confdir>=I<directory>] [B<--copy-config>=I<which>]
 [B<--choosefile>=I<target>] [B<--choosefiles>=I<target>]
 [B<--choosedir>=I<target>] [B<--selectfile>=I<filepath>]
@@ -33,7 +33,7 @@ commands and I<3?> for settings.
 
 The F<README> contains install instructions.
 
-The file F<doc/HACKING> contains guidelines for code modification.
+The file F<HACKING.md> contains guidelines for code modification.
 
 The directory F<doc/configs> contains configuration files.  They are usually
 installed to F</usr/lib/python*/site-packages/ranger/config> and can be
@@ -134,7 +134,7 @@ efficiently.
 =head2 TAGS
 
 Tags are single characters which are displayed left of a filename.  You can use
-tags however you want.  Press "t" to toggle tags and "T" to remove any tags of
+tags however you want.  Press "t" to toggle tags and "ut" to remove any tags of
 the selection. The default tag is an Asterisk ("*"), but you can use any tag by
 typing I<"<tagnameE<gt>>.
 
@@ -317,6 +317,10 @@ Move to the top
 
 Move to the bottom
 
+=item [, ]
+
+Move up and down in the parent directory.
+
 =item ^R
 
 Reload everything
@@ -327,7 +331,7 @@ Redraw the screen
 
 =item i
 
-Display the current file in a bigger window.
+Inspect the current file in a bigger window.
 
 =item E
 
@@ -341,6 +345,22 @@ Open a shell in the current directory
 
 Opens this man page
 
+=item W
+
+Opens the log window where you can review messages that pop up at the bottom.
+
+=item w
+
+Opens the task window where you can view and modify background processes that
+currently run in ranger.  In there, you can type "dd" to abort a process and
+"J" or "K" to change the priority of a process.  Only one process is run at a
+time.
+
+=item ^C
+
+Stop the currently running background process that ranger has started, like
+copying files, loading directories or file previews.
+
 =item <octal>=, +<who><what>, -<who><what>
 
 Change the permissions of the selection.  For example, C<777=> is equivalent to
@@ -363,6 +383,19 @@ modern GUI programs.
 
 Paste the copied/cut files, overwriting existing files.
 
+=item pl, pL
+
+Create symlinks (absolute or relative) to the copied files
+
+=item phl
+
+Create hardlinks to the copied files
+
+=item pht
+
+Duplicate the subdirectory tree of the copied directory, then create
+hardlinks for each contained file into the new directory tree.
+
 =item mI<X>
 
 Create a bookmark with the name I<X>
@@ -421,6 +454,25 @@ Search for files in the current directory.
 
 Open the console.
 
+=item !
+
+Open the console with the content "shell " so you can quickly run commands
+
+=item @
+
+Open the console with the content "shell  %s", placing the cursor before the
+" %s" so you can quickly run commands with the current selection as the
+argument.
+
+=item r
+
+Open the console with the content "open with " so you can decide which program
+to use to open the current file selection.
+
+=item cd
+
+Open the console with the content "cd "
+
 =item Alt-I<N>
 
 Open a tab. N has to be a number from 0 to 9. If the tab doesn't exist yet, it
@@ -438,6 +490,12 @@ Go to the next or previous tab. You can also use TAB and SHIFT+TAB instead.
 
 Close the current tab.  The last tab cannot be closed this way.
 
+=item M
+
+A key chain that allows you to quickly change the line mode of all the files of
+the current directory.  For a more permanent solution, use the command
+"default_linemode" in your rc.conf.
+
 =back
 
 =head2 READLINE-LIKE BINDINGS IN THE CONSOLE
@@ -603,6 +661,12 @@ this pattern will hide all files that start with a dot or end with a tilde.
 
  set hidden_filter ^\.|~$
 
+=item idle_delay [integer]
+
+The delay that ranger idly waits for user input, in milliseconds, with a
+resolution of 100ms.  Lower delay reduces lag between directory updates but
+increases CPU load.
+
 =item max_console_history_size [integer, none]
 
 How many console commands should be kept in history?  "none" will disable the
@@ -612,6 +676,12 @@ limit.
 
 How many directory changes should be kept in history?
 
+=item metadata_deep_search [bool]
+
+When the metadata manager module looks for metadata, should it only look for a
+".metadata.json" file in the current directory, or do a deep search and check
+all directories above the current one as well?
+
 =item mouse_enabled [bool] <zm>
 
 Enable mouse input?
@@ -684,10 +754,10 @@ Sort directories first?
 
 Reverse the order of files?
 
-=item sort [string] <oa>, <ob>, <oc>, <om>, <on>, <ot>, <os>
+=item sort [string] <oa>, <ob>, <oc>, <om>, <on>, <ot>, <os>, <oz>
 
 Which sorting mechanism should be used?  Choose one of B<atime>, B<basename>,
-B<ctime>, B<mtime>, B<natural>, B<type>, B<size>
+B<ctime>, B<mtime>, B<natural>, B<type>, B<size>, B<random>
 
 Note: You can reverse the order by typing an uppercase second letter in the key
 combination, e.g. "oN" to sort from Z to A.
@@ -723,7 +793,7 @@ Gather and display data about version control systems. Supported vcs: git, hg.
 =item vcs_backend_git, vcs_backend_hg, vcs_backend_bzr [string]
 
 Sets the state for the version control backend. The possible values are:
-    
+
  disabled   don't display any information.
  local      display only local state.
  enabled    display both, local and remote state. May be slow for hg and bzr.
@@ -755,23 +825,30 @@ ranger.  For your convenience, this is a list of the "public" commands including
  copypmap key newkey [newkey2...]
  copytmap key newkey [newkey2...]
  cunmap keys...
+ default_linemode [path=regexp | tag=tags] linemodename
  delete
  edit [filename]
  eval [-q] python_code
  filter [string]
+ filter_inode_type [dfl]
  find pattern
+ flat level
  grep pattern
+ linemode linemodename
  load_copy_buffer
  map key command
  mark pattern
  mark_tag [tags]
+ meta key value
  mkdir dirname
  open_with [application] [flags] [mode]
  pmap key command
+ prompt_metadata [key1 [key2 [...]]]
  punmap keys...
  quit
  quit!
  relink newpath
+ rename_append
  rename newname
  save_copy_buffer
  scout [-FLAGS] pattern
@@ -869,6 +946,21 @@ See C<copymap>
 
 Removes key mappings of the console. Works like the C<unmap> command.
 
+=item default_linemode [I<path=regexp> | I<tag=tags>] I<linemodename>
+
+Sets the default linemode.  See I<linemode> command.
+
+Examples:
+
+Set the global default linemode to "permissions":
+ :default_linemode permissions
+
+Set the default linemode to "permissions" for all files tagged with "p" or "P":
+ :default_linemode tag=pP permissions
+
+Set the default linemode for all files in ~/books/ to "metatitle":
+ :default_linemode path=/home/.*?/books/.* metatitle
+
 =item delete
 
 Destroy all files in the selection with a roundhouse kick.  ranger will ask for
@@ -897,6 +989,13 @@ this command without any parameter will reset the fitler.
 
 This command is based on the I<scout> command and supports all of its options.
 
+=item filter_inode_type [dfl]
+
+Displays only the files of specified inode type. To display only directories,
+use the 'd' parameter. To display only files, use the 'f' parameter. To display
+only links, use the 'l' parameter. Parameters can be combined. To remove this
+filter, use no parameter.
+
 =item find I<pattern>
 
 Search files in the current directory that contain the given (case-insensitive)
@@ -905,10 +1004,26 @@ be run immediately. (Or entered, if it's a directory.)
 
 This command is based on the I<scout> command and supports all of its options.
 
+=item flat level
+
+Flattens the directory view up to the specified level. Level -1 means infinite
+level. Level 0 means standard view without flattened directory view. Level
+values -2 and less are invalid.
+
 =item grep I<pattern>
 
 Looks for a string in all marked files or directories.
 
+=item linemode I<linemodename>
+
+Sets the linemode of all files in the current directory.  The linemode may be:
+
+ "filename": display each line as "<basename>...<size>"
+ "permissions": display each line as "<permissions> <owner> <group> <basename>"
+ "metatitle": display metadata from .metadata.json files if
+     available, fall back to the "filename" linemode if no
+     metadata was found.  See :meta command.
+
 =item load_copy_buffer
 
 Load the copy buffer from F<~/.config/ranger/copy_buffer>.  This can be used to
@@ -936,6 +1051,16 @@ This command is based on the I<scout> command and supports all of its options.
 Mark all tags that are tagged with either of the given tags.  When leaving out
 the tag argument, all tagged files are marked.
 
+=item meta I<key> I<value>
+
+Set the metadata of the currently highlighted file.  Example:
+
+ :meta title The Hitchhiker's Guide to the Galaxy
+ :meta year 1979
+
+This metadata can be displayed by, for example, using the "metatitle" line mode
+by typing Mt.
+
 =item mkdir I<dirname>
 
 Creates a directory with the name I<dirname>.
@@ -955,6 +1080,11 @@ Note that if you specify an application, the mode is ignored.
 
 Binds keys for the pager. Works like the C<map> command.
 
+=item prompt_metadata [I<keys ...>]
+
+Prompt the user to input metadata with the C<meta> command for multiple keys in
+a row.
+
 =item punmap [I<keys ...>]
 
 Removes key mappings of the pager. Works like the C<unmap> command.
@@ -973,6 +1103,11 @@ it by typing `` or '' the next time you start ranger.
 Change the link destination of the current symlink file to <newpath>. First
 <tab> will load the original link.
 
+=item rename_append
+
+Opens the console with ":rename <current file>" with the cursor automatically
+placed before the file extension
+
 =item rename I<newname>
 
 Rename the current file.  If a file with that name already exists, the renaming
@@ -1259,6 +1394,8 @@ GNU General Public License 3 or (at your option) any later version.
 
 =item The mailing list: L<http://savannah.nongnu.org/mail/?group=ranger>
 
+=item IRC channel: #ranger on freenode.net
+
 =back
 
 ranger is maintained with the git version control system.  To fetch a fresh
@@ -1278,7 +1415,7 @@ rifle(1)
 
 =head1 BUGS
 
-Report bugs here: L<http://savannah.nongnu.org/bugs/?group=ranger>
+Report bugs here: L<https://github.com/hut/ranger/issues>
 
 Please include as much relevant information as possible.  For the most
 diagnostic output, run ranger like this: C<PYTHONOPTIMIZE= ranger --debug>
diff --git a/doc/rifle.1 b/doc/rifle.1
index df63d118..999d56d6 100644
--- a/doc/rifle.1
+++ b/doc/rifle.1
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.27 (Pod::Simple 3.28)
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -133,7 +133,7 @@
 .\" ========================================================================
 .\"
 .IX Title "RIFLE 1"
-.TH RIFLE 1 "rifle-1.6.1" "04/11/2014" "rifle manual"
+.TH RIFLE 1 "rifle-1.6.1" "08/26/2014" "rifle manual"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/doc/screenshot.png b/doc/screenshot.png
new file mode 100644
index 00000000..42f13bcf
--- /dev/null
+++ b/doc/screenshot.png
Binary files differdiff --git a/doc/tools/convert_papermode_to_metadata.py b/doc/tools/convert_papermode_to_metadata.py
new file mode 100755
index 00000000..a1d6372d
--- /dev/null
+++ b/doc/tools/convert_papermode_to_metadata.py
@@ -0,0 +1,69 @@
+#!/bin/python
+"""
+usage: ./convert_papermode_to_metadata.py
+
+This script converts the .paperinfo CSV file in the current directory to an
+equivalent .metadata.json file.
+
+ranger used to store metadata in .paperinfo files, but that format was rather
+limited, so .metadata.json files were introduced.
+"""
+
+import csv
+import json
+import os
+import sys
+
+if sys.version < '3.':
+    getuserinput = raw_input
+else:
+    getuserinput = input
+
+FIELDS = ["name", "year", "title", "authors", "url"]
+
+def replace(source, target):
+    if not os.path.exists(source):
+        print("Source file `%s' doesn't exist, skipping." % source)
+        return
+
+    # Ask for user confirmation if the target file already exists
+    if os.path.exists(target):
+        sys.stdout.write("Warning: target file `%s' exists! Overwrite? [y/N]")
+        userinput = getuserinput()
+        if not (userinput.startswith("y") or userinput.startswith("Y")):
+            print("Skipping file `%s'" % source)
+            return
+
+    result = dict()
+
+    # Read the input file and convert it to a dictionary
+    with open(".paperinfo", "r") as infile:
+        reader = csv.reader(infile, skipinitialspace=True)
+        for lineno, row in enumerate(reader):
+            if len(row) != len(FIELDS):
+                print("skipping invalid row `%s' on line %d" % (row, lineno))
+                continue
+            name = row[0]
+            entry = {}
+
+            # Filling up the resulting entry dict
+            for i, column in enumerate(row[1:]):
+                if column:
+                    entry[FIELDS[i + 1]] = column
+
+            # Adding the dict if it isn't empty
+            if entry:
+                result[name] = entry
+
+    # Write the obtained dictionary into the target file
+    if result:
+        with open(".metadata.json", "w") as outfile:
+            json.dump(result, outfile, indent=2)
+    else:
+        print("Skipping writing `%s' due to a lack of data" % target)
+
+if __name__ == "__main__":
+    if set(['--help', '-h']) & set(sys.argv[1:]):
+        print(__doc__.strip())
+    else:
+        replace(".paperinfo", ".metadata.json")