Dim the font color of text in surrounding paragraphs
Go to file
2019-12-05 12:14:03 +01:00
focus-demo.gif New README 2019-12-04 16:48:59 +01:00
focus.el Trim candidate list of *things* 2019-12-04 16:34:11 +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/e9e841aed432b2294ce557b2c8f02e425905a02e/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.