MC, 20:39 piątek, 21.01.2011 r.
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ć.
- 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?
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ść:
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
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>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.
- 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.
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>
Komentarze (0) - Nikt jeszcze nie komentował - bądź pierwszy!