ZENITY - uatrakcyjnij swoje skrypty

Transkrypt

ZENITY - uatrakcyjnij swoje skrypty
Formy dialogowe w środowisku Gnome
Środowisko graficzne Gnome posiada wiele atrakcyjnych funkcji, które często nie są przez
administratorów wykorzystywane. Jedną z nich jest dołączony zestaw form dialogowych o nazwie
Zenity ( http://library.gnome.org/users/zenity/stable/ ).
Formy dialogowe Zenity mogą (i powinny) być używane w celu ułatwienia użytkownikom oraz
administratorom i operatorom systemu wykorzystywania skryptów powłokowych. Formy Zenity
umożliwiają przekazywanie informacji do i ze skryptów przy użyciu intuicyjnych mechanizmów
środowiska graficznego.
Najprostszą funkcją, które można zrealizować za pomocą form Zenity jest funkcja informowania
użytkownika. Do wyświetlania informacji służą następujące formy dialogowe:
Info:
Forma dialogowa wyświetlająca przygotowany wcześniej komunikat:
zenity --info –text="Kopiowanie zakończone."
Informacja będzie wyświetlana do czasu naciśnięcia myszką „przycisku” OK. Dalsze
wykonywanie (lub zakończenie) skryptu, z którego wywołano formę informacyjną zostanie
wstrzymane do czasu „naciśnięcia” OK. Forma informacyjna nie jest przeznaczona do
przekazywania danych do skryptu.
Question:
Forma wymuszająca odpowiedź na dowolne pytanie:
zenity --question
--text="Czy na pewno chcesz kontynuować?"
Forma „pytanie” kończy swoje działanie po wybraniu „Anuluj” lub „OK”. W przypadku
Uzupełniające materiały szkoleniowe
Tomasz Barbaszewski, Kraków 2012
Strona 1 z 9
Formy dialogowe w środowisku Gnome
naciśnięcia przycisku „OK” kodem wyjścia formy jest „0”, zaś jeśli naciśniemy „Anuluj” forma
zakończy działanie z kodem „1”.
Kod wyjścia znajdzie się w specjalnej zmiennej powłokowej $?:
zenity --question --text="Czy na pewno chcesz kontynuować?";echo $?
W zależności od tego, jaki przycisk naciśniemy myszką w oknie terminala, z którego
wywołaliśmy formę pojawi się „0” lub „1”:
Warning:
Forma tak jest bardziej zbliżona do formy „Info” niż do formy „Question”:
zenity --warning --text="Czy na pewno chcesz kontynuować?"
Uzupełniające materiały szkoleniowe
Tomasz Barbaszewski, Kraków 2012
Strona 2 z 9
Formy dialogowe w środowisku Gnome
Error:
Ostatnią formą informacyjną jest forma przeznaczona do sygnalizacji błędu:
zenity --error
jeśli nie wprowadzimy własnego tekstu zostanie wyświetlona informacja standardowa:
Notification:
Forma różniąca się od pozostałych form informacyjnych – nie powoduje ona wyświetlenia
nowego okna, lecz dodaje ikonkę (aktywator) na panelu Gnome. Ikonę aktywatora można wybrać w
taki sposób, aby sugerowała ona rodzaj informacji. Jeśli naprowadzimy kursor myszki na ikonkę
wyświetlony zostanie „dymek” z treścią podaną w opcji „text”:
zenity --notification --window-icon="info"
--text="Coś trzeba zrobić" #1
zenity --notification --window-icon="warning"
1
--text="Nie rób tego" #2
2
Jeśli „naciśniemy” ikonkę na pasku forma „Notification” zakończy pracę z kodem wyjścia „0”,
co umożliwi kontynuowanie skryptu, którego została wywołana forma „Notification”.
Uzupełniające materiały szkoleniowe
Tomasz Barbaszewski, Kraków 2012
Strona 3 z 9
Formy dialogowe w środowisku Gnome
Progress (pasek postępu):
Forma dialogowa umożliwiająca wyświetlania okna z paskiem postępu. Musi ona
współpracować ze skryptem powłokowym. Współpraca jest realizowana w następujący sposób:
#!/bin/sh
(
echo "10" ; sleep 1
echo "# Pobieranie plików uaktualnienia" ; sleep 1
echo "20" ; sleep 2
echo "# Tworzenie katalogów" ; sleep 1
echo "50" ; sleep 1
echo "Usuwanie poprzedniej wersji" ; sleep 1
echo "75" ; sleep 3
echo "# Start usług" ; sleep 1
echo "100" ; sleep 1
) |
zenity --progress \
--title="Uaktualnianie oprogramowania" \
--text="Sprawdzanie wersji..." \
--percentage=0
if [ "$?" = -1 ] ; then
zenity --error \
--text="Błąd uaktualnienia. Koniec."
fi
Jak widać z analizy powyższego skryptu zenity czyta dane ze standardowego wejścia „linia po
linii”.
Jeśli linia rozpoczyna się od znaku „#” to następujący po tym znaku tekst jest przejmowany do
wyświetlenia (nad paskiem postępu). Jeśli linia zawiera jedynie liczbę to zostanie wyświetlony
pasek postępu o długości (w procentach) określonej przez tą liczbę.
Taka obsługa paska postępu pozwala na wstawianie „punktów kontrolnych” w określenie etapu,
na jakim program się znajduje. Oczywiście w miejsce polecań „sleep” należy wstawić odpowiednie
procedury realizujące kolejne etapy działań (w tym przypadku uaktualnienia programu).
Uzupełniające materiały szkoleniowe
Tomasz Barbaszewski, Kraków 2012
Strona 4 z 9
Formy dialogowe w środowisku Gnome
Text Entry – wprowadzenie danej:
Forma dialogowa umożliwiająca wprowadzenie danej tekstowej do skryptu. Zenity otwiera okno
zawierające zdefiniowany tekst oraz pole umożliwiające wprowadzanie znaków w klawiatury:
Wprowadzona dana jest traktowana jako tekst i przekazywana na standardowe wyjście. Dana
może być podstawiona do zmiennej:
[tomekb@main ~]$ ZMIENNA=`zenity --entry --text="Wprowadż daną:"`
[tomekb@main ~]$ echo $ZMIENNA
123
Wprowadzanie danej można „utajnić” wykorzystując opcję --hide-text:
Uzupełniające materiały szkoleniowe
Tomasz Barbaszewski, Kraków 2012
Strona 5 z 9
Formy dialogowe w środowisku Gnome
List – wybór elementu z listy:
Forma list wyświetla listę elementów ułożonych wierszach zawierających kolumny.
W przykładowym skrypcie pierwsza kolumna zawiera przełączniki „radio box” (oznaczony jako
TRUE określa działanie domyślne), druga funkcję, a trzecia opis tej funkcji.
Po dokonaniu wyboru i naciśnięciu przycisku OK na standardowe wyjście zostanie wysłana
zawartość pierwszej opisanej kolumny i forma zakończy pracę z kodem wyjścia „0”. W przypadku
naciśnięcia przycisku „Anuluj” forma zakończy pracę z kodem wyjścia „1”:
#!/bin/sh
zenity --list \
--title="Wybierz funkcję": \
--radiolist \
--column="Wybór" --column="Nazwa" --column="Opis" \
TRUE Usu "Usuń plik" \
FALSE Przenie "Przenieś plik" \
FALSE Skompresuj "Zarchiwizuj plik"
Użycie formy List nie odbiega praktycznie niczym od formy Text Entry.
Uzupełniające materiały szkoleniowe
Tomasz Barbaszewski, Kraków 2012
Strona 6 z 9
Formy dialogowe w środowisku Gnome
File Selection:
Bardzo przydatną formą dialogową jest File Selection:
Wyświetla ona listę plików i podkatalogów w bieżącym katalogu umożliwiając dokonanie
wyboru. Jeżeli wybierzemy podkatalog, to wówczas zostanie wyświetlona jego zawartość, zaś jeśli
wybranym obiektem będzie plik jego nazwa wraz z pełną ścieżką zostanie przekazana na
standardowe wyjście:
[tomekb@main ~]$ zenity --file-selection
/home/tomekb/.thunderbird/appreg
[tomekb@main ~]$
Uzupełniające materiały szkoleniowe
Tomasz Barbaszewski, Kraków 2012
Strona 7 z 9
Formy dialogowe w środowisku Gnome
Kalendarz:
Forma dialogowa umożliwiająca wybór daty:
zenity –calendar
Forma wyświetla kalendarz z zaznaczoną aktualną datą. Za pomocą myszki można wybrać
dowolną datę. Po „naciśnięciu” przycisku OK zaznaczona data jest przekazywana na standardowe
wyjście:
[tomekb@main ~]$ zenity --calendar
28.01.2012
Format przekazywanej daty można wybrać za pomocą opcji --date-format. Musi on
odpowiadać wymaganiom funkcji strftime, na przykład: %A %d/%m/%y.
Uzupełniające materiały szkoleniowe
Tomasz Barbaszewski, Kraków 2012
Strona 8 z 9
Formy dialogowe w środowisku Gnome
Uwagi końcowe:
Opcje ogólne (akceptowane przez wszystkie formy dialogowe zenity):
--title=tytuł
--window-icon=ścieżka_do_ikony
--width=szerokość_okna
--height=wysokość_okna
--timeout=czas_otwarcia_okna
zenity --about wyświetla informacja o zenity:
Wyświetlona forma dialogowa pozwala także uzyskać dostęp do informacji licencyjnych (GPL2)
oraz do kontekstowego systemu pomocy (w języku angielskim).
Kody wyjścia:
0
1
-1
5
program zakończony sukcesem (użytkownik nacisnął OK lub Close),
opuszczenie programu (użytkownik nacisnął Cancel lub zamknął okno formy dialogowej),
nieokreślony błąd,
zamknięcie programu w wyniku osiągnięcia czasu określonego w opcji timeout.
Analizując skrypty należy zwrócić uwagę na znak „\” zabraniający interpretacji końca linii.
W łańcuchach tekstowych nie należy używać znaku „!”
Uzupełniające materiały szkoleniowe
Tomasz Barbaszewski, Kraków 2012
Strona 9 z 9