Ćwiczenie 3: Edytory tekstu. Etap 2/2.

http://platypope.org/yada/emacs-demo/

Emacs to również edytor tekstu należący do oprogramowania 'open source'. Podobnie jak vi działa na wielu platformach sprzętowych 'pod' wieloma systemami operacyjnymi. Emacs jest programem 'rozszerzalnym' o ustawienia użytkownika a nawet całe skrypty, które mogą zaprogramować jego pracę. Jest szczególnie użyteczny dla programistów. Osoby pracujące z jednym z bardziej popularnych języków programowania mogą skorzystać z tzw. trybów pracy, które emacs oferuje dla konkretnego języka (chodzi o takie funkcje jak wstawianie wcięć, kolorowanie składni itp.).

1. Filozofia, interfejs, podstawowe funkcje

  • W przeciwieństwie do Vi, emacs nie posiada specjalnego trybu 'wstawiania'. Po uruchomieniu programu można w nim już pisać. Każdy drukowalny znak z klawiatury jest traktowany jako tzw. self-insert-command. Wszelkie polecenia dla programu (np. kopiowania, wklejania znaków) uruchamia się z użyciem klawiszy Control i Meta, gdzie Control (oznaczany dalej w instrukcji jako 'C') to klawisz CTRL, a Meta to na komputerach PC klawisz 'lewy Alt'.


    Uruchamianie: emacs , emacs nazwa.pliku 
    Zamykanie: C-x C-c (save-buffers-kill-emacs)
    Zawieszanie pracy: C-x C-z (suspend-emacs) - powrót zależnie od systemu operacyjnego, w linuxie będzie to uzycie fg

    Ekran w większości poświęcony jest edytowanemu plikowi. W dole znajduje się specjalnie wyróżniona linia trybu ('Mode line'), w której mamy informacje m.in. o:

    • stanie bufora (zmodyfikowany - para gwiazdek, niezmodyfikowany - myślniki, 'tylko do odczytu' - para znaków '%' ).
    • nazwa edytowanego pliku (jeśli nie edytujemy żadnego zapisanego na dysku pliku, będzie to *scratch*).
    • główny tryb pracy (nazwa w nawiasie).
    • ilość treści edytowanego pliku widoczna na ekranie:
      • All - widać cały plik
      • Top - początek pliku
      • Bot - koniec pliku
      • Procent - NN% oznacza procent zawartości pliku ponad widocznym oknem edycji


    Minibufor to pusta linia poniżej lini trybu. Emacs wyświetla w niej komunikaty oraz oczekuje na wpisanie w niej komend użytkownika (odpowiedzi typu 'yes/no', polecenia, nazwy plików itp.). Minibufor udostępnia mechanizm autouzupełniania, który uruchamia się poprzez naciśnięcie TAB. Uzupełnia on rozpoczęte nazwy komend, lub wpisywane nazwy plików/katalogów.

    (./) Utworzyć w katalogu domowym (~) podkatalog cw03 (o ile taki już nie istnieje). Przejść do tego katalogu i uruchomić w nim program emacs tak, aby został stworzony plik alfa.txt. Zapisać w nim jakieś zdanie (np. 'Miłe złego początki;)'), następnie zamknąć i potwierdzić zapis.

2. Klawisze i komendy

  • Emacs oferuje ogromną liczbę komend dostępnych poprzez skróty klawiaturowe. Dla początkującego użytkownika może to być przytłaczające i odrzucające od tego programu. Tak naprawdę nikt nie pamięta wszystkich tych skrótów przy pracy, wystarczy znajomość kilku podstawowych, umożliwiających pracę. Każdy zaawansowany użytkownik stosuje charakterystyczny dla swojej pracy zestaw komend i pamięta tylko odpowiadający im, ograniczony zestaw skrótów.


    Notacja skrótów wygląda następująco:

    • C-x - dla dowolnego 'x' oznacza naciśnięcie razem Control-x
    • M-x - dla dowolnego 'x' oznacza naciśnięcie razem Meta-x (gdzie Meta, jak wsponiano, to dla komputerów PC 'lewy Alt')
    • C-M-x (./) - co oznacza ten skrót?

    • RET - 'return key' (ENTER lub 'C-m')
    • SPC - spacja
    • ESC - Escape (lub 'C-[')
    • DEL - usuwanie znaków (dla komputerów PC jest to Backspace, NIE jest równoważny z klawiszem Del)


    W dalszej części ćwiczenia będziemy się posługiwać właśnie tą notacją (tak więc DEL w instrukcji oznaczać będzie Backspace itp.).
    Znaki drukowalne ASCII (wszystkie typu 'A,a,Z,z,0,%,* itp.) są wprowadzane do pliku bezpośrednio (wspomniane self-insert-command). Aby wywołać polecenia edycji stosowane są połączenia klawisz Control/Meta + znak. Daje to jednak ok. 32 kombinacji (Control+litery alfabetu, cyfry i znaki spec.). Emacs posiada znacznie więcej niż 32 komendy, dlatego stosowane są tzw. 'prefix commands', polecenia, po których użytkownik wpisuje dalszą część komendy.


    Standardowe komendy prefiksowe to:

    • C-c - poprzedza komendy specyficzne dla określonych trybów pracy
    • C-h - poprzedza polecenia pomocy
    • C-x - poprzedza polecenia do działań na plikach, buforach i oknach programu

3. Bufory, okna

  • Emacs posiada cztery główne 'struktury danych': File (plik), Buffer (bufor), Window (okno), Frame (ramka).


  • File - plik unixowy zapisany na dysku. Plik ten nigdy nie jest bezpośrednio edytowany. Do programu wczytywana jest kopia pliku, która zostaje umieszczona w 'buforze'. Bufor (opis poniżej) służy do edycji treści, a następnie może zostać skopiowany i zapisany do pliku (w ten sposób de facto dokonuje się edycja-podmiana właściwego pliku).

  • Buffer - bufor jest wewnętrzną strukturą edytora, w której odbywa się właściwa edycja tekstu. Emacs może mieć wiele otwartych buforów w jednym momencie. Większość buforów skojarzona jest z jakimś plikiem, ale nie jest to konieczne. Można edytować tekst w buforze bez zapisywania go do pliku. Bufory mają nazwy, które są nadawane zazwyczaj od nazwy otwartego pliku (bufor nie powiązany z żadnym plikiem to np. 'scratch'). Bufory mogą być usuwane, przy czym nie powoduje to usuwania plików z nimi powiązanych. Można jedynie utracić w ten sposób wszystkie wprowadzone do tekstu zmiany.

  • Window - okno w którym wyświetlana jest zawartość bufora. Jeden bufor może zostać podzielony na większą ilość okien (poziomo lub pionowo) aby uzyskać dostęp jednocześnie do różnych partii pliku. W różnych oknach można też wyświetlać zawartość różnych buforów (np. w celu wymiany tekstu pomiędzy różnymi plikami). Usuwanie okna nie powoduje usunięcia buforu. Każde okno ma swoją linię trybu.

  • Frame - ramka - struktura podobna do okna (nie będziemy się nią zajmować w tym ćwiczeniu).

    Operacje na buforach:

    • C-x C-f załaduj do edytora plik z dysku (lub utwórz nowy o zadanej nazwie)

    • C-x k zamknij bufor

    • C-x C-s zapisz zawartość bufora do pliku

    • C-x o przejście między buforami

    • C-x C-b wyświetl listę buforów (*Buffer List*)

    • M-x rename-buffer zmiana nazwy bieżącego bufora (dzięki czemu można np. mieć kilka otwartych buforów w trybie *Python* lub *Shell*)

    • C-x 1 gdy w oknie edycji widocznych jest wiele buforów, bieżący bufor wypełni całe okno edycji

    • C-x 2 podziel część edycyjna˛ poziomo na dwie części

    • C-x 3 podziel część edycyjna˛ pionowo na dwie części

4. Edycja, Zaznaczanie, kopiowanie, wklejanie

  • Emacs posiada wbudowany system pomocy online. W większości dostępny on jest poprzez użycie komendy C-h. Dwukrotne wywołanie C-h pokazuje listę dostępnych komend pomocy; trzykrotne wywołanie daje okno opisujące te komendy.
    Użyteczne polecenia pomocy:

    • C-h a - command-apropos - pyta o słowo kluczowe a następnie wyświetla wszystkie komendy, które to słowo zawierają w swojej nazwie
    • C-h k - opis danego skrótu klawiszowego
    • C-h i - uruchamia czytnik dokumentacji hipertekstowej Info
    • C-h m - 'describe-mode' - opisuje bieżący główny tryb pracy i jego skróty klawiszowe
    • C-h t - 'help-with-tutorial' - uruchamia tutorial Emacsa.

    {*} {2} Proszę uruchomić tutorial, przejrzeć jego zawartość i znaleźć w nim odpowiedź na pytanie:co zrobić gdy Emacs przestanie reagować na polecenia użytkownika, zawiesi swoje działanie lub jak bezpiecznie anulować wpisywaną komendę? (odpowiedź zawarta jest w okolicach 20% treści tutoriala). Odpowiedź w 1-2 zdaniach zawrzeć w sprawozdaniu.

    Emacs oferuje praktycznie nieograniczoną ilość poziomów cofania operacji (undo). Aby cofnąć ostatnio wykonaną operację, należy użyć C-x u lub odpowiadającego mu skrótu C-_. Przywrócenie cofniętej operacji odbywa się również z wykorzystaniem tych skrótów. Operacje można cofać aż do wyczerpania (do wycofania wszystkich), akcję 'redo' realizuje się również poprzez cofanie ;) (cofamy 'cofnięcia'). Aby rozpocząć wznawianie, trzeba najpierw przerwać ciąg cofanych operacji (np. wydając jakąś 'neutralną' komendę, typu przesunięcie kursora C-f), a następnie znowu używając C-x u , C-_ wznawiamy cofnięte operacje. Wydaje się to nieco zagmatwane, ale łatwo można zaobserwować jak działa ten mechanizm.

    (!) {2} Otworzyć nowy plik w katalogu ~/cw03 (nazwa dowolna). Zapisać w nim kilka linijek tekstu. Następnie cofnąć część operacji. Przerwać cofanie neutralną komendą i rozpocząć wznawianie. Działanie tego mechanizmu zaprezentować do oceny prowadzącemu ćwiczenia.

    Zawartość edytowanego bufora można usuwać (delete), wycinać (kill) i wklejać (yank). Komendy 'kill' i 'yank' działają analogicznie do tych, dostępnych w innych edytorach tekstu pod nazwami 'cut' i 'paste'. Aby skasować znak, stosuje się C-d lub znak DEL (dla komputerów PC jest to klawisz Backspace). Aby skasować całe słowo, stosujemy M-d lub M-DEL.
    (!) {1} Zaobserwować różnice między poleceniami C-d, DEL, M-d, M-DEL i wyjaśnić działanie prowadzącemu.

    Wycinanie i wklejanie tekstu odbywa się z uzyciem tzw. 'kill-ring'. Jest to swego rodzaju pamięć, w której przechowywane są wycinane fragmenty tekstu. Pamięć ta dostępna jest dla wszystkich otwartych buforów (plików), więc z jej pomocą można wymieniać tekst pomiędzy plikami (wycinać z jednego i wklejać do innego).

    • C-x u wycofaj zmiany

    • C-k usun zawartosc linii od biezacej pozycji do konca linii

    • M-ˆ dołącz biezaca linie do poprzedniej usuwajac białe znaki z konca poprzedniej i poczatku biezacej linii

    • C-SPC zaznacz poczatek bloku tekstu

    • M-w kopiuj zaznaczony fragment do schowka

    • C-w usun zaznaczony fragment

    • C-y wklej uprzednio skopiowany do schowka fragment tekstu

    • C-x r r kopiuj zaznaczony prostokatny blok tekstu do rejestru o podanej jednoliterowej nazwie

    • C-x r i wklej prostokatny blok tekstu przechowywany w rejestrze o zadanej jednoliterowej nazwie

    • C-x r k usuń zaznaczony prostokatny blok tekstu

    Wyszukiwanie i zamiana tekstu możliwa jest z zastosowaniem poniższych poleceń:
    C-s wyszukaj w tekście zadany ciąg znaków poczynając od bieżącej pozycji kursora
    C-r jak wyżej z tym, że przeszukuj nie do przodu a w kierunku od bieżącej pozycji kursora do początku pliku
    M-r w trakcie przeszukiwania: traktuj wcześniej wprowadzony ciąg znaków jako wyrażenie regularne
    M-c w trakcie przeszukiwania: nie uwzględniaj wielkości znaków
    M-x query-replace interaktywna wymiana zadanego ciągu znaków na inny podany
    M-x replace-string zamień w zaznaczonym fragmencie tekstu (lub w całym buforze) zadany ciąg znaków na inny podany

    (./) należy przetestować działanie powyższych komend na dowolnym pliku tekstowym

5. Tryby pracy

Emacs może oferować różne zestawy komend w zależności od typu edytowanego materiału. Rozróżnienie to odbywa się poprzez pracę w różnych 'trybach'. Każdy otwarty bufor Emacsa posiada jeden główny tryb pracy i 0 lub więcej trybów o pobocznych. Czasem Emacs dobiera tryb główny automatycznie, w zależności od rodzaju otwartego pliku. (np. plik o rozszerzeniu '.c' będzie edytowany w buforze w trybie 'C Mode'.

  • Fundamental Mode - The basic mode in reference to which all specialized modes are defined. Perfectly fine for editing any kind of text, just doesn't provide any special features.
  • Text Mode - For editing text. Has special commands for spell-checking, centering lines, etc.
  • Outline Mode - For editing a stylized type of outline. Implements folding of outline levels, etc.
  • C Mode - For editing C source code. Has special indentation, etc.
  • (./) Pobrać przykładowy plik strony WWW]. Otworzyć w Emacsie i odczytać nazwę trybu w jakim Emacs uruchomił bufor dla pliku.

6. 'Customizacja'

  • Wiele opcji i parametrów pracy Emacsa można ustawić w pliku konfiguracyjnym danego użytkownika ~/.emacs. W pliku tym umieszcza się specyficzne ustawienia programu (lokalnie dla użytkownika). Można tu np określić kolor kursora, rodzaj czcionki czy rozmiary okna programu. Komentarze umieszczane są po parze średników ';;'.

    {*} {2} Otworzyć do edycji plik ~/.emacs . Umieścić w nim następujący kod:

    ;; enable visual feedback on selections
    (setq-default transient-mark-mode t)
    ;;to set the cursor color
    (set-cursor-color "red")
    Działanie powyższych komend opisać w sprawozdaniu. Znaleźć polecenie, dzięki któremu w linii trybu będzie wyświetlany bieżący czas i wpisać je do swojego pliku konfiguracyjnego Emacsa.

7. Rozszerzenia

  • Emacs posiada tak szeroki wachlarz możliwości, że czasem trudno już powiedzieć czy to nadal edytor tekstu czy też mini system operacyjny. Można w jego buforach m.in uruchamiać przeglądarkę WWW, interpreter języka Python czy też czytnik poczty elektronicznej.

    Aby uruchomić w Emacsie obsługę przeglądarki w3m należy dodać następujące wpisy do pliku konfiguracyjnego:

    ;; w3m settings
    (setq w3m-use-cookies t)
    ;; Keep the w3m-el stuff separate from the .w3m preferences
    (setq w3m-profile-directory       "~/.w3m/w3m-el-profile")
    (setq w3m-arrived-file            "~/.w3m/w3m-el-profile/.arrived")
    (setq w3m-cookie-file             "~/.w3m/w3m-el-profile/.cookie")
    (setq w3m-form-textarea-directory "~/.w3m/w3m-el-profile/.textarea")

    (!) {1} Uruchomić w Emacsie przeglądarkę w3m (wskazówka: aby wydać polecenie w minibuforze, używamy M-x).


Poprzedni etap: vi
Spis etapów: Spis etapów

BioInfoCourses: IntroLinux/TextEditors/Emacs (last edited 2011-02-15 22:57:21 by localhost)