From 6a8321b31233b9172f22f160b26a58e894eb842e Mon Sep 17 00:00:00 2001 From: Guilherme Rugai Freire <41879254+GRFreire@users.noreply.github.com> Date: Fri, 20 Aug 2021 08:13:51 -0300 Subject: [PATCH] simple-power-menu: convert to posix compliant --- bin/simple-power-menu | 2 +- simple-power-menu/simple-power-menu.bash | 79 ------------------------ simple-power-menu/simple-power-menu.sh | 56 +++++++++++++++++ 3 files changed, 57 insertions(+), 80 deletions(-) delete mode 100755 simple-power-menu/simple-power-menu.bash create mode 100755 simple-power-menu/simple-power-menu.sh diff --git a/bin/simple-power-menu b/bin/simple-power-menu index 7bd30e1..f34d3cb 120000 --- a/bin/simple-power-menu +++ b/bin/simple-power-menu @@ -1 +1 @@ -../simple-power-menu/simple-power-menu.bash \ No newline at end of file +../simple-power-menu/simple-power-menu.sh \ No newline at end of file diff --git a/simple-power-menu/simple-power-menu.bash b/simple-power-menu/simple-power-menu.bash deleted file mode 100755 index 10fbea1..0000000 --- a/simple-power-menu/simple-power-menu.bash +++ /dev/null @@ -1,79 +0,0 @@ -#!/bin/bash - -if [ "$(command -v rofi)" ]; then - CMD='rofi -dmenu'; -elif [ "$(command -v dmenu)" ]; then - CMD='dmenu'; -else - echo 'Could not find either dmenu or rofi, exiting' - exit 1; -fi - -fn_logout() { - if [[ $DESKTOP_SESSION =~ ^.*openbox$ ]]; then - openbox --exit - elif [[ $DESKTOP_SESSION =~ ^.*i3$ ]]; then - i3-msg exit - elif [[ $DESKTOP_SESSION =~ ^.*qtile$ ]]; then - qtile shell -c 'shutdown()' - elif [[ $DESKTOP_SESSION =~ ^.*fluxbox$ ]]; then - killall fluxbox - elif [[ $DESKTOP_SESSION =~ ^.*bspwm$ ]]; then - bspc quit 1 - else - loginctl terminate-session "${XDG_SESSION_ID-}" - fi -} - -OPTIONS=( - "Shutdown" - "Reboot" - "Suspend" - "Log out" -) - -OPTIONS_CMD=( - "systemctl poweroff" - "systemctl reboot" - "systemctl suspend" - "fn_logout" -) - -PROMPT=$(printf "%s\\\\n" "${OPTIONS[@]}") -PROMPT="${PROMPT%??}" - -PROMPT_LENGHT="${#OPTIONS[@]}" - -CHOICE=$(echo -e "$PROMPT" | $CMD -l "$PROMPT_LENGHT" -p "Power Menu") - -if [[ -z $CHOICE ]]; then - exit 0; -fi - -CAN_PROCEDE=0 -for i in "${!OPTIONS[@]}"; do - if [[ "${OPTIONS[$i]}" = "${CHOICE}" ]]; then - CAN_PROCEDE=1 - fi -done - -if [ $CAN_PROCEDE -eq 0 ]; then - exit 0; -fi - -CONFIRMATION_CHOICES="no\nyes" -CONFIRMATION=$(echo -e $CONFIRMATION_CHOICES | $CMD -l 2 -p "Do you want to $CHOICE") - -if [ -z "$CONFIRMATION" ]; then - exit 0; -fi - -if [ "$CONFIRMATION" != yes ]; then - exit 0; -fi - -for i in "${!OPTIONS[@]}"; do - if [[ "${OPTIONS[$i]}" = "${CHOICE}" ]]; then - ${OPTIONS_CMD[i]} - fi -done diff --git a/simple-power-menu/simple-power-menu.sh b/simple-power-menu/simple-power-menu.sh new file mode 100755 index 0000000..f820f9d --- /dev/null +++ b/simple-power-menu/simple-power-menu.sh @@ -0,0 +1,56 @@ +#!/bin/sh + +if [ "$(command -v rofi)" ]; then + CMD='rofi -dmenu'; +elif [ "$(command -v dmenu)" ]; then + CMD='dmenu'; +else + echo 'Could not find either dmenu or rofi, exiting' + exit 1; +fi + +fn_logout() { + case "$DESKTOP_SESSION" in + *openbox*) openbox --exit;; + *i3*) i3-msg exit;; + *qtile*) qtile shell -c 'shutdown()';; + *fluxbox*) killall fluxbox;; + *bspwm*) bspc quit 1;; + *) loginctl terminate-session "${XDG_SESSION_ID-}";; + esac +} + +OPTIONS="\ +Shutdown \tsystemctl poweroff +Reboot \tsystemctl reboot +Suspend \tsystemctl suspend +Log out \tfn_logout" + +PROMPT="$(echo "$OPTIONS" | awk -F"\t" '{print $1}')" + +PROMPT_LENGHT="$(echo "$PROMPT" | wc -l)" + +CHOICE="$(echo "$PROMPT" | $CMD -l "$PROMPT_LENGHT" -p "Power Menu" | xargs)" + +if [ -z "$CHOICE" ]; then + exit 0; +fi + +COMMAND="$(echo "$OPTIONS" | grep "$CHOICE" | awk -F"\t" '{print $2}')" + +if [ -z "$COMMAND" ]; then + exit 0; +fi + +CONFIRMATION_CHOICES="no\nyes" +CONFIRMATION="$(echo $CONFIRMATION_CHOICES | $CMD -l 2 -p "Do you want to $CHOICE")" + +if [ -z "$CONFIRMATION" ]; then + exit 0; +fi + +if [ "$CONFIRMATION" != yes ]; then + exit 0; +fi + +$COMMAND