Skip to content

Commit 7328143

Browse files
committed
Use locale-aware sort for menu entries
This fixes the problem that entries started with non-English characters are placed at the end of the list.
1 parent 7ff6816 commit 7328143

1 file changed

Lines changed: 13 additions & 2 deletions

File tree

src/xdgmenumaker

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import os
66
import sys
77
import getopt
88
import fnmatch
9+
import locale
910
import xdg.DesktopEntry as dentry
1011
import xdg.Exceptions as exc
1112
import xdg.BaseDirectory as bd
@@ -431,7 +432,10 @@ def sortedcategories(applist):
431432
categories = []
432433
for e in applist:
433434
categories.append(e.category)
434-
categories = sorted(set(categories))
435+
categories = sorted(
436+
set(categories),
437+
key=lambda category: locale.strxfrm(category.decode())
438+
)
435439
return categories
436440

437441

@@ -485,7 +489,13 @@ def menu(ico_paths=True):
485489
except exc.ParsingError:
486490
pass
487491

488-
sortedapplist = sorted(applist, key=attrgetter('category', 'app.name'))
492+
sortedapplist = sorted(
493+
applist,
494+
key=lambda entry: (
495+
locale.strxfrm(entry.category.decode()),
496+
locale.strxfrm(entry.app.name.decode()),
497+
)
498+
)
489499

490500
menu = []
491501
for c in sortedcategories(applist):
@@ -925,4 +935,5 @@ def openbox():
925935

926936

927937
if __name__ == "__main__":
938+
locale.setlocale(locale.LC_COLLATE, '')
928939
main(sys.argv[1:])

0 commit comments

Comments
 (0)