Emacs – rodzinaedytorów tekstu, znana ze swojej rozszerzalności. Podręcznik najpopularniejszego wariantu GNU Emacs opisuje go jako „rozszerzalny, dostosowywalny, samodokumentujący się, edytor wyświetlany w czasie rzeczywistym”[1]. Rozwój pierwszych Emacsów rozpoczął się w połowie lat siedemdziesiątych, a prace nad GNU Emacsem są kontynuowane (2022).
Emacs jest przykłademwolnego oprogramowania, a nie jedynie oprogramowaniaopen source.
Pierwotna wersja Emacsa została napisana w 1976 roku przez programistę zMIT,Richarda Stallmana, jako zestaw makr dla edytora o nazwieTECO(inne języki)[2]. Nazwa edytora jestakronimem pochodzącym od słóweditor imacros (dokładnie odEditor for MACroS)[2]. Oryginalna wersja powstała dla systemuITS[2]. Została ona następniesportowana dla systemówTOPS-10 iTOPS-20 (dlaminikomputeraPDP-10)[2].
Z czasem powstało wiele klonów edytora, do najwcześniejszych należąMultics Emacs stworzony przez Berniego Greenberga oraz Gosling Emacs autorstwaJamesa Goslinga (dla systemuUNIX)[2].
Powstawały też wersje edytora dlamikrokomputerów, jednak część z nich nie była zgodna z podstawowymi założeniami oryginału (w szczególności, nie była rozszerzalna). Zgodność sprowadzała się do użycia emacsowych buforów oraz tych samychskrótów klawiaturowych.[2]
W roku 1984 Stallman zaczął pisać nową wersję Emacsa,GNU Emacs, który stał się pierwszym programem projektuGNU[3]. W rok później ukazała się wersja GNU Emacs 15.34, która była już oficjalnie dystrybuowana. 23 lutego 2008 roku Richard Stallman napisał na emacs-devel[4], iż (po około 20 latach opieki nad programem) chciałby powierzyć projekt Stefanowi Monnier i Chongowi Yidong.
Emacs składa się z niewielkiego i wydajnego jądra napisanego wC, zawierającego teżinterpreter dialektuLispu zwanegoEmacs Lisp, oraz z ogromnej nadbudowy napisanej wLispie i wykonywanej przez to jądro.Dzięki takiej konstrukcji Emacs jest elastyczny, a jego zachowanie można w pełni kontrolować przy użyciuEmacs Lispa.
Rozszerzeniami typowymi dla edytorówprogramisty, są podświetlanie i automatyczne formatowaniekodu źródłowego, oraz integracja zmake,systemami kontroli wersji ikompilatorami.Mniej typowe zastosowania to przeglądanie katalogów, obsługa urządzeń typumodemy,aż do zupełnie nietypowych, jak: graficzna przeglądarka stronWWW, klientpoczty elektronicznej, gry komputerowe czy implementacjaELIZY.
Istnieją dwie wersje Emacsa wywodzące się z pierwotnego kodu, znane jako GNU Emacs iXEmacs, oraz ogromna liczba edytorów i innych narzędzi wzorowanych na Emacsie.
Dzięki dodatkowym narzędziometags i ctags istnieje możliwość szybkiego „poruszania” się po dużych projektach programistycznych.
GNU Emacs może być uruchamiany w dwóch trybach – tekstowym i graficznym. Uruchamiając Emacsa wTerminalu bez środowiskaX, uruchomi siętryb tekstowy. Natomiast wewnątrzX Window uruchomi się tryb graficzny. Istnieje także możliwość uruchomienia Emacsa w trybie tekstowym wemulatorze terminala wInterfejsie graficznym. Istnieje także możliwość uruchomienia Emacsa jakoserwera, w którym wszystkieklienty współdzielą te same bufory[5].
W Emacsie każde pojedyncze wciśnięcie klawisza lub sekwencji klawiszy wywołuje funkcję napisaną w językuEmacs Lisp. W większości trybów pojedyncze wciśnięcie klawisza powoduje wywołanie funkcjiself-insert-command, która wstawia pojedynczy znak do bufora[6]. Oprócz podstawowychskrótów klawiszowych istnieją także sekwencję rozpoczynające się odC-x (Control+X) lubC-c (Ctrl+C). Skrót M-x (znakmeta lubAlt) umożliwia wywołanie dowolnej funkcji wEmacs Lispie, która została utworzona z możliwością wywołania interaktywnego (wewnątrz funkcji musi być wywołanie(interactive)).
Poniższa tabela zawiera kilka podstawowych skrótów klawiaturowych i sekwencji oraz ich standardowe wiązania do funkcji wEmacs Lispie.
| Funkcja | Skrót klawiszowy | Opis |
|---|
forward-char | C-f | Przesunięcie o jeden znak do przodu. |
backward-char | C-b | Przesunięcie o jeden znak do tyłu. |
backward-line | C-p | Przesunięcie o jedną linie do góry. |
forward-line | C-n | Przesunięcie o jedną linie w dół. |
forward-word | M-f | Przesunięcie o słowo do przodu. |
search-word | C-s | Szukanie słowa w buforze. |
scroll-up | M-v | Przesunięcie o jeden ekran do góry |
scroll-down | C-v | Przesunięcie o jeden ekran w dół |
undo | C-/C-_ lubC-x u | Cofnięcie ostatniej zmiany. |
keyboard-quit | C-g | Zaniechanie ostatniej komendy. |
fill-paragraph | M-q | Wyrównanie tekstu do lewej krawędzi. |
find-file | C-x C-f | Odwiedzenie pliku (otworzenie lub stworzenie nowego pliku). |
save-buffer | C-x C-s | Zapis aktualnego bufora. |
write-file | C-x C-w | Zapisz jako... |
save-buffers-kill-emacs | C-x C-c | Wyjście z Emacsa. |
set-marker | C-[space]/C-@ | Zaznaczenie tekstu, które chcesz skopiować czy wyciąć. |
cut | C-w | Wycięcie zaznaczonego tekstu. |
copy | M-w | Skopiowanie zaznaczonego tekstu. |
paste | C-y | Wklejenie tekstu ze schowka. |
kill-buffer | C-x k | Zamknij bufor, jeżeli nie ma podanej nazwy zostanie zamknięty obecny bufor. |
save-buffers-kill-terminal | C-x C-c | Zamknięcie Emacsa |
Są tobiblioteki programistyczne, które dodają jakąś dodatkową funkcjonalność do edytora, zazwyczaj uruchamiane są automatycznie dla określonego typu pliku. Istnieją dwa typy trybów Emacsa główny (Major) i pomniejszy (Minor). Istnieją tryby główne dla większościjęzyków programowania, które m.in. kolorują składnie, dodają nowe funkcje, nowe kombinacje klawiszy lub inteligentne „wcinanie”kodu źródłowego. Pomniejsze tryby służą zazwyczaj do dodania jakiejś jednej funkcji np. wyświetlanie zegarka, czy liczby wierszy. Dla pojedynczego bufora może być wywołany tylko jeden tryb głównych oraz wiele pomniejszych[5]. Istnieje także tryb polymode, który umożliwia uruchomienie wielu trybów głównych, dla różnych części bufora[7].
W Emacsie wszystkie operacje wykonywane są na buforach. Bufor jest to zazwyczajplik nadysku, który można wyświetlić wewnątrz okna, który znajduje się w pamięci Emacsa. Buforem może być też zawartość katalogu, strona internetowa czy inna treść stworzona przez edytor np. gra[5].
Jest to obszar na dole okna, wewnątrz którego wyświetlane są wyniki działania komend oraz służy do wprowadzania dodatkowych argumentów dla funkcji[5].
Oknem (ang.window) w Emacsie określa się obszar, w którym wyświetlany jest Bufor. Nie należy go mylić zoknem programu uruchomionego w trybieGUI, na które w Emacsie mówi się „ramka”. Wewnątrz pojedynczej ramki programu można wyświetlać wiele okien z wyświetlanym buforem. Do dzielenia okna w poziomie służy sekwencjaC-x 3 (wywołująca funkcjęsplit-window-horizontally) natomiast do dzielenia w pionie służy sekwencjaC-x 2 (funkcjasplit-window-vertically), do usunięcia aktualnego okna służy sekwencjaC-x 0 (funkcjadelete-window). W Emacsie można mieć uruchomione dwa okna wyświetlające ten sam bufor – modyfikacja bufora w jednym oknie natychmiastowo uaktualnia drugi bufor. Okna mogą mieć różny rozmiar. Istnieje możliwość uruchomieniaemulatora terminala(inne języki) wewnątrz okna[5].
Ramką (ang.frame) określa się okno programu w trybie graficznym, w którym może być wiele okien. W trybie tekstowym wyświetlana jest naraz tylko jedna ramka[5].
Hooki Emacsa służą do wywoływania kodu użytkownika w odpowiednim momencie, np. gdy uruchomiony jest określony tryb. Przykładowo wewnątrz Hooka dla trybu głównegolisp-mode (uruchamianego dla programów w językuLisp), można utworzyć dodatkowe wiązania funkcji (ang.binding) do skrótów klawiszowych, ułatwiające prace z plikami w tym języku lub uruchomić tryby pomniejsze, które powinny być włączone tylko dla tego trybu głównego.
Są to programy, które generują indeksy definicji wewnątrzplików źródłowych. Po wygenerowania pliku Tags dla danego kodu źródłowego, składającego się z wielu plików, można używać skrótuM-. (Meta lubAltikropka) do przechodzenia z miejsca, gdzie wywołano funkcję, do miejsca, w którym ta funkcja została zdefiniowana.
 | Zobacz publikację Emacs w Wikibooks |
| Historia | |
|---|
| Licencje | |
|---|
| Programy | |
|---|
| Postacie | |
|---|