Refine

December 5, 2016 ยท View on GitHub

Build Status Coverage Status MELPA MELPA Stable

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

Usage examples

edit_hook

Refine is great for editing large lists, such as hooks. In the above example, I insert and edit values in prog-mode-hook.

kill_ring

Refine is also a valuable debugging tool. In this example, I reorder items in the kill-ring so I paste the value I want.

Limitations

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.

Keybindings

Editing:

commandbinding
refine-edite or RET
refine-cyclec
refine-inserti
refine-insert-aftera
refine-deletek
refine-move-forwards or <M-up>
refine-move-backwardw or <M-down>

Moving around:

commandbinding
refine-nextn
refine-previousp

Buffer commands:

commandbinding
refine-updateg
kill-this-bufferq

Installation

Install from MELPA (recommended), or add refine.el to load-path.

Tests

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.