trying to fix
This commit is contained in:
parent
fa407dfeb6
commit
e013d7569e
22945 changed files with 447936 additions and 0 deletions
163
var/elfeed/db/data/24/249b1f81d84011c0fecc8a754d88635b6bf0e4c1
Normal file
163
var/elfeed/db/data/24/249b1f81d84011c0fecc8a754d88635b6bf0e4c1
Normal file
|
@ -0,0 +1,163 @@
|
|||
|
||||
|
||||
<p>Raw link: <a href="https://www.youtube.com/watch?v=Oiu3LFK_rX8">https://www.youtube.com/watch?v=Oiu3LFK_rX8</a></p>
|
||||
|
||||
<p>In this presentation I talk about the workflow of mixing different font
|
||||
families inside of the same buffer. The idea is to use this for
|
||||
<code>org-mode</code> so that you can have some text use a monospaced font to keep
|
||||
its alignment properties in tact, while the rest of the buffer switched
|
||||
to a proportionately-spaced font that is more natural to read for large
|
||||
portions of text.</p>
|
||||
|
||||
<p>The information shared here is complementary to what I talked about
|
||||
yesterday on the topic of <a href="https://protesilaos.com/codelog/2020-07-16-emacs-focused-editing/">“Focused editing” tools for
|
||||
Emacs</a></p>
|
||||
|
||||
<p>Note that mixed font settings for <code>org-mode</code>, <code>markdown-mode</code>, and
|
||||
others will depend on the theme that you use. My <a href="https://gitlab.com/protesilaos/modus-themes">Modus
|
||||
themes</a> are designed to
|
||||
cope well with such demands.</p>
|
||||
|
||||
<p>Check <a href="https://protesilaos.com/emacs/dotemacs">my dotemacs</a> for more code and
|
||||
relevant documentation.</p>
|
||||
|
||||
<h2>Text of the presentation</h2>
|
||||
|
||||
<p>The following is a standard Org buffer.</p>
|
||||
|
||||
<pre><code class="language-org">#+TITLE: Emacs: mixed font faces for Org mode
|
||||
#+AUTHOR: Protesilaos Stavrou · https://protesilaos.com
|
||||
|
||||
** Basic concepts
|
||||
|
||||
The idea here is to show you how to configure your fonts so that you can
|
||||
optimise for mixed-typeface scenaria. You can use these for focused
|
||||
writing (see my previous video) or to do presentations such as this one!
|
||||
|
||||
You can already tell that paragraph text is allowed to use a typeface
|
||||
that is proportionately-spaced. This is because it reads from the
|
||||
=default= face (more on that later). Whereas inline code is configured to
|
||||
always use the more specialised =fixed-pitch= face that applies a
|
||||
monospaced font. /Notice the difference?/
|
||||
|
||||
This principle applies to all spacing-sensitive constructs, such as
|
||||
tables and special lines. Otherwise you would be seeing misalignments.
|
||||
|
||||
#+NAME: Sample of contrast ratios
|
||||
| Colour name | | #fff1f0 | #ecf7ed |
|
||||
|---------------+---------+---------+---------|
|
||||
| red | #a60000 | 7.28 | 7.28 |
|
||||
| red-alt | #972500 | 7.40 | 7.40 |
|
||||
| red-alt-other | #a0132f | 7.26 | 7.26 |
|
||||
#+TBLFM: $3='(clr $2 @1$3);%0.2f::$4='(clr $2 @1$4);%0.2f
|
||||
|
||||
** Configuring “face” attributes for fonts
|
||||
|
||||
There are multiple ways to set your font in Emacs. I find that doing so
|
||||
at the “face” level is effective and yields consistent results.
|
||||
|
||||
I will show you how to do it, but we must briefly cover the basics
|
||||
before we deal with the actual code.
|
||||
|
||||
In Emacs parlance a “face” is a display construct that contains data
|
||||
such as an associated foreground and background colour, as well as all
|
||||
typographic properties (height, weight, font family, slant, etc.).
|
||||
|
||||
Couched in those terms, an Emacs theme is, in essence, a program that
|
||||
controls such faces. You can already spot several faces on display here
|
||||
(the current theme is my Modus Vivendi---in some of my other videos I
|
||||
use its light counterpart: Modus Operandi).
|
||||
|
||||
*** The three faces we need to take care of
|
||||
|
||||
To make things work, we will be using the =set-face-attribute= function.
|
||||
And we need to configure three faces:
|
||||
|
||||
1. =default= :: This one is the standard font family that all other faces
|
||||
refer to when they have no font specification of their own. In
|
||||
general, faces *should not* have a typeface spec, unless they need to.
|
||||
|
||||
2. =fixed-pitch= :: This should be given a monospaced typeface and is
|
||||
meant to be inherited by faces that must always be presented with
|
||||
fixed-spacing.
|
||||
|
||||
3. =variable-pitch= :: Whereas this should be a proportionately-spaced
|
||||
font. Again, it is meant to be inhereted by faces that are supposed
|
||||
to be presented with such a typeface (though you do not need to
|
||||
specify those faces, as =M-x variable-pitch-mode= does it
|
||||
automatically).
|
||||
|
||||
For me a monospaced font should be the standard, so in practice I
|
||||
configure =default= and =fixed-pitch= to use the same typeface.
|
||||
|
||||
*** Using ~set-face-attribute~
|
||||
|
||||
Let us do this together.
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(set-face-attribute 'default nil :font "Hack-16")
|
||||
(set-face-attribute 'fixed-pitch nil :font "Hack-16")
|
||||
(set-face-attribute 'variable-pitch nil :font "FiraGO-18")
|
||||
|
||||
(dolist (face '(default fixed-pitch))
|
||||
(set-face-attribute `,face nil :font "Hack-16"))
|
||||
#+end_src
|
||||
|
||||
When you are on your own, you can start by consulting Emacs /itself/ on
|
||||
how to use this function. Do it with =C-h f set-face-attribute=. Or
|
||||
place the point over that symbol (the unique name of the function), type
|
||||
=C-h f= and then =M-n= to select it.
|
||||
|
||||
Make a habit of using these help functions (and checking the source code
|
||||
they provide via a link): I would argue this is the difference between
|
||||
understanding Emacs and merely using it.
|
||||
|
||||
** Themes will affect your results
|
||||
|
||||
Note that your theme must have configured everything properly for this
|
||||
to work. More specifically, you must make sure that all indentation or
|
||||
spacing-sensitive faces are designed to always inherit from =fixed-pitch=.
|
||||
Petition your theme's developer to account for this workflow of mixing
|
||||
fonts.
|
||||
|
||||
Or use my Modus themes which are designed to meet the highest
|
||||
accessibility standard for colour contrast. Basically this is about
|
||||
readability, while the technical spec is called “WCAG AAA”: it
|
||||
corresponds to a *minimum contrast ratio* between background and
|
||||
foreground values of 7:1.
|
||||
|
||||
The themes are /highly customisable/ and have wide package coverage.
|
||||
|
||||
See https://gitlab.com/protesilaos/modus-themes for details.
|
||||
|
||||
*** Notes for theme devs and DIY users
|
||||
|
||||
These are the faces for =org-mode= that your theme needs to configure with
|
||||
the =:inherit fixed-pitch= attribute. Special thanks to Gitlab user “Ben”
|
||||
for bringing these to my attention a while ago!
|
||||
|
||||
+ org-block
|
||||
+ org-block-begin-line
|
||||
+ org-block-end-line
|
||||
+ org-code
|
||||
+ org-document-info-keyword
|
||||
+ org-meta-line
|
||||
+ org-table
|
||||
+ org-verbatim
|
||||
|
||||
Optionally also consider these for =markdown-mode=:
|
||||
|
||||
+ markdown-code-face
|
||||
+ markdown-html-attr-name-face
|
||||
+ markdown-html-attr-value-face
|
||||
+ markdown-html-entity-face
|
||||
+ markdown-html-tag-delimiter-face
|
||||
+ markdown-html-tag-name-face
|
||||
+ markdown-inline-code-face
|
||||
+ markdown-language-info-face
|
||||
+ markdown-language-keyword-face
|
||||
+ markdown-pre-face
|
||||
+ markdown-table-face
|
||||
</code></pre>
|
||||
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue