aboutsummaryrefslogtreecommitdiffstats
path: root/sway-launcher-desktop.sh
diff options
context:
space:
mode:
authorMoritz Meißelbach <arbelzapf@gmail.com>2020-02-06 23:57:42 +0100
committerMoritz Meißelbach <arbelzapf@gmail.com>2020-02-06 23:57:42 +0100
commitaefd5ae9bc87a56081462ee56c50f5ba722d26e7 (patch)
treeba9a3b66d0c095e206070c1776ad17ff62666199 /sway-launcher-desktop.sh
parentc1632f9797936a46587bf959a8be07c23768ca13 (diff)
downloadsway-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-xsway-launcher-desktop.sh54
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
;;