It is said that Emacs is “a great operating system, lacking only a decent editor”[1].
Yes, it is, it really is. In fact, Emacs has basic process control and management, window and frame management(just like windows manager in modern Linux desktop environment), programming APIs(yeah, elisp to emacs is what syscall and glibc to Linux), comprehensive manuals and documentation. The only limitation with Emacs is your imagination.
You can live in Emacs if you like.
But I won’t do that, since I want to watch video with mplayer, surf the Internet with Firefox/Chrome(not with emacs-w3m), listen to music with amarok. I use Emacs to do what it is good at, namely, text editing. To me, coding and writing.
This project was born one day I want to reorganize my messy .emacs.d
. I’ve
tried all the famous .emacs.d
projects(such as prelude, starter-kit, etc) but
none of them works the way I want it to.
Then I found emacs24-starter-kit, I was deeply attracted by its literate way to organize and embed elisp code in org-mode files, I wanted to make some contribution to make it a full-blown hacking environment, but I stopped after I dived into the code a little, since I want:
- Adapt
el-get
instead of the builtinpackage.el
, and - Have a better completion including
auto-complete
and variousac-sources
projects for various programming languages.
The starter kit projects is just starter’s kit, what I want is a full-blown hacker’s kit. So I start my own project, oh-my-emacs, whose name is inspired by oh-my-zsh.
- Better default settings with various eye candy, powerline, scrollbar, color-theme, fonts, etc.
- Adopt
el-get
as the default package manager for Emacs, instead of the default builtinpackage.el
, say goodbye to./configure; make; make install
and explicitly manually management ofload-path
.el-get
also provides automatic documentation management, customizable user’s recipe support, etc. - Self-adapted, only install necessary packages when it satisfies the prerequisities. You need to install clang for auto-complete-clang, for example.
- Modular, only load necessary packages as you need.
- Literate, each package has comprehensive documentation or even a tiny tutorial with it, together with necessary web links. Say goodbye to old, out-dated emacs lisp code from Google.
- Work as expected, completion every where when possible, semantic code completion through auto-complete with various ac backend, helm for minibuffer completion, etc.
- Full-blown, oh-my-emacs is not another starter kit, it is hacker kit.
Simple enough, first, ensure you have a good network(Chinese users should get rid of GFW when possible to avoid many weird problems during first startup); second, ensure that you have installed the necessary tools pointed out by the Prerequisites sections from oh-my-emacs modules. Basically, you need to install the following packages in you operating system, which is the mandatory prerequisites of ome.org:
Please backup your old .emacs
and .emacs.d
before you join the journey:
git clone https://github.com/xiaohanyu/oh-my-emacs $HOME/.emacs.d
Then just fire up your Emacs and make a coffee, and you should have a full-blown Emacs OS!
Note that oh-my-emacs enabled evil by default, you can disable it globally by
M-x evil-mode
, however, I do recommend you enable it and try to adapt, ah,
finally the Emacs OS get a good editor, evil.
You may miss the old M-x
when you first start with oh-my-emacs, me too,
before I fall in love with helm. I highly recommend you to adapt with the helm
way. Believe me, helm will bring you lots of surprise.
There’re two key points for helm beginners:
- In helm,
TAB
is not used as the traditional completion key. Maybe this is the most whirlwind turnaround with helm since so many packages useTAB
for completion. Remember,TAB
in helm is used to access the helm action menu. You may wonder, then, how can I do type completion in helm? The answer is, no need to do type completion explicitly. Just type, and helm will lead you to the right place. - oh-my-emacs bind the traditional
C-x C-f
tohelm-find-files
by default. You should useC-l
to go to the precedent directory level instead ofDEL
.
Now you know why Emacs is “a great operating system, lacking only a decent editor”.
Module | Package | Description |
---|---|---|
ome-advanced | evil | Evil is an extensible vi layer for Emacs. |
evil-leader | Add <leader> shortcuts to Evil. | |
evil-surround | Emulate Tim Pope’s surround.vim in evil. | |
expand-region | Expand region increases the selected region by semantic units. | |
ace-jump-mode | A quick cursor location minor mode for emacs | |
ack-and-a-half | Yet another front-end for ack | |
ome-auto-mode | puppet-mode | A simple mode for editing puppet manifests |
wikipedia-mode | Mode for editing Wikipedia articles off-line | |
yaml-mode | Simple major mode to edit YAML file for emacs | |
ome-basic | flycheck | On-the-fly syntax checking extension |
ome-cc | xcscope | Cscope interface for (X)Emacs |
auto-complete-clang | Auto-complete sources for Clang. Combine the power of AC, Clang and Yasnippet. | |
ome-clojure | clojure-mode | Emacs support for the Clojure language. |
cider | CIDER is a Clojure IDE and REPL. | |
ac-nrepl | Nrepl completion source for Emacs auto-complete package | |
ome-common-lisp | slime | Superior Lisp Interaction Mode for Emacs |
ac-slime | Emacs auto-complete plugin for Slime symbols | |
ome-completion | auto-complete | The most intelligent auto-completion extension. |
helm | Emacs incremental and narrowing framework | |
popup | Visual Popup Interface Library for Emacs | |
yasnippet | YASnippet is a template system for Emacs. | |
ome-emacs-lisp | elisp-slime-nav | Slime-style navigation for Emacs Lisp |
ome-experimental | lacarte | Execute menu items as commands, with completion. |
sr-speedbar | Same frame speedbar | |
smooth-scrolling | Make emacs scroll smoothly. | |
hungry-delete | Enables hungry deletion in all modes. | |
doxymacs | Doxymacs is Doxygen + {X}Emacs. | |
ome-gui | color-theme-solarized | Emacs highlighting using Ethan Schoonover’s Solarized color scheme |
powerline | Powerline for Emacs | |
yascroll | Yet Another Scroll Bar Mode | |
ome-java | eclim | This project brings some of the great eclipse features to emacs developers. |
ome-miscs | rainbow-delimiters | Color nested parentheses, brackets, and braces according to their depth. |
po-mode | Major mode for GNU gettext PO files | |
magit | It’s Magit! An Emacs mode for Git. | |
projectile | Project navigation and management library for Emacs | |
smartparens | Autoinsert pairs of defined brackets and wrap regions | |
emacs-w3m | A simple Emacs interface to w3m | |
quickrun | Run commands quickly | |
diminish | An Emacs package that diminishes the amount of space taken on the mode line by the names of minor modes. | |
ome-ocaml | caml-mode | O’Caml code editing commands for Emacs |
tuareg-mode | A GOOD Emacs mode to edit Objective Caml code. | |
ome-org | org-mode | Org-mode 8.x branch. |
htmlize | Convert buffer text and decorations to HTML. | |
ome-python | elpy | Emacs Python Development Environment |
ome-ruby | inf-ruby | Inferior Ruby Mode - ruby process in a buffer. |
ome-scheme | geiser | Make Scheme hacking inside Emacs (even more) fun. |
ac-geiser | Emacs auto-complete backend for geiser | |
ome-tex | auctex | AUCTeX is an extensible package for writing and formatting TeX files Emacs. |
cdlatex-mode | a minor mode which re-implements many features also found in the AUCTeX LaTeX mode. | |
ome-writing | markdown-mode | Major mode to edit Markdown files in Emacs |
Here‘re some screenshots of oh-my-emacs:
- Startup screen:
org-babel
from org-mode, auto-complete for emacs lisp:
- helm-grep to search words in multiple files:
- auto-complete for C++ QT
- auto-complete for python
- AUCTeX with outline-minor-mode, helm completion for TeX commands
- Emacs Prelude: Prelude is an Emacs distribution that aims to enhance the default Emacs experience.
- emacs24-starter-kit: A cleaner version of the literate starter kit based on Emacs24.
- emacs-starter-kit: The Starter Kit provides a more pleasant set of defaults than you get normally with Emacs.
- graphene: A set of defaults for Emacs, for refugees from GUI text editors.
- purcell’s emacs.d: An Emacs configuration bundle with batteries included.
- You need to install
emacs24-el
in ubuntu, ororg-export
won’t work. I don’t know why.
I’m just a single guy and I do not have enough time to make this project meet everybody’s needs. So if you want to support this project, you can do in the following ways:
- Contributing code. I’ve written a basic CONTRIBUTING guide about it. Please do read it before you fire github issue or send me a pull request.
- Make some donations. Currently I’m a freelancer doing some part-time job for
my life. I create this project first for me, then share for you. So if you
think it is not useless and want to support this project, you can make some
donations for me via paypal or alipay:
- paypal: xiaohanyu1988<at>gmail.com (Paypal didn’t support donation button for Chinese user, damn.)
- alipay:
[1] Editor war