summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--doc/ranger.119
-rw-r--r--doc/ranger.pod19
-rw-r--r--ranger/config/rc.conf3
-rw-r--r--ranger/container/directory.py19
-rw-r--r--ranger/container/settings.py1
-rw-r--r--ranger/core/actions.py2
6 files changed, 58 insertions, 5 deletions
diff --git a/doc/ranger.1 b/doc/ranger.1
index 59bf529c..42b32f70 100644
--- a/doc/ranger.1
+++ b/doc/ranger.1
@@ -133,7 +133,7 @@
 .\" ========================================================================
 .\"
 .IX Title "RANGER 1"
-.TH RANGER 1 "ranger-1.6.1" "02/06/2015" "ranger manual"
+.TH RANGER 1 "ranger-1.6.1" "03/03/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
@@ -188,11 +188,18 @@ Change the configuration directory of ranger from ~/.config/ranger to \*(L"dir\*
 .IX Item "--copy-config=file"
 Create copies of the default configuration files in your local configuration
 directory.  Existing ones will not be overwritten.  Possible values: \fIall\fR,
-\&\fIcommands\fR, \fIrc\fR, \fIrifle\fR, \fIscope\fR.
+\&\fIcommands\fR, \fIcommands_full\fR, \fIrc\fR, \fIrifle\fR, \fIscope\fR.
 .Sp
 Note: You may want to disable loading of the global configuration files by
 exporting \fIRANGER_LOAD_DEFAULT_RC=FALSE\fR in your environment.  See also:
 \&\fB\s-1FILES\s0\fR, \fB\s-1ENVIRONMENT\s0\fR
+.Sp
+\&\-\-copy\-config=\fBcommands\fR will copy only a small sample configuration file with
+a thoroughly commented example.  It is recommended to keep this file tidy to
+avoid getting defunct commands on ranger upgrades.  The full default
+commands.py can be copied with \-\-copy\-config=\fBcommands_full\fR, but that file
+will be ignored by ranger and serves only as a reference for making your own
+commands.
 .IP "\fB\-\-choosefile\fR=\fItargetfile\fR" 14
 .IX Item "--choosefile=targetfile"
 Allows you to pick a file with ranger.  This changes the behavior so that when
@@ -751,6 +758,10 @@ Sort directories first?
 .IP "sort_reverse [bool] <or>" 4
 .IX Item "sort_reverse [bool] <or>"
 Reverse the order of files?
+.IP "sort_unicode [bool]" 4
+.IX Item "sort_unicode [bool]"
+When sorting according to some string, should the unicode characters be
+compared, instead of looking at the raw character values to save time?
 .IP "sort [string] <oa>, <ob>, <oc>, <oe>, <om>, <on>, <ot>, <os>, <oz>" 4
 .IX Item "sort [string] <oa>, <ob>, <oc>, <oe>, <om>, <on>, <ot>, <os>, <oz>"
 Which sorting mechanism should be used?  Choose one of \fBatime\fR, \fBbasename\fR,
@@ -1193,6 +1204,10 @@ and settings are defined here.
 .IX Item "commands.py"
 A python module that defines commands which can be used in ranger's console by
 typing \*(L":\*(R" or in the rc.conf file.
+.IP "commands_full.py" 10
+.IX Item "commands_full.py"
+This file is copied by \-\-copy\-config=commands_full and serves as a reference
+for custom commands.  It is entirely ignored by ranger.
 .IP "rifle.conf" 10
 .IX Item "rifle.conf"
 This is the configuration file for the built-in file launcher called \*(L"rifle\*(R".
diff --git a/doc/ranger.pod b/doc/ranger.pod
index 177cd0f5..75da97b9 100644
--- a/doc/ranger.pod
+++ b/doc/ranger.pod
@@ -70,12 +70,19 @@ Change the configuration directory of ranger from ~/.config/ranger to "dir".
 
 Create copies of the default configuration files in your local configuration
 directory.  Existing ones will not be overwritten.  Possible values: I<all>,
-I<commands>, I<rc>, I<rifle>, I<scope>.
+I<commands>, I<commands_full>, I<rc>, I<rifle>, I<scope>.
 
 Note: You may want to disable loading of the global configuration files by
 exporting I<RANGER_LOAD_DEFAULT_RC=FALSE> in your environment.  See also:
 B<FILES>, B<ENVIRONMENT>
 
+--copy-config=B<commands> will copy only a small sample configuration file with
+a thoroughly commented example.  It is recommended to keep this file tidy to
+avoid getting defunct commands on ranger upgrades.  The full default
+commands.py can be copied with --copy-config=B<commands_full>, but that file
+will be ignored by ranger and serves only as a reference for making your own
+commands.
+
 =item B<--choosefile>=I<targetfile>
 
 Allows you to pick a file with ranger.  This changes the behavior so that when
@@ -758,6 +765,11 @@ Sort directories first?
 
 Reverse the order of files?
 
+=item sort_unicode [bool]
+
+When sorting according to some string, should the unicode characters be
+compared, instead of looking at the raw character values to save time?
+
 =item sort [string] <oa>, <ob>, <oc>, <oe>, <om>, <on>, <ot>, <os>, <oz>
 
 Which sorting mechanism should be used?  Choose one of B<atime>, B<basename>,
@@ -1266,6 +1278,11 @@ and settings are defined here.
 A python module that defines commands which can be used in ranger's console by
 typing ":" or in the rc.conf file.
 
+=item commands_full.py
+
+This file is copied by --copy-config=commands_full and serves as a reference
+for custom commands.  It is entirely ignored by ranger.
+
 =item rifle.conf
 
 This is the configuration file for the built-in file launcher called "rifle".
diff --git a/ranger/config/rc.conf b/ranger/config/rc.conf
index 59237a59..0d8edaf8 100644
--- a/ranger/config/rc.conf
+++ b/ranger/config/rc.conf
@@ -29,7 +29,7 @@ set hidden_filter ^\.|\.(?:pyc|pyo|bak|swp)$|^lost\+found$|^__(py)?cache__$
 set show_hidden false
 
 # Ask for a confirmation when running the "delete" command?
-# Valid values are "always" (default), "never", "multiple"
+# Valid values are "always", "never", "multiple" (default)
 # With "multiple", ranger will ask only if you delete multiple files at once.
 set confirm_on_delete multiple
 
@@ -154,6 +154,7 @@ set sort natural
 set sort_reverse false
 set sort_case_insensitive true
 set sort_directories_first true
+set sort_unicode false
 
 # Enable this if key combinations with the Alt Key don't work for you.
 # (Especially on xterm)
diff --git a/ranger/container/directory.py b/ranger/container/directory.py
index f78b3d97..256dd729 100644
--- a/ranger/container/directory.py
+++ b/ranger/container/directory.py
@@ -1,6 +1,7 @@
 # Copyright (C) 2009-2013  Roman Zimbelmann <hut@hut.pm>
 # This software is distributed under the terms of the GNU GPL version 3.
 
+import locale
 import os.path
 import random
 import re
@@ -36,6 +37,17 @@ def sort_naturally(path):
 def sort_naturally_icase(path):
     return path.basename_natural_lower
 
+def sort_unicode_wrapper_string(old_sort_func):
+    def sort_unicode(path):
+        return locale.strxfrm(old_sort_func(path))
+    return sort_unicode
+
+def sort_unicode_wrapper_list(old_sort_func):
+    def sort_unicode(path):
+        return [locale.strxfrm(str(c)) for c in old_sort_func(path)]
+    return sort_unicode
+
+
 def accept_file(file, filters):
     """
     Returns True if file shall be shown, otherwise False.
@@ -414,6 +426,13 @@ class Directory(FileSystemObject, Accumulator, Loadable):
                 sort_func == sort_naturally:
             sort_func = sort_naturally_icase
 
+        # XXX Does not work with usermade sorting functions :S
+        if self.settings.sort_unicode:
+            if sort_func in (sort_naturally, sort_naturally_icase):
+                sort_func = sort_unicode_wrapper_list(sort_func)
+            elif sort_func in (sort_by_basename, sort_by_basename_icase):
+                sort_func = sort_unicode_wrapper_string(sort_func)
+
         self.files_all.sort(key = sort_func)
 
         if self.settings.sort_reverse:
diff --git a/ranger/container/settings.py b/ranger/container/settings.py
index 55585029..ddcc7d14 100644
--- a/ranger/container/settings.py
+++ b/ranger/container/settings.py
@@ -47,6 +47,7 @@ ALLOWED_SETTINGS = {
     'sort_case_insensitive': bool,
     'sort_directories_first': bool,
     'sort_reverse': bool,
+    'sort_unicode': bool,
     'sort': str,
     'status_bar_on_top': bool,
     'tilde_in_titlebar': bool,
diff --git a/ranger/core/actions.py b/ranger/core/actions.py
index 08e0420b..be7c7a00 100644
--- a/ranger/core/actions.py
+++ b/ranger/core/actions.py
@@ -1290,7 +1290,7 @@ class Actions(FileManagerAware, EnvironmentAware, SettingsAware):
 
     def mkdir(self, name):
         try:
-            os.mkdir(os.path.join(self.thisdir.path, name))
+            os.mkdirs(os.path.join(self.thisdir.path, name))
         except OSError as err:
             self.notify(err)