Browse Source

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.
pull/34/head
Balló György 4 months ago
parent
commit
7328143784
  1. 15
      src/xdgmenumaker

15
src/xdgmenumaker

@ -6,6 +6,7 @@ import os
import sys import sys
import getopt import getopt
import fnmatch import fnmatch
import locale
import xdg.DesktopEntry as dentry import xdg.DesktopEntry as dentry
import xdg.Exceptions as exc import xdg.Exceptions as exc
import xdg.BaseDirectory as bd import xdg.BaseDirectory as bd
@ -431,7 +432,10 @@ def sortedcategories(applist):
categories = [] categories = []
for e in applist: for e in applist:
categories.append(e.category) categories.append(e.category)
categories = sorted(set(categories)) categories = sorted(
set(categories),
key=lambda category: locale.strxfrm(category.decode())
)
return categories return categories
@ -485,7 +489,13 @@ def menu(ico_paths=True):
except exc.ParsingError: except exc.ParsingError:
pass pass
sortedapplist = sorted(applist, key=attrgetter('category', 'app.name')) sortedapplist = sorted(
applist,
key=lambda entry: (
locale.strxfrm(entry.category.decode()),
locale.strxfrm(entry.app.name.decode()),
)
)
menu = [] menu = []
for c in sortedcategories(applist): for c in sortedcategories(applist):
@ -925,4 +935,5 @@ def openbox():
if __name__ == "__main__": if __name__ == "__main__":
locale.setlocale(locale.LC_COLLATE, '')
main(sys.argv[1:]) main(sys.argv[1:])

Loading…
Cancel
Save