#!/usr/bin/env bash
# plik receptury: run_screen
# run-screen--Skrypt osłonowy wywoływany ze skryptu "profile"
# i przeznaczony do uruchamiania narzędzia screen podczas logowania

# Walidacja danych
if [ "$TERM" == "screen" ]; then
    printf "%b" "Powrót do \$TERM = '$TERM' aplikacja screen już jest" \
      " uruchomiona.\nPrzerwanie...\n"
    exit 1
elif [ "$USING_SCREEN" == "YES" ]; then
    printf "%b" "Zgodnie z ustawieniem \$USING_SCREEN = '$USING_SCREEN'"
      " aplikacja screen jest uruchomiona.\nPrzerwanie...\n"
    exit 1
fi

# Zmienna "$USING_SCREEN" jest wykorzystywana w nielicznych przypadkach, gdy
# program screen nie ustawia wartości $TERM=screen. Takie sytuacje zdarzają się
# gdy 'screen' nie korzysta z mechanizmu TERMCAP, na przykład w systemie
# Solaris 9. Gdyby nie można było ustalić, czy sesja screen jest już uruchomiona
# skrypt wykonywałby pętlę nieskończoną

# Dodanie do listy opcji pozycji Wyjście i Nowa. Sprawdzenie, czy
# są uruchomione sesje screen. Lista opcji jest rozdzielona znakami spacji,
# i obejmuje aktywne sesje screen. Do wyodrębnienia właściwych pozycji
# wykorzystany został program awk. Znaki tabulatora występujące w listingu
# wynikowym polecenia 'screen -ls' są usuwane.
available_screens="Wyjście Nowa $(screen -ls | awk '/\)$/ { print $1$2$3 }' \
  | tr -d ' ')"

# Wyświetlenie komunikatu w przypadku ustawienia zmiennej $run_time_feedback
run_time_feedback=0
[ "$run_time_feedback" == 1 ] && printf "%b" "
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Uwagi na temat programu 'screen':

1) Jeśli przyłączysz się ponownie do aktywnej sesji, 'przejmiesz'
tę sesję.

2) Sesja oznaczona jako 'multi' jest sesją wielu użytekowników. Bądź
ostrożny przyłączając się ponownie.

3) Sesje oznaczone jako 'unreachable' lub 'dead' powinny zostać sprawdzone
i usunięte za pomocą opcji -wipe.\n\n"


# Wyświetlenie listy opcji
PS3='Wybierz sesję screen: '
select selection in $available_screens; do
    if [ "$selection" == "Wyjście" ]; then
        break
    elif [ "$selection" == "Nowa" ]; then
        export USING_SCREEN=YES
        exec screen -c $SETTINGS/screenrc -a \
                    -S $USER.$(date '+%Y-%m-%d_%H:%M:%S%z')
        break
    elif [ "$selection" ]; then
        # Wyodrębnienie za pomocą polecenia cut potrzebnego fragmentu
        # Można by tutaj zastosować 'osadzony dokument' 
        # $(cut -d'(' -f1 <<< $selection)] zamiast instrukcji echo, 
        # ale mechanizm ten jest obsługiwany
        # w powłokach bash-2.05 i późniejszych
        screen_to_use=$(echo $selection | cut -d'(' -f1)
        exec screen -dr $screen_to_use
        break
    else
        printf "%b" "Błędny wybór.\n"
    fi
done
