diff options
| author | Moritz Meißelbach <arbelzapf@gmail.com> | 2020-02-06 23:57:42 +0100 |
|---|---|---|
| committer | Moritz Meißelbach <arbelzapf@gmail.com> | 2020-02-06 23:57:42 +0100 |
| commit | aefd5ae9bc87a56081462ee56c50f5ba722d26e7 (patch) | |
| tree | ba9a3b66d0c095e206070c1776ad17ff62666199 /sway-launcher-desktop.sh | |
| parent | c1632f9797936a46587bf959a8be07c23768ca13 (diff) | |
| download | sway-launcher-desktop-aefd5ae9bc87a56081462ee56c50f5ba722d26e7.tar.gz sway-launcher-desktop-aefd5ae9bc87a56081462ee56c50f5ba722d26e7.zip | |
Add function to list and execute application desktop files from XDG autostart folders. Fixes #16
Diffstat (limited to 'sway-launcher-desktop.sh')
| -rwxr-xr-x | sway-launcher-desktop.sh | 54 |
1 files changed, 51 insertions, 3 deletions
diff --git a/sway-launcher-desktop.sh b/sway-launcher-desktop.sh index 4b0a52b..6e1d055 100755 --- a/sway-launcher-desktop.sh +++ b/sway-launcher-desktop.sh @@ -18,8 +18,8 @@ GLYPH_DESKTOP=" " CONFIG_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/sway-launcher-desktop" PROVIDERS_FILE="${PROVIDERS_FILE:=providers.conf}" if [[ "${PROVIDERS_FILE#/}" == "${PROVIDERS_FILE}" ]]; then - # $PROVIDERS_FILE is a relative path, prepend $CONFIG_DIR - PROVIDERS_FILE="${CONFIG_DIR}/${PROVIDERS_FILE}" + # $PROVIDERS_FILE is a relative path, prepend $CONFIG_DIR + PROVIDERS_FILE="${CONFIG_DIR}/${PROVIDERS_FILE}" fi # Provider config entries are separated by the field separator \034 and have the following structure: @@ -178,8 +178,56 @@ function generate-command() { }' "$1" } +function autostart() { + for application in $(list-autostart); do + (exec setsid /bin/sh -c "$(run-desktop "${application}")" &>/dev/null &) + done +} + +function list-autostart() { + # Get locations of desktop application folders according to spec + # https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html + IFS=':' read -ra DIRS <<<"${XDG_CONFIG_HOME-${HOME}/.config}:${XDG_CONFIG_DIRS-/etc/xdg}" + for i in "${!DIRS[@]}"; do + if [[ ! -d "${DIRS[i]}" ]]; then + unset -v 'DIRS[$i]' + else + DIRS[$i]="${DIRS[i]}/autostart/*.desktop" + fi + done + + # shellcheck disable=SC2068 + awk -v pre="$GLYPH_DESKTOP" -F= ' + function desktopFileID(filename){ + sub("^.*autostart/", "", filename); + sub("/", "-", filename); + return filename + } + BEGINFILE{ + application=0; + block=""; + a=0 + + id=desktopFileID(FILENAME) + if(id in fileIds){ + nextfile; + }else{ + fileIds[id]=0 + } + } + /^\[Desktop Entry\]/{block="entry"} + /^Type=Application/{application=1} + /^Name=/{ iname=$2 } + ENDFILE{ + if (application){ + print FILENAME; + } + }' \ + ${DIRS[@]} </dev/null +} + case "$1" in -describe | describe-desktop | describe-command | entries | list-entries | list-commands | generate-command | run-desktop | provide) +describe | describe-desktop | describe-command | entries | list-entries | list-commands | list-autostart | generate-command | autostart | run-desktop | provide) "$@" exit ;; |
