summarylogtreecommitdiffstats
path: root/fbrokendesktop.py
diff options
context:
space:
mode:
authorsmac892023-05-19 12:13:43 -0600
committersmac892023-05-19 12:13:43 -0600
commit593f0225af421a342e426e116a23186bf9b26918 (patch)
tree18594984424035abe8912228521a32aafcefc0d7 /fbrokendesktop.py
downloadaur-593f0225af421a342e426e116a23186bf9b26918.tar.gz
initial release v1
Diffstat (limited to 'fbrokendesktop.py')
-rwxr-xr-xfbrokendesktop.py45
1 files changed, 45 insertions, 0 deletions
diff --git a/fbrokendesktop.py b/fbrokendesktop.py
new file mode 100755
index 000000000000..7854adf05726
--- /dev/null
+++ b/fbrokendesktop.py
@@ -0,0 +1,45 @@
+#!/usr/bin/python3
+
+import glob
+import re
+import shlex
+import shutil
+
+from os import path
+
+from xdg import BaseDirectory
+from xdg.DesktopEntry import DesktopEntry
+
+# allow matching empty envs with .*
+env_re = re.compile(r'\w+=.*')
+
+def find_missing_desktop_files(desktop_dir: str):
+ for df in glob.iglob('*.desktop', root_dir=desktop_dir):
+ de = DesktopEntry(path.join(desktop_dir, df))
+ if exc := (de.getTryExec() or de.getExec()):
+ cmd = shlex.split(exc)
+ if cmd[0] == 'exec':
+ cmd = cmd[1:]
+ if cmd[0] == 'env':
+ cmd = cmd[1:]
+
+ for tok in cmd:
+ # ignore all attempts to set environment variables
+ if not env_re.match(tok):
+ if not shutil.which(tok):
+ yield shlex.quote(de.getFileName())
+ break
+
+def find_desktop_directories():
+ """
+ https://wiki.archlinux.org/title/desktop_entries#Modify_desktop_files
+ https://wiki.archlinux.org/title/XDG_Autostart#Directories
+ """
+ yield from BaseDirectory.load_data_paths('applications')
+ yield from BaseDirectory.load_config_paths('autostart')
+
+# TODO add option to respect NotShowIn and NoDisplay options
+if __name__ == '__main__':
+ for d in find_desktop_directories():
+ for df in find_missing_desktop_files(d):
+ print (df)