summary refs log tree commit diff
path: root/bin/xdg-exec
diff options
context:
space:
mode:
authorRobert Günzler <r@gnzler.io>2022-11-18 18:23:41 +0100
committerRobert Günzler <r@gnzler.io>2022-11-18 18:38:23 +0100
commit739b3e702b0f53bd41644795a8c3b6e26465e011 (patch)
tree36b91f86108fd6e5f84838b20823cb4694266668 /bin/xdg-exec
parent8b0dc4835248397303ba932235394a726ad05309 (diff)
bin/xdg-exec: refactor
Diffstat (limited to 'bin/xdg-exec')
-rwxr-xr-xbin/xdg-exec21
1 files changed, 12 insertions, 9 deletions
diff --git a/bin/xdg-exec b/bin/xdg-exec
index 32801de..7f8ab5e 100755
--- a/bin/xdg-exec
+++ b/bin/xdg-exec
@@ -8,17 +8,20 @@
 #  ln -s <path/to/this/script> /usr/local/bin/app.desktop
 #
 
-XDG_DESKTOP_ENTRY_DIR=$HOME/.local/share/applications
-set -ex
+set -e
 basepath=$(dirname "$0" | sed 's#/bin#/share/applications#')
 basename=$(basename "$0" | sed -e 's/^_//' -e 's/.desktop$//')
+
+# try ~/.local/share/applications first:
+XDG_DESKTOP_ENTRY_DIR=$HOME/.local/share/applications
 if [ -e "${XDG_DESKTOP_ENTRY_DIR}/${basename}.desktop" ]; then
-				desktop=${XDG_DESKTOP_ENTRY_DIR}/${basename}.desktop
+	desktop=${XDG_DESKTOP_ENTRY_DIR}/${basename}.desktop
 else
-				desktop=${basepath}/${basename}.desktop
+	desktop=${basepath}/${basename}.desktop
 fi
-bin=$(awk '
-/^TryExec=/{split($0,l,"="); if(not system("command -v l[2]")){exit 1}}
-/^Exec=/{printf gensub(/Exec=([^%]+).*$/, "\\1", "")}
-' "$desktop" | sed 's/%.$//')
-exec ${bin} "$@"
+exe=$(
+	awk 'BEGIN{try=true;exe="";} /^;/{next} /^TryExec=/{try=gensub(/^TryExec=([^%]*).*$/, "\\1", "g")} /^Exec=/{if(exe==""){exe=gensub(/^Exec=([^%]*).*$/, "\\1", "g")}} END{if(system("command -v " try " >/dev/null")!=0){exit 1}; gsub(/\s$/, "", exe); print exe}' "$desktop"
+)
+
+set -x
+exec sh -c "${exe} \"$*\""