I’m writing this article up to mainly keep track of the current state of my IDE in Emacs, how to set one up, and to keep my to-do list.

Implemented Features #

Default Emacs Library Includes #

I use the following from the library that comes with Emacs (as of version 23)

  • Viper-mode (viper-mode 3, though I’m sure 5 would be good too)
  • Windmove (through keybindings, for moving around windows easier)
  • hideshow (for code folding)
  • ibuffer (for listing on buffers when buffer switching)
  • ido (for listing of file in a directory in the minibuffer

Code to instantiate:

(setq viper-mode t)
(require 'viper)
(load-library "hideshow")(add-hook 'python-mode-hook 'hs-minor-mode)
(require 'ido)
(ido-mode 'both)

Keybindings #

(global-set-key (kbd "C-x C-l") 'windmove-right)
(global-set-key (kbd "C-x C-h") 'windmove-left)
(global-set-key (kbd "C-x C-k") 'windmove-up)
(global-set-key (kbd "C-x C-j") 'windmove-down)
(global-set-key (kbd "C-x C-;") 'hippie-expand)
(global-set-key (kbd "C-x C-g") 'find-name-dired)
(global-set-key (kbd "C-c C-t") 'ansi-term)

Viper Keybindings (in .viper) #

(setq viper-expert-level '3)
(setq viper-inhibit-startup-message 't)
(setq-default indent-tabs-mode nil) ; I think this makes tabs into spaces
(setq viper-shift-width 4) ; don't touch or else...Makes searching w/ regex default
(setq viper-re-search t) ; don't touch or else...

; The following is for hideshow to work ALMOST similar to vi folding;(there were keybindings I didn't like)
(define-key viper-vi-global-user-map "zt" 'hs-toggle-hiding)
(define-key viper-vi-global-user-map "zM" 'hs-hide-all)
(define-key viper-vi-global-user-map "zm" 'hs-hide-block)
(define-key viper-vi-global-user-map "zR" 'hs-show-all)
(define-key viper-vi-global-user-map "zr" 'hs-show-block)

Features implemented using external files #

Yasnippet (for bundling and snippets) #

Yasnippet provides me features along the lives of textmates bundling, which I think definitely makes things faster in the long run. After all, who wants to write boilerplate code?


Yasnippet site:


lusty-explorer.el (for a great tab completion file navigator) #

Followed this emacs-fu guide:


And downloaded the .el here:


Specifically I have the following in my .emacs:

  (require 'lusty-explorer nil 'noerror)  ;; overrride the normal file-opening, buffer switching
  (global-set-key (kbd "C-x C-f") 'lusty-file-explorer)
  (global-set-key (kbd "C-x b")   'lusty-buffer-explorer)

Desired features #

I have yet to implement this, but I would like:

  • Better file search (the ones I could find don’t do what I’m looking for)

    • Specifically, looking for a smart find that allow autocompletion

    • Looking for something along the lines of eclipse