Wednesday, March 16, 2011

How to add Ruby syntax highlighting in emacs

I recently had to look at some exceptions from a headless server and it was outputting errors from some ruby code. I just wanted to take a quick look at the code without downloading the file to my machine or use vnc and a graphical editor but I still wanted syntax highlighting.

I decided to install emacs and add Ruby mode to the install. Luckily I found out how from reading these two posts:
Ubuntu and Windows

It comes down to this:
  • emacs 23+ already loads it by default.
  • For emacs 22+ you need to download and move to the right directory an ".el" file then change/create your ~/.emacs file to load Ruby-mode when opening Ruby files.

mkdir downloads
cd downloads/
wget http://svn.ruby-lang.org/repos/ruby/tags/v1_9_2_0/misc/ruby-mode.el
wget http://svn.ruby-lang.org/repos/ruby/tags/v1_9_2_0/misc/ruby-electric.el
wget http://perso.tls.cena.fr/~boubaker/distrib/mode-compile.el
mv *.* /usr/local/share/emacs/site-lisp/
cat >> ~/.emacs <<"END_OF_FILE"
; loads ruby mode when a .rb file is opened.
(autoload 'ruby-mode "ruby-mode" "Major mode for editing ruby scripts." t)
(setq auto-mode-alist  (cons '(".rb$" . ruby-mode) auto-mode-alist))

; adds tabify and indentation
(add-hook 'ruby-mode-hook
      (lambda()
        (add-hook 'local-write-file-hooks
                  '(lambda()
                     (save-excursion
                       (untabify (point-min) (point-max))
                       (delete-trailing-whitespace)
                       )))
        (set (make-local-variable 'indent-tabs-mode) 'nil)
        (set (make-local-variable 'tab-width) 2)
        (imenu-add-to-menubar "IMENU")
        (define-key ruby-mode-map "\C-m" 'newline-and-indent) ;Not sure if this line is 100% right!
        (require 'ruby-electric)
        (ruby-electric-mode t)
        ))

; Install mode-compile to give friendlier compiling support!
(autoload 'mode-compile "mode-compile" "Command to compile current buffer file based on the major mode" t)
 (global-set-key "\C-cc" 'mode-compile)
(autoload 'mode-compile-kill "mode-compile" "Command to kill a compilation launched by `mode-compile'" t)
 (global-set-key "\C-ck" 'mode-compile-kill)
END_OF_FILE


Note: You dont have to move the files to the emacs directory, simply move them to your ~/.emacs.d/ folder and add the following to your ~/.emacs file at the top:
(add-to-list 'load-path "~/.emacs.d/")
I also added the code to tabify/indent and one more snippet for quick compiling. If you don't want to add those features then only download the first ".el" file and remove or don't add the last two pieces to your ~/.emacs file.

Enjoy,

Marlon

No comments:

Post a Comment