inspect and modify elisp variables
Refine provides a convenient UI for editing variables. Refine is not for editing files, but for changing elisp variables, particularly lists.
Table of Contents
Refine is great for editing large lists, such as hooks. In the above
example, I insert and edit values in prog-mode-hook
.
Refine is also a valuable debugging tool. In this example, I reorder
items in the kill-ring
so I paste the value I want.
Refine deliberately modifies values in place. This is useful if
you're working with a list that's shared between multiple variables,
such as font-lock-defaults
.
In some cases, this isn't possible (e.g. inserting into an empty list). In these cases, refine will overwrite your variable.
Editing:
command | binding |
---|---|
refine-edit |
e or RET |
refine-cycle |
c |
refine-insert |
i |
refine-insert-after |
a |
refine-delete |
k |
refine-move-forward |
s or <M-up> |
refine-move-backward |
w or <M-down> |
Moving around:
command | binding |
---|---|
refine-next |
n |
refine-previous |
p |
Buffer commands:
command | binding |
---|---|
refine-update |
g |
kill-this-buffer |
q |
Install from MELPA (recommended), or add refine.el to load-path
.
You can run tests inside Emacs by just opening the test files and
doing M-x eval-buffer
M-x ert RET t RET
.
Alternatively, you can run the test from a shell:
$ cask install
$ cask exec ert-runner
Note that refine has had infinite loop bugs during development, so you may need to press Ctrl-C if tests don't terminate.
counsel-set-variable
(part of
ivy) is also an excellent way of
editing variables in Emacs.
edit-list provides list editing in a very similar style to refine. It doesn't edit in-place, nor work as well for hooks, but does provide an elegant, Emacsy UI.