Skip to content

Instantly share code, notes, and snippets.

@mig
Created January 18, 2011 21:00
Show Gist options
  • Save mig/785133 to your computer and use it in GitHub Desktop.
Save mig/785133 to your computer and use it in GitHub Desktop.
Simple Emacs 24 configuration for Rails development
;; 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)
@svperfecta
Copy link

@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)

@tlowrimore
Copy link

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

@svperfecta
Copy link

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?

@tlowrimore
Copy link

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

@jtzemp
Copy link

jtzemp commented Feb 7, 2012

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!

@svperfecta
Copy link

svperfecta commented Feb 7, 2012 via email

@qingw
Copy link

qingw commented Feb 8, 2014

Thanks for your sharing.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment