From 3d03713cb13aa06f0db330da8a2f5dda50091a87 Mon Sep 17 00:00:00 2001 From: Hans-Werner Hilse Date: Sun, 16 Nov 2014 19:27:31 +0100 Subject: [PATCH] implement case-insensitive sort, make default and configurable This will convert any file name to lowercase before doing the comparison. Note that this will only work for ASCII character range, a full Unicode aware solution will be much more complicated. And in the end, file names are byte arrays, not character strings ;-) fixes #1183. --- defaults.lua | 6 ++++++ frontend/ui/widget/filechooser.lua | 10 ++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/defaults.lua b/defaults.lua index c2c290808..5bb771b53 100644 --- a/defaults.lua +++ b/defaults.lua @@ -155,6 +155,12 @@ DDICT_FONT_SIZE = 20 -- e.g. 2 changes the sensitivity by 1/2, 3 by 1/3 etc. FRONTLIGHT_SENSITIVITY_DECREASE = 2 +-- Normally, Koreader will present file lists sorted in case insensitive manner +-- when presenting an alphatically sorted list. So the Order is "A, b, C, d". +-- You can switch to a case sensitive sort ("A", "C", "b", "d") by disabling +-- insensitive sort +DALPHA_SORT_CASE_INSENSITIVE = true + -- Set a path to a folder that is filled by Calibre (must contain the file metadata.calibre) -- e.g. -- "/mnt/sd/.hidden" for Kobo with files in ".hidden" on the SD card diff --git a/frontend/ui/widget/filechooser.lua b/frontend/ui/widget/filechooser.lua index c68258001..d5bb80abc 100644 --- a/frontend/ui/widget/filechooser.lua +++ b/frontend/ui/widget/filechooser.lua @@ -73,8 +73,14 @@ function FileChooser:genItemTableFromPath(path) local sorting = nil local reverse = self.reverse_collate if self.collate == "strcoll" then - sorting = function(a, b) - return self.strcoll(a.name, b.name) == not reverse + if DALPHA_SORT_CASE_INSENSITIVE then + sorting = function(a, b) + return self.strcoll(string.lower(a.name), string.lower(b.name)) == not reverse + end + else + sorting = function(a, b) + return self.strcoll(a.name, b.name) == not reverse + end end elseif self.collate == "access" then sorting = function(a, b)