Ć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.
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.
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.
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 ';;'.
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")
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