wtorek, 25 września 2007

Emacs - Tygrys w programowaniu

Emacs - Tygrys w programowaniu

Wsparcie dla profesjonalnego programowania
1.0 CSCOPE

Szybkie i zaawansowanie wyszukiwanie i przechodzenie do kodu c, c++.
Projekt CSCOPE ma dostepna konfigurację dla edytora emacs co sprawia, że cscope całkowicie jest zintegrowany z emacsem.

Włączenie cscope w emacsie:
(require 'xcscope)

Podstawowe skróty klawiszowe dla cscope:
(global-set-key [(control x) (meta n)] 'cscope-set-initial-directory )
(global-set-key [(control x) (meta o)] 'cscope-find-this-symbol )
(global-set-key [(control x) (meta p)] 'cscope-find-global-definition )
(global-set-key [(control x) (meta r)] 'cscope-pop-mark )
(global-set-key [(control x) (meta b)] 'cscope-display-buffer )
(global-set-key [(control x) (meta t)] 'cscope-display-buffer-toggle )




Najwiekszą zaletę czyli szybkie wyszukiwanie proszę spróbować wyszukać dowolny tekst w źródłach kernela linuksa i porównać z wyszukiwaniem np. w Total Commanderze.





2.0 ECB (Emacs source code browser)

Bardzo wygodne i z wieloma możliwościami środowisko dla edycji kodu C, C++ i Java.
Środowisko może nie przypomina swojego konkurenta Microsoftowego edytora czy innego Buildera, bo jest ono zintergrowane z emacsem. Zaleta emacsa i vima jest taka, że w obu wykorzystanie myszki jest minimalne.
Środowisko ECB ma takie możliwości, że trudno od razu poznać wszystkie skróty i udogodnienia.

Oko ECB:










Włączenie środowiska ECB e emacsie:
(add-to-list 'load-path "/tools/emacs/ecb-2.32")
(require 'ecb-autoloads)

Uruchomienie środowiska ECB:
(global-set-key [(control x) (meta z)] 'ecb-activate )

Połączenie obu projektów przy edycji C, C++ to sama przyjemność pracy w C i C++(zapewne też i w Javie).

3.0 Skróty w programowaniu, czyli to co tygryski lubią najbardziej


Można także samemu napisać sobie własne makro i uruchamiać je z zdefiniowanego skrótu:
(defun put-comment-function ()
(interactive)
(insert-string "//******************************************************************\n")
(insert-string "/** ")
(save-excursion
(insert-string "\n * \\param \n")
(insert-string " * \\remarks \n")
(insert-string " * \\return void\n")
(insert-string "*/\n")
(insert-string "//******************************************************************\n")
(kill-region (point)
(progn
(re-search-forward "[^ \t\n]" nil t)
(1- (point)) )) ))

Poniższe makro wstawia komentarz dla funkcji:
//******************************************************************
/**
* \param
* \remarks
* \return void
*/
//******************************************************************


4.0 Konfiguracja emacsa


Konfiguracja dla języka c++ i C

(defun my-c++-mode-hook ()
(setq tab-width 4)
(define-key c++-mode-map "\C-m" 'reindent-then-newline-and-indent)
(define-key c++-mode-map "\C-ce" 'c-comment-edit)
(setq c++-auto-hungry-initial-state 'none)
(setq c++-delete-function 'backward-delete-char)
(setq c++-tab-always-indent t)
(setq c-indent-level 4)
(setq c-continued-statement-offset 4)
(setq c++-empty-arglist-indent 4))

Ustawienie koloru kursora na zielony:

(set-cursor-color "green")

Ustawienie koloru tła i tekstu:
(set-foreground-color "green")
(set-background-color "black")

Ustawienie skrótu do shela
(global-set-key [f3] 'shell)
Emacs umożliwia uruchomienie powłoki shella w sobie. Co to tak naprawdę umożliwia?
To, że możemy cokolwiek uruchamiać i kompilować. Czym się to różni od kompilacji czy uruchamiania w zwykłej powłoce bez emacsa. To, że wynik kompilacji umieszczony jest w buforze. Cokolwiek zostanie wygenerowane podczas kompilacji to z tym możemy robic co chcemy, czyli?
Możemy wyszukiwać błędy kompilacji na przeróżne sposoby. Możemy trzymać ten wynik w buforze, zawsze mamy ten wynik dostepny. Możemy wyszukiwać bardzo zawiłe "warningi" i "errory". Możemy odnosić się do kodu źródłowego bez wklepywania szukanego błędu, albo poprostu kopiować tekst "warninga" czy "errora" z bufora.
Emacs to naprawdę wydajne środowisko. Nie ma żadnych problemów z uruchomieniem kompilacji na 20 minut i przeglądanie oraz przetwarzanie kilkudziesięciu stron tekstu z wynikami. Po prostu proszę samemu spróbować z dużym projektem w emacsie.

Włączenie stylu formatowania dla języka c,C++ na "K&R"
(c-set-style "k&r")

Skrót Meta \ pozwala formatować tekst. Dla mnie była to pierwsza zaleta edytora emacs, która sprawiła, że porzuciłem naukę edytora Vim i rozpocząłem długą wędrówkę z edytorem emacs.

Automatyczne ustawienie odstępu tag na 3:
(setq tab-width 3)

Dodatkowe pakiety, które rozszerzają możliwości emacsa w programowaniu:

emacs-tiny
x-symbol
x-ref
etags
completion
oo-browser
xrefactory
session
ede

1 komentarz:

bugtraker pisze...

Męczę się z ustawieniem takiego środowiska pod WIN7. Mam emacs/cscope/cygwin (potem ECB). Ale problem mam taki, że emacs nie może znaleźć mi cscope-indexer'a choćby niewiem jak ustawiać ścieżki to ciągle nie widzi. O co chodzi?