Focus
Dim the font color of text in surrounding paragraphs
Install / Use
/learn @larstvei/FocusREADME
[[https://melpa.org/#/focus][file:https://melpa.org/packages/focus-badge.svg]] [[https://stable.melpa.org/#/focus][file:https://stable.melpa.org/packages/focus-badge.svg]]
-
Focus
[[./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 [[https://melpa.org/#/focus][MELPA]] and [[https://stable.melpa.org/#/focus][MELPA Stable]]:
#+BEGIN_EXAMPLE M-x package-install focus #+END_EXAMPLE
-
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 [[https://www.emacswiki.org/emacs/ThingAtPoint][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
#+BEGIN_EXAMPLE '((prog-mode . defun) (text-mode . sentence)) #+END_EXAMPLE
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:
#+BEGIN_SRC emacs-lisp (add-to-list 'focus-mode-to-thing '(python-mode . paragraph)) #+END_SRC
changes ~python-mode~ to focus in on code-blocks with no blank lines rather than the entire function.
According to [[https://www.reddit.com/r/emacs/comments/b1vrar/lsp_support_for_focusel_using_lspmode/][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~.
Related Skills
node-connect
343.1kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
90.0kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
343.1kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
343.1kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
