Emacs/Konfiguracja

Z Wikibooks, biblioteki wolnych podręczników.

The big problem is that you have to become a .emacs programmer before you can start coding.[1]

Pliki konfiguracyjne[edytuj]

GNU Emacs szuka pliku initializacyjnego ( ang. initialization file, init file) :[2]

~/.emacs 
~/.emacs.el
~/.emacs.d/init.el

Są to skrypty Emacs Lispa. Emacs wykona pierwszy ze znalezionych, ignorując pozostałe.

Dokladna lokalizacja jest zależna od systemu operacyjnego. Jeśli nie jesteś pewien, której lokalizacji użyć, możesz uruchomić Emacsa i wpisać M-x describe-variable RET user-init-file RET. Spowoduje to wyświetlenie ścieżki do pliku init w minibuforze.

Sprawdzanie i ustalanie zmiennych bezpośrednio w programie[edytuj]

VAR zmienna, VALUE wartość, RET klawisz Enter

1. Wyświetlenie wartości zmiennej oraz dokumentacji

C-h v
VAR RET

Sprawdzamy wartość zmiennej load-path

C-h v load-path RET

przykładowy wynik :

load-path is a variable defined in `C source code'.
Its value is
("/usr/share/emacs24/site-lisp/slime" "/usr/share/emacs24/site-lisp/slime/contrib" "/usr/share/emacs24/site-lisp/latex-cjk-thai" "/usr/share/emacs24/site-lisp/latex-cjk-common" "/etc/emacs24" "/etc/emacs" "/usr/local/share/emacs/24.3/site-lisp" "/usr/local/share/emacs/site-lisp" "/usr/share/emacs24/site-lisp/dictionaries-common" "/usr/share/emacs/site-lisp/autoconf" "/usr/share/emacs/24.3/site-lisp" "/usr/share/emacs/24.3/site-lisp/cmake-data" "/usr/share/emacs/24.3/site-lisp/dictionaries-common" "/usr/share/emacs/24.3/site-lisp/latex-cjk-common" "/usr/share/emacs/24.3/site-lisp/latex-cjk-thai" "/usr/share/emacs/24.3/site-lisp/slime" "/usr/share/emacs/24.3/site-lisp/slime/contrib" "/usr/share/emacs/site-lisp" "/usr/share/emacs/24.3/lisp" "/usr/share/emacs/24.3/lisp/vc" "/usr/share/emacs/24.3/lisp/url" "/usr/share/emacs/24.3/lisp/textmodes" "/usr/share/emacs/24.3/lisp/progmodes" "/usr/share/emacs/24.3/lisp/play" "/usr/share/emacs/24.3/lisp/org" "/usr/share/emacs/24.3/lisp/nxml" "/usr/share/emacs/24.3/lisp/net" "/usr/share/emacs/24.3/lisp/mh-e" "/usr/share/emacs/24.3/lisp/mail" "/usr/share/emacs/24.3/lisp/language" "/usr/share/emacs/24.3/lisp/international" "/usr/share/emacs/24.3/lisp/gnus" "/usr/share/emacs/24.3/lisp/eshell" "/usr/share/emacs/24.3/lisp/erc" "/usr/share/emacs/24.3/lisp/emulation" "/usr/share/emacs/24.3/lisp/emacs-lisp" "/usr/share/emacs/24.3/lisp/cedet" "/usr/share/emacs/24.3/lisp/calendar" "/usr/share/emacs/24.3/lisp/calc" "/usr/share/emacs/24.3/lisp/obsolete" "/usr/share/emacs/24.3/leim")

2. Ustawienie zmiennej VAR na wartość VALUE

M-x set-variable RET
VAR RET
VALUE RET

3. Sprawdzenie, co jest przypisane do danej kombinacji klawiszy

C-h k
wciskamy kombinację klawiszy

4. Sprawdzenie jaka kombinacja klawiszy uruchamia daną funkcję, np. kill-sexp

C-h w
kill-sexp RET

Podświetlanie aktywnego regionu[edytuj]

Normalnie w Emacsie nie jest podświetlany aktywny region ( odwrotnie w Xemacsie ). W celu zmiany [3]

(transient-mark-mode)

Styl tekstu[edytuj]

Opis stylu wyświetlania tekstu ( ang. face ) :

M-x describe-face

Styl jest zdefiniowany w pliku `faces.el'.

Jeśli nie odpowiadają nam domyślne style możemy je zmienić za pomocą pojedynczych komend lub trybów.

Komendy związane ze stylem tekstu[edytuj]

Możemy zmienić pojedyncze kolory za pomocą komend, np. :

(set-face-foreground 'default "blue")

Tryby kolorów[edytuj]

color-theme[edytuj]

Jest tryb color-theme-el [4]

Wybieramy za pomocą komendy

M-x color-theme-<TAB> RET


Zenburn[edytuj]

Schemat kolorów Zenburn [5][6] wymaga pakietu color-theme.


Aktywacja schematu : w pliku konfiguracyjnym

~/.emacs

dodajemy : [7]

;; Sweet colors
(require 'color-theme) ; some sweets
(load "zenburn")
(zenburn) ; color scheme

Własny tryb[edytuj]

Jeśli nie jesteś zadowolony z gotowych trybów możesz utworzyć własny [8]

Plik konfiguracyjny .emacs[edytuj]

Znajdywanie błędów w pliku .emacs[edytuj]

M-x set-variable
debug-on-error
t
M-x load-file
~/.emacs

Inną metodą jest uruchomienie Emacsa w taki sposób

emacs --debug-init

Przykładowy plik .emacs[edytuj]

Poniższą zawartość można bezpośrednio skopiować do ~/.emacs.

;; podwójne średniki do komentarzy, pojedyncze do wyłączania opcji

;; Wczytujemy konfig klawiszem F9, nie trzeba wychodzić z Emacsa
(defun load-my-config ()
  (interactive)
    (load-file "~/.emacs"))
(global-set-key (kbd "<f9>") 'load-my-config)

(add-to-list 'load-path "~/elisp")

(setq inhibit-splash-screen t) ; nie pokazuje ekranu startowego
(setq make-backup-files nil) ; nie robi backupow
(menu-bar-mode -1) ; wylaczamy menubar na gorze
(transient-mark-mode t) ; widoczne co zaznaczylismy

;; Funkcja i bindowanie do zamkniecia okna i buforu jednoczesnie
;; thanks to piranha from #emacs at freenode
(defun kill-and-close-buffer () (interactive) (kill-buffer nil) (delete-window))
(global-set-key (kbd "C-x x") 'kill-and-close-buffer)

;; http://www.emacswiki.org/cgi-bin/wiki/InteractivelyDoThings
;; dopelnia wewnatrz nazw nie tylko poczatki, np przy otwieraniu plikow
;; #emacs@freenode 2008-03-06 
;; [11:26] <bob2> rofrol: I like it because it completes on strings
;; within the names, not just at the beginning
(require 'ido)
(ido-mode t)
;; otwieranie w textmate jest w fuzzy mode, co to jest?
;; http://groups.google.com/group/comp.emacs/msg/444300433515472b?dmode=source
;; opcja odpowiadająca to
; http://groups.google.com/group/comp.emacs/msg/444300433515472b?dmode=source
; (setq ido-enable-flex-matching t)

;; http://www.codecoffee.com/tipsforlinux/articles/033.html
;; Changes all yes/no questions to y/n type
(fset 'yes-or-no-p 'y-or-n-p)

;;Plynne przewijanie po jednej linii
(setq scroll-step 2)
;;alternatywnie mozna ustawic dwie zmienne
;;http://www.emacswiki.org/emacs-en/SmoothScrolling
;scroll-step 1
;scroll-conservatively 10000
;;jesli potrzeba ustawic margines dla przewijania
;;http://emacs.wordpress.com/2007/09/10/smooth-scrolling/

;;Utrzymywanie kursora w tej samej pozycji podczas przewijania stron
(setq scroll-preserve-screen-position t)

;; "http://snarfed.org/space/emacs page up page down"
;; page down przesuwa takze kursor, jesli dojedzie do konca strony
;; Page down/up move the point, not the screen.
;; In practice, this means that they can move the
;; point to the beginning or end of the buffer.
(global-set-key [next]
  (lambda () (interactive)
    (condition-case nil (scroll-up)
      (end-of-buffer (goto-char (point-max))))))

(global-set-key [prior]
  (lambda () (interactive)
    (condition-case nil (scroll-down)
      (beginning-of-buffer (goto-char (point-min))))))

;; pokaz nie widoczne znaki na końcu linii
;; http://trey-jackson.blogspot.com/2008/03/emacs-tip-12-show-trailing-whitespace.html
(setq-default show-trailing-whitespace t)

;; włączanie outline-mode dla plików o nazwie TODO
;; * to poziom 1, ** to poziom 2, jeśli wykonane to dajemy spację przed gwiazdką
;; from Teach Yourself Emacs in 24 hours
;; http://edward.oconnor.cx/2006/03/poor-mans-todo-list
;; http://www.emacswiki.org/cgi-bin/wiki/OutlineMode
(setq auto-mode-alist (cons '("TODO" . outline-mode)auto-mode-alist))

;; utf-8
;; http://gentoo-wiki.com/HOWTO_Make_your_system_use_unicode/utf-8#Editors
(setq locale-coding-system 'utf-8)
(setq terminal-coding-system 'utf-8)
(setq keyboard-coding-system 'utf-8)
(setq selection-coding-system 'utf-8)
(setq prefer-coding-system 'utf-8)

;; http://www.xsteve.at/prg/emacs/.emacs.txt
;;http://www.bazon.net/mishoo/.emacs

;; dziala zwykle global
;(global-set-key "\M-g" 'newline-and-indent)

;; nie dziala zwykle local
;(local-set-key "\M-g" 'newline-and-indent)

;; dziala kbd
;(define-key global-map (kbd "M-g") 'newline-and-indent)

;; nie dziala kbd local
;(define-key local-map (kbd "M-g") 'newline-and-indent)

;; podobno enter jest zasloniety lokalna definicja, ale ponizsze nie dzial
;(local-set-key (kbd "C-m") 'newline-and-indent

;; za to to dziala
;(global-set-key "\C-m" 'newline-and-indent)

;; Przydatne do pisania programów
(global-set-key (kbd "C-m") 'newline-and-indent)

adresy dotyczące konfiguracji[edytuj]

http://www.debianusers.pl/articles/39 Podstawy składni pliku konfiguracyjnego

http://www.emacsblog.org/2007/10/07/declaring-emacs-bankruptcy/#more-105 Podział pliku konfiguracyjnego na mniejsze

http://www.dotemacs.de/ zbiór plików konfiguracyjnych

http://www.dotemacs.de/recovery.html Testowanie kodu przed wrzuceniem do konfiguracji

http://tiny-tools.sourceforge.net/emacs-keys.html Bardzo obszerny poradnik

Bibliografia[edytuj]

  1. [1]
  2. GNU Emacs manual : 48.4 The Emacs Initialization File
  3. Sams Teach Yourself Emacs in 24 Hours : Point, Mark, and Region
  4. color-theme for emacs by 2009 Xavier Maillard
  5. b batsov : zenburn-emacs
  6. emacswiki : ColorTheme
  7. Łukasz Sowa : plik .emacs
  8. color-theming by djcb bloger