Pokrótce opiszę jak skonfigurować (X)Emacsa by wygodnie pisać w nim programy w C. Wszelkich konfiguracji można dokonywać w pliku .emacs, umieszczonym w swoim katalogu domowym (czyli tam, gdzie będziemy po wydaniu polecenia cd). Uwaga: w tym pliku wszystko po znaku średnika aż do końca linii jest komentarzem.
Ponieważ część poleceń zależy od tego, czy używamy Emacsa czy XEmacsa,
dobry plik konfiguracyjny powinien wykrywać z jakim programem został
uruchomiony. Wpisujemy zatem do .emacs
;; Sprawdza czy używamy XEmacsa (defvar running-xemacs (string-match "XEmacs\\|Lucid" emacs-version))
Warto używać mechanizmu zapamiętywania sesji. Na razie nie wiem, jak
to zrobić w XEmacsie, zatem na wszelki wypadek uruchamiam to tylko dla
Emacsa. W .emacs wpisujemy
;; Zapamiętywanie sesji (unless running-xemacs (desktop-load-default) (desktop-read) )Następnie przed wyjściem z Emacsa zapamiętujemy sesję za pomocą M-x desktop-save (tzn. wciskamy lewy alt i klawisz 'x', a następnie wpisujemy desktop-save). Emacs pyta o katalog, do którego zapisać plik z informacjami o sesji. Zapisuje do tego katalogu plik o nazwie .emacs.desktop zawierający m.in. informacje o otwartch plikach, pozycji kursora i zawartości "schowka" (w Emacsie: kill-ring). Od tej pory uruchomienie Emacsa bez podania plików w katalogu w którym znajduje się taki plik powoduje odtworzenie sesji, a każde zamknięcie Emacsa powoduje uaktualnienie pliku .emacs.desktop (tak więc wystarczy ten plik zapisać raz, chyba że chcemy mieć kilka niezależnych sesji; wtedy każdy plik .emacs.desktop zapisujemy do osobnego katalogu).
Jeśli przeszkadza nam sygnalizacja dźwiękowa o błędzie, możemy ją
wyłaczyć, wpisując do .emacs linijkę:
;; Visible bell (no beep) (setq visible-bell t)
;; no-MULE ;; poniższa linijka wyłącz MULE i ustawia widzenie polskich znaczkow (standard-display-european t)Nie jest to jedyna możliwość, ale jest najprostsza. Polskie literki powinny byc kodowane w standardzie latin-2. Gdybyśmy chcieli używać innego standardu kodowania, nalezy użyć MULE; dalsze informacje w info do Emacsa.
Bardzo przydatne jest kolorowanie składni, nie tylko przy edycji
programów. Zatem włączmy je globalnie:
;; Font-lock-mode settings (kolorowanie składni) (if running-xemacs (progn (turn-on-font-lock) ;włączenie kolorków globalnie (lazy-shot-mode) ;'leniwe' kolorowanie ) (progn (global-font-lock-mode t) ;włączenie kolorków globalnie (setq font-lock-support-mode 'lazy-lock-mode) ;'leniwe' kolorowanie ) ) (setq font-lock-maximum-decoration t) ;kolorowanie na maksimum
Emacs w cc-mode (trybie używanym do pisania programów w C, C++, Javie i Objective C) potrafi automatycznie wcinać kod i go rozmieszczać. I tak np. dumyślnie po średniku wstawia znak nowej linii. Widać to w wierszu statusu, gdzie powinno znajdowac się C/ah. Zachowanie to przełączyć możemy za pomocą C-c C-a (t.j. wciskamy klawisz Ctrl i razem z nim c, a nastepnie Ctrl i klawisz a). Podobnie możemy przełączyć tryb "zjadania spacji" za pomocą C-c C-h. Zostanie to odwzorowane w wierszu statusu: jedna albo obie z literek a i h w C/ah zniknie. Można przełączyc obie te rzeczy jednoczesnie za pomocą C-c C-t.
Emacs potrafi także automatycznie wcinać kod. Linię możemy wciąć
wciskając klawisz TAB, zaś cały program za pomocą
kombinacji C-x h (zaznacza cały bufor t.j. plik) a
następnie M-C-\ (która wcina cały zaznaczony obszar; M-C-\
oznacza jednoczesne wciśnięcie klawisza Alt, Ctrl i \). Jeśli chcemy
by wcisnięcie klawisza Enter automatycznie wcinało linię możemy to
ustawić wpisując
(define-key c-mode-base-map "\C-m" 'newline-and-indent)do inicjalizacji cc-mode (patrz niżej).
Emacs powinien sam rozpoznać typ pliku po rozszerzeniu i zastosować
odpowiedni tryb. Na wszelki wypadek można jednak napisać w pliku
konfiguracyjnym:
;; Definiuje z jakiego pliku należy wczytać odpowiednie tryby (autoload 'c++-mode "cc-mode" "C++ Editing Mode" t) (autoload 'c-mode "cc-mode" "C Editing Mode" t) (autoload 'objc-mode "cc-mode" "Objective-C Editing Mode" t) (autoload 'java-mode "cc-mode" "Java Editing Mode" t) ;; powiązanie rozszerzeń z trybami Emacsa (setq auto-mode-alist (append '(("\\.C$" . c++-mode) ("\\.H$" . c++-mode) ("\\.cc$" . c++-mode) ("\\.hh$" . c++-mode) ("\\.cxx$" . c++-mode) ("\\.cpp$" . c++-mode) ("\\.c$" . c-mode) ("\\.h$" . c-mode) ("\\.m$" . objc-mode) ("\\.java$" . java-mode) ) auto-mode-alist))
Można także ustawić styl wcinania, np. gnu (domyślny; nawiasy
otwierające blok znajdują się w linii komendy), k&r czy bsd
(inaczej styl Allmana - nawiasy klamrowe otwierające blok znajdują się
w osobnej linii). Można także zmienić głębokość wcięć. Dokonujemy tego
wpisując:
(defun my-c-mode-common-hook () ;; styl Allmana zamiast GNU. (c-set-style "bsd") ;; enter automatycznie wcina. (define-key c-mode-base-map "\C-m" 'newline-and-indent) ;; rozmiar wcięć (setq c-basic-offset '2) ) (add-hook 'c-mode-common-hook 'my-c-mode-common-hook)Oczywiście nie trzeba wpisywac wszystkiego, tylko potrzebne rzeczy.
Wkrótce powinny pojawić się dalsze wskazówki. Więcej informacji można znaleźć w info do CC-Mode (C-h i i szukamy CC Mode lub od razu wciskamy m i wpisujemy CC Mode). Mój plik konfiguracyjny do Emacsa jest do ściągnięcia z mojej strony domowej.