MC, 20:39 piątek, 21.01.2011 r.
Ilustracja do artykułu: Emacs - tworzenie własnych makr (nagrywanie)

Emacs - tworzenie własnych makr (nagrywanie)

Jednym z większych dobrodziejstw Emacs'a jest ogromna prostota w tworzeniu własnych makr, które w niebywałym stopniu potrafią ułatwić pracę i znacznie skrócić jej czas. Ten artykuł chciałbym poświęcić właśnie na pokazanie jak takie makro stworzyć, użyć i ewentualnie zapisać sobie na przyszłość. Całość zaś chciałbym zilustrować bardzo prostym przykładem wziętym z codziennej pracy nad np. programami, czy stronami internetowymi. Na samym początku, nim przejdę do właściwego opisu zagadnienia, chciałbym dla ścisłości opisać wszystkie skróty klawiszowe, które mam zamiar w tym artykule wykorzystać.

C-e - przeniesienie kursora na koniec wiersza
C-n - przeniesienie kursora do kolejnego wiersza
C-w - wycięcie do pamięci zaznaczonego tekstu
C-y - wklejenie tekstu z pamięci
C-x-( - rozpoczęcie nagrywania makra
C-x-) - zakończenie nagrywania makra
C-x-C-k-n - zapisanie ostatnio nagranego makra
C-x-e - wykonanie zdefiniowanego makra

Wyobraźmy sobie teraz, że mamy plik tekstowy, który chcemy przerobić na plik HTML, jednak przy zachowaniu wersyfikacji. Aby tekst nie zlał się w całość, należy na końcu każdego z wierszy dopisać znacznik <BR>. Nie trudno się domyślić, że nie chcemy tego robić ręcznie, linijka po linijce, a że właśnie na tym będzie polegało zadanie dla naszego makra. Zatem do dzieła.

Załóżmy, że nasz plik tekstowy ma następującą treść:
Lorem ipsum dolor sit amet, consectetur adipisicing elit,
sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation
ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit
esse cillum
dolore eu fugiat
nulla pariatur. Excepteur
sint occaecat cupidatat non proident, sunt in
culpa qui officia deserunt mollit anim id est laborum.

Zastanówmy się jak powinien wyglądać algorytm naszego makra, aby w wygodny sposób móc dodać na końcu każdego z wierszy element <BR>. Proponuję następujące działanie:

- wyciąć do pamięci tekst <BR>
- przenieść kursor na koniec wiersza
- wkleić z pamięci wycięty tekst
- przejść do następnego wiersza
- powtarzać podkreślone punkty

Czyli przekładając to na skróty Emacs'a - wycinamy tekst za pomocą C-w, a następnie C-e, C-y, C-n i powtarzać podkreślone.

Gdy wiemy już jak ma działać nasze makro, możemy przystąpić do etapu tworzenia go.

1) Dopiszmy na końcu pierwszego wiersza tekst <BR>
2) Zaznaczmy tekst <BR> i wytnijmy go za pomocą C-w
3) Zacznijmy nagrywanie makra - C-x-(
4) Przejdźmy na koniec pierwszego wiersza skrótem C-e (nawet gdy się na nim znajdujemy!)
5) Wklejmy z pamięci tekst <BR> na końcu pierwszego wiersza skrótem C-y
6) Przejdźmy do kolejnego wiersza - C-n
7) Zakończmy nagrywanie makra - C-x-)

Nasze makro jest już gotowe do użycia! Zobaczmy zatem jak działa. W tym celu użyjemy skrótu C-x-e, który wykona ostatnio zdefiniowane makro.
Na końcu drugiego wiersza powinien pojawić się tekst <BR>. Gdy włączyliśmy nasze makro, możemy wykonywać je za pomocą klawisza e - przytrzymajmy go więc tak długo, aż wykona się na całym pliku. Prawda, że proste?

Lorem ipsum dolor sit amet, consectetur adipisicing elit,<BR>
sed do eiusmod tempor <BR>
incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,<BR>
quis nostrud exercitation<BR>
ullamco laboris nisi ut aliquip ex ea commodo<BR>
consequat. Duis aute irure dolor in reprehenderit in voluptate velit<BR>
esse cillum<BR>
dolore eu fugiat<BR>
nulla pariatur. Excepteur<BR>
sint occaecat cupidatat non proident, sunt in<BR>
culpa qui officia deserunt mollit anim id est laborum.<BR>

Do dopisania tych znaczników na końcu powyższych wierszy użyłem właśnie tak zdefiniowanego makra - tylko miałem w schowku nieco inną treść.

Jeżeli działanie tego makra spełniło nasze oczekiwania, możemy je zapisać, by mieć możliwość użycia go w przyszłości bez potrzeby kolejnego stwarzania go. Aby tego dokonać wystarczy użyć kombinacji klawiszy - C-x-C-k-n, oraz podać nazwę dla makra - proponuję np. wklejanie-z-pamieci-na-koniec-wiersza. Nazwa jest długa, ale zarazem bardzo klarowna jeśli chodzi o działanie makra. Jeśli nazwę potwierdzimy klawiszem Enter, to możemy się odwoływać do naszego makra za pomocą - M-x wklejanie-z-pamieci-na-koniec-wiersza. Przypomnę jeszcze, że klawisz Tab uzupełnia to co wpisaliśmy do zdefiniowanych nazw, więc nie musimy pisać całej nazwy makra.

Uwaga! W ten sposób zapisane makro będzie dostępne tylko do końca sesji (do zamknięcia programu). Aby zapisać makro na stałe, należy otworzyć plik konfiguracyjny ~/.emacs i użyć skrótu M-x insert-kbd-macro, a następnie podać nazwę zdefiniowanego wcześniej makra. Do pliku .emacs dopisany zostanie odpowiedni kod lisp - wystarczy zapisać plik konfiguracyjny, a dostęp do tak zachowanego makra będziemy mieli przy każdym włączeniu Emacs'a.

Komentarze (0) - Nikt jeszcze nie komentował - bądź pierwszy!

Imię:
Treść: