diff options
| -rwxr-xr-x | bin/xdg-exec | 21 |
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} \"$*\"" |