10

GitHub - Malabarba/speed-of-thought-lisp: Write elisp at the speed of thought. E...

 4 years ago
source link: https://github.com/Malabarba/speed-of-thought-lisp
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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. Furthermore, #'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))


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK