From 16edaeb0cfefc75d3d97cfcd7f60cc1270a93590 Mon Sep 17 00:00:00 2001 From: hut Date: Tue, 3 Mar 2015 12:41:45 +0100 Subject: add setting for sorting by unicode character --- doc/ranger.1 | 6 +++++- doc/ranger.pod | 5 +++++ ranger/config/rc.conf | 1 + ranger/container/directory.py | 19 +++++++++++++++++++ ranger/container/settings.py | 1 + 5 files changed, 31 insertions(+), 1 deletion(-) diff --git a/doc/ranger.1 b/doc/ranger.1 index 41463478..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/18/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 @@ -758,6 +758,10 @@ Sort directories first? .IP "sort_reverse [bool] " 4 .IX Item "sort_reverse [bool] " 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] , , , , , , , , " 4 .IX Item "sort [string] , , , , , , , , " Which sorting mechanism should be used? Choose one of \fBatime\fR, \fBbasename\fR, diff --git a/doc/ranger.pod b/doc/ranger.pod index 6888ee70..75da97b9 100644 --- a/doc/ranger.pod +++ b/doc/ranger.pod @@ -765,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] , , , , , , , , Which sorting mechanism should be used? Choose one of B, B, 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 # 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, -- cgit 1.4.1-2-gfad0