<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>notes from /dev/null - markdown</title><link href="http://yummymelon.com/devnull/" rel="alternate"/><link href="http://yummymelon.com/devnull/feeds/tags/markdown.atom.xml" rel="self"/><id>http://yummymelon.com/devnull/</id><updated>2025-12-17T11:30:00-08:00</updated><entry><title>Export Org to Markdown with the Clipboard</title><link href="http://yummymelon.com/devnull/export-org-to-markdown-with-the-clipboard.html" rel="alternate"/><published>2025-12-17T11:30:00-08:00</published><updated>2025-12-17T11:30:00-08:00</updated><author><name>Charles Choi</name></author><id>tag:yummymelon.com,2025-12-17:/devnull/export-org-to-markdown-with-the-clipboard.html</id><summary type="html">&lt;p&gt;A companion post to my last one on importing Markdown to Org, but the other way around.&lt;/p&gt;</summary><content type="html">&lt;p&gt;In symmetry with my post, &lt;a href="http://yummymelon.com/devnull/import-markdown-to-org-with-the-clipboard-in-emacs.html"&gt;Import Markdown to Org with the Clipboard in Emacs&lt;/a&gt;, exporting Org to Markdown via the system clipboard might be desired instead. Turns out, Marcin Borkowski has already done this as detailed in his post &lt;a href="https://mbork.pl/2021-05-02_Org-mode_to_Markdown_via_the_clipboard"&gt;Org-mode to Markdown via the clipboard&lt;/a&gt; with the function &lt;code&gt;org-copy-region-as-markdown&lt;/code&gt;. In my Emacs initialization, I’ve taken the liberty of prefixing that function name with &lt;code&gt;mb/&lt;/code&gt; to disambiguate it with actual functions from Org.&lt;/p&gt;
&lt;p&gt;If you prefer to write in Org but need to post in Markdown, definitely give Borkowski’s post a look.&lt;/p&gt;</content><category term="misc"/><category term="emacs"/><category term="org mode"/><category term="markdown"/></entry><entry><title>Import Markdown to Org with the Clipboard in Emacs</title><link href="http://yummymelon.com/devnull/import-markdown-to-org-with-the-clipboard-in-emacs.html" rel="alternate"/><published>2025-12-04T13:30:00-08:00</published><updated>2025-12-04T13:30:00-08:00</updated><author><name>Charles Choi</name></author><id>tag:yummymelon.com,2025-12-04:/devnull/import-markdown-to-org-with-the-clipboard-in-emacs.html</id><summary type="html">&lt;p&gt;Import Markdown from other apps into your Org files easy.&lt;/p&gt;</summary><content type="html">&lt;p&gt;The preponderance of Markdown formatted text in both websites and apps is a blessing and a point of friction for Org users. The content is there, but if you’re an Org user, you really prefer the text to be formatted for Org. If you have &lt;a href="https://pandoc.org/index.html"&gt;Pandoc&lt;/a&gt; installed, converting from Markdown to Org is trivial but laborious as it involves making the right command invocation with temporary files.&lt;/p&gt;
&lt;p&gt;Thankfully, Emacs can automate this conversion as described in the workflow below:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;From the source app or website, copy the Markdown into the system clipboard. This step pushes this text into the Emacs &lt;code&gt;kill-ring&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;In Emacs, invoke a command which converts the above Markdown text into Org, then pastes (yanks) converted text into a desired Org file.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Note that this workflow presumes that the Emacs &lt;code&gt;kill-ring&lt;/code&gt; is integrated with the system clipboard and that &lt;code&gt;pandoc&lt;/code&gt; is installed.&lt;/p&gt;
&lt;p&gt;The following Elisp command &lt;code&gt;cc/yank-markdown-as-org&lt;/code&gt; implements the above workflow:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt; 1&lt;/span&gt;
&lt;span class="normal"&gt; 2&lt;/span&gt;
&lt;span class="normal"&gt; 3&lt;/span&gt;
&lt;span class="normal"&gt; 4&lt;/span&gt;
&lt;span class="normal"&gt; 5&lt;/span&gt;
&lt;span class="normal"&gt; 6&lt;/span&gt;
&lt;span class="normal"&gt; 7&lt;/span&gt;
&lt;span class="normal"&gt; 8&lt;/span&gt;
&lt;span class="normal"&gt; 9&lt;/span&gt;
&lt;span class="normal"&gt;10&lt;/span&gt;
&lt;span class="normal"&gt;11&lt;/span&gt;
&lt;span class="normal"&gt;12&lt;/span&gt;
&lt;span class="normal"&gt;13&lt;/span&gt;
&lt;span class="normal"&gt;14&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;defun&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;cc/yank-markdown-as-org&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Yank Markdown text as Org.&lt;/span&gt;

&lt;span class="s"&gt;This command will convert Markdown text in the top of the &lt;/span&gt;&lt;span class="ss"&gt;`kill-ring&amp;#39;&lt;/span&gt;
&lt;span class="s"&gt;and convert it to Org using the pandoc utility.&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;interactive&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;save-excursion&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;with-temp-buffer&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;yank&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;shell-command-on-region&lt;/span&gt;
&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;point-min&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;point-max&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;pandoc -f markdown -t org --wrap=preserve&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;kill-region&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;point-min&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;point-max&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;yank&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This command can be invoked in numerous ways including by key binding, context menu, Transient menu, and directly via &lt;code&gt;M-x&lt;/code&gt;. My preference is using the context menu as illustrated in the screenshot below to optimize for mouse copy/paste interactions between different apps.&lt;/p&gt;
&lt;p align='center'&gt;
&lt;img src='http://yummymelon.com/devnull/images/import-markdown-to-org/paste-markdown-as-org.png' alt='' /&gt;
&lt;/p&gt;

&lt;p&gt;Users interested in seeing how I’ve configured my context menu can &lt;a href="https://github.com/kickingvegas/cclisp/blob/98aad8329bc5788448fc9dde23b6e56bd4a3014c/cc-context-menu.el#L104"&gt;read the source here&lt;/a&gt;. Users unfamiliar with Emacs context menus can learn more about it in my post &lt;a href="http://yummymelon.com/devnull/customizing-the-emacs-context-menu.html"&gt;Customizing the Emacs Context Menu&lt;/a&gt;.&lt;/p&gt;
&lt;h1&gt;Closing Thoughts&lt;/h1&gt;
&lt;p&gt;Implementing &lt;code&gt;cc/yank-markdown-as-org&lt;/code&gt; turned out to be a lot more simpler than expected, as the command &lt;code&gt;shell-command-on-region&lt;/code&gt; does the heavy lifting in abstracting away the &lt;code&gt;pandoc&lt;/code&gt; command invocation and its handling of temporary files. This implementation can serve as a example for other conversions using the &lt;code&gt;kill-ring&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;A word of thanks to mekeor on IRC for reminding me that &lt;code&gt;(point-min)&lt;/code&gt; and &lt;code&gt;(point-max)&lt;/code&gt; exist.&lt;/p&gt;</content><category term="misc"/><category term="emacs"/><category term="org mode"/><category term="markdown"/></entry><entry><title>Converting a Markdown Region to Org Revisited</title><link href="http://yummymelon.com/devnull/converting-a-markdown-region-to-org-revisited.html" rel="alternate"/><published>2025-01-10T13:00:00-08:00</published><updated>2025-01-10T13:00:00-08:00</updated><author><name>Charles Choi</name></author><id>tag:yummymelon.com,2025-01-10:/devnull/converting-a-markdown-region-to-org-revisited.html</id><summary type="html">&lt;p&gt;If you find yourself needing to convert Markdown text to Org, this post might be of interest.&lt;/p&gt;</summary><content type="html">&lt;p&gt;On more than one occasion I’ve found myself needing to convert Markdown formatted text to Org using this workflow:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Copy Markdown formatted text (usually from a web browser) into the kill ring.&lt;/li&gt;
&lt;li&gt;Paste above text into an Org buffer.&lt;/li&gt;
&lt;li&gt;Manually reformat said text to Org.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Folks who have &lt;code&gt;pandoc&lt;/code&gt; installed can automate step 3 above with the Elisp function quoted below from the Stack Exchange post “&lt;a href="https://emacs.stackexchange.com/questions/60723/convert-region-subtree-from-markdown-to-org"&gt;Convert region/subtree from Markdown to org&lt;/a&gt;”.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;
&lt;span class="normal"&gt;2&lt;/span&gt;
&lt;span class="normal"&gt;3&lt;/span&gt;
&lt;span class="normal"&gt;4&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;defun&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;my-md-to-org-region&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;start&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;end&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Convert region from markdown to org&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;interactive&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;r&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;shell-command-on-region&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;start&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;end&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;pandoc -f markdown -t org&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;t&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;So just copy the above function into your config and call it a day, no?&lt;/p&gt;
&lt;p&gt;Not quite. If left unspecified, &lt;code&gt;pandoc&lt;/code&gt; will automatically wrap long lines 😞. I prefer keeping a paragraph as a single long line in Org.&lt;/p&gt;
&lt;p&gt;To keep a paragraph as a long line, use the &lt;code&gt;pandoc&lt;/code&gt; argument &lt;code&gt;--wrap=preserve&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Listed below is an amended version of the above routine.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;
&lt;span class="normal"&gt;2&lt;/span&gt;
&lt;span class="normal"&gt;3&lt;/span&gt;
&lt;span class="normal"&gt;4&lt;/span&gt;
&lt;span class="normal"&gt;5&lt;/span&gt;
&lt;span class="normal"&gt;6&lt;/span&gt;
&lt;span class="normal"&gt;7&lt;/span&gt;
&lt;span class="normal"&gt;8&lt;/span&gt;
&lt;span class="normal"&gt;9&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;defun&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;cc/markdown-to-org-region&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;start&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;end&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Convert Markdown formatted text in region (START, END) to Org.&lt;/span&gt;

&lt;span class="s"&gt;This command requires that pandoc (man page `pandoc(1)&amp;#39;) be&lt;/span&gt;
&lt;span class="s"&gt;installed.&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;interactive&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;r&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;shell-command-on-region&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nv"&gt;start&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;end&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;pandoc -f markdown -t org --wrap=preserve&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;t&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Regardless of your preference, if this is news to you and seems useful, give it a try.&lt;/p&gt;
&lt;h1&gt;References&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://emacs.stackexchange.com/questions/60723/convert-region-subtree-from-markdown-to-org"&gt;org mode - Convert region/subtree from Markdown to org - Emacs Stack Exchange&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="misc"/><category term="emacs"/><category term="org mode"/><category term="markdown"/></entry><entry><title>Tuning Emacs to Write Prose in Org and Markdown</title><link href="http://yummymelon.com/devnull/tuning-emacs-to-write-prose-in-org-and-markdown.html" rel="alternate"/><published>2023-08-14T13:00:00-07:00</published><updated>2023-08-14T13:00:00-07:00</updated><author><name>Charles Choi</name></author><id>tag:yummymelon.com,2023-08-14:/devnull/tuning-emacs-to-write-prose-in-org-and-markdown.html</id><summary type="html">&lt;p&gt;Some tips to help you write prose in Org or Markdown when in Emacs.&lt;/p&gt;</summary><content type="html">&lt;p&gt;While default (aka vanilla or un-configured) Emacs is serviceable in editing Org and Markdown files, its out-of-the-box experience feels more like I&amp;rsquo;m &lt;em&gt;programming&lt;/em&gt; said files rather than &lt;em&gt;writing&lt;/em&gt; them. Thankfully, Emacs has excellent features (both built-in and external packages) to help you focus on writing  prose. In this post I'll go over such features. As always, these recommendations are subjective, but I don&amp;rsquo;t think they fall too far from conventional thinking on the matter.&lt;/p&gt;
&lt;p&gt;As to the features that I think help write prose:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The use of proportional typefaces&lt;/li&gt;
&lt;li&gt;Hiding markup&lt;/li&gt;
&lt;li&gt;Automatic spell checking&lt;/li&gt;
&lt;li&gt;Dictionary lookup of a selected word&lt;/li&gt;
&lt;li&gt;Menu-driven&lt;ul&gt;
&lt;li&gt;Styling of selected text&lt;/li&gt;
&lt;li&gt;Toggling of hidden markup&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Dynamic completion of a previously written word&lt;/li&gt;
&lt;li&gt;Turn-on word-wrapping&lt;/li&gt;
&lt;li&gt;Navigation and moving of text&lt;/li&gt;
&lt;li&gt;Deleting whitespace&lt;/li&gt;
&lt;li&gt;Word count&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Of course all of the above can be keyboard-driven (this &lt;em&gt;is&lt;/em&gt; Emacs) but I like the affordance that menus can provide for text operations, particularly for selected text.  Nothing wrong with having both.&lt;/p&gt;
&lt;p&gt;Before moving forward, I&amp;rsquo;d also clarify that I&amp;rsquo;m not defining an explicit Emacs mode for distraction-free interactions as there are other modes which offer this. This post is really about configuration. That all said, let&amp;rsquo;s configure Emacs!&lt;/p&gt;
&lt;h1&gt;Prerequisites&lt;/h1&gt;
&lt;p&gt;This post presumes you understand enough of the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How Emacs is &lt;a href="https://www.gnu.org/software/emacs/manual/html_node/emacs/Init-File.html"&gt;initialized&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;How to use the menu-driven &lt;a href="https://www.gnu.org/software/emacs/manual/html_node/emacs/Easy-Customization.html"&gt;Customize Emacs&lt;/a&gt; feature&lt;/li&gt;
&lt;li&gt;How to &lt;a href="https://www.gnu.org/software/emacs/manual/html_node/emacs/Package-Installation.html"&gt;install packages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;How to &lt;a href="https://www.gnu.org/software/emacs/manual/html_node/emacs/Face-Customization.html"&gt;customize an Emacs face&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;How Emacs &lt;a href="https://www.gnu.org/software/emacs/manual/html_node/emacs/Major-Modes.html"&gt;modes&lt;/a&gt; and &lt;a href="https://www.gnu.org/software/emacs/manual/html_node/emacs/Hooks.html"&gt;mode hooks&lt;/a&gt; work&lt;/li&gt;
&lt;li&gt;Enough Elisp to be dangerous (or at least just copy and paste)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All the configurations in this post have been tested with Emacs 28.2. &lt;/p&gt;
&lt;h1&gt;Use Proportional Typefaces&lt;/h1&gt;
&lt;p&gt;&lt;img src="http://yummymelon.com/devnull/images/tuning-emacs-write-prose/use-proportional-typeface.png" valign='top' width='720' /&gt;&lt;/p&gt;
&lt;p&gt;For prose, a well-chosen proportional typeface is vastly more readable than a fixed-width one. You can turn-on rendering a proportional typeface in an Emacs buffer by enabling &lt;code&gt;variable-pitch-mode&lt;/code&gt;, typically by adding it via a mode hook in the init file. An Elisp example that does this for both Org and Markdown modes is shown below:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;
&lt;span class="normal"&gt;2&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;add-hook&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;#39;org-mode-hook&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;#39;variable-pitch-mode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;add-hook&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;#39;markdown-mode-hook&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;#39;variable-pitch-mode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;When &lt;code&gt;variable-pitch-mode&lt;/code&gt; is turned-on, the typeface used to render &lt;a href="https://www.gnu.org/software/emacs/manual/html_node/elisp/Overlay-Properties.html"&gt;overlay&lt;/a&gt;-free text in the buffer is defined in the Elisp variable &lt;code&gt;variable-pitch&lt;/code&gt;. Customize &lt;code&gt;variable-pitch&lt;/code&gt; to taste. A menu-driven workflow for configuring any face is conveniently done via the menu-bar flow &lt;strong&gt;Options&lt;/strong&gt; → &lt;strong&gt;Customize Emacs&lt;/strong&gt; → &lt;strong&gt;Specific Face…&lt;/strong&gt; which will prompt you for the face to customize.&lt;/p&gt;
&lt;p&gt;Another setting to improve readability is to increase the line spacing via the Elisp variable &lt;code&gt;line-spacing&lt;/code&gt;. As both the Org and Markdown major modes inherit from the Text major mode, we can add a hook to set &lt;code&gt;line-spacing&lt;/code&gt; for both to &lt;code&gt;text-mode-hook&lt;/code&gt; in the init file.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;
&lt;span class="normal"&gt;2&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;add-hook&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;#39;text-mode-hook&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;lambda&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="w"&gt;                            &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;setq-local&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;line-spacing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;More granular approaches to adjusting line height can be achieved by configuring the &lt;a href="https://www.gnu.org/software/emacs/manual/html_node/elisp/Line-Height.html"&gt;height&lt;/a&gt; of a face.&lt;/p&gt;
&lt;p&gt;Using a different typeface helps to distinguish headers from body text. For Markdown, that face variable is named &lt;code&gt;markdown-header-face&lt;/code&gt;. For Org, there is a set of faces all corresponding to the header level, &lt;code&gt;org-level-N&lt;/code&gt;, where &lt;code&gt;N&lt;/code&gt; is a value between 1 and 8 inclusive.&lt;/p&gt;
&lt;p&gt;While the reader can always choose their own typefaces, size, and spacing, my personal preference is to use the following settings:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left;"&gt;face&lt;/th&gt;
&lt;th style="text-align: left;"&gt;typeface&lt;/th&gt;
&lt;th style="text-align: center;"&gt;height&lt;/th&gt;
&lt;th style="text-align: left;"&gt;slant&lt;/th&gt;
&lt;th style="text-align: left;"&gt;weight&lt;/th&gt;
&lt;th style="text-align: left;"&gt;width&lt;/th&gt;
&lt;th style="text-align: left;"&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;&lt;code&gt;default&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Menlo&lt;/td&gt;
&lt;td style="text-align: center;"&gt;150&lt;/td&gt;
&lt;td style="text-align: left;"&gt;normal&lt;/td&gt;
&lt;td style="text-align: left;"&gt;normal&lt;/td&gt;
&lt;td style="text-align: left;"&gt;normal&lt;/td&gt;
&lt;td style="text-align: left;"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;&lt;code&gt;variable-pitch&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Optima&lt;/td&gt;
&lt;td style="text-align: center;"&gt;1.4&lt;/td&gt;
&lt;td style="text-align: left;"&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;height is a scaling value based of default height&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;&lt;code&gt;markdown-header-face&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Futura&lt;/td&gt;
&lt;td style="text-align: center;"&gt;1.1&lt;/td&gt;
&lt;td style="text-align: left;"&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;&lt;code&gt;org-level-[1-8]&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Futura&lt;/td&gt;
&lt;td style="text-align: center;"&gt;1.1&lt;/td&gt;
&lt;td style="text-align: left;"&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;&lt;code&gt;org-level-N&lt;/code&gt; inherits from to &lt;code&gt;outline-N&lt;/code&gt; face, so actual configuration configures &lt;code&gt;outline-1&lt;/code&gt; face.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;This &lt;a href="https://github.com/kickingvegas/cclisp/blob/d4294135a86d8ef03f3f9821f08678948b8ba04c/custom.el#L524"&gt;link&lt;/a&gt; shows my implementation of the above settings using &lt;code&gt;customize-face&lt;/code&gt;. Note that the above typefaces are pre-installed on macOS and may not be available for other platforms.&lt;/p&gt;
&lt;p&gt;For reference, much of my guidance on typographic configuration is taken from &lt;a href="https://zzamboni.org/post/beautifying-org-mode-in-emacs/"&gt;zzamboni.org | Beautifying Org Mode in Emacs&lt;/a&gt;. Highly recommended for readers who want to delve further into this.&lt;/p&gt;
&lt;h1&gt;Hiding Markup&lt;/h1&gt;
&lt;p&gt;Both Org and Markdown modes provide variables which support hiding markup delimiters. This makes for a more &lt;em&gt;distraction-free&lt;/em&gt; experience.&lt;/p&gt;
&lt;p&gt;For Org mode, setting the variable &lt;code&gt;org-hide-emphasis-markers&lt;/code&gt; to &lt;code&gt;t&lt;/code&gt; will hide the markup around styled text. I also like setting the variable &lt;code&gt;org-hide-leading-stars&lt;/code&gt; to &lt;code&gt;t&lt;/code&gt; so that headers are not so noisy.&lt;/p&gt;
&lt;p&gt;For Markdown mode, invoking the function &lt;code&gt;markdown-toggle-markup-hiding&lt;/code&gt; as part of the initialization Markdown hook will achieve the same.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;add-hook&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;#39;markdown-mode-hook&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;#39;markdown-toggle-markup-hiding&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Don't fret about getting back your hidden text. Later in this post we will show how to easily reveal hidden markup. &lt;/p&gt;
&lt;h1&gt;Automatic Spellchecking&lt;/h1&gt;
&lt;p&gt;While spell checking support has long existed in Emacs, automatically checking text as you type is not turned on by default. Using the &lt;a href="http://www-sop.inria.fr/members/Manuel.Serrano/flyspell/flyspell.html"&gt;flyspell&lt;/a&gt; and &lt;a href="http://company-mode.github.io/"&gt;company&lt;/a&gt; modes can remedy this, the first to automatically spell check a buffer and the latter to provide candidate replacements for a misspelled word. Enabling this in the init file via the &lt;code&gt;text-mode-hook&lt;/code&gt; turns this on for both &lt;code&gt;markdown-mode&lt;/code&gt; and &lt;code&gt;org-mode&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;
&lt;span class="normal"&gt;2&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;add-hook&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;#39;text-mode-hook&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;#39;flyspell-mode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;add-hook&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;#39;text-mode-hook&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;#39;company-mode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Don't like &lt;code&gt;company&lt;/code&gt; mode? There are plenty of other completion &lt;a href="https://www.emacswiki.org/emacs/CategoryCompletion"&gt;packages&lt;/a&gt; to choose from.&lt;/p&gt;
&lt;h1&gt;Dictionary Lookup of a Selected Word&lt;/h1&gt;
&lt;video width="720" controls poster="http://yummymelon.com/devnull/images/tuning-emacs-write-prose/dictionary-lookup-poster.png" preload="none" style="border-style: groove;" &gt;
 &lt;source src="http://yummymelon.com/devnull/images/tuning-emacs-write-prose/dictionary-lookup.mp4" type="video/mp4" /&gt;
&lt;/video&gt;

&lt;p&gt;Mickey Peterson has an informative post on using the &lt;a href="https://www.masteringemacs.org/article/wordsmithing-in-emacs"&gt;dictionary lookup feature&lt;/a&gt; in Emacs 28. However, since macOS is my daily driver, I actually prefer to use the native macOS dictionary via the &lt;a href="https://github.com/xuchunyang/osx-dictionary.el"&gt;osx-dictionary&lt;/a&gt; package. Regardless of what package you use, having immediate access to a dictionary while writing is extraordinarily useful. While both the native dictionary lookup and &lt;code&gt;ox-dictionary&lt;/code&gt; are built to support keyboard-driven user interfaces, they can also be mouse-driven as well. Detailed below is how I&amp;rsquo;ve implemented a common GUI UX workflow where invoking a context-menu on a selected word will offer the option to look up that word&amp;rsquo;s definition.&lt;/p&gt;
&lt;p&gt;First off, turn on &lt;code&gt;context-menu-mode&lt;/code&gt; in your init file. Here I&amp;rsquo;ve turned it on via the &lt;code&gt;text-mode-hook&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;add-hook&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;#39;text-mode-hook&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;#39;context-menu-mode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Next up is defining your custom context menu. I&amp;rsquo;ve written an earlier post on &lt;a href="http://yummymelon.com/devnull/customizing-the-emacs-context-menu.html"&gt;customizing the context menu&lt;/a&gt; which I highly recommend reading if you are new to context menus. Adding a menu item to invoke the function &lt;code&gt;osx-dictionary-search-word-at-point&lt;/code&gt; from the &lt;code&gt;osx-dictionary&lt;/code&gt; package is shown in the code fragment below:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;
&lt;span class="normal"&gt;2&lt;/span&gt;
&lt;span class="normal"&gt;3&lt;/span&gt;
&lt;span class="normal"&gt;4&lt;/span&gt;
&lt;span class="normal"&gt;5&lt;/span&gt;
&lt;span class="normal"&gt;6&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;when&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;use-region-p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;cc/context-menu-item-separator&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;menu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;dictionary-operations-separator&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;easy-menu-add-item&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;menu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Look Up&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="w"&gt;                                &lt;/span&gt;&lt;span class="nv"&gt;osx-dictionary-search-word-at-point&lt;/span&gt;
&lt;span class="w"&gt;                                &lt;/span&gt;&lt;span class="nb"&gt;:label&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;cc/context-menu-last-word-in-region&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Look Up&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;                                    &lt;/span&gt;
&lt;span class="w"&gt;                                &lt;/span&gt;&lt;span class="nb"&gt;:help&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Look up selected region in macOS dictionary&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The above &lt;a href="https://github.com/kickingvegas/cclisp/blob/d4294135a86d8ef03f3f9821f08678948b8ba04c/cc-context-menu.el#L93"&gt;code fragment&lt;/a&gt; is in the custom function &lt;code&gt;cc/context-menu-addons&lt;/code&gt; which itself is added to the &lt;a href="https://github.com/kickingvegas/cclisp/blob/d4294135a86d8ef03f3f9821f08678948b8ba04c/cc-context-menu.el#L235"&gt;hook&lt;/a&gt; &lt;code&gt;context-menu-functions&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;To support context sensitivity, the predicate function &lt;code&gt;use-region-p&lt;/code&gt; is used to determine if text is selected; if not then this menu item is not added to the context menu. Note that another &lt;a href="https://github.com/kickingvegas/cclisp/blob/d4294135a86d8ef03f3f9821f08678948b8ba04c/cc-context-menu-macros.el#L52"&gt;custom function&lt;/a&gt; &lt;code&gt;cc/context-menu-last-word-in-region&lt;/code&gt; is used to dynamically populate the menu item label with the last word in the selected region.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;
&lt;span class="normal"&gt;2&lt;/span&gt;
&lt;span class="normal"&gt;3&lt;/span&gt;
&lt;span class="normal"&gt;4&lt;/span&gt;
&lt;span class="normal"&gt;5&lt;/span&gt;
&lt;span class="normal"&gt;6&lt;/span&gt;
&lt;span class="normal"&gt;7&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;defun&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;cc/context-menu-last-word-in-region&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;prefix&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Generate context menu label with last word in region prepended by PREFIX.&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;let*&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nv"&gt;start&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;region-beginning&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;end&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;region-end&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;buf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;buffer-substring&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;start&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;end&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;last-word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;car&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;last&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;split-string&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;buf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot; &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)))))&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;concat&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;prefix&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot; “&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;last-word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;”&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;h1&gt;Menu-Driven Styling of Selected Text&lt;/h1&gt;
&lt;video width="720" controls poster="http://yummymelon.com/devnull/images/tuning-emacs-write-prose/styling-text-poster.png" preload="none" style="border-style: groove;" &gt;
 &lt;source src="http://yummymelon.com/devnull/images/tuning-emacs-write-prose/styling-text.mp4" type="video/mp4" /&gt;
&lt;/video&gt;

&lt;p&gt;Another common GUI UX workflow is to select text and style it (for example bold, italic, code, underline). To implement this behavior in Emacs, I defined a custom keymap &lt;code&gt;cc/emphasize-menu&lt;/code&gt; whose source is shown below:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt; 1&lt;/span&gt;
&lt;span class="normal"&gt; 2&lt;/span&gt;
&lt;span class="normal"&gt; 3&lt;/span&gt;
&lt;span class="normal"&gt; 4&lt;/span&gt;
&lt;span class="normal"&gt; 5&lt;/span&gt;
&lt;span class="normal"&gt; 6&lt;/span&gt;
&lt;span class="normal"&gt; 7&lt;/span&gt;
&lt;span class="normal"&gt; 8&lt;/span&gt;
&lt;span class="normal"&gt; 9&lt;/span&gt;
&lt;span class="normal"&gt;10&lt;/span&gt;
&lt;span class="normal"&gt;11&lt;/span&gt;
&lt;span class="normal"&gt;12&lt;/span&gt;
&lt;span class="normal"&gt;13&lt;/span&gt;
&lt;span class="normal"&gt;14&lt;/span&gt;
&lt;span class="normal"&gt;15&lt;/span&gt;
&lt;span class="normal"&gt;16&lt;/span&gt;
&lt;span class="normal"&gt;17&lt;/span&gt;
&lt;span class="normal"&gt;18&lt;/span&gt;
&lt;span class="normal"&gt;19&lt;/span&gt;
&lt;span class="normal"&gt;20&lt;/span&gt;
&lt;span class="normal"&gt;21&lt;/span&gt;
&lt;span class="normal"&gt;22&lt;/span&gt;
&lt;span class="normal"&gt;23&lt;/span&gt;
&lt;span class="normal"&gt;24&lt;/span&gt;
&lt;span class="normal"&gt;25&lt;/span&gt;
&lt;span class="normal"&gt;26&lt;/span&gt;
&lt;span class="normal"&gt;27&lt;/span&gt;
&lt;span class="normal"&gt;28&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;easy-menu-define&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;cc/emphasize-menu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;nil&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Keymap for Emphasize Menu&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Style&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;:visible&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;region-active-p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Bold&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;cc/emphasize-bold&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;:enable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;region-active-p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;:visible&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;or&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;derived-mode-p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;#39;org-mode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;derived-mode-p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;#39;markdown-mode&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;:help&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Bold selected region&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Italic&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;cc/emphasize-italic&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;:enable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;region-active-p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;:visible&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;or&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;derived-mode-p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;#39;org-mode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;derived-mode-p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;#39;markdown-mode&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;:help&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Italic selected region&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Code&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;cc/emphasize-code&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;:enable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;region-active-p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;:visible&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;or&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;derived-mode-p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;#39;org-mode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;derived-mode-p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;#39;markdown-mode&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;:help&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Code selected region&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Underline&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;cc/emphasize-underline&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;:enable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;region-active-p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;:visible&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;derived-mode-p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;#39;org-mode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;:help&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Underline selected region&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Verbatim&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;cc/emphasize-verbatim&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;:enable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;region-active-p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;:visible&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;derived-mode-p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;#39;org-mode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;:help&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Verbatim selected region&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Strike Through&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;cc/emphasize-strike-through&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;:enable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;region-active-p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;:visible&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;or&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;derived-mode-p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;#39;org-mode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;derived-mode-p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;#39;markdown-mode&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;:help&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Strike-through selected region&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Note the use of predicates for the &lt;code&gt;:visible&lt;/code&gt; and &lt;code&gt;:enable&lt;/code&gt; properties to support context-sensitive behavior. In the source code above, the functions that actually style the selected text each do the following: 1) test for the current major mode (in this case either Markdown or Org), and 2) invokes the mode-specific function to style the text. For example, to &amp;ldquo;bold&amp;rdquo; a text, the following function &lt;code&gt;cc/emphasize-bold&lt;/code&gt; is called:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;
&lt;span class="normal"&gt;2&lt;/span&gt;
&lt;span class="normal"&gt;3&lt;/span&gt;
&lt;span class="normal"&gt;4&lt;/span&gt;
&lt;span class="normal"&gt;5&lt;/span&gt;
&lt;span class="normal"&gt;6&lt;/span&gt;
&lt;span class="normal"&gt;7&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;defun&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;cc/emphasize-bold&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;interactive&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;cond&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nv"&gt;derived-mode-p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;#39;org-mode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;org-emphasize&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sc"&gt;?*&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nv"&gt;derived-mode-p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;#39;markdown-mode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;markdown-insert-bold&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Definitions for all the style (emphasize) functions are at this &lt;a href="https://github.com/kickingvegas/cclisp/blob/d4294135a86d8ef03f3f9821f08678948b8ba04c/cc-style-text-menu.el"&gt;link&lt;/a&gt;.&lt;/p&gt;
&lt;h1&gt;Menu-Driven Toggling of Hiding Markup (aka “Reveal Codes”)&lt;/h1&gt;
&lt;video width="720" controls poster="http://yummymelon.com/devnull/images/tuning-emacs-write-prose/toggle-markup-poster.png" preload="none" style="border-style: groove;" &gt;
 &lt;source src="http://yummymelon.com/devnull/images/tuning-emacs-write-prose/toggle-markup.mp4" type="video/mp4" /&gt;
&lt;/video&gt;

&lt;p&gt;For those users familiar with &lt;strong&gt;WordPerfect&lt;/strong&gt;, it had a feature called &lt;em&gt;Reveal Codes&lt;/em&gt; which enabled the user to explicitly &lt;a href="https://www.wordperfect.com/en/pages/items/1500650.html#:~:text=Turning%20on%20Reveal%20Codes&amp;amp;text=There%20are%20several%20ways%20to,of%20the%20vertical%20scroll%20bar."&gt;see the codes&lt;/a&gt; used to format a document. This same behavior can be emulated for Org and Markdown buffers, via the &lt;code&gt;visible-mode&lt;/code&gt; and &lt;code&gt;markdown-toggle-markup-hiding&lt;/code&gt; functions, respectively.&lt;/p&gt;
&lt;p&gt;The following &lt;a href="https://github.com/kickingvegas/cclisp/blob/d4294135a86d8ef03f3f9821f08678948b8ba04c/cc-context-menu.el#L162"&gt;code fragment&lt;/a&gt; from &lt;code&gt;cc/context-menu-addons&lt;/code&gt; shows how &lt;code&gt;visible-mode&lt;/code&gt; is invoked for Org mode. &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;
&lt;span class="normal"&gt;2&lt;/span&gt;
&lt;span class="normal"&gt;3&lt;/span&gt;
&lt;span class="normal"&gt;4&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;easy-menu-add-item&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;menu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;nil&lt;/span&gt;
&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Toggle Reveal Markup&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="nv"&gt;visible-mode&lt;/span&gt;
&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="nb"&gt;:help&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Toggle making all invisible text temporarily visible (Visible mode)&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The following &lt;a href="https://github.com/kickingvegas/cclisp/blob/d4294135a86d8ef03f3f9821f08678948b8ba04c/cc-context-menu.el#L176"&gt;code fragment&lt;/a&gt; from &lt;code&gt;cc/context-menu-addons&lt;/code&gt; shows how &lt;code&gt;markdown-toggle-markup-hiding&lt;/code&gt; is invoked for Markdown mode. &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;
&lt;span class="normal"&gt;2&lt;/span&gt;
&lt;span class="normal"&gt;3&lt;/span&gt;
&lt;span class="normal"&gt;4&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;easy-menu-add-item&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;menu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;nil&lt;/span&gt;
&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Toggle Reveal Markup&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="nv"&gt;markdown-toggle-markup-hiding&lt;/span&gt;
&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="nb"&gt;:help&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Toggle the display or hiding of markup&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;])))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Context-sensitivity of how the above menu items are displayed is handled by the control flow of &lt;code&gt;cc/context-menu-addons&lt;/code&gt;, which tests for current major mode.&lt;/p&gt;
&lt;h1&gt;Dynamic Completion of a Previously Written Word&lt;/h1&gt;
&lt;p&gt;Ever have to type a word in a document that you were going to use multiple times? The function &lt;a href="https://www.gnu.org/software/emacs/manual/html_node/emacs/Dynamic-Abbrevs.html"&gt;dabbrev-expand&lt;/a&gt; (keyboard shortcut &lt;code&gt;M-/&lt;/code&gt;) is your friend. There&amp;rsquo;s nothing to turn on, you get this behavior for free. Coupled with &lt;code&gt;company-mode&lt;/code&gt; and you will wonder how you lived without it. &lt;/p&gt;
&lt;h1&gt;Turn-on Word Wrapping&lt;/h1&gt;
&lt;p&gt;While this is very much a personal preference, over the years I&amp;rsquo;ve found that treating a text file newline as a paragraph delimiter to be the least-surprising convention to use. With that, turning-on word-wrapping is done via &lt;a href="https://www.gnu.org/software/emacs/manual/html_node/emacs/Visual-Line-Mode.html"&gt;visual-line-mode&lt;/a&gt;. I turn this on for all text mode buffers via the &lt;code&gt;text-mode-hook&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;add-hook&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;#39;text-mode-hook&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;#39;visual-line-mode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Source &lt;a href="https://github.com/kickingvegas/cclisp/blob/d4294135a86d8ef03f3f9821f08678948b8ba04c/cc-text-mode.el#L3C1-L3C45"&gt;link&lt;/a&gt; for the above code in my init file.&lt;/p&gt;
&lt;h1&gt;Navigation and Moving of Text&lt;/h1&gt;
&lt;p&gt;Mastering both navigation and moving text in Emacs can go a long way towards helping you write &lt;em&gt;better&lt;/em&gt; prose as you can focus more on expressing your thoughts instead of just typing.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re going to spend a considerable time with either Markdown or Org, I strongly recommend that you learn the heading/block navigation commands provided by the &lt;a href="https://orgmode.org/manual/Motion.html"&gt;Org&lt;/a&gt; and &lt;a href="https://jblevins.org/projects/markdown-mode/"&gt;Markdown&lt;/a&gt; major modes. In addition, if you haven&amp;rsquo;t tried &lt;a href="https://github.com/abo-abo/avy"&gt;Avy&lt;/a&gt; yet, stop here and go make it a part of your life. Emacs Elements provides a &lt;a href="https://youtu.be/SZ9ciomvgNo"&gt;video demo&lt;/a&gt; of Avy at work, and Irreal posts &lt;a href="https://irreal.org/blog/?p=11507"&gt;here&lt;/a&gt; on how they use it. &lt;/p&gt;
&lt;p&gt;My previous post &lt;a href="http://yummymelon.com/devnull/moving-text-elegantly-in-emacs.html"&gt;Moving Text Elegantly in Emacs&lt;/a&gt; described how to move around a text object such as a word, sentence, or balanced expression (sexp) forward or backwards, among other operations involving the transpose family of functions. &lt;/p&gt;
&lt;p&gt;A fairly recent post on &lt;a href="https://susam.net/blog/sorting-in-emacs.html"&gt;sorting&lt;/a&gt; text in Emacs by Susam Pal shows how you can make short work of sorting lines. Highly recommended.&lt;/p&gt;
&lt;h1&gt;Deleting Whitespace&lt;/h1&gt;
&lt;video width="720" controls poster="http://yummymelon.com/devnull/images/tuning-emacs-write-prose/delete-whitespace-poster.png" preload="none" style="border-style: groove;" &gt;
 &lt;source src="http://yummymelon.com/devnull/images/tuning-emacs-write-prose/delete-whitespace.mp4" type="video/mp4" /&gt;
&lt;/video&gt;

&lt;p&gt;Also useful when reviewing text is to delete whitespace, either vertically in the form of blank lines or horizontally in the form of multiple spaces. Emacs provides a number of &lt;a href="https://www.emacswiki.org/emacs/DeletingWhitespace"&gt;functions&lt;/a&gt; to address these concerns. While those functions can always be invoked via keyboard, I find it convenient to be access them via menu as well. Shown below is a custom keymap &lt;code&gt;cc/delete-space-menu&lt;/code&gt; invoking some functions that I find useful in this regard.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt; 1&lt;/span&gt;
&lt;span class="normal"&gt; 2&lt;/span&gt;
&lt;span class="normal"&gt; 3&lt;/span&gt;
&lt;span class="normal"&gt; 4&lt;/span&gt;
&lt;span class="normal"&gt; 5&lt;/span&gt;
&lt;span class="normal"&gt; 6&lt;/span&gt;
&lt;span class="normal"&gt; 7&lt;/span&gt;
&lt;span class="normal"&gt; 8&lt;/span&gt;
&lt;span class="normal"&gt; 9&lt;/span&gt;
&lt;span class="normal"&gt;10&lt;/span&gt;
&lt;span class="normal"&gt;11&lt;/span&gt;
&lt;span class="normal"&gt;12&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;easy-menu-define&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;cc/delete-space-menu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;nil&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Keymap for Deleting Space submenu&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Delete Space&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;:visible&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;buffer-read-only&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Join Line&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;join-line&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;:help&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Join this line to previous and fix up whitespace at join&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Just One Space&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;just-one-space&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;:help&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Delete all spaces and tabs around point, leaving one space.&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Delete Horizontal Space&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;delete-horizontal-space&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;:help&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Delete all spaces and tabs around point.&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Delete Blank Lines&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;delete-blank-lines&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nb"&gt;:help&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;On blank line, delete all surrounding blank lines, leaving just one.&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The keymap &lt;code&gt;cc/delete-space-menu&lt;/code&gt; can be incorporated into a custom context menu as shown &lt;a href="https://github.com/kickingvegas/cclisp/blob/d4294135a86d8ef03f3f9821f08678948b8ba04c/cc-context-menu.el#L224"&gt;here&lt;/a&gt; and into the menu bar &lt;a href="https://github.com/kickingvegas/cclisp/blob/d4294135a86d8ef03f3f9821f08678948b8ba04c/cc-menu-reconfig.el#L37"&gt;here&lt;/a&gt;. &lt;/p&gt;
&lt;h1&gt;Word Count&lt;/h1&gt;
&lt;p&gt;A common metric is the count of words in a document. The function &lt;code&gt;count-words&lt;/code&gt; can determine this, which can be called from a context menu with the &lt;a href="https://github.com/kickingvegas/cclisp/blob/2cc9b49bf98bcf12738c8e345a6f6b4cd21df34d/cc-context-menu.el#L211"&gt;code fragment&lt;/a&gt; below:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;
&lt;span class="normal"&gt;2&lt;/span&gt;
&lt;span class="normal"&gt;3&lt;/span&gt;
&lt;span class="normal"&gt;4&lt;/span&gt;
&lt;span class="normal"&gt;5&lt;/span&gt;
&lt;span class="normal"&gt;6&lt;/span&gt;
&lt;span class="normal"&gt;7&lt;/span&gt;
&lt;span class="normal"&gt;8&lt;/span&gt;
&lt;span class="normal"&gt;9&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;when&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;derived-mode-p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;#39;text-mode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;use-region-p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;easy-menu-add-item&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;menu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Count Words in Region&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;                                        &lt;/span&gt;&lt;span class="nv"&gt;count-words&lt;/span&gt;
&lt;span class="w"&gt;                                        &lt;/span&gt;&lt;span class="nb"&gt;:help&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Count words in region&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;easy-menu-add-item&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;menu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Count Words in Buffer&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;                                      &lt;/span&gt;&lt;span class="nv"&gt;count-words&lt;/span&gt;
&lt;span class="w"&gt;                                      &lt;/span&gt;&lt;span class="nb"&gt;:help&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Count words in buffer&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;])))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;h1&gt;Closing&lt;/h1&gt;
&lt;p&gt;This post suggests a number of configurations to tune Emacs for writing prose, with an emphasis on support for menu-driven operations. Hope that you find them useful!&lt;/p&gt;
&lt;h1&gt;References&lt;/h1&gt;
&lt;p&gt;A lot of this post was sourced from other posts over the years. For further reading, I encourage you follow the links below.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://zzamboni.org/post/beautifying-org-mode-in-emacs/"&gt;zzamboni.org | Beautifying Org Mode in Emacs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.gnu.org/software/emacs/manual/html_node/elisp/Overlay-Properties.html"&gt;Overlay Properties (GNU Emacs Lisp Reference Manual)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.gnu.org/software/emacs/manual/html_node/elisp/Line-Height.html#:~:text=default%20line%20height.-,You%20can%20specify%20the%20line%20spacing%20for%20all%20lines%20in,spacings%20specified%20for%20the%20frame."&gt;Line Height (GNU Emacs Lisp Reference Manual)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.masteringemacs.org/article/wordsmithing-in-emacs"&gt;Wordsmithing in Emacs - Mastering Emacs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.gnu.org/software/emacs/manual/html_node/emacs/Dynamic-Abbrevs.html"&gt;Dynamic Abbrevs (GNU Emacs Manual)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.gnu.org/software/emacs/manual/html_node/emacs/Visual-Line-Mode.html"&gt;Visual Line Mode (GNU Emacs Manual)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://susam.net/blog/sorting-in-emacs.html"&gt;Sorting in Emacs - Susam Pal&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;&lt;/h1&gt;</content><category term="misc"/><category term="emacs"/><category term="org mode"/><category term="markdown"/></entry><entry><title>Captee available on the Mac App Store</title><link href="http://yummymelon.com/devnull/captee-available-on-the-mac-app-store.html" rel="alternate"/><published>2023-04-10T15:04:00-07:00</published><updated>2023-04-10T15:04:00-07:00</updated><author><name>Charles Choi</name></author><id>tag:yummymelon.com,2023-04-10:/devnull/captee-available-on-the-mac-app-store.html</id><summary type="html">&lt;p&gt;Captee available on the Mac App Store. Go get it.&lt;/p&gt;</summary><content type="html">&lt;p&gt;At long last, &lt;strong&gt;Captee&lt;/strong&gt; is available on the &lt;a href="https://apps.apple.com/us/app/captee/id6446053750" title="Buy Captee on the App Store"&gt;Mac App Store&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;Learn more about it at &lt;a href="http://yummymelon.com/captee"&gt;http://yummymelon.com/captee&lt;/a&gt;&lt;/p&gt;</content><category term="misc"/><category term="Captee"/><category term="software"/><category term="macOS"/><category term="org mode"/><category term="markdown"/><category term="emacs"/></entry></feed>