diff options
author | hut <hut@lepus.uberspace.de> | 2015-03-03 12:41:45 +0100 |
---|---|---|
committer | hut <hut@lepus.uberspace.de> | 2015-03-03 12:41:45 +0100 |
commit | 16edaeb0cfefc75d3d97cfcd7f60cc1270a93590 (patch) | |
tree | 3d6e5b8f98183dd1fa5f6e79e55be3afd17182d1 /ranger | |
parent | a3cd6b0cf3e6b05e7058544b8503872ff7ac2881 (diff) | |
download | ranger-16edaeb0cfefc75d3d97cfcd7f60cc1270a93590.tar.gz |
add setting for sorting by unicode character
Diffstat (limited to 'ranger')
-rw-r--r-- | ranger/config/rc.conf | 1 | ||||
-rw-r--r-- | ranger/container/directory.py | 19 | ||||
-rw-r--r-- | ranger/container/settings.py | 1 |
3 files changed, 21 insertions, 0 deletions
diff --git a/ranger/config/rc.conf b/ranger/config/rc.conf index 59237a59..682de60d 100644 --- a/ranger/config/rc.conf +++ b/ranger/config/rc.conf @@ -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 63502ce9..71eda763 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, |