Dim the font color of text in surrounding paragraphs
Go to file
Lars Tveito 28b7662f26 Rewrite color-preserving dimming without face-remap
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.
2020-03-08 18:32:39 +01:00
focus-demo.gif New README 2019-12-04 16:48:59 +01:00
focus.el Rewrite color-preserving dimming without face-remap 2020-03-08 18:32:39 +01:00
README.org Remove sentence 2019-12-05 12:14:03 +01:00

https://melpa.org/packages/focus-badge.svg https://stable.melpa.org/packages/focus-badge.svg

Focus

/larstvei/Focus/media/commit/28b7662f2672b3aeccf9e6a43be1e98dc6db0e9f/focus-demo.gif

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.