#!/bin/bash # shellcheck source=kz-common.sh ############################################################################### # GUI wijzigen. # # Geschreven door Karel Zimmer . ############################################################################### PROGRAM_PATH=$(realpath "$(dirname "$0")") readonly PROGRAM_PATH source "$PROGRAM_PATH"/kz-common.sh readonly PROGRAM_NAME='kz-gset' readonly DISPLAY_NAME=${PROGRAM_NAME/kz-/kz } readonly RELEASE_YEAR=2015 ############################################################################### # Global constants ############################################################################### readonly OPTIONS_SHORT=$OPTIONS_SHORT_COMMON'a:b:d:lrf:x:' readonly OPTIONS_LONG=$OPTIONS_LONG_COMMON",addfavaft:,addfavbef:,delfav:,\ list,resetfavs,addappfolder:,delappfolder:" readonly USAGE="Gebruik: $DISPLAY_NAME [-a|--addfavaft=FAVORITE] \ [-b|--addfavbef=FAVORITE] [-d|--delfav=FAVORITE] [-l|--list] [-r|--resetfavs] [-f|--addappfolder=APPFOLDER] [-x|--delappfolder=APPFOLDER] $OPTIONS_USAGE_COMMON" readonly HELP="Gebruik: $DISPLAY_NAME [OPTIE...] GUI wijzigen. Opties: -a, --addfavaft=FAVORITE voeg FAVORITE toe aan het einde -b, --addfavbef=FAVORITE voeg FAVORITE toe aan het begin -d, --delfav=FAVORITE verwijder FAVORITE -l, --list list favorits en appfolders -r, --resetfavs reset favorites -f, --addappfolder=APPFOLDER voeg APPFOLDER toe -x, --delappfolder=APPFOLDER verwijder APPFOLDER $OPTIONS_HELP_COMMON" ############################################################################### # Global variables ############################################################################### declare APPFOLDER='' declare CONFIG_A='' declare CONFIG_B='' declare DESKTOPFILE='' declare FAVORITE_ARGUMENT='' declare FOLDER_ARGUMENT='' declare OPTION_ADDAPPFOLDER=false declare OPTION_ADDFAVAFT=false declare OPTION_ADDFAVBEF=false declare OPTION_DELAPPFOLDER=false declare OPTION_DELFAV=false declare OPTION_LIST=false declare OPTION_RESETFAVS=false ############################################################################### # Functions ############################################################################### function check_input { local -i getopt_rc=0 local parsed='' parsed=$( getopt --alternative \ --options "$OPTIONS_SHORT" \ --longoptions "$OPTIONS_LONG" \ --name "$DISPLAY_NAME" \ -- "$@" ) || getopt_rc=$? if [[ $getopt_rc -ne $SUCCESS ]]; then process_usage NOERROR=true exit $ERROR fi eval set -- "$parsed" process_common_options "$@" while true; do case $1 in -a|--addfavaft) OPTION_ADDFAVAFT=true FAVORITE_ARGUMENT=$2 shift 2 ;; -b|--addfavbef) OPTION_ADDFAVBEF=true FAVORITE_ARGUMENT=$2 shift 2 ;; -d|--delfav) OPTION_DELFAV=true FAVORITE_ARGUMENT=$2 shift 2 ;; -l|--list) OPTION_LIST=true shift ;; -r|--resetfavs) OPTION_RESETFAVS=true shift ;; -f|--addappfolder) OPTION_ADDAPPFOLDER=true FOLDER_ARGUMENT=$2 shift 2 ;; -x|--delappfolder) OPTION_DELAPPFOLDER=true FOLDER_ARGUMENT=$2 shift 2 ;; --) shift break ;; *) shift ;; esac done if [[ "$*" ]]; then info 'Geen argumenten toegestaan.' process_usage NOERROR=true exit $ERROR fi APPFOLDER=$FOLDER_ARGUMENT DESKTOPFILE=$FAVORITE_ARGUMENT.desktop check_user_root } function process_input { if $OPTION_ADDFAVAFT; then process_option_addfavaft elif $OPTION_ADDFAVBEF; then process_option_addfavbef elif $OPTION_DELFAV; then process_option_delfav elif $OPTION_LIST; then process_option_list elif $OPTION_RESETFAVS; then process_option_resetfavs elif $OPTION_ADDAPPFOLDER; then process_option_addappfolder elif $OPTION_DELAPPFOLDER; then process_option_delappfolder else capture_gui_changes fi } function process_option_addfavaft { local favorite_apps='' favorite_apps=$(gsettings get org.gnome.shell favorite-apps) if [[ $favorite_apps = '@as []' ]]; then gsettings set org.gnome.shell favorite-apps "['$DESKTOPFILE']" elif ! printf '%s' "$favorite_apps" | grep --quiet --word-regexp --regexp="$DESKTOPFILE"; then gsettings set org.gnome.shell favorite-apps "$( printf '%s' "$favorite_apps" | cut --delimiter=']' --fields=1 ), '$DESKTOPFILE']" fi } function process_option_addfavbef { local favorite_apps='' favorite_apps=$(gsettings get org.gnome.shell favorite-apps) if [[ $favorite_apps = '@as []' ]]; then gsettings set org.gnome.shell favorite-apps "['$DESKTOPFILE']" elif ! printf '%s' "$favorite_apps" | grep --quiet --word-regexp --regexp="$DESKTOPFILE"; then gsettings set org.gnome.shell favorite-apps \ "['$DESKTOPFILE', $( printf '%s' "$favorite_apps" | cut --delimiter='[' --fields=2 )" fi } function process_option_delfav { local favorite_apps='' favorite_apps=$(gsettings get org.gnome.shell favorite-apps) if [[ $favorite_apps = '@as []' ]]; then : elif [[ $favorite_apps = "['$DESKTOPFILE']" ]]; then gsettings set org.gnome.shell favorite-apps "[]" else gsettings set org.gnome.shell favorite-apps "$( printf '%s' "$favorite_apps" | sed --expression="s/'$DESKTOPFILE', //g" | sed --expression="s/, '$DESKTOPFILE'//" )" fi } function process_option_list { gsettings get org.gnome.shell favorite-apps gsettings get org.gnome.desktop.app-folders folder-children } function process_option_resetfavs { gsettings reset org.gnome.shell favorite-apps } function process_option_addappfolder { local app_folders='' local schema='' local path='' app_folders=$(gsettings get org.gnome.desktop.app-folders folder-children) if [[ $app_folders = '@as []' ]]; then set org.gnome.desktop.app-folders folder-children "['$APPFOLDER']" elif ! printf '%s' "$app_folders" | grep --quiet \ --word-regexp \ --regexp="$APPFOLDER"; then gsettings set org.gnome.desktop.app-folders folder-children "$( printf '%s' "$app_folders" | cut --delimiter=']' --fields=1 ), '$APPFOLDER']" fi schema=org.gnome.desktop.app-folders.folder path=/org/gnome/desktop/app-folders/folders/$APPFOLDER/ gsettings set "$schema":"$path" name "$APPFOLDER" gsettings set "$schema":"$path" translate true gsettings set "$schema":"$path" categories "['$APPFOLDER']" } function process_option_delappfolder { local app_folders='' local schema='' local path='' app_folders=$(gsettings get org.gnome.desktop.app-folders folder-children) if [[ $app_folders = '@as []' ]]; then : elif [[ $app_folders = "['$APPFOLDER']" ]]; then gsettings set org.gnome.desktop.app-folders folder-children "[]" else gsettings set org.gnome.desktop.app-folders folder-children "$( printf '%s' "$app_folders" | sed --expression="s/, '$APPFOLDER'//" )" fi schema=org.gnome.desktop.app-folders.folder path=/org/gnome/desktop/app-folders/folders/$APPFOLDER/ gsettings reset-recursively "$schema":"$path" } function capture_gui_changes { CONFIG_A=$(mktemp -t "$PROGRAM_NAME-A-XXXXXXXXXX.lst") save_configuration_database A "$CONFIG_A" info 'Voer nu de wijziging uit in de grafische werkomgeving.' read -rp 'Druk op de Enter-toets wanneer gereed [Enter]: ' CONFIG_B=$(mktemp -t "$PROGRAM_NAME-B-XXXXXXXXXX.lst") save_configuration_database B "$CONFIG_B" report_database_changes "$CONFIG_A" "$CONFIG_B" } function save_configuration_database { local fase=${1:-fase?} local output_file=${2:-output_file?} gsettings list-recursively > "$output_file" 2> >($LOGCMD) sort --unique \ --output="$output_file" \ "$output_file" info "Inhoud configuratiedatabase vastgelegd ($fase)." } function report_database_changes { local output_file1=${1:-output_file1?} local output_file2=${2:-output_file2?} info ' WIJZIGINGen in de configuratiedatabase, < is de oude instelling (A), > is de nieuwe instelling (B):' diff "$output_file1" "$output_file2" | grep --regexp='[>|<]' || true info " Bij WIJZIGINGen voer uit: ${BLUE}gsettings set WIJZIGING${NORMAL}" rm "$CONFIG_A" "$CONFIG_B" } function term_script { exit $SUCCESS } ############################################################################### # Script ############################################################################### function main { init_script "$@" check_input "$@" process_input term_script } main "$@"