Teraz kilka szczegółów technicznych. W Ubuntu plik konfiguracyjny nazywa się .emacs i znajduje się w katalogu domowym. Biblioteki dobrze jest umieszczać w jakimś ustalonym miejscu np. folderze .emacs.d/. Niestety nie potrafię dać żadnych wskazówek użytkownikom Windowsa oprócz tego linku.

Poniżej zamieszczam swój plik .emacs. W kolejnych postach postaram się wyjaśnić te części, które lepiej zrozumiałem podczas swoich przygód z emacsem. Podstawą dla mojego pliku są informacje zmieszczone na blogu Jessici Hamrick.

Najpierw ustawiamy miejsce gdzie znajdują się biblioteki:

(add-to-list 'load-path "~/.emacs.d/")

IDO, czyli ,,interactively do things", znacznie poprawia jakość użytkowania emacsa. Wygodniej jest otwierać pliki, przeglądać otwarte bufory (odpowiedniki okienek w trybie graficznym).

(require 'ido)
(ido-mode t)

Do sprawnego programowania warto jest dodać automatyczne uzupełnianie składni. Uzupełnianie składni działa całkiem przyzwoicie dla R (jeśli mamy zainstalowany ess).

(require 'auto-complete-config)
(add-to-list 'ac-dictionary-directories "~/.emacs.d/ac-dict")
(ac-config-default)
(global-auto-complete-mode t)

Cóż można chcieć więcej? Uruchamianie R w sąsiadującym wertykalnie oknie i zmianę jego wielkości za naciśnięciem jednego klawisza? Proszę bardzo:

(defun run-R ()
(interactive)
(split-window-right)
(other-window 1)
(setq x 0)
(while (< x 10)
(setq x (1+ x))
(shrink-window-horizontally 1))
(R)
)
(global-set-key (kbd \"<f1>\") 'run-R)

Wsparcie dla plików Markdown? Nie ma problemu, trzeba jedynie zainstalować pakiet pandoc.

(autoload 'markdown-mode "markdown-mode" "Major mode for editing Markdown files" t)
(add-to-list 'auto-mode-alist'("\.text\'" . markdown-mode))
(add-to-list 'auto-mode-alist'("\.markdown\'" . markdown-mode))
(add-to-list 'auto-mode-alist'("\.md\'" . markdown-mode))

;.Rmd support with polymode
(add-to-list 'load-path "~/.emacs.d/polymode/")
(add-to-list 'load-path "~/.emacs.d/polymode/modes/")
(require 'poly-R)
(require 'poly-markdown)
(add-to-list 'auto-mode-alist '("\\.Rmd\\'" . poly-markdown+r-mode))

Kompilację pliku Markdown można zautomatyzować do naciśnięcia jednego klawisza. Poniższy skrypt nie jest napisany przeze mnie od zera, zasadnicza część. została znaleziona w internecie. Jeśli ktoś zna Lispa to ten kod będzie pewnie nie do zniesienia. Prawdopodobnie da się to zrobić dużo łatwiej z poziomu R przy użyciu pakietu rmarkdown.

(define-key polymode-mode-map [(f5)] 'ess-swv-knit)
(define-key polymode-mode-map [(control f5)] 'ess-swv-pandoc)

(defun ess-swv-pandoc ()
"Run Pandoc on the associated .md file."
(interactive)
(let* ((rmd-buf (current-buffer)))
(save-excursion
(let* ((sprocess (ess-get-process ess-current-process-name))
(sbuffer (process-buffer sprocess))
(md-filename (file-name-sans-extension (buffer-file-name)))
(buf-coding (symbol-name buffer-file-coding-system))
(pandoc-cmd
(format "require(knitr); pandoc(\"%s.md\", format = \"html5\",
config = \"~/.emacs.d/config.pandoc\"); browseURL(\"%s.html\")"
md-filename md-filename)))
(message "Running pandoc on %s.md" md-filename)
(ess-execute pandoc-cmd 'buffer nil nil)
(switch-to-buffer rmd-buf)
(ess-show-buffer (buffer-name sbuffer) nil))))
)

Podsumowując,

  1. Emacsa można zmusić do zrobienia dokładnie tego co chcemy. To duża zaleta w porównaniu z RStudio, w którym takich możliwości nie mamy. Oczywiście dla początkującego eRowego programisty RStudio powinno w zupełności wystarczyć.

  2. Kluczem do konfiguracji emacsa jest wykorzystanie odmiany języka Lisp używanego do programowania w emacsie.

  3. Już wkrótce przedstawię swoje ustawienia interfejsu użytkownika, czyli takie elementy jak kolorowanie składni, numerowanie linii itp.