Emacs: logos version 0.5.0
The logos
package provides a simple approach to setting up a “focus
mode”. It uses the page-delimiter
or the outline together with some
commands to move between pages whether narrowing is in effect or not.
It also provides some optional aesthetic tweaks which come into effect
when the buffer-local logos-focus-mode
is enabled. The manual shows
how to extend the code to achieve the desired result.
Watch the demo of the original version of logos.el
(all my videos since early 2022 use logos
).
- Package name (GNU ELPA):
logos
- Official manual: https://protesilaos.com/emacs/logos
- Change log: https://protesilaos.com/emacs/logos-changelog
- Git repo on SourceHut: https://git.sr.ht/~protesilaos/logos
- Mirrors:
- Mailing list: https://lists.sr.ht/~protesilaos/logos
Below are the release notes.
-
Introduced the function
logos-update-fringe-in-buffers
. This is a convenience function for those who (i) set the user optionlogos-hide-fringe
to a non-nil value and (ii) switch themes whilelogos-focus-mode
is enabled in one or more buffers. This convenience function updates thefringe
face to be consistent with the current theme (we technically make the fringe invisible, instead of outright disabling it, as that would not be desirable). It needs to be assigned to a hook that gets called in the post-theme-load phase. Themodus-themes
or theef-themes
(both by me) provide such a hook. Otherwise the Logos manual explains how to implement one for any theme. Read: https://protesilaos.com/emacs/logos#h:6a254fa0-5706-4032-8a8b-233ffb1f0e6b. -
Implemented the
logos-focus-mode-map
. This is a keymap that is active whenlogos-focus-mode
is enabled in the buffer. One can, for example, use it to bind the arrow key to page motions, such aslogos-forward-page-dwim
.Remember that, by default, pages are delimited with the Control-L character (
^L
), though Logos can treat different delimiters as “page” separators (e.g. Org headings and a horizontal rule of five hyphens). Consult the user optionslogos-outlines-are-pages
,logos-outline-regexp-alist
, and check the manual for relevant simple and more advanced code samples. My current setup for those:(setq logos-outlines-are-pages t) (setq logos-outline-regexp-alist `((emacs-lisp-mode . ,(format "\\(^;;;+ \\|%s\\)" logos--page-delimiter)) (org-mode . ,(format "\\(^\\*+ +\\|^-\\{5\\}$\\|%s\\)" logos--page-delimiter)) (markdown-mode . ,(format "\\(^\\#+ +\\|^[*-]\\{5\\}$\\|^\\* \\* \\*$\\|%s\\)" logos--page-delimiter)) (conf-toml-mode . "^\\[") (t . ,(or outline-regexp logos--page-delimiter))))
-
Added the
logos-repeat-map
. This is a keymap that gets enabled when the built-inrepeat-mode
is active (Emacs 28 or higher). This means that page motions,C-x ]
andC-x [
, can be repeated by following them up with either]
or[
. The repetition stops when another command is invoked.Thanks to Lucy McPhail for the patch: https://lists.sr.ht/~protesilaos/logos/patches/34101. The change is below the ~15 line threshold and thus requires no copyright assignment to the Free Software Foundation.
-
Wrote documentation on how to auto-toggle menu and tool bars while using the
logos-focus-mode
. This is complementary to user options provided by Logos and shows how flexible and extensible the code is. Thanks to Ypot for raising the question in issue 2 on the GitHub mirror: https://github.com/protesilaos/logos/issues/2.[ Never hesitate to ask for help if you want to do something with Logos but are not sure how. ]
-
Specified the
:version
of all user-facing variables. This is helpful while perusing documentation strings in Help buffers, as any change will be assigned to the given version of Logos. -
Clarified the doc string of the
logos-variable-pitch
user option with regard toprog-mode
buffers. It now reads thus:When non-nil, use
variable-pitch-mode
where appropriate. In programming modes the default font is always used, as that is assumed to be a monospaced typeface, which is appropriate for spacing-sensitive text.This is only relevant when
logos-focus-mode
is enabled. -
Documented some user options for the built-in
eww
which make its contents behave like the rest of Emacs in terms of the use of fonts and the filling of paragraphs. In brief:(setq shr-max-width fill-column) (setq shr-use-fonts nil)
This is relevant for Logos as we then do not need to implement special casing for
logos-focus-mode
to work nicely witheww
(I am personally annoyed when a buffer has its own opinions about font settings).Thanks to Ypot for discussing this in issue 4 on the GitHub mirror: https://github.com/protesilaos/logos/issues/4.
[ For font-related customisations check the
fontaine
package on GNU ELPA (by me). ] -
Named the mailing list address as the
Maintainer:
of Logos. Together with the other package headers, they help the user find our primary sources and/or communication channels. This change conforms with work being done upstream in package.el by Philip Kaludercic. I was informed about it here: https://lists.sr.ht/~protesilaos/general-issues/%3C875ykl84yi.fsf%40posteo.net%3E.