Starter Kit Ruby
This is part of the Emacs Starter Kit.
Starter Kit Ruby
Support for the Ruby dynamic, open-source programming language.
(eval-after-load 'ruby-mode '(progn ;; work around possible elpa bug (ignore-errors (require 'ruby-compilation)) (setq ruby-use-encoding-map nil) (define-key ruby-mode-map (kbd "RET") 'reindent-then-newline-and-indent) (define-key ruby-mode-map (kbd "C-M-h") 'backward-kill-word) (define-key ruby-mode-map (kbd "C-c l") "lambda")))
(global-set-key (kbd "C-h r") 'ri)
Yaml mode
(starter-kit-install-if-needed 'yaml-mode) (require 'yaml-mode) (add-to-list 'auto-mode-alist '("\\.ya?ml$" . yaml-mode))
Rake files are ruby, too, as are gemspecs.
(add-to-list 'auto-mode-alist '("\\.rake$" . ruby-mode)) (add-to-list 'auto-mode-alist '("Rakefile$" . ruby-mode)) (add-to-list 'auto-mode-alist '("\\.gemspec$" . ruby-mode))
Rake
(defun pcomplete/rake () "Completion rules for the `ssh' command." (pcomplete-here (pcmpl-rake-tasks))) (defun pcmpl-rake-tasks () "Return a list of all the rake tasks defined in the current projects. I know this is a hack to put all the logic in the exec-to-string command, but it works and seems fast" (delq nil (mapcar (lambda (line) (if (string-match "rake \\([^ ]+\\)" line) (match-string 1 line))) (split-string (shell-command-to-string "rake -T") "[\n]")))) (defun rake (task) (interactive (list (completing-read "Rake (default: default): " (pcmpl-rake-tasks)))) (shell-command-to-string (concat "rake " (if (= 0 (length task)) "default" task))))
Compilation
Clear the compilation buffer between test runs.
(eval-after-load 'ruby-compilation '(progn (defadvice ruby-do-run-w/compilation (before kill-buffer (name cmdlist)) (let ((comp-buffer-name (format "*%s*" name))) (when (get-buffer comp-buffer-name) (with-current-buffer comp-buffer-name (delete-region (point-min) (point-max)))))) (ad-activate 'ruby-do-run-w/compilation)))
Hooks
(add-hook 'ruby-mode-hook 'run-starter-kit-coding-hook)
#+begin_src emacs-lisp ;; (add-hook 'ruby-mode-hook 'idle-highlight) #+end_src emacs-lisp
Flymake
(eval-after-load 'ruby-mode '(progn (require 'flymake) ;; Invoke ruby with '-c' to get syntax checking (defun flymake-ruby-init () (let* ((temp-file (flymake-init-create-temp-buffer-copy 'flymake-create-temp-inplace)) (local-file (file-relative-name temp-file (file-name-directory buffer-file-name)))) (list "ruby" (list "-c" local-file)))) (push '(".+\\.rb$" flymake-ruby-init) flymake-allowed-file-name-masks) (push '("Rakefile$" flymake-ruby-init) flymake-allowed-file-name-masks) (push '("^\\(.*\\):\\([0-9]+\\): \\(.*\\)$" 1 2 nil 3) flymake-err-line-patterns) (add-hook 'ruby-mode-hook (lambda () (when (and buffer-file-name (file-writable-p (file-name-directory buffer-file-name)) (file-writable-p buffer-file-name)) (local-set-key (kbd "C-c d") 'flymake-display-err-menu-for-current-line) (flymake-mode t))))))
Rinari (Minor Mode for Ruby On Rails)
See rinari.rubyforge for more information on rinari.
(setq rinari-major-modes '(dired-mode 'ruby-mode 'css-mode 'yaml-mode 'javascript-mode))