Lars Tveito
28b7662f26
Rather than using face-remap for efficient dimming and restoring colors in the focused area, just dim /visible/ text in the unfocused region. The main argument for this approach is that there are many corner cases in restoring the colors correctly, and inaccuracies in the coloring is less crucial in the unfocused area. |
||
---|---|---|
focus-demo.gif | ||
focus.el | ||
README.org |
Focus
This is Focus, a package that dims surrounding text. It works with any theme and can be configured to focus in on different regions like sentences, paragraphs or code-blocks.
Installation
It's available on MELPA and MELPA Stable:
M-x package-install focus
Usage
Enable focus-mode
with M-x focus-mode
.
A few interactive functions are provided:
Function | Description |
---|---|
focus-change-thing |
Adjust the narrowness of the focused section for the current buffer |
focus-pin |
Pin the focused section to its current location or the region, if active |
focus-unpin |
Unpin the focused section |
focus-next-thing |
Move the point to the middle of the Nth next thing |
focus-prev-thing |
Move the point to the middle of the Nth previous thing |
Focus relies on Thing At Point, which can retrieve a thing surrounding the
point. These things may be a symbol, list, S-expression (sexp), function
definition (defun), sentence, line, page and others. Calling M-x
focus-change-thing
allows you to interactively change the kind of region
which should be in focus.
Focus read-only mode
Enable focus-read-only-mode
with M-x focus-read-only-mode
. It inhibits
changes in a buffer, hides the cursor and provides bindings for moving
between things.
Some bindings for simple navigation and exiting `focus-read-only-mode` are provided.
Keybinding | Description |
---|---|
n |
Jump to next thing |
SPC |
Jump to next thing |
p |
Jump to previous thing |
S-SPC |
Jump to previous thing |
i |
Exit focus-read-only-mode |
q |
Exit focus-read-only-mode |
Customization
The choice of what thing is suitable for a mode may be configured by
setting the variable focus-mode-to-thing
. The default is
'((prog-mode . defun) (text-mode . sentence))
For modes inheriting prog-mode
(which are most programming modes), the
default is the function-body, and for modes inheriting text-mode
, the
default is a sentence.
For instance, adding the following to your .emacs
-file:
(add-to-list 'focus-mode-to-thing '(python-mode . paragraph))
changes python-mode
to focus in on code-blocks with no blank lines rather
than the entire function.
According to this reddit post, Focus plays nice with lsp-mode
.
Faces
Focus offers two faces, one for the focused- and unfocused area. By default,
the focus-focused
is the empty face, meaning there is no change, and
focus-unfocused
inherits the comment face (which is usually subtle). The
faces can easily be customized via M-x list-faces-display
.