Created

Embed URL

HTTPS clone URL

SSH clone URL

You can clone with HTTPS or SSH.

Download Gist

Simple Emacs 24 configuration for Rails development

View init.el
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
;; emacs configuration
 
(push "/usr/local/bin" exec-path)
(add-to-list 'load-path "~/.emacs.d")
 
(setq make-backup-files nil)
(setq auto-save-default nil)
(setq-default tab-width 2)
(setq-default indent-tabs-mode nil)
(setq inhibit-startup-message t)
 
(fset 'yes-or-no-p 'y-or-n-p)
 
(delete-selection-mode t)
(scroll-bar-mode -1)
(tool-bar-mode -1)
(blink-cursor-mode t)
(show-paren-mode t)
(column-number-mode t)
(set-fringe-style -1)
(tooltip-mode -1)
 
(set-frame-font "Menlo-16")
(load-theme 'tango)
 
(defun ruby-mode-hook ()
(autoload 'ruby-mode "ruby-mode" nil t)
(add-to-list 'auto-mode-alist '("Capfile" . ruby-mode))
(add-to-list 'auto-mode-alist '("Gemfile" . ruby-mode))
(add-to-list 'auto-mode-alist '("Rakefile" . ruby-mode))
(add-to-list 'auto-mode-alist '("\\.rake\\'" . ruby-mode))
(add-to-list 'auto-mode-alist '("\\.rb\\'" . ruby-mode))
(add-to-list 'auto-mode-alist '("\\.ru\\'" . ruby-mode))
(add-hook 'ruby-mode-hook '(lambda ()
(setq ruby-deep-arglist t)
(setq ruby-deep-indent-paren nil)
(setq c-tab-always-indent nil)
(require 'inf-ruby)
(require 'ruby-compilation)
(define-key ruby-mode-map (kbd "M-r") 'run-rails-test-or-ruby-buffer))))
(defun rhtml-mode-hook ()
(autoload 'rhtml-mode "rhtml-mode" nil t)
(add-to-list 'auto-mode-alist '("\\.erb\\'" . rhtml-mode))
(add-to-list 'auto-mode-alist '("\\.rjs\\'" . rhtml-mode))
(add-hook 'rhtml-mode '(lambda ()
(define-key rhtml-mode-map (kbd "M-s") 'save-buffer))))
 
(defun yaml-mode-hook ()
(autoload 'yaml-mode "yaml-mode" nil t)
(add-to-list 'auto-mode-alist '("\\.yml$" . yaml-mode))
(add-to-list 'auto-mode-alist '("\\.yaml$" . yaml-mode)))
 
(defun css-mode-hook ()
(autoload 'css-mode "css-mode" nil t)
(add-hook 'css-mode-hook '(lambda ()
(setq css-indent-level 2)
(setq css-indent-offset 2))))
(defun is-rails-project ()
(when (textmate-project-root)
(file-exists-p (expand-file-name "config/environment.rb" (textmate-project-root)))))
 
(defun run-rails-test-or-ruby-buffer ()
(interactive)
(if (is-rails-project)
(let* ((path (buffer-file-name))
(filename (file-name-nondirectory path))
(test-path (expand-file-name "test" (textmate-project-root)))
(command (list ruby-compilation-executable "-I" test-path path)))
(pop-to-buffer (ruby-compilation-do filename command)))
(ruby-compilation-this-buffer)))
 
(require 'package)
(setq package-archives (cons '("tromey" . "http://tromey.com/elpa/") package-archives))
(package-initialize)
 
(add-to-list 'load-path "~/.emacs.d/el-get/el-get")
(require 'el-get)
 
(setq el-get-sources
'((:name ruby-mode
:type elpa
:load "ruby-mode.el"
:after (lambda () (ruby-mode-hook)))
(:name inf-ruby :type elpa)
(:name ruby-compilation :type elpa)
(:name css-mode
:type elpa
:after (lambda () (css-mode-hook)))
(:name textmate
:type git
:url "git://github.com/defunkt/textmate.el"
:load "textmate.el")
(:name rvm
:type git
:url "http://github.com/djwhitt/rvm.el.git"
:load "rvm.el"
:compile ("rvm.el")
:after (lambda() (rvm-use-default)))
(:name rhtml
:type git
:url "https://github.com/crazycode/rhtml.git"
:features rhtml-mode
:after (lambda () (rhtml-mode-hook)))
(:name yaml-mode
:type git
:url "http://github.com/yoshiki/yaml-mode.git"
:features yaml-mode
:after (lambda () (yaml-mode-hook)))
))
(el-get 'sync)

Hey,

there's a small bug in line #40 - right bracket missing in (kbd "M-r")

Owner
mig commented

@szimek, thanks for catching that!

@szimek - This no longer works with el-get 3.1. I had to change the bottom (per https://github.com/dimitri/el-get/blob/master/README.asciidoc) to:

(setq my-packages
(append
'(el-get)
(mapcar 'el-get-source-name el-get-sources)))

(el-get 'sync my-packages)

Hey Matt,

First, thanks so much for providing this emacs config. I'm very excited to be moving away from TextMate and toward Emacs.

So here's my issue: I've follow all of the steps outlined in your blog post, and for the most part this works. The problem is that el-get doesn't seem to be loading any of the packages in el-get-sources. For that matter el-get doesn't seem to want to load itself.

I've modified my script to include the snippet provided by @genexp (per the latest el-get docs). No dice. With or without it, when I run M-x: eval-buffer, I see the following message:

el-get cannot find a recipe for package "el-get"

Not sure what I'm doing wrong, so any help/advice would be greatly appreciated. Here's a gist of my init.el: https://gist.github.com/1739839

Hey tlowrimore - This gist follow up on a blog article here: http://www.viget.com/extend/emacs-24-rails-development-environment-from-scratch-to-productive-in-5-minu/ (which is probably non-obvious). Did you install el-get as show in the post?

Hey @genexp, Thanks for the quick response.

Yes, I did follow the installation procedure outlined in the aforementioned blog post. I noticed that after I cloned the el-get repo into ~/.emacs.d/el-get (resulting in ~/.emacs.d/el-get/el-get) and ran eval-buffer, the cloned repo disappeared (resulting in ~/.emacs.d/el-get). I'm not sure if that's supposed to happen, but it certainly seems suspicious.

In case it helps, I'm on Emacs v24.0.93.

Thanks again for your help.

Tim

Hey all

Thanks for the post, @mig and thanks for the help so far @genexp. I also followed instructions and got a similar result. I'll work through the issues and see if I can get it resolved on my own, but if in the meantime you have any advice, I'd appreciate it. I'm sure you're busy, so don't sweat it if not.

When I put in the above gist into my ~/.emacs.d/init.el and run M-x eval-buffer, the size of the text changes, etc, but it doesn't seem to be recognized. I don't get any warnings/errors, just no response.

Thanks!

Thanks for your sharing.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.