Do wykonania poniższych ćwiczeń przydatne będą jakieś nietrywialne pliki do edycji: plik zawierający jakiś zwykły tekst (>500 słów), oraz zestaw plików zawierający jakiś program, najlepiej w ANSI C, C++, lub Javie (program powinien składać się z kilku modułów źródłowych, nagłówkowych, itp., gdzie odwołania do tych samych symboli, zmiennych, funkcji, klas, metod, itp., znajdują się w różnych plikach).

Przydatna będzie również jakaś wersja „ściągi” (cheat-sheet) Gnu Emacsa, czyli listy podstawowych poleceń klawiaturowych. Najłatwiej będzie pracować z papierowym wydrukiem takiej ściągi.

Wymagane oprogramowanie zainstalowane na komputerze: emacs, iconv, etags, ispell (lub aspell lub inny zamiennik ispella), oraz słownik polski i angielski.

  1. [1p] Praca z Gnu Emacsem bez uczenia się

    Wywołaj okienkową wersję Gnu Emacsa (zwykle wystarczy w tym celu wywołać program w środowisku okienkowym, ze znakiem & na końcu polecenia) na jakimś pliku. Przećwicz poruszanie się klawiszami strzałek, oraz dedykowanymi klawiszami edycyjnymi jak: Page-Up, Page-Down, Home, End, Ins, Del, itp. Nie próbuj typowo Windowsowych skrótów klawiaturowych, jak Control-S, Control-Z, Control-X/Control-V, itp. Dokonaj jakichś zmian w pliku, i spróbuj zamknąć okno z poziomu systemu okienkowego (menu okna). Odpowiedz twierdząco na pytanie Emacsa o zgodę na zapisanie zmodyfikowanej wersji pliku.

    Sprawdź czy wszystko zostało poprawnie wykonane. Jeśli tak, to powtórz ćwiczenie wywołując myszą dalsze operacje z menu Emacsa.

    To ćwiczenie ma na celu sprawdzenie, czy i w jakim stopniu Gnu Emacsa da się używać jako zwykłego edytora tekstu, bez uczenia się jego natywnych poleceń, pod warunkiem, że nie używamy konwencji, które znamy z innych środowisk.

    Sformułuj odpowiedź na to pytanie.

  2. [1p] Wbudowany tutorial

    Wywołaj Gnu Emacsa bez żadnego pliku, i spróbuj wykonać jego wbudowany tutorial (normalnie poleceniem C-h t). Postaraj się wykonać to w polskim środowisku, aby w miarę możliwości uzyskać polską wersję tutoriala.

    Tutorial warto przerobić w całości (a przynajmniej do sekcji ``Operacje na oknach”), ponieważ wtedy uzyskuje się pewną wprawę w podstawowych operacjach w Emacsie. Jeśli jednak wykonanie całego tutoriala zajmuje Ci zbyt dużo czasu, to możesz przerwać wcześniej, zaznaczając w raporcie jaki kawałek tutoriala udało Ci się wykonać.

  3. [1p] Podstawowe operacje w trybie tekstowym

    Uwaga: na początek lepiej byłoby uniknąć możliwych komplikacji wynikających z użytego encodingu polskich znaków. Dlatego, jeśli Twój plik testowy zawiera polski tekst z polskimi literami, to najlepiej wygeneruj jego wersję ASCII poleceniem:

    iconv -f ISO8859-2 -t ASCII//TRANSLIT
    
    albo:
    iconv -f UTF-8 -t ASCII//TRANSLIT
    
    albo podobnym.

  4. [1p] Operacje na buforach i oknach

    Otwórz plik w Emacsie, następnie otwórz drugi plik w oddzielnym buforze. Wypróbuj przełączanie się między buforami, z dopełnianiem nazw buforów.

    Wyświetl listę buforów, co spowoduje utworzenie dodatkowego okna. Spowoduj zamknięcie tego okna, a następnie przejdź do bufora z listą buforów. Zamknij ten bufor.

    Teraz sam utwórz drugie okno, przejdź do niego, i w nim przełącz się na drugi bufor, aby mieć jednocześnie dwa bufory widoczne w dwóch oknach.

    Następnie, wróć w drugim oknie do pierwszego bufora, i przejdź w nim do innego fragmentu pliku. Sprawdź edytowanie dwóch różnych fragmentów tego samego pliku w dwóch oknach.

  5. [1p] Edycja z encodingiem polskich znaków

    Otwórz plik zawierający polskie znaki w encodingu zgodnym z bieżącą lokalizacją. Upewnij się, że Emacs wyświetla polskie znaki odpowiednią czcionką, i że możesz pisać polskie znaki z klawiatury.

    Sprawdź flagi trybów i encodingu w linijce statusowej (pierwszych kilka znaków po lewej).

    Następnie spróbuj innego encodingu polskich znaków (np. ISO8859-2 jeśli normalnie używasz UTF-8, lub na odwrót). W tym celu otwórz plik, może być nowy i pusty, ustaw w nim docelowy encoding (set-buffer-file-coding-system), i wpisz jakieś soczyście polskie teksty. Zapisz plik, sprawdź, czy został poprawnie zapisany (np. programem iconv).

    Z kolei na pliku zawierającym polski tekst, wypróbuj sprawdzanie poprawności ortograficznej programem ispell/aspell (ispell-buffer), wcześniej ustawiając słownik (ispell-change-dictionary) na „polish”. Wypróbuj operacje dodawania słów do indywidualnego słownika, i zapisz ten słownik na pliku w chwili kończenia pracy. Odpal ponownie Emacsa i w nim ispell, żeby sprawdzić działanie zapamiętanego słownika.

    Jeśli używasz Latexa, to otwórz Emacsa na jakimś pliku z dokumentem w języku polskim, i ponownie wypróbuj ispell.

  6. [1p] Praca w trybie terminalowym

    W okienku terminala połącz się przez sieć (program ssh) z jakimś komputerem Unix/Linux (może to być ten sam komputer). Dla pewności wywołaj ssh z opcją -x (co powinno skutecznie utrudnić Emacsowi start w trybie okienkowym).

    Następnie powtórz trzy poprzednie punkty ćwiczenia, to znaczy, wypróbuj podstawowe operacje tekstowe: kasowanie, odzyskiwanie, przeszukiwanie, zastępowanie (z różnymi opcjami stosowanymi wcześniej), przełączanie się między buforami, oraz otwieranie i zamykanie dodatkowych okien, a także edycję plików z encodingiem polskich znaków.

    Jeśli natrafiłeś/aś na jakieś problemy w trybie tekstowym, których nie miałeś/aś poprzednio, to opisz w raporcie na czym polegał ten problem.

  7. [1p] Praca z CC Mode

    Otwórz jakiś nietrywialny program w ANSI C/C++/Javie i wypróbuj kilka podstawowych operacji, które działają w trybie każdego niemal języka programowania: TAB, C-j, M-;, C-M-f, C-M-b, C-M-a, C-M-e.

    Przeczytaj opis trybu głównego, przećwicz przynajmniej 5 różnych specjalizowanych operacji.

    Następnie zdefiniuj/przedefiniuj jakieś specyficzne dla tego trybu ustawienia (np. kolumnę komentarza) i sprawdź zmianę zachowania Emacsa z nowymi ustawieniami.

    Alternatywnie, jeśli jesteś programistą Pythona, możesz zapoznać się z trybem Python Mode i zbadać jego podstawowe możliwości.

    Wykonane zmiany i obserwacje opisz krótko w raporcie z wykonania zadania.

  8. [1p] Praca z keyboard macro

    Poleceniem ls -l utwórz listę plików z katalogu bieżącego, i zapisz ją na pliku. Zadbaj, by były tam zarówno pliki jak i podkatalogi z różnymi nazwami, takie jak np.:

    sendmail-8.14.4/
    RCS/
    Fundusze\_europejskie/
    10.1.1.124.7500.pdf
    Diagram-przypadkow-uzycia.png
    Ksztalcenie\_w\_jez\_ang.ppt
    itp.
    
    oraz aby te pliki miały różne prawa dostępu, np. rw-------, rw-rw----, r--r--r--, rwxrwx---, oraz różnej długości nazwy właściciela i grupy.

    Lista plików może być sztucznie spreparowana, ale powinna być różnorodna.

    Następnie otwórz plik z tą listą w Emacsie, i usuń z każdej linijki wszystko poza długością pliku i jego nazwą tworząc wiersze tekstu postaci:

    Plik <nazwa_pliku> dlugosc <dlugosc>
    Podkatalog <nazwa>
    

    Wskazówka: najpierw zbuduj keyboard macro do znajdowania wierszy podkatalogów („d” w pierwszej pozycji wiersza), ich odpowiedniej edycji, i przeskakiwania do kolejnych takich wierszy. Po sprawdzeniu, że macro działa poprawnie i tylko na wierszach podkatalogów, uruchom je wielokrotnie, np. z argumentem liczbowym 10000. Następnie zdefiniuj inne macro odpowiednie dla plików, wywołaj je kilka razy próbnie, i następnie również powtórz na całym pliku.

  9. [1p] Konfigurowanie Emacsa

    Zdefiniuj kilka podstawowych przypisań klawiszy z ogólnie przyjętych konwencji, jak C-s, C-o, C-x, C-v (uwaga na C-c; przedefiniowanie tego klawisza zablokuje wiele natywnych operacji klawiaturowych Emacsa).

    Spróbuj pracować na plikach tekstowych (proste kasowanie i przenoszenie bloków tekstu wewnątrz pliku, oraz otwieranie i zapisywanie plików) wykorzystując tylko konwencje Windows.

    Sformułuj wniosek na temat praktyczności tego podejścia.

  10. Praca z TAGS (opcjonalne)

    Wywołując program etags utwórz plik TAGS dla pakietu plików źródłowych wybranego języka (C/C++/Java).

    Uruchom Gnu Emacsa bez żadnego pliku, i wywołując przeszukiwanie TAGS znajdź definicję wybranego elementu (funkcji, struktury, klasy). Następnie bez zamykania plików ani kończenia programu, znajdź inną definicję znajdującą się w innym pliku. Wróć do poprzedniej definicji odpowiednim poleceniem.

    Spróbuj wykonać operację zmiany jakiejś zmiennej, funkcji, klasy, lub metody, we wszystkich plikach. Spróbuj przerwać operację zamieniania w jakimś momencie (np. aby przejrzeć aktualnie otwarty plik), a następnie spróbuj ją kontynuować.