Write elisp at the speed of thought. Emacs minor mode with abbrevs and keybinds.
Emacs Lisp
Switch branches/tags
Latest commit 89dfed2 Apr 30, 2017 @Malabarba Malabarba Merge pull request #9 from jkitchin/master
Fix some typos.
Permalink
Failed to load latest commit information.
.elpaignore Add .elpaignore Jan 28, 2015
.gitignore Add .gitignore Jan 28, 2015
README.md Fix some typos. Apr 28, 2017
sotlisp.el add lispy-mode. Apr 28, 2017

README.md

speed-of-thought-lisp

Write emacs-lisp at the speed of thought.

This defines a new global minor-mode speed-of-thought-mode, which activates locally on any supported buffer. Currently, only emacs-lisp-mode buffers are supported.

The mode is quite simple, and is composed of two parts:

Abbrevs

A large number of abbrevs which expand function initials to their name. A few examples:

  • wcb -> with-current-buffer
  • i -> insert
  • r -> require '
  • a -> and

However, these are defined in a way such that they ONLY expand in a place where you would use a function, so hitting SPC after (r expands to (require ', but hitting SPC after (delete-region r will NOT expand the r, because that's obviously not a function. Furtheromre, #'r will expand to #'require (note how it omits that extra quote, since it would be useless here).

Commands

It also defines four commands, which really fit into this "follow the thought-flow" way of writing. The bindings are as follows, I understand these don't fully adhere to conventions, and I'd appreciate suggestions on better bindings.

  • M-RET :: Break line, and insert "()" with point in the middle.
  • C-RET :: Do `forward-up-list', then do M-RET.

Hitting RET followed by a `(' was one of the most common key sequences for me while writing elisp, so giving it a quick-to-hit key was a significant improvement.

  • C-c f :: Find function under point. If it is not defined, create a definition for it below the current function and leave point inside.
  • C-c v :: Same, but for variable.

With these commands, you just write your code as you think of it. Once you hit a "stop-point" of sorts in your thought flow, you hit C-c f/v on any undefined functions/variables, write their definitions, and hit C-u C-SPC to go back to the main function.

Small Example

With the above (assuming you use something like paredit or electric-pair-mode), if you write:

( w t b M-RET i SPC text

You get

(with-temp-buffer (insert text))