GNU Octave
kurs elementarny

Edycja tekstu
czyli jak sobie poradzić w środowisku tekstowym

Programy konsolowe

Obecnie większość użytkowników komputerów przyzwyczajona jest do programów sterowanych za pomocą myszki. Myszka służy im m.in. do uruchamiania i zamykania programów, wybierania opcji w menu głównym lub kontekstowym, obsługi pasków narzędzi, zaznaczania fragmentów tekstu – w zasadzie myszka służy im do wszystkiego z wyjątkiem wprowadzania tekstu. Dlatego programy takie jak Octave, w których wszystkie polecenia wydaje się za pomocą klawiatury, u użytkowników przyzwyczajonych do „okienek” budzą zdziwienie i lęk – lęk przed nieznanym. Po kilku próbach zrobienia czegokolwiek bez myszy w programie niewyświetlającym menu i pasków narzędzi osoby takie zwykle rezygnują i wyłączają program, by nigdy do niego nie wrócić. Niepotrzebnie! Programy obsługiwane za pomocą klawiatury (tzw. programy konsolowe) stosują bowiem pewne standardowe mechanizmy mające na celu uproszczenie ich obsługi. Wystarczy zapoznać się z tymi mechanizmami, by dość pewnie obsługiwać niemal każdy program konsolowy.

Dlaczego jednak w ogóle w XXI wieku wciąż powstają programy konsolowe? Dlaczego cieszą się sporym powodzeniem? Otóż podstawowa zaleta programów konsolowych, decydująca o ich przydatności, polega na łatwości automatyzacji ich obsługi. Octave może być bowiem używany nie tylko jako program interakcyjny, ale także jako program automatycznie wywoływany przez inne programy bez ingerencji człowieka. Tekstowa obsługa programu umożliwia traktowanie Octave jako języka programowania, przy czym tworzenie tych programów jest banalnie proste: składają się one po prostu z ciągu komend, które równie dobrze można by osobiście wydać z konsoli tekstowej.

Czas na zapowiadane „sztuczki”.

„Strzałka w górę” (↑) i „strzałka w dół” (↓)

Klawisze nawigacyjne (tzw. kursory) „strzałka w górę” (↑) i „strzałka w dół” (↓) to chyba najczęściej używane klawisze sterujące Octave. Służą one do przywoływania na ekranie poprzednich komend. Dzięki temu nie musimy tych samych poleceń wpisywać wielokrotnie. Wystarczy odnaleźć odpowiednie polecenie wśród poleceń wydawanych niedawno i albo zatwierdzić je od razu klawiszem enter, albo wpierw dokonać stosownych zmian.

Tabulator, czyli autouzupełnianie

Drugim nieocenionym pomocnikiem programu jest klawisz Tab. Służy on do włączania mechanizmu autouzupełniania nazw funkcji i plików. Jak to działa? Przypuśćmy, że chcemy wywołać funkcję roots służącą do znajdowania pierwiastków wielomianów. W tym celu wystarczy napisać trzy pierwsze litery tej funkcji (roo) i przycisnąć klawisz Tab. Octave sam uzupełni brakujące litery.

Jeżeli przed przyciśnięciem klawisza Tab wprowadzimy zbyt mało liter i Octave nie będzie w stanie jednoznacznie określić, o które polecenie nam chodzi, program nie wykona żadnej czynności. Jeżeli w tej sytuacji ponownie przyciśniemy Tab, program wyświetli listę wszystkich możliwych uzupełnień naszego wpisu. To bardzo użyteczny sposób "przypominania" sobie nazw poleceń!

Mechanizm autouzupełniania obejmuje nie tylko polecenia programu, ale też nazwy plików w katalogu bieżącym. Cecha ta znacznie upraszcza wprowadzanie nazw plików i praktycznie eliminuje literówki. Autouzupełnianie może też być używane podczas wpisywania argumentów poleceń, np. help

Inne skróty klawiaturowe

Oprócz klawiszy ↑, ↓ i Tab, Octave obsługuje kilkadziesiąt (!) innych skrótów klawiaturowych ułatwiających edycję poleceń. Najważniejsze z nich to:

Polecenia help i doc

Zapamiętywanie nazw i znaczenia setek poleceń typowego programu komputerowego byłoby zajęciem wyjątkowo nużącym i bezproduktywnym. Dlatego programy posiadają wbudowane mechanizmy pomocy dla użytkownika. Programy okienkowe standardowo udostępniają ten mechanizm poprzez pozycję „Pomoc” w menu lub skrót klawiaturowy F1. Octave, jak większość programów konsolowych, udostępnia system pomocy poprzez komendę help:

> help

Czyste polecenie help wyświetla informacje dotyczące całego programu, a konkretnie – spis wszystkich poleceń programu rozpoznawanych przez system pomocy. Zwykle jednak potrzebujemy informacji o konkretnej funkcji programu. W tym wypadku podajemy ją jako argument polecenia help. Np. aby uzyskać szczegółowe informacje o znaczeniu i wszystkich możliwościach instrukcji format, wydajemy polecenie

> help format

Oczywiście instrukcja help wyświetla informacje jako tekst, który zwykle zajmuje więcej niż jeden ekran. Do przemieszczania się po nim służą standardowe klawisze nawigacyjne: PageDown, PageUp, Kursor w dół, Kursor w górę, Home i End

Polecenie help swoje informacje wyświetla w specjalnym trybie, tzw. trybie pomocy, w którym z ekranu znikają wszystkie informacje niezwiązane z systemem pomocy programu. Aby wrócić do normalnego trybu edycji, przyciskamy klawisz q (ang. quit).

System pomocy Octave zapewnia także bezpośredni dostęp do całego, wieluset stronicowego podręcznika. Oczywiście jest on wyświetlany w formie tekstowej. Stosowne polecenie to doc, np.

> doc operators
wyświetla (oczywiście w trybie tekstowym!) fragment podręcznika dotyczący operatorów.

Polecenie doc działa w osobnym trybie, tzw. info, którego nie będę tu bliżej omawiał. Tryb info opuszczamy klawiszem q.

Internetowa (HTML) wersja podręcznika znajduje się tu.

Pliki pomocnicze

Octave posługuje się kilkoma plikami pomocniczymi:

Gdzie są moje pliki?

Pracując z programem Octave często posługujemy się dodatkowymi plikami. Musimy jednak mieć pewność, że program potrafi je (poprawnie) zlokalizować. Do osiągnięcia tego celu służą następujące komendy:

Oto przykład ich zastosowania:

> pwd
ans = /home/zkoza
> cd octave
> pwd
ans = /home/zkoza/octave
> ls
programik.m

W powyższym przykładzie: najpierw za pomocą polecenia pwd sprawdzam, że bieżącym katalogiem programu jest /home/zkoza; następnie poleceniem cd zmieniam ten katalog na /home/zkoza/octave, sprawdzam wartość bieżącego katalogu (pwd) i wyświetlam jego zwartość (ls). W katalogu tym znajduje się tylko jeden, wcześniej umieszczony tam plik o nazwie programik.m.

Informacja dla zaawansowanych: polecenie ls przyjmuje praktycznie te same opcje, co analogiczne polecenie w systemach UNIX-owych, np ls -l.

Własne programy

Jesteśmy już gotowi zapoznać się z najbardziej użyteczną właściwością programów konsolowych – łatwości rozszerzaniem ich funkcjonalności za pomocą własnych plików tekstowych (tzw. skryptów). Idea jest genialna w swej prostocie: zamiast pisać polecenia bezpośrednio w programie, można je zapisywać w osobnym pliku, a potem wczytywać do programu tak, jakby pochodziły z klawiatury. Podstawowa zaleta tego rozwiązania polega na trwałości skryptów, które możemy spokojnie rozwijać przez wiele dni, a potem używać przez wiele lat. Skrypty rozwiązują więc podstawowy problem programów pisanych bezpośrednio w konsoli Octave – ich ulotność i jednorazowość.

Utworzenie własnego skryptu jest banalnie proste: jest to dowolny plik tekstowy o rozszerzeniu .m, np. programik.m. W pliku tym wpisujemy dowolne komendy Octave. Możemy opisać je za pomocą komentarzy (przypominam, że w Octave komentarzem jest tekst od znaku # do końca wiersza).

Aby wykonać polecenia w tak utworzonym pliku (czyli „uruchomić skrypt”), wystarczy jako komendę wpisać w Octave… nazwę skryptu bez rozszerzenia *.m.

Załóżmy, że skrypt nazywa się programik.m, a jego zawartość wygląda następująco:

# W pliku programik.m znajduje się trywialny program testowy Octave
1/7
2/7
3/7

Jeżeli wydamy polecenie programik:

> programik

Program odpowie następująco:

ans =  0.14286
ans =  0.28571
ans =  0.42857

co świadczy o wykonaniu wszystkich instrukcji z pliku programik.m.

Teraz możemy dowolnie modyfikować plik i uruchamiać go w Octave za pomocą klawiszy historii (↑, ↓). Prawda, że to niezwykle prosty i użyteczny mechanizm?

Oczywiście aby program mógł wczytać skrypt, plik skryptu musi znajdować się w katalogu bieżącym, który ustalamy omówionymi powyżej poleceniami pwd i cd.

Na koniec mały smaczek. Jeżeli zapytamy się Octave, co wie na temat polecenia programik:

> help programik

Otrzymamy następującą odpowiedź:

octave:6> help programik
programik is the file ./programik.m

W pliku programik.m znajduje się trywialny program testowy Octave
...

Widać więc, że w skryptach można w trywialny sposób umieszczać nie tylko kod, ale i jego dokumentację!

Quiz

  1. Czym różnią się programy tekstowe od programów okienkowych?
  2. Co to jest historia poleceń? Gdzie jest przechowywana?
  3. Jakie skróty klawiaturowe ułatwiają pracę z historią poleceń?
  4. Co to jest autouzupełnianie? Jakie skróty klawiaturowe uaktywniają autouzupełnianie?
  5. Jak w Octave zorganizowano system pomocy?
  6. Jak opuścić tryb pomocy lub tryb info?
  7. Co to są skrypty?
  8. Jak uruchamia się skrypty?
  9. Jakie są zalety skryptów?
  10. Jak w Octave ustala się nazwę katalogu bieżącego?

Zadania

  1. W wierszu poleceń programu wprowadź trzy pierwsze litery polecenia sombrero, tj.
    > som
    
    i przyciśnij tabulator. Zwróć uwagę na to, że program sam uzupełnił zapis polecenia.
  2. Sprawdź w systemie pomocy programu (> help sombrero), do czego służy funkcja sombrero i jakie znaczenie ma jej (opcjonalny) argument.
  3. Wywołaj sombrero z niestandardowym argumentem, np. 30 lub 100.
  4. Przeczytaj w podręczniku Octave (> doc sombrero), jaka jest rola polecenia sombrero? Jakie inne polecenie służy podobnemu celowi?
  5. Sprawdź, że wykresy Octave możesz obracać myszką.
  6. [Trudne] Za pomocą polecenia help sprawdź, w jakim pliku znajduje się definicja funkcji sombrero.
    • Przekopiuj ten plik do katalogu bieżącego programu.
    • W tej kopii zmień definicję funkcji, tak by sombrero wyświetlało wykres funkcji

      z(x,y) = exp(-sqrt(x2 + y2))

      dla -4 ≤ x,y ≤ 4.
    • Zmień komentarz w swoim pliku (np. przetłumacz jego część na polski). Sprawdź, że Twój nowy komentarz pojawi się na ekranie po wydaniu polecenia help sombrero.