Makra w Emacsie

March 30th, 2008

Liczba odwiedzin spada, trzeba brać się do roboty.

Jedną z najfajnieszych, moim zdaniem możliwości które umożliwa Emacs
są makra.

Makra to zapisany ciąg kombinacji klawiszowych od punktu A do B. Są
one czymś pośrednim pomiędzy manualnym poprawianiem pliku a skryptem
który przetwarza cały plik (np. napisany w Perlu). Czasem przypomina
pisanie takiego skryptu na żywo, widząc co robi pokoleji

Porady wesołego użytkownika makr

Porada 1 - zapamiętaj skróty klawisze

  • C-x ( - Rozpoczni defeniować makro
  • C-x ) - Zakończ definicję makra
  • C-x e - Wykonaj ostanie makro
  • M-n C-x e - Wykonaj ostanie makro n razy
  • M-x name-last-kbd-macro - Nadaj ostaniemu makru nazwę (potrzebne do zapisu)
  • M-x insert-keyboard-macro - Wypiszę makro w kodzie Lispa
  • m-x macroname - Wykonaj nazwane makro

Koniecznie z binduj pojedyczy klaszwisz do powtórzeń makr (np. F4)
(define-key global-map [f4] ‘call-last-kbd-macro)

Porada 2 - Makruj wszystko

Uważam, że małe makra są najważniejsze, bo najczejściej używane oraz
najwięcej czasu zaoszczędzają.

Chodźbyś miał zaoszczędzić 5 sekund, warto. “Pisanie makrowe” jest
równo znaczne z myśleniem jak robić by się nie narobić.

Porada 3 - Znasz skróty klawiszowe?

Przed pisaniem/tworzeniem makra musisz być zaznajomony z podstawowymi
skrótami klawiszowymi dt. poruszania się po pliku.

Ściągawkę znajdziesz w sieci, przykładową zajdziesz tu

Porada 4 - Zakładki (Bookmarks)

Korzystałeś z nich? Działają tak jak te w książkach pozwalają na łatwy
dostęp do danej strony w ulubionej powieści.

Tutaj znaczy się w Emacsie oznaczają plik i numer lini. W makrach
używam ich do skakania pomiędzy punktami w pliku np. do szybkiego
deklarowania funkcji w C++.

Czy też do pobierania danych z innych plików.

Przykład

Przykładowo pracujemy nad stroną WWW, mamy do wyróżnienia pojedyncze
słowa. Piszemy odpowiedni styl CSS, przykładowo klasę “.wazne” która
to koloruje tekst, robi specjalny kolor pod i tak dalej.
Wygląda to tak.
słowo

Dzięki makru, wystarczy że nakierujemy kursorem na “słowo” skrót
klawiszowy wykonujący ostanie makro i mamy odpowiednie słowo zrobione
“Makro w klawiszach”

C-x (

M-f ;; Przejście na koniec słowa

M-b ;; Przejście na początek słowa

C-x )

Powysze makro uwalnia nas od konieczności bycia na konkretnej literze
(pierwszej bądź ostatniej). Rozpoczęcie o końca jest tajemnicą
sukcesu, albowiem użycie na pierwszej literze M-b spowoduje przejście
do porzedniego wyrazu, wtedy zły wyraz zostanie “ogarnięty” przez span.

Gnu/Emacs był tworzony pod Unixem i tam się czuje najlepiej. Jednakże
przyzwyczajenia ludzi idą za nim. Jak zmieniłem system z Linuksa na
Windows zaczęło mi brakować mojego ulubionego edytora. Znalazłem
instalator dla Windows z dodatkami (EmacsW32).

Uruchomiłem… i działa. Tyle, że problem był z kodowaniem polskich
ogonków.
Wpis do .emacs:
(set-keyboard-coding-system 'cp1250)
(prefer-coding-system 'windows-1250)
Załatwił sprawę.

Dalej, instalacja Aspella (do poszukiwań błędów ortograficznych),
później do instalowanie słownika z Kurnika - jest aktualniejszy.
Wpis do .emacs:
(setq ispell-program-name "aspell")
(setq ispell-dictionary "polish")

Zmiana katalogu “startowego”:
(setq default-directory "D:/nazwa_katalogu/")

Oraz na koniec ustawienie Consolas jako czcionki domyślnej dla Emacsa
(set-default-font "-outline-Consolas-normal-r-normal-normal-*-*-96-96-c-*-iso8859-2")

Emacs Corner: Dired (2/2)

June 29th, 2007

Druga część opowieści o Dired.

‘l’

Odświerzamy zawartość bufora

‘k’

Usuwa linie z bufora (nie usuwa plików). Pomocne gdy chcemy aby ukryć
pewne pliki np. zaczynające się od kropki.

‘!’

Wykonujemy komendę w powłoce.

‘% u’

Zmień nazwę każdego pliku na same duże litery (’dired-upcase’). Stare
nazwy: ‘Foo’ i ‘bar’; Nowe nazwy: ‘FOO’ i ‘BAR’.

‘% l’

Sytuacja odwrotna do poprzedniego polecenia. Zmienia nazwy każdego
pliku na same małe litery (’dired-downcase’). Stare nazwy: ‘Foo’ i
‘bar’; Nowe nazwy: ‘foo’ i ‘bar’.

‘=’

Porównuje wybrany plik z podanym (`dired-diff’). Korzysta z programu
‘diff’.

‘M-=’

Porównuje wybrany plik z jego ostatnim backapem
(’dired-backup-diff’). Jeżeli wybierze się do powównania kopia czegoś
to zostanie powówana z kopią kolejną.

‘i’

Pokazuję pokatalog w tym samym buforze. (`dired-maybe-insert-subdir’)
Użyj ‘C-u k’ aby zamknąć otwarty podkatalog, trzeba być kursorem na
nazwie podkatalogu.

Emacs Corner: Dired (1/2)

June 29th, 2007

Tryb Dired w Emacsie (uruchamiany przez M-x dired lub C-x d), jest przeznaczony
do obsługi plików/oraz katalogów. Podobne jest to do MC, tyle że
zawiera jedną kolumnę.

Bufor jest uruchamiany jako ‘read-only” (tylko od odczytu) wpisywanie
tekstu nie jest użyteczne, bo jak użyje się np. ‘d’ lub ‘x’ to wywoła
to jakąś funkcję, co potem może być bolesne w skutkach. Istnieją
komendy które zaznaczają poszczególne pliki/katalogi.

Aby uruchomić Dired w innym buforze użyj ‘C-x 4
 d’('dired-other-window’). Gdy chcesz uruchomić Dired w nowym oknie użyj
‘C-x 5 d’ (’dired-other-frame’).

Poruszanie po Dired jest podobne do samego Emacsa, przez ‘C-n’ i
‘C-p’ “pojedziesz” kursorem w górę i w dół.

Dla wygody można użyć <SPC> lub `n’ zamiast ‘C-n’.  ‘p’
zamiast`C-p’. <DEL> idze w górę listy oraz usuwa zaznaczenia
‘j’ (`dired-goto-file’) idze do miejsca gdzie znajduję się podany
plik.

Usuwanie

‘d’

Oflagowuje pliki do usunięcia

‘u’

Usuwa flagę z plików

‘x’

Usuwa pliki z zaznaczoną flagą. Przed usunięciem pyta się czy na
pewno usunąć podane pliki.

‘~’

Oflagowujesz wszystkie pliki “backapowe” do usunięcia.

‘#’

Oflagowujesz wszystkie pliki które zaczynają się od ‘#’ i kończą
się na nim.

‘&’

Oflagowujesz wszystkie pliki tymczasowe, które bardzo szybko
powstają ponownie np. ‘*.log’.

‘% d REGEXP <RET>’

Oflagowujesz wszystkie pliki które pasują do
podanego wyrażenia regularnego.

“Odwiedzanie” pliku

‘f’

Otwiera pliki ten, na którym znajduję się
kursor. Działa podobnie do ‘C-x C-f’('dired-find-file’).

‘<RET>’
‘e’

Równoważnik ‘f’.

‘o’

Podobne do ‘f’, ale używa innego bufora do wyświetlenia pliku
(’dired-find-file-other-window’). To jest podobne do  ‘C-x 4 C-f’ przy
“odwiedzaniu” pliku

‘C-o’

Działa identycznie jak przykład poprzedni z ‘o’ tylko kursor nie
przechodzi do nowo otwartego buforu (’dired-display-file’).

‘C NEW <RET>’

Kopiuje wybrany plik/i (’dired-do-copy’).  Argumentem
NEW jest miejsce gdzie ma być skopiowany plik/i lub (w przy przypadku
pojedynczego pliku) nowa nazwa. Działa podobnie jak polecenie ‘cp’ w powłoce.

Zmienna ‘dired-recursive-copies’ kontroluje czy ma zachodzić
kopiowanie rekursywnie (podobne do ‘cp -r’). Domyślnie ustawione jest
na ‘nil’, co znaczy, że katalogi nie mogą być kopiowane

‘D’

Usuwa wybrany plik (’dired-do-delete’). Podobne do ‘rm’ w powłoce.
W porównaniu z komendą ‘x’ nie potrzebuje zaznaczenia plików.

‘R NEW <RET>’

Zmienia nazwę wybranego pliku (’dired-do-rename’).  Jeżeli zmieniasz
pojedynczy plik to argument NEW jest nową nazwą dla pliku. Jeżeli
zmieniasz więcej niż jeden plik wtedy argument NEW jest miejscem gdzie
mają być przeniesione plik. Podobnie do polecenia ‘mv’ w powłoce

Dired automatycznie zmienia nazwy odwiedzonych plików oraz zmienia
nazwy buforów.

‘H NEW <RET>’

Tworzy twarde powiązanie z podanym plikiem (’dired-do-hardlink’).
Odpowiednik ‘ln’ w powłoce. Argument NEW jest miejscem do którego jest
tworzone powiązanie.

‘S NEW <RET>’

Tworzy symboliczne powiązanie z plikiem/katalogiem (’dired-do-symlink’).
Odpowiednik ‘ln -s’ w powłoce. Argument NEW jest miejscem do którego
jest tworzone powiązanie.

‘M MODESPEC <RET>’

Odpowiednik ‘chmod’ w powłoce. Argument MODESPEC oznacza wartość
numeryczną. (’dired-do-chmod’)

‘G NEWGROUP <RET>’

Odpowiednik ‘chgrp’ w powłoce.(’dired-do-chgrp’).

‘T TIMESTAMP <RET>’

Odpowiednik ‘touch’ w powłoce.(’dired-do-touch’) Polecenie ‘dotyka’
podanego pliku zmieniając jego datę ostatniej modyfikacji. Argument
TIMESTAMP ustawia określaną datę (domyślnie jest to data obecna).

‘P COMMAND <RET>’

Drukuje zaznaczony plik (używając domyślnie ‘lpr’) (’dired-do-print’).

‘Z’

Kompresuje wybrany plik (używając gunzip’a) (’dired-do-compress’).
Jeżeli plik wygląda na skompresowany tym momencie zostaje od
kompresowany

‘L’

Ładuje wybrany plik Emacs Lips (’dired-do-load’). Odpowienik ‘M-x
load-file’.

‘B’

Byte compile na wybranym pliku Emacs Lisp (’dired-do-byte-compile’).

‘A REGEXP <RET>’

Znajdź wszystkie pliki pasujące do wyrażenia regularnego(REGEXP) (’dired-do-search’).

Ta komenda jest wariantem ‘tags-search’. Szukanie zatrzymuje się na
pierwszym wyniku. Użyj ‘M-,’ (przecinek) aby dalej szukać i znaleźć
kolejny wynik

Jedną z rzeczy do której w Emacsie ludzie jej nienawidzą i kochają są
robione przez program backapy, tyle że czesto i w wyniku tego powstało
została zarchiwizowana 183 wersja pliku .emacs (tak, bardzo często go
zmieniam) dla tych którzy twierdzą, że nie potrzebują backapu
znalazłem komendę którą można dodać do pliku .emacs

(setq make-backup-files nil)

Skróty:
C - Control
M - Meta (Alt)
<RET> - Enter

C-s

Przyrostkowe szukanie do przodu

C-r

Przyrostkowe szukanie w tył

C-s <RET> STRING <RET>

Szukanie STRINGU

C-r <RET> STRING <RET>

Szukanie do tylu STRINGU

C-s <RET> C-w SŁOWO <RET>

Szukanie SŁOWA/SŁÓW.

C-r <RET> C-w SŁOWO <RET>

Szukanie w tył SŁOWA/SŁÓW.

Korzystanie z wyrażeń regularnych

C-M-s (ESC Ctrl-s, jeżeli nie masz przycisku Meta)

Szukanie tekstu z wykorzystaniem wyrażeń regularnych.

C-M-r (ESC Ctrl-r, jeżeli nie masz przycisku Meta)

Szukanie tekstu w tył z wykorzystaniem wyrażeń regularnych.

Skróty:
C - Control
M - Meta (Alt)
<RET> - Enter
<SPC> - Spacja
<DEL> - Delete

C-o

Wstawia pustą linię, ale nie powoduje przejścia kursora do następnej linii jak <RET>.

C-x C-o

Usuwa puste linie.

M-d

Usuwa słowo po znaku kursora.

M-<DEL>

Usuwa słowo przed kursorem

M-g M-g
M-g g’
M-x goto-line

Przejście do podanej linii

M-x goto-char

Przejście do podanego znaku

C-w

Usunięcie zaznaczenia obszaru zaznaczenia

C-x C-x

Zaznaczenia całego pliku

Wielki Emacs nie posiada domyślnie wspomagania Pythona. Trochę to dziwi, ale jest na to sposób.

Istnieje python-mode.el support dla Emacs’a. Ściągniesz go z SourceForge.net:

Po ściągnięciu niewielkiego, spakowanego pliku rozpakujemy go w naszym LoadPath (link jak ustawić LoadPath).

Następnie dodajemy poniższe linie do ~/.emacs.
(autoload 'python-mode "python-mode" "Python Mode." t)
(add-to-list 'auto-mode-alist '("\\.py\\'" . python-mode))
(add-to-list 'interpreter-mode-alist '("python" . python-mode))

a to może być przydatne:

(add-hook 'python-mode-hook
(lambda ()
(set (make-variable-buffer-local 'beginning-of-defun-function)
'py-beginning-of-def-or-class)
(setq outline-regexp "def\\|class ")))

Emacs Corner: LoadPath

May 9th, 2007

Powrót serii postów o Emacs, które zostały usunięte prawie w całości po moich porządkach na blogu #1, #2.

Oby to był powrót warty zachodu

Zmienna load-path odpowiada za załadowanie plików elisp. Zostaną one wyszukane zgodnie z porządkiem wydawanych poleceń.

Pojedynczy katalog dodamy do “load-path” za pomocą:

(setq load-path (cons "~/sciezka/do/adresu" load-path))

umieszczamy powyższy wpis do .emacs

.Aby dodać do “load-path” katalog razem z podkatalogami użyjemy:

(progn (cd "~/elisp") (normal-top-level-add-subdirs-to-load-path))

Zapewne do tego wpisu będę się często odwoływał.

RSS | XHTML | CSS