mirror of
https://github.com/kovidgoyal/kitty
synced 2026-06-08 14:18:26 +02:00
...
This commit is contained in:
20
kitty/xdg.py
20
kitty/xdg.py
@@ -31,35 +31,35 @@ class XDGIconCache:
|
|||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
self.existing_icon_names: set[str] = set()
|
self.existing_icon_names: set[str] = set()
|
||||||
self.scanned = False
|
self.scanned = False
|
||||||
self.themes_to_search: set[str] = set()
|
|
||||||
|
|
||||||
def find_inherited_themes(self, basedir: str, seen_indexes: set[str]) -> bool:
|
def find_inherited_themes(self, basedir: str, seen_indexes: set[str], themes_to_search: set[str]) -> bool:
|
||||||
if basedir not in seen_indexes:
|
if basedir not in seen_indexes:
|
||||||
seen_indexes.add(basedir)
|
seen_indexes.add(basedir)
|
||||||
with suppress(OSError), open(os.path.join(basedir, 'index.theme')) as f:
|
with suppress(OSError), open(os.path.join(basedir, 'index.theme')) as f:
|
||||||
raw = f.read()
|
raw = f.read()
|
||||||
if m := re.search(r'^Inherits\s*=\s*(.+?)$', raw, re.MULTILINE):
|
if m := re.search(r'^Inherits\s*=\s*(.+?)$', raw, re.MULTILINE):
|
||||||
for x in m.group(1).split(','):
|
for x in m.group(1).split(','):
|
||||||
self.themes_to_search.add(x.strip())
|
themes_to_search.add(x.strip())
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def scan(self) -> None:
|
def scan(self) -> None:
|
||||||
|
themes_to_search: set[str] = set()
|
||||||
self.scanned = True
|
self.scanned = True
|
||||||
seen_indexes: set[str] = set()
|
seen_indexes: set[str] = set()
|
||||||
for icdir in icon_dirs():
|
for icdir in icon_dirs():
|
||||||
if self.find_inherited_themes(os.path.join(icdir, 'default'), seen_indexes):
|
if self.find_inherited_themes(os.path.join(icdir, 'default'), seen_indexes, themes_to_search):
|
||||||
break
|
break
|
||||||
self.themes_to_search.add('hicolor')
|
themes_to_search.add('hicolor')
|
||||||
while True:
|
while True:
|
||||||
before = len(self.themes_to_search)
|
before = len(themes_to_search)
|
||||||
for icdir in icon_dirs():
|
for icdir in icon_dirs():
|
||||||
for theme in tuple(self.themes_to_search):
|
for theme in tuple(themes_to_search):
|
||||||
self.find_inherited_themes(os.path.join(icdir, theme), seen_indexes)
|
self.find_inherited_themes(os.path.join(icdir, theme), seen_indexes, themes_to_search)
|
||||||
if len(self.themes_to_search) == before:
|
if len(themes_to_search) == before:
|
||||||
break
|
break
|
||||||
for icdir in icon_dirs():
|
for icdir in icon_dirs():
|
||||||
for theme in self.themes_to_search:
|
for theme in themes_to_search:
|
||||||
self.scan_theme_dir(os.path.join(icdir, theme))
|
self.scan_theme_dir(os.path.join(icdir, theme))
|
||||||
self.scan_theme_dir('/usr/share/pixmaps')
|
self.scan_theme_dir('/usr/share/pixmaps')
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user