{
    "title": "Jason Blevins",
    "author": {
        "name": "Jason Blevins",
        "url": "https://jblevins.org/"
    },
    "home_page_url": "https://jblevins.org/",
    "feed_url": "https://jblevins.org/index.json",
    "icon" : "https://jblevins.org/favicon.ico",
    "favicon" : "https://jblevins.org/favicon.ico",
    "version": "https://jsonfeed.org/version/1",
    "items": [
        {
            "title": "Markdown Mode 2.3 Release Notes",
            "date_published": "2017-08-31T04:04:00Z",
            "date_modified": "2017-08-31T14:49:00Z",
            "summary": "A summary of new features and bug fixes in Markdown Mode 2.3.",
            "id": "tag:jblevins.org,2017:/projects/markdown-mode/rev-2-3",
            "url": "https://jblevins.org/projects/markdown-mode/rev-2-3",
            "author" : {
                "name" : "Jason Blevins",
                "url": "https://jblevins.org/"
            },
            "content_html": "<!--\nMarkdown Mode for Emacs version 2.3 release notes:\nhttps://jblevins.org/projects/markdown-mode/rev-2-3\n-->\n\n<p><a href=\"https://jblevins.org/projects/markdown-mode/\">Markdown Mode for Emacs</a> version 2.3 was released on <strong>August 31, 2017</strong>.\nThis is a major new stable release and all users are encouraged to\nupgrade. The many new features and bug fixes included are described\nbelow. See the <a href=\"https://github.com/jrblevin/markdown-mode\">Git repository</a> or the commit-specific links below\nfor a detailed history of changes. Thanks to everyone who submitted\nbug reports, feature suggestions, and especially patches.</p>\n\n<p>The major new features are the following (but see the release notes\nbelow for complete details):</p>\n\n<ul>\n<li>Native font lock and indirect editing for fenced code blocks.</li>\n<li>Hidden markup mode and <abbr class=\"abbr\" title=\"Uniform Resource Locator\">URL</abbr> hiding.</li>\n<li>Interactive image and link insertion commands.</li>\n<li>New text style insertion keybindings.</li>\n<li>Many new movement, marking, narrowing commands.</li>\n<li>Clickable links.</li>\n</ul>\n\n<p><a href=\"https://leanpub.com/markdown-mode\"><img src=\"https://jblevins.org/projects/markdown-mode/guide-v2.3.png\" alt=\"Guide to Markdown Mode for Emacs\" id=\"guide-cover\" style=\"height:350px;width=231px\" /></a>\nThe <a href=\"https://leanpub.com/markdown-mode\"><em>Guide to Markdown Mode for Emacs</em></a> is now also available\nat Leanpub to supplement the existing documentation. It contains\nin-depth discussions of advanced movement and editing commands,\nconfiguration examples, tips and tricks, and a survey of other\npackages that work with Markdown Mode.</p>\n\n<ul>\n<li><p><strong>Breaking changes:</strong></p>\n\n<ul>\n<li><code>markdown-mode</code> now requires Emacs 24.3 or later.</li>\n<li>Markup insertion and replacement keybindings under <kbd>C-c\nC-s</kbd> (<em>s</em> for style) have been revised to make them\neasier to remember. Now, when the prefix <kbd>C-c C-s</kbd>\nis pressed, a short minibuffer help prompt is presented as a\nreminder of a few of the most frequently used keys. The major\nchanges are that bold is now inserted with <kbd>b</kbd>\n(previously <kbd>s</kbd>) and italic is now <kbd>i</kbd>\n(previously <kbd>e</kbd>). As a result, blockquote is now\n<kbd>q</kbd> (previously <kbd>b</kbd>) and strikethrough\nmarkup is inserted with <kbd>s</kbd> (previously\n<kbd>d</kbd>). Press <kbd>C-c C-s C-h</kbd> for a complete\nlist of markup insertion keybindings. Heading insertion\ncommands are also now under <kbd>C-c C-s</kbd>.</li>\n<li>Link insertion and editing has been consolidated into one\ncommand, <code>markdown-insert-link</code>, bound to <kbd>C-c C-l</kbd>.\nAs such, the previous separate link insertion keybindings have\nbeen removed: <kbd>C-c C-a l</kbd>, <kbd>C-c C-a L</kbd>,\n<kbd>C-c C-a r</kbd>, and <kbd>C-c C-a u</kbd>.</li>\n<li>Image insertion and editing has been consolidated into one\ncommand, <code>markdown-insert-image</code>, bound to <kbd>C-c C-i</kbd>.\nAs such, the previous separate image insertion keybindings have\nbeen removed: <kbd>C-c C-i i</kbd> and <kbd>C-c C-i I</kbd>.</li>\n<li>Footnote and wiki link insertion have been moved to the\nmarkup insertion prefix, as <kbd>C-c C-s f</kbd> and\n<kbd>C-c C-s w</kbd>.</li>\n<li>The list and outline editing commands have been removed from\nthe top-level positions (previously <kbd>M-LEFT</kbd>,\n<kbd>M-RIGHT</kbd>, <kbd>M-UP</kbd>, <kbd>M-DOWN</kbd>)\nand moved to major mode keybindings under <kbd>C-c</kbd> to\n<kbd>C-c LEFT</kbd>, <kbd>C-c RIGHT</kbd>,\n<kbd>C-c UP</kbd>, and <kbd>C-c DOWN</kbd>, respectively.\n(<a href=\"https://github.com/jrblevin/markdown-mode/issues/164\">GH&#8211;164</a>)</li>\n<li>The list and outline editing commands have also been unified\nso that they all operate on entire subtrees of list items and\nsubtrees of atx headings, symmetrically. Previously there were\nseparate commands for editing heading subtrees, but promoting\na single section is easy enough by directly inserting or\nremoving a hash mark or using the markup replacement commands.</li>\n<li>Jumping between references and reference definitions via\n<code>markdown-jump</code>, previously bound to <kbd>C-c C-l</kbd>, has\nbeen moved to <kbd>C-c C-d</kbd> and rebranded as\n<code>markdown-do</code>, which attempts to do something sensible with\nthe object at the point.</li>\n<li>Rename internal <code>markdown-link-link</code> to <code>markdown-link-url</code>\nfor clarity.</li>\n<li>The old inline image toggling command <kbd>C-c C-i C-t</kbd>\nhas been removed and replaced <kbd>C-c C-x C-i</kbd> in order\nto allow for the new interactive image insertion command at\n<kbd>C-c C-i</kbd>. Toggling keybindings are currently being\ngrouped under <kbd>C-c C-x</kbd>.</li>\n<li><code>markdown-blockquote-face</code> is now applied to the entire\nblockquote, including the leading <code>&gt;</code>, so it can be used to\napply a background if desired.</li>\n<li>In <code>markdown-regex-header</code>, groups 4 and 6 now include\nwhitespace surrounding hash marks in atx headings.</li>\n<li>Font lock for <code>~~strikethrough~~</code> is now supported in\n<code>markdown-mode</code> in addition to <code>gfm-mode</code>.</li>\n<li>Introduced a new face for horizontal rules: <code>markdown-hr-face</code>.\nPreviously, <code>markdown-header-delimiter-face</code> was used.</li>\n<li>Markdown Mode is now distributed under the GNU <abbr class=\"abbr\" title=\"GNU General Public License\">GPL</abbr> version 3\nor later.</li>\n<li>Rename <code>markdown-fill-forward-paragraph-function</code> to\n<code>markdown-fill-forward-paragraph</code>.</li>\n<li>Rename <code>markdown-footnote-face</code> to <code>markdown-footnote-marker-face</code>.</li>\n<li>Functions <code>markdown-insert-inline-link-dwim</code> and\n<code>markdown-insert-reference-link-dwim</code> have been combined and\nreplaced with <code>markdown-insert-link</code>.</li>\n<li>Functions <code>markdown-exdent-region</code> and <code>markdown-exdent-or-delete</code>\nare now named <code>markdown-outdent-region</code> and\n<code>markdown-outdent-or-delete</code>, respectively.</li>\n<li>The non-interactive image insertion commands have been\nrefactored to mirror the corresponding link insertion\ncommands. <code>markdown-insert-image</code> (for inline images) has\nbeen renamed <code>markdown-insert-inline-image</code> and it now takes\nthree arguments (previously one optional argument).\n<code>markdown-insert-reference-image</code> now takes four arguments\n(previously none).</li>\n</ul></li>\n<li><p>New features:</p>\n\n<ul>\n<li>Markup hiding: Add a custom variable <code>markdown-hide-markup</code>,\nwhich determines whether to hide or otherwise beautify\nMarkdown markup. For example, for inline links the brackets,\n<abbr class=\"abbr\">URL</abbr>, and title will be hidden and only the (clickable) link\ntext will remain. The <abbr class=\"abbr\">URL</abbr> can be seen by hovering with the\nmouse pointer and edited by deleting one of the invisible\nbrackets or parentheses. This can be toggled interactively\nusing <kbd>C-c C-x C-m</kbd> (<code>markdown-toggle-markup-hiding</code>).\nThis setting supersedes <abbr class=\"abbr\">URL</abbr> hiding (below). (<a href=\"https://github.com/jrblevin/markdown-mode/issues/130\">GH&#8211;130</a>)</li>\n<li>Unicode bullets are used to replace <abbr class=\"acronym\" title=\"American Standard Code for Information Interchange\">ASCII</abbr> list item markers\nfor unordered lists when markup hiding is enabled. The list\nof characters used, in order of list level, can be specified\nby setting the variable <code>markdown-list-item-bullets</code>.\n(<a href=\"https://github.com/jrblevin/markdown-mode/issues/130\">GH&#8211;130</a>)</li>\n<li>When markup hiding is enabled, the characters used for\nreplacing certain markup can be changed by customizing the\ncorresponding variables:\n<code>markdown-blockquote-display-char</code>,\n<code>markdown-hr-display-char</code>, and\n<code>markdown-definition-display-char</code>.</li>\n<li><abbr class=\"abbr\">URL</abbr> and reference label hiding: URLs for inline links and\nlabels for reference links can now be hidden if desired. This is\nconfigurable via <code>markdown-hide-urls</code>. URLs will appear as\n<code>[link](∞)</code> instead of\n<code>[link](http://perhaps.a/very/long/url/)</code>. To change the\nplaceholder character used, set <code>markdown-url-compose-char</code>.\nThis feature can be toggled using <kbd>C-c C-x C-l</kbd>\n(<code>markdown-toggle-url-hiding</code>). If full markup hiding (above)\nis enabled, then <abbr class=\"abbr\">URL</abbr> hiding has no additional effect.</li>\n<li>Native code block font-lock: Add a custom variable\n<code>markdown-fontify-code-blocks-natively</code>, which determines\nwhether to fontify code in code blocks using the native major\nmode. This only works for fenced code blocks where the\nlanguage is specified where we can automatically determine the\nappropriate mode to use. The language to mode mapping may be\ncustomized by setting the variable <code>markdown-code-lang-modes</code>.\n(<a href=\"https://github.com/jrblevin/markdown-mode/issues/123\">GH&#8211;123</a>, <a href=\"https://github.com/jrblevin/markdown-mode/issues/185\">GH&#8211;185</a>)</li>\n<li>When the <a href=\"https://github.com/Fanael/edit-indirect/\"><code>edit-indirect</code></a>\npackage is installed, <kbd>C-c &#8217;</kbd> (<code>markdown-edit-code-block</code>)\ncan be used to edit a code block in an indirect buffer in the native\nmajor mode. Press <kbd>C-c C-c</kbd> to commit changes and return\nor <kbd>C-c C-k</kbd> to cancel.</li>\n<li>Add command <kbd>C-c C-x C-f</kbd> for toggling native font lock\nfor code blocks (<code>markdown-toggle-fontify-code-blocks-natively</code>).</li>\n<li>Add &#8220;page&#8221; movement, marking, and narrowing commands, where a\n&#8220;page&#8221; in Markdown is defined to be a top-level subtree:\n<code>markdown-forward-page</code> (<kbd>C-x ]</kbd>),\n<code>markdown-backward-page</code> (<kbd>C-x [</kbd>),\n<code>markdown-mark-page</code> (<kbd>C-x C-p</kbd>), and\n<code>markdown-narrow-to-page</code> (<kbd>C-x n p</kbd>). (<a href=\"https://github.com/jrblevin/markdown-mode/issues/191\">GH&#8211;191</a>)</li>\n<li>Add subtree marking and narrowing functions:\n<code>markdown-mark-subtree</code> (<kbd>C-c C-M-h</kbd>) and\n<code>markdown-narrow-to-subtree</code> (<kbd>C-x n s</kbd>).\n(<a href=\"https://github.com/jrblevin/markdown-mode/issues/191\">GH&#8211;191</a>)</li>\n<li>Add syntax-aware Markdown paragraph movement commands:\n<kbd>M-{</kbd> (<code>markdown-backward-paragraph</code>) and\n<kbd>M-}</kbd> (<code>markdown-forward-paragraph</code>). To mark a\nparagraph, use <kbd>M-h</kbd> (<code>markdown-mark-paragraph</code>).\nThese move at a more granular level than the block movement\ncommands. (<a href=\"https://github.com/jrblevin/markdown-mode/issues/191\">GH&#8211;191</a>)</li>\n<li>The previous block movement and marking commands are now at\n<kbd>C-M-{</kbd>, <kbd>C-M-}</kbd>, and <kbd>C-c M-h</kbd>.\nIn terms of lists, paragraph movement commands now stop at\neach list item while block commands move over entire lists.\n(<a href=\"https://github.com/jrblevin/markdown-mode/issues/191\">GH&#8211;191</a>)</li>\n<li>Add <code>subtree</code> as a possible value for\n<code>markdown-reference-location</code> and\n<code>markdown-footnote-location</code>.</li>\n<li>Ask flyspell to ignore words in URLs, code fragments,\ncomments, and reference labels.</li>\n<li>Make inline links, reference links, angle bracket URLs, and\nplain URLs clickable.</li>\n<li>Add an additional keybinding for toggling inline image\ndisplay, <kbd>C-c C-x C-i</kbd>.</li>\n<li>Add a keybinding for toggling LaTeX math (_e_quation) support:\n<kbd>C-c C-x C-e</kbd>.</li>\n<li>Support Leanpub blocks (asides, info blocks, warnings, etc.).\nThese are simple extensions of the usual blockquote syntax.</li>\n<li>Font lock, with markup hiding, for subscripts (e.g., <code>H~2~0</code>)\nand superscripts (e.g., <code>334^10^</code>). Thanks to Syohei Yoshida\nfor a patch on which this is based. (<a href=\"https://github.com/jrblevin/markdown-mode/issues/134\">GH&#8211;134</a>)</li>\n<li>Add basic font-lock support for inline attribute lists or\ninline identifiers used by Pandoc, Python Markdown, <abbr class=\"abbr\" title=\"PHP Hypertext Processor\">PHP</abbr>\nMarkdown Extra, Leanpub, etc.</li>\n<li>Add basic font-lock support for Leanpub section identifiers and\npage breaks.</li>\n<li>Add basic font-lock support for common file inclusion syntax:\n<code>&lt;&lt;(file)</code>, <code>&lt;&lt;[title](file)</code>, <code>&lt;&lt;[file]</code>, and <code>&lt;&lt;{file}</code>.</li>\n<li>Add font lock support for Pandoc inline footnotes. (<a href=\"https://github.com/jrblevin/markdown-mode/issues/81\">GH&#8211;81</a>)</li>\n<li>Raise footnote markers and inline footnote text, and\noptionally hide markup.</li>\n<li>Filling with now respects Pandoc line blocks. (<a href=\"https://github.com/jrblevin/markdown-mode/issues/144\">GH&#8211;144</a>)</li>\n<li>Add interactive link editing and insertion command\n<code>markdown-insert-link</code>. (<a href=\"https://github.com/jrblevin/markdown-mode/issues/199\">GH&#8211;199</a>)</li>\n<li>Added <kbd>C-c C-d</kbd>, <code>markdown-do</code>, which is a\nreplacement for <kbd>C-c C-l</kbd>, <code>markdown-jump</code>. In\naddition to jumping between reference/footnote labels and\ndefinitions, it also toggles <abbr class=\"acronym\" title=\"GitHub Flavored Markdown\">GFM</abbr> checkboxes.</li>\n<li>Outline movement keys <kbd>C-c C-p</kbd>, <kbd>C-c C-n</kbd>,\n<kbd>C-c C-f</kbd>, <kbd>C-c C-b</kbd>, and <kbd>C-c C-u</kbd>\nnow move between list items, when the point is in a list,\nand move between headings otherwise.</li>\n<li>New customization option <code>markdown-spaces-after-code-fence</code> to\ncontrol the number of spaces inserted after a code fence (<code>```</code>).\nThanks to Philipp Stephani for a patch.</li>\n<li>New customization option <code>markdown-gfm-uppercase-checkbox</code> which,\nwhen non-nil, uses <code>[X]</code> to complete task list items instead of\n<code>[x]</code>. Thanks to Paul Rankin for a patch. (<a href=\"https://github.com/jrblevin/markdown-mode/pull/236\">GH&#8211;236</a>)</li>\n<li>Add prefix-specific prompts for styles (<code>C-c C-s</code>) and toggles\n(<code>C-c C-x</code>). These may be disabled if desired by setting\n<code>markdown-enable-prefix-prompts</code> to <code>nil</code>.</li>\n</ul></li>\n<li><p>Improvements:</p>\n\n<ul>\n<li>Document customizable variables added in version 2.2 with\n<code>:package-version</code> tags.</li>\n<li>Better consistency of function names: predicate functions\nending in <code>-p</code> shouldn&#8217;t modify match data.</li>\n<li>Generalize rebinding of paragraph movement commands in case users\nhave customized <code>{forward,backward,mark}-paragraph</code> bindings.</li>\n<li>Adjust point so that it is left at beginning of setext\nheadings in heading navigation commands.</li>\n<li>Prevent inline link matching in code blocks.</li>\n<li>When inserting a new reference definition, don&#8217;t add blank\nline after existing reference definitions.</li>\n<li><code>markdown-toggle-inline-images</code> now displays the status in the\nminibuffer.</li>\n<li>Increased default heading scaling range slightly, to make\nlevel differences more pronounced when markup is hidden.</li>\n<li>Reuse existing windows, when possible, rather than splitting\nagain in preferred direction. (<a href=\"https://github.com/jrblevin/markdown-mode/issues/129\">GH&#8211;129</a>)</li>\n<li>Update known languages in <code>markdown-gfm-recognized-languages</code>.</li>\n<li>Filling with <code>fill-region</code> now leaves code blocks unmodified.\n(<a href=\"https://github.com/jrblevin/markdown-mode/issues/192\">GH&#8211;192</a>)</li>\n<li>Avoid error when live-previewing a buffer that&#8217;s not visiting\na file. Thanks to Tianxiang Xiong for a patch.\n(<a href=\"https://github.com/jrblevin/markdown-mode/issues/200\">GH&#8211;200</a>, <a href=\"https://github.com/jrblevin/markdown-mode/issues/201\">GH&#8211;201</a>)</li>\n<li>Adaptive filling for Leanpub blocks.</li>\n<li>Set variable <code>comment-use-syntax</code>. (<a href=\"https://github.com/jrblevin/markdown-mode/issues/213\">GH&#8211;213</a>)</li>\n<li>Support <code>electric-quote-inhibit-functions</code> for inhibiting\nelectric quoting in code spans and blocks. Thanks to Philipp\nStephani for patches to both Emacs and Markdown Mode.\n(<a href=\"https://github.com/jrblevin/markdown-mode/pull/220\">GH&#8211;220</a>)</li>\n<li>Stop inhibiting line breaks inside links when filling.\n(<a href=\"https://github.com/jrblevin/markdown-mode/issues/173\">GH&#8211;173</a>)</li>\n</ul></li>\n<li><p>Bug fixes:</p>\n\n<ul>\n<li>Fix spurious bold/italic faces in inline code. (<a href=\"https://github.com/jrblevin/markdown-mode/issues/172\">GH&#8211;172</a>)</li>\n<li>Fix defun movement at end of buffer. (<a href=\"https://github.com/jrblevin/markdown-mode/issues/197\">GH&#8211;197</a>)</li>\n<li>Fix bug with adjacent bold font-locking in a list\nitem. (<a href=\"https://github.com/jrblevin/markdown-mode/issues/176\">GH&#8211;176</a>)</li>\n<li>Prevent matching italics, bold, and inline code in comments.</li>\n<li>Prevent matching italics and bold in URLs.</li>\n<li>Prevent matching links in inline code or comment spans.</li>\n<li>Avoid infinite loop when promoting or demoting last section in\na buffer.</li>\n<li>Fix font lock for subsequent inline links after a malformed\ninline link. (<a href=\"https://github.com/jrblevin/markdown-mode/issues/209\">GH&#8211;209</a>)</li>\n<li>Prevent clobbering match data in\n<code>markdown-font-lock-extend-region-function</code>. Thanks to\nPhilipp Stephani for a patch. (<a href=\"https://github.com/jrblevin/markdown-mode/pull/221\">GH&#8211;221</a>)</li>\n<li>Fix incorrect indentation of inserted <abbr class=\"acronym\">GFM</abbr> code blocks in lists.\nThanks to Philipp Stephani for a patch. (<a href=\"https://github.com/jrblevin/markdown-mode/issues/215\">GH&#8211;215</a>)</li>\n<li>Fix an issue with font lock for headings with code blocks immediately\nafterwards, without whitespace. (<a href=\"https://github.com/jrblevin/markdown-mode/issues/234\">GH&#8211;234</a>)</li>\n</ul></li>\n</ul>\n"
        },
        {
            "title": "Dot Grid Paper Templates",
            "date_published": "2017-08-12T03:59:00Z",
            "date_modified": "2017-08-12T03:59:00Z",
            "summary": "PDF dot paper templates for use in apps such as GoodNotes.",
            "id": "tag:jblevins.org,2017:/log/dot-grid-paper",
            "url": "https://jblevins.org/log/dot-grid-paper",
            "author" : {
                "name" : "Jason Blevins",
                "url": "https://jblevins.org/"
            },
            "content_html": "<figure>\n<img src=\"https://jblevins.org/log/dot-grid-paper.png\" alt=\"Dot Grid Paper Template in GoodNotes on iPad\" id=\"img\" style=\"max-height:488px\" />\n<figcaption>Dot Grid Paper Template in GoodNotes on iPad</figcaption>\n</figure>\n\n<p>I use <a href=\"http://www.goodnotesapp.com\">GoodNotes</a> (<a href=\"https://itunes.apple.com/us/app/goodnotes-4-notes-pdf/id778658393?mt=8&amp;uo=4&amp;at=11l5Vs\">iOS</a>, <a href=\"https://itunes.apple.com/us/app/goodnotes/id1026566364?mt=12&amp;uo=4&amp;at=11l5Vs\">macOS</a>) for taking hand-written notes\non my iPad. It has a variety of paper templates built-in&#8212;ruled,\ngrid, Cornell, and so on&#8212;but I wanted to give dot grid paper a try.\nRather than go out and buy a ream of it, I created several PDFs\nfor 1/4&quot; (quarter inch) dot grid paper that I can load into GoodNotes\nas templates (U.S. Letter size).</p>\n\n<p>The result is <a href=\"https://github.com/jrblevin/dot-grid-paper\">on GitHub</a>. The repository also contains the\nPython script and LaTeX package (.sty file) I used to generate them.\nThe script generates individual LaTeX files (which in turn use the\nLaTeX package) for each of several specifications:</p>\n\n<ul>\n<li><em>Orientation:</em> portrait or landscape</li>\n<li><em>Margin:</em> top margin or full grid</li>\n<li><em>Color:</em> white or &#8220;antique&#8221;</li>\n</ul>\n\n<p>See the <a href=\"https://github.com/jrblevin/dot-grid-paper\">dot-grid-paper repository on GitHub</a> for more details.</p>\n"
        },
        {
            "title": "Using Custom CSS in Markdown Mode",
            "date_published": "2017-08-11T23:11:00Z",
            "date_modified": "2017-08-11T23:11:00Z",
            "summary": "How to link to an external CSS stylesheet or include an inline style block in HTML output from Markdown Mode.",
            "id": "tag:jblevins.org,2017:/log/custom-css",
            "url": "https://jblevins.org/log/custom-css",
            "author" : {
                "name" : "Jason Blevins",
                "url": "https://jblevins.org/"
            },
            "content_html": "<p>The default stylesheet for <abbr class=\"abbr\" title=\"Hypertext Markup Language\">HTML</abbr> in most browsers is rather\nunattractive, so you may want to use a custom stylesheet by either\nlinking to an external stylesheet or including a <code>&lt;style&gt;</code> block in\nthe exported <abbr class=\"abbr\">HTML</abbr> itself.</p>\n\n<figure>\n<img src=\"https://jblevins.org/log/custom-css.png\" alt=\"Custom CSS in Markdown Mode Output\" />\n<figcaption>Custom <abbr class=\"abbr\" title=\"Cascading Stylesheets\">CSS</abbr> in Markdown Mode Output</figcaption>\n</figure>\n\n<h2>Linking to an External Stylesheet</h2>\n\n<p>The easiest way to customize the style of previewed and exported <abbr class=\"abbr\">HTML</abbr>\noutput is to link to an existing <abbr class=\"abbr\">CSS</abbr> stylesheet. Markdown Mode has a\ncustomizable variable <code>markdown-css-paths</code>, which is a list of\nstylesheets to link to. For each path or <abbr class=\"abbr\" title=\"Uniform Resource Locator\">URL</abbr> in <code>markdown-css-paths</code>,\na line like the following will be included in the <abbr class=\"abbr\">HTML</abbr> output:</p>\n\n<!-- Generator: GNU source-highlight 3.1.7\nby Lorenzo Bettini\nhttp://www.lorenzobettini.it\nhttp://www.gnu.org/software/src-highlite -->\n<pre><code class=\"html\"><span class=\"keyword\">&lt;link</span><span class=\"normal\"> </span><span class=\"type\">rel</span><span class=\"symbol\">=</span><span class=\"string\">\"stylesheet\"</span><span class=\"normal\"> </span><span class=\"type\">type</span><span class=\"symbol\">=</span><span class=\"string\">\"text/css\"</span><span class=\"normal\"> </span><span class=\"type\">media</span><span class=\"symbol\">=</span><span class=\"string\">\"all\"</span><span class=\"normal\"> </span><span class=\"type\">href</span><span class=\"symbol\">=</span><span class=\"string\">\"<abbr class=\"abbr\">URL</abbr>\"</span><span class=\"normal\"> </span><span class=\"keyword\">/&gt;</span>\n</code></pre>\n\n\n<p>The most obvious way to use this is to link to an existing stylesheet.\nNoting that the variable is a list, one can specify a single <abbr class=\"abbr\">CSS</abbr> path\non the local filesystem like so:</p>\n\n<!-- Generator: GNU source-highlight 3.1.7\nby Lorenzo Bettini\nhttp://www.lorenzobettini.it\nhttp://www.gnu.org/software/src-highlite -->\n<pre><code class=\"lisp\"><span class=\"cbracket\">(</span><span class=\"normal\">setq markdown-css-paths '</span><span class=\"cbracket\">(</span><span class=\"string\">\"/path/to/custom.css\"</span><span class=\"cbracket\">))</span>\n</code></pre>\n\n\n<p>On the other hand, to use an existing <abbr class=\"abbr\">URL</abbr> use the following form:</p>\n\n<!-- Generator: GNU source-highlight 3.1.7\nby Lorenzo Bettini\nhttp://www.lorenzobettini.it\nhttp://www.gnu.org/software/src-highlite -->\n<pre><code class=\"lisp\"><span class=\"cbracket\">(</span><span class=\"normal\">setq markdown-css-paths '</span><span class=\"cbracket\">(</span><span class=\"string\">\"http://mydomain.com/style.css\"</span><span class=\"cbracket\">))</span>\n</code></pre>\n\n\n<p>As another example, the <a href=\"https://geo.itunes.apple.com/us/app/marked-2/id890031187?mt=12&amp;at=11l5Vs\">Marked 2</a> previewer contains several\nbuilt-in stylesheets that users can choose between. Conveniently,\nthese stylesheets are stored on the filesystem as <abbr class=\"abbr\">CSS</abbr> files inside the\napplication package and you can link to them locally. To use the\n&#8220;Lopash&#8221; style when previewing from <code>markdown-mode</code>, you can set the\n<code>markdown-css-paths</code> list as follows:</p>\n\n<!-- Generator: GNU source-highlight 3.1.7\nby Lorenzo Bettini\nhttp://www.lorenzobettini.it\nhttp://www.gnu.org/software/src-highlite -->\n<pre><code class=\"lisp\"><span class=\"cbracket\">(</span><span class=\"normal\">setq markdown-css-paths</span>\n<span class=\"normal\">    '</span><span class=\"cbracket\">(</span><span class=\"string\">\"/Applications/Marked 2.app/Contents/Resources/Lopash.css\"</span><span class=\"cbracket\">))</span>\n</code></pre>\n\n\n<p>If you don&#8217;t have a stylesheet already, there are many popular\nMarkdown stylesheets available online. For example, here are three\nsuch repositories on GitHub:</p>\n\n<ul>\n<li><a href=\"http://markdowncss.github.io\">http://markdowncss.github.io</a></li>\n<li><a href=\"http://jasonm23.github.io/markdown-css-themes/\">http://jasonm23.github.io/markdown-css-themes/</a></li>\n<li><a href=\"https://sindresorhus.com/github-markdown-css/\">https://sindresorhus.com/github-markdown-css/</a></li>\n</ul>\n\n<h2>Embedding a Custom Stylesheet</h2>\n\n<p>As an alternative (or in addition to) linking to an external\nstylesheet, you can also include inline style information in output\nfiles by using the <code>markdown-xhtml-header-content</code> variable. This\nvariable specifies a string to add to the <code>&lt;head&gt;</code> block of the\nresulting <abbr class=\"abbr\">HTML</abbr> output.</p>\n\n<p>For example, to remove the underline from links, but underline links\nwhen hovering, you can add the following <code>&lt;style&gt;</code> block to\n<code>markdown-xhtml-header-content</code>:</p>\n\n<!-- Generator: GNU source-highlight 3.1.7\nby Lorenzo Bettini\nhttp://www.lorenzobettini.it\nhttp://www.gnu.org/software/src-highlite -->\n<pre><code class=\"lisp\"><span class=\"cbracket\">(</span><span class=\"normal\">setq markdown-xhtml-header-content</span>\n<span class=\"normal\">      </span><span class=\"string\">\"&lt;style type='text/css'&gt;</span>\n<span class=\"string\">a { text-decoration: none; }</span>\n<span class=\"string\">a:hover { text-decoration: underline; }</span>\n<span class=\"string\">&lt;/style&gt;\"</span><span class=\"cbracket\">)</span>\n</code></pre>\n\n"
        },
        {
            "title": "Markdown Mode and Imenu",
            "date_published": "2017-08-10T19:32:00Z",
            "date_modified": "2017-08-10T19:32:00Z",
            "summary": "Using imenu and imenu-list with markdown-mode in Emacs.",
            "id": "tag:jblevins.org,2017:/log/markdown-imenu",
            "url": "https://jblevins.org/log/markdown-imenu",
            "author" : {
                "name" : "Jason Blevins",
                "url": "https://jblevins.org/"
            },
            "content_html": "<p><a href=\"https://jblevins.org/projects/markdown-mode/\">Markdown Mode for Emacs</a> includes support for <a href=\"https://www.gnu.org/software/emacs/manual/html_node/emacs/Imenu.html\"><code>imenu</code></a>, an\ninterface for quickly navigating to different sections within a\nbuffer. To try imenu with Markdown Mode, simply run <code>M-x\nimenu-add-menubar-index</code>. An &#8220;Index&#8221; menu will appear in the menubar.\nClicking a heading moves the point to that heading. Alternatively,\nwhen invoking <code>M-x imenu</code> using the keyboard Emacs will present you\nwith a list of headings in the minibuffer.</p>\n\n<figure>\n<img src=\"https://jblevins.org/log/markdown-imenu-index.png\" alt=\"imenu Index in Markdown Mode\" id=\"a\" title=\"Emacs window\" />\n<figcaption><code>imenu</code> Index in Markdown Mode</figcaption>\n</figure>\n\n<p>Markdown Mode adds a &#8220;.&#8221; to the top of each sub-menu. Clicking this\ndot takes you to the parent section. Otherwise, there is no way to\njump directly to headings that are not &#8220;leaf nodes.&#8221;</p>\n\n<p>To automatically load <code>imenu</code> when <code>markdown-mode</code> is loaded, you can\nadd the following to your <code>.emacs</code> or <code>init.el</code> file:</p>\n\n<!-- Generator: GNU source-highlight 3.1.7\nby Lorenzo Bettini\nhttp://www.lorenzobettini.it\nhttp://www.gnu.org/software/src-highlite -->\n<pre><code class=\"lisp\"><span class=\"cbracket\">(</span><span class=\"normal\">add-hook </span><span class=\"type\">'markdown-mode-hook</span><span class=\"normal\"> </span><span class=\"type\">'imenu-add-menubar-index</span><span class=\"cbracket\">)</span>\n<span class=\"cbracket\">(</span><span class=\"normal\">setq imenu-auto-rescan t</span><span class=\"cbracket\">)</span>\n</code></pre>\n\n\n<p>The first line asks Emacs to run the <code>imenu-add-menubar-index</code>\nfunction each time <code>markdown-mode</code> is loaded. The second line asks\n<code>imenu</code> to keep the index up to date when files are modified, as\nsections may be added or removed.</p>\n\n<p>Another useful <code>imenu</code>-based tool is <a href=\"https://github.com/bmag/imenu-list\"><code>imenu-list</code></a>, a third-party\npackage which shows the current buffer&#8217;s <code>imenu</code> entries in a popup\nbuffer. You can <a href=\"https://melpa.org/#/imenu-list\">install it from MELPA</a>. I use <a href=\"https://github.com/jwiegley/use-package\">use-package</a>\nfor loading packages in my init file, so I configure it like this:</p>\n\n<!-- Generator: GNU source-highlight 3.1.7\nby Lorenzo Bettini\nhttp://www.lorenzobettini.it\nhttp://www.gnu.org/software/src-highlite -->\n<pre><code class=\"lisp\"><span class=\"cbracket\">(</span><span class=\"normal\">use-package imenu-list</span>\n<span class=\"normal\">  </span><span class=\"preproc\">:ensure</span><span class=\"normal\"> t</span>\n<span class=\"normal\">  </span><span class=\"preproc\">:bind</span><span class=\"normal\"> </span><span class=\"cbracket\">((</span><span class=\"string\">\"C-'\"</span><span class=\"normal\"> . imenu-list-smart-toggle</span><span class=\"cbracket\">))</span>\n<span class=\"normal\">  </span><span class=\"preproc\">:config</span>\n<span class=\"normal\">  </span><span class=\"cbracket\">(</span><span class=\"normal\">setq imenu-list-focus-after-activation t</span>\n<span class=\"normal\">        imenu-list-auto-resize nil</span><span class=\"cbracket\">))</span>\n</code></pre>\n\n\n<p>Then, when pressing <kbd>C-&#8216;</kbd>, a window appears on the right side\nshowing the heading hierarchy in the <code>*Ilist*</code> buffer. Pressing\n<kbd>C-&#8217;</kbd> again hides the window.</p>\n\n<figure>\n<img src=\"https://jblevins.org/log/markdown-imenu-list.png\" alt=\"imenu-list with Markdown Mode\" id=\"b\" title=\"Emacs window\" />\n<figcaption><code>imenu-list</code> with Markdown Mode</figcaption>\n</figure>\n\n<p>Of course, there are several keybindings in the <code>*Ilist*</code> buffer for\nnavigating between sections:</p>\n\n<ul>\n<li><kbd>RET</kbd> or mouse click - visit heading at point</li>\n<li><kbd>SPC</kbd> - visit heading, but keep focus on <em>Ilist</em> buffer</li>\n<li><kbd>TAB</kbd> or <kbd>f</kbd> - fold/unfold subtree</li>\n<li><kbd>n</kbd> and <kbd>p</kbd> - next/previous line</li>\n<li><kbd>g</kbd> - refresh entries</li>\n<li><kbd>q</kbd> - quit window and disable <code>imenu-list-minor-mode</code></li>\n</ul>\n\n<p>Unlike the <code>imenu</code> Index menu, the <code>*Ilist*</code> buffer is updated\nautomatically when Emacs is idle.</p>\n"
        },
        {
            "title": "Blink Shell for iOS",
            "date_published": "2017-08-10T04:38:00Z",
            "date_modified": "2017-08-10T05:06:00Z",
            "summary": "A brief review and guide to Blink Shell, an SSH and Mosh client for iOS.",
            "id": "tag:jblevins.org,2017:/log/blink-shell",
            "url": "https://jblevins.org/log/blink-shell",
            "author" : {
                "name" : "Jason Blevins",
                "url": "https://jblevins.org/"
            },
            "content_html": "<figure>\n<img src=\"https://jblevins.org/log/blink-shell-emacs-markdown.png\" alt=\"Markdown Mode in Emacs on iPad via Blink Shell\" id=\"img-emacs-markdown\" title=\"Blink Shell app window\" />\n<figcaption>Markdown Mode in Emacs on iPad via Blink Shell</figcaption>\n</figure>\n\n<p><a href=\"https://itunes.apple.com/us/app/blink-shell-mosh-ssh-terminal/id1156707581?mt=8&amp;uo=4&amp;at=11l5Vs\">Blink Shell</a> is a unique and powerful shell app for iOS for connecting to remote hosts. Although it is perhaps not quite as polished as <a href=\"https://itunes.apple.com/us/app/prompt-2/id917437289?mt=8&amp;uo=4&amp;at=11l5Vs\">Prompt</a>, my other favorite iOS <abbr class=\"abbr\" title=\"Secure SHell\">SSH</abbr> client, it has several features that Prompt does not.</p>\n\n<p>When you first start <a href=\"https://itunes.apple.com/us/app/blink-shell-mosh-ssh-terminal/id1156707581?mt=8&amp;uo=4&amp;at=11l5Vs\">Blink</a>, there are no buttons or menus, as one expects from an iOS app. Instead, you are greeted with a cryptic <code>blink&gt;</code> prompt in a black terminal with tiny white text.</p>\n\n<p>This might be a bit disconcerting, but after a brief moment of panic, you will probably start to experiment with some commands. If you type an invalid command, <a href=\"https://itunes.apple.com/us/app/blink-shell-mosh-ssh-terminal/id1156707581?mt=8&amp;uo=4&amp;at=11l5Vs\">Blink</a> will inform you that you can type &#8220;help&#8221; to see a list of commands:</p>\n\n<pre><code>Blink: v7.0.1. Jul 11 2017\n\nAvailable commands:\n  mosh: mosh client.\n  ssh: ssh client.\n  ssh-copy-id: Copy an identity to the server.\n  config: Configure Blink. Add keys, hosts, themes, etc...\n  help: Prints this.\n  exit: Close this shell.\n\nAvailable gestures and keyboard shortcuts:\n  two fingers tap or cmd+t: New shell.\n  two fingers swipe down or cmd+w: Close shell.\n  one finger swipe left/right or cmd+shift+[/]: Switch between shells.\n  cmd+alt+N: Switch to shell number N.\n  cmd+o: Switch to other screen (Airplay mode).\n  cmd+shift+o: Move current shell to other screen (Airplay mode).\n  cmd+,: Open config.\n  pinch: Change font size.\n</code></pre>\n\n<p>If you have a Smart or Bluetooth keyboard attached—and you probably should to get the most out of Blink—then instead of typing a command you might try holding <kbd>⌘</kbd> to see a list of keyboard shortcuts.</p>\n\n<figure>\n<img src=\"https://jblevins.org/log/blink-shell-keyboard-shortcuts.png\" alt=\"Blink Shell Keyboard Shortcuts\" id=\"img-keyboard-shortcuts\" title=\"Blink Shell app window\" />\n<figcaption>Blink Shell Keyboard Shortcuts</figcaption>\n</figure>\n\n<p>You can see that pressing <kbd>⌘,</kbd> is an alternative to typing <code>config</code> to enter the app settings. Note that this is the same keyboard shortcut for opening the preferences window in most macOS applications. You can also do normal shell things like <kbd>Control+L</kbd> to clear, <kbd>Control+D</kbd> to log out, and so on.</p>\n\n<h2>Configuring and Connecting to Remote Hosts</h2>\n\n<p>Blink works with both <abbr class=\"abbr\">SSH</abbr> and <a href=\"https://mosh.org\">Mosh</a>, but before connecting to a remote host you should first import your <abbr class=\"abbr\">SSH</abbr> login keys and set the default username for <abbr class=\"abbr\">SSH</abbr> connections.</p>\n\n<figure>\n<img src=\"https://jblevins.org/log/blink-shell-new-host.png\" alt=\"Configuring a New Host\" id=\"img-new-host\" title=\"Blink Shell app window\" />\n<figcaption>Configuring a New Host</figcaption>\n</figure>\n\n<p>You can issue the <code>ssh</code> command with the usual flags, such as <code>ssh -l &lt;username&gt; &lt;hostname&gt;</code>, but you&#8217;ll want to configure frequently-accessed hosts for convenience. Each host is given an alias, say <code>&lt;host&gt;</code> instead of <code>&lt;hostname&gt;</code>, so that once configured you can simply type <code>ssh &lt;host&gt;</code> or <code>mosh &lt;host&gt;</code> to connect with the pre-configured hostname, username, port, etc.</p>\n\n<figure>\n<img src=\"https://jblevins.org/log/blink-shell-host-alias.png\" alt=\"SSH Connection Using a Host Alias\" id=\"img-host-alias\" title=\"Blink Shell app window\" />\n<figcaption><abbr class=\"abbr\">SSH</abbr> Connection Using a Host Alias</figcaption>\n</figure>\n\n<h3><abbr class=\"abbr\">SSH</abbr></h3>\n\n<p>For basic <abbr class=\"abbr\">SSH</abbr> access to a host, you&#8217;ll need provide the following:</p>\n\n<ul>\n<li>Name for remote host entry. Note that this the name you&#8217;ll use to connect (e.g., <code>ssh &lt;name&gt;</code>) and it is case sensitive.</li>\n<li>IP address or hostname.</li>\n<li>Port used to access <abbr class=\"abbr\">SSH</abbr> (if different port 22).</li>\n<li>Your username.</li>\n<li>Either your password or an <abbr class=\"abbr\">SSH</abbr> key to use.</li>\n</ul>\n\n<h3>Mosh: Mobile Shell</h3>\n\n<p>Most readers probably use <abbr class=\"abbr\">SSH</abbr> already but may not have heard of <a href=\"https://mosh.org\">Mosh</a>, which is much newer. Mosh is designed to provide robust remote connections with roaming when your IP changes (e.g., switching from WiFi to cellular) and intermittent connectivity. Mosh piggy-backs on top of <abbr class=\"abbr\">SSH</abbr>, so if you already have remote <abbr class=\"abbr\">SSH</abbr> access you only need to install a user-level <code>mosh-server</code> binary to enable Mosh access.</p>\n\n<p>If you have installed Mosh on the remote host, then you may also need to provide the following:</p>\n\n<ul>\n<li>Path to <code>mosh-server</code> binary (e.g., <code>/usr/local/bin/mosh-server</code>).<a href=\"#fn-blink-shell-1\" id=\"fnref-blink-shell-1\" title=\"See footnote 1\" class=\"footnote\">1</a></li>\n<li>Optional UDP port (e.g., if you need to use a custom port to get through a firewall). By default, Mosh uses the first available UDP port between 60001 and 60999.</li>\n<li>Optional command to run on startup (e.g., <code>screen -d -R</code> or <code>tmux attach -t default</code>).</li>\n</ul>\n\n<p>If you use <a href=\"https://brew.sh\">Homebrew</a> on macOS, installing Mosh is as simple as this:</p>\n\n<pre><code>brew install mobile-shell\n</code></pre>\n\n<h2>Customizing Modifier Keys: Caps Lock as Control</h2>\n\n<p>One of Blink&#8217;s most powerful features is the ability to customize the keyboard modifier keys. In fact, the reason I found Blink to begin with is it&#8217;s ability to use Caps Lock as a Control key (although there is an important caveat, discussed below).</p>\n\n<figure>\n<img src=\"https://jblevins.org/log/blink-shell-modifier-keys.png\" alt=\"Customizable Keyboard Modifier Keys\" id=\"img-modifier-keys\" title=\"Blink Shell app window\" />\n<figcaption>Customizable Keyboard Modifier Keys</figcaption>\n</figure>\n\n<p>If you set Caps Lock to be a Control key, there is a very important caveat: <strong>Caps Lock may be in an unexpected state when you leave and re-enter blink.</strong> This is due to the limitations of iOS development. There is <a href=\"https://github.com/blinksh/blink/issues/4\">a GitHub issue devoted to this problem</a> if you&#8217;d like to read more about the technical details.</p>\n\n<p>To summarize the issue, you can think in terms of two distinct Caps Lock states: one global in scope and one local. There is the iOS system-wide Caps Lock state and then the local state within the Blink app. If you are using Caps Lock as the control key, each time you press Caps Lock the system state is toggled but the Blink Caps Lock state remains off. The issue is that when you leave the Blink app, other apps honor the system state, which could be either on or off depending on whether you&#8217;ve pressed Caps Lock an even or odd number of times during your Blink session.</p>\n\n<p>If you have an Apple wireless keyboard with a Caps Lock light, the light follows the system state every time you use Caps Lock in Blink, so this can at least help you track the state. Overall, I&#8217;ve found that the annoyance of this issue is small in comparison to the convenience of using Caps Lock as Control in Emacs and for other shell commands.</p>\n\n<p>Another caveat is the small delay between when Caps Lock is pressed and when it is registered. When I quickly type control sequences as fast as I typically do—expecting no delay—the Control key part is not recognized. For example, to send <code>^C</code> you&#8217;ll need to press <kbd>Caps Lock</kbd> and hold it for a fraction of a second longer than you typically might before pressing <kbd>C</kbd>. I don&#8217;t mean to overstate this issue, but I find that I do have to be more deliberate about entering control sequences.</p>\n\n<h2>Customization</h2>\n\n<p>There is a <a href=\"https://github.com/BlinkSh/themes\">Blink Shell Theme Gallery</a> with a huge selection of themes which you can access in Settings &gt; Appearance &gt; Add a new theme.</p>\n\n<figure>\n<img src=\"https://jblevins.org/log/blink-shell-themes.png\" alt=\"Appearance Settings\" id=\"img-themes\" title=\"Blink Shell app window\" />\n<figcaption>Appearance Settings</figcaption>\n</figure>\n\n<p>In the screenshot, I&#8217;m enjoying the <a href=\"https://github.com/tonsky/FiraCode\">Fira Code font</a>—the same font I use in Emacs, yes, a monospaced font with programming ligatures—with the <a href=\"https://raw.githubusercontent.com/blinksh/themes/master/themes/Arthur.js\">Arthur</a> theme for Blink.</p>\n\n<figure>\n<img src=\"https://jblevins.org/log/blink-shell-keyboard-shortcuts.png\" alt=\"Customizable Keyboard Shortcuts\" id=\"img-keyboard-shortcuts\" title=\"Blink Shell app window\" />\n<figcaption>Customizable Keyboard Shortcuts</figcaption>\n</figure>\n\n<p>The keyboard shortcuts are also customizable. This includes the keys for switching to the previous and next shells, creating a new shell, closing a shell, and configuring Blink.</p>\n\n<h2>Getting Blink Shell</h2>\n\n<p>You can <a href=\"https://itunes.apple.com/us/app/blink-shell-mosh-ssh-terminal/id1156707581?mt=8&amp;uo=4&amp;at=11l5Vs\">purchase the Blink Shell app on the App Store</a>. Blink is also open source, so you can take a look at the <a href=\"https://github.com/blinksh/blink\">source code on GitHub</a>.<a href=\"#fn-blink-shell-2\" id=\"fnref-blink-shell-2\" title=\"See footnote 2\" class=\"footnote\">2</a></p>\n\n<div class=\"footnotes\">\n<hr />\n<ol>\n\n<li id=\"fn-blink-shell-1\">\n<p>This is the &#8220;Server&#8221; setting, which I found to be confusing at first. This field is not asking for a hostname (again), it is provided in case your <code>mosh-server</code> binary is not in your default <code>PATH</code>. <a href=\"#fnref-blink-shell-1\" title=\"Return to article\" class=\"reversefootnote\">&#8617;</a></p>\n</li>\n\n<li id=\"fn-blink-shell-2\">\n<p>If you&#8217;re looking at the source, you probably also want to see <a href=\"https://github.com/holzschu/blink\">Nicolas Holzschuch&#8217;s branch</a>, where he has added several common Unix commands for file management (<code>ls</code>, <code>cp</code>, <code>rm</code>, <code>mkdir</code>, etc.), text processing (<code>cat</code>, <code>grep</code>, <code>wc</code>), file transfer (<code>curl</code>, <code>scp</code>, <code>sftp</code>), and so on. <a href=\"#fnref-blink-shell-2\" title=\"Return to article\" class=\"reversefootnote\">&#8617;</a></p>\n</li>\n\n</ol>\n</div>\n\n"
        },
        {
            "title": "JSON Feed",
            "date_published": "2017-08-06T12:20:00Z",
            "date_modified": "2017-08-06T13:04:00Z",
            "summary": "This site now produces a JSON feed.",
            "id": "tag:jblevins.org,2017:/log/json-feed",
            "url": "https://jblevins.org/log/json-feed",
            "author" : {
                "name" : "Jason Blevins",
                "url": "https://jblevins.org/"
            },
            "content_html": "<p>Ten years ago, <a href=\"https://jblevins.org/log/feed-upgrades\">I added an Atom feed to this website</a>. Before\nthat, there was an RSS feed&#8212;version 1&#8212;and for a while I had an RSS 2\nfeed. But in more recent years I disabled RSS and have used the Atom\nfeed exclusively.</p>\n\n<p>The reality for Atom is that, not only is it difficult to write valid\n<abbr class=\"abbr\" title=\"Extensible Markup Language\">XML</abbr> by hand, but people also have trouble writing programs to generate\nvalid <abbr class=\"abbr\">XML</abbr>. Once a feed is available, it needs to be parsed. Even\nparsing <em>valid</em> Atom feeds is no simple task, but the implementation\nchallenges mean that there are also a bunch of broken Atom feeds in\nthe wild that feed reader writers have to deal with.</p>\n\n<p>Enter <a href=\"https://jsonfeed.org\">JSON Feed</a>, written by two individuals with a lot of\ncollective feed-processing experience, with the stated goal of being\n&#8220;simpler to read and write&#8221; and &#8220;less prone to bugs.&#8221; It has been\nadopted widely already, both by publishers and feed readers.</p>\n\n<p>This is all a long way of announcing that there is now\na <a href=\"https://jblevins.org/index.json\">JSON Feed for this site</a> and you can <a href=\"https://jsonfeedreader.com/validate/https://jblevins.org/index.json\">validate it here</a>.</p>\n"
        },
        {
            "title": "File Local Variables in Emacs and Markdown Mode",
            "date_published": "2017-08-02T19:48:00Z",
            "date_modified": "2017-08-02T19:48:00Z",
            "summary": "How to use file local variables in Emacs generally, and specifically in Markdown Mode.",
            "id": "tag:jblevins.org,2017:/log/file-local-variables",
            "url": "https://jblevins.org/log/file-local-variables",
            "author" : {
                "name" : "Jason Blevins",
                "url": "https://jblevins.org/"
            },
            "content_html": "<p>Emacs allows one to <a href=\"https://www.gnu.org/software/emacs/manual/html_node/emacs/File-Variables.html\">specify values for variables inside files\nthemselves</a>. For example, you can specify which mode Emacs should\nuse to edit a particular file by setting a special <code>mode</code> variable.\nYou can specify such file local variables at either the beginning or\nend of a file.</p>\n\n<p>Perhaps you have seen lines like the following at the beginning of\nscripts. This particular line tells Emacs that you&#8217;d like to open\nthis file using <code>cperl-mode</code>:</p>\n\n<!-- Generator: GNU source-highlight 3.1.7\nby Lorenzo Bettini\nhttp://www.lorenzobettini.it\nhttp://www.gnu.org/software/src-highlite -->\n<pre><code class=\"perl\"><span class=\"comment\">#!/usr/bin/perl       -*- mode: cperl -*-</span>\n</code></pre>\n\n\n<p>The <code>mode</code> variable is special; it&#8217;s not an actual variable name in\nEmacs. Another special variable is <code>coding</code>, which specifies the\ncharacter coding system for this file (e.g., <code>utf-8</code> or <code>latin-1</code>). A\nthird special variable is <code>eval</code>, which specifies a Lisp expression to\nevaluate. Multiple <code>eval</code> declarations can be given in the same file.</p>\n\n<p>Among the special variables, <code>mode</code> is the most special of all and so\nthe <code>mode:</code> declaration can even be omitted:</p>\n\n<!-- Generator: GNU source-highlight 3.1.7\nby Lorenzo Bettini\nhttp://www.lorenzobettini.it\nhttp://www.gnu.org/software/src-highlite -->\n<pre><code class=\"perl\"><span class=\"comment\">#!/usr/bin/perl       -*-cperl-*-</span>\n</code></pre>\n\n\n<p>File variable definitions should appear in a comment, and the comment\nsyntax used by <a href=\"/projects/markdown-mode/\">Markdown Mode</a> is the same as for <abbr class=\"abbr\" title=\"Hypertext Markup Language\">HTML</abbr> comments:\n<code>&lt;!-- comment --&gt;</code>. So, to specify a local variable at the beginning\nof a file you could add the following to the first line (which would\nresult in Emacs loading the file in <code>gfm-mode</code> instead of, say,\n<code>markdown-mode</code>):</p>\n\n<!-- Generator: GNU source-highlight 3.1.7\nby Lorenzo Bettini\nhttp://www.lorenzobettini.it\nhttp://www.gnu.org/software/src-highlite -->\n<pre><code class=\"html\"><span class=\"comment\">&lt;!-- -*- mode: gfm -*- --&gt;</span>\n</code></pre>\n\n\n<p>To specify multiple variables, separate them by semicolons:</p>\n\n<!-- Generator: GNU source-highlight 3.1.7\nby Lorenzo Bettini\nhttp://www.lorenzobettini.it\nhttp://www.gnu.org/software/src-highlite -->\n<pre><code class=\"html\"><span class=\"comment\">&lt;!-- -*- mode: markdown; coding: utf-8 -*- --&gt;</span>\n</code></pre>\n\n\n<p>Alternatively, you can insert a local variable block at the <em>end</em> of a\nfile. Such a block opens with a <code>Local Variables:</code> declaration and\ncloses with <code>End:</code>, like so:</p>\n\n<!-- Generator: GNU source-highlight 3.1.7\nby Lorenzo Bettini\nhttp://www.lorenzobettini.it\nhttp://www.gnu.org/software/src-highlite -->\n<pre><code class=\"html\"><span class=\"comment\">&lt;!-- Local Variables: --&gt;</span>\n<span class=\"comment\">&lt;!-- markdown-enable-math: t --&gt;</span>\n<span class=\"comment\">&lt;!-- End: --&gt;</span>\n</code></pre>\n\n\n<p>It&#8217;s not necessary that each line is a self-contained comment, so the\nfollowing also works and it is a personal preference which form you\nuse:</p>\n\n<!-- Generator: GNU source-highlight 3.1.7\nby Lorenzo Bettini\nhttp://www.lorenzobettini.it\nhttp://www.gnu.org/software/src-highlite -->\n<pre><code class=\"html\"><span class=\"comment\">&lt;!--</span>\n<span class=\"comment\">Local Variables:</span>\n<span class=\"comment\">markdown-enable-math: t</span>\n<span class=\"comment\">End:</span>\n<span class=\"comment\">--&gt;</span>\n</code></pre>\n\n\n<p>One useful scenario for using file local variables with Markdown files\ninclude toggling special modes, like setting <code>markdown-enable-math</code> in\nthe previous example. If you mostly have math mode disabled (so that\n<code>$</code> is not a special character), but sometimes want to enable it,\nusing a file-local variable as above is a great way to handle this\ncase.</p>\n\n<p>Other example uses are setting the <code>fill-column</code> in a particular file,\nor declaring that spaces should be used for indentation instead of\ntabs:</p>\n\n<!-- Generator: GNU source-highlight 3.1.7\nby Lorenzo Bettini\nhttp://www.lorenzobettini.it\nhttp://www.gnu.org/software/src-highlite -->\n<pre><code class=\"html\"><span class=\"comment\">&lt;!--</span>\n<span class=\"comment\">Local Variables:</span>\n<span class=\"comment\">fill-column: 70</span>\n<span class=\"comment\">indent-tabs-mode: nil</span>\n<span class=\"comment\">End:</span>\n<span class=\"comment\">--&gt;</span>\n</code></pre>\n\n"
        },
        {
            "title": "Markdown Mode 2.2 Release Notes",
            "date_published": "2017-05-27T00:41:00Z",
            "date_modified": "2017-06-07T17:46:00Z",
            "summary": "A summary of new features and bug fixes in Markdown Mode 2.2.",
            "id": "tag:jblevins.org,2017:/projects/markdown-mode/rev-2-2",
            "url": "https://jblevins.org/projects/markdown-mode/rev-2-2",
            "author" : {
                "name" : "Jason Blevins",
                "url": "https://jblevins.org/"
            },
            "content_html": "<!--\nMarkdown Mode for Emacs version 2.2 release notes:\nhttps://jblevins.org/projects/markdown-mode/rev-2-2\n-->\n\n<p><a href=\"https://jblevins.org/projects/markdown-mode/\">Markdown Mode for Emacs</a> version 2.2 was released on <strong>May 26,\n2017</strong>. This is a major new stable release and all users are\nencouraged to upgrade. The many new features and bug fixes included\nare described below. See the <a href=\"https://github.com/jrblevin/markdown-mode\">Git repository</a> or the\ncommit-specific links below for a detailed history of changes. Thanks\nto everyone who submitted bug reports, feature suggestions, and\nespecially patches.</p>\n\n<p><a href=\"https://leanpub.com/markdown-mode\"><img src=\"https://jblevins.org/projects/markdown-mode/guide-v2.2.png\" alt=\"Guide to Markdown Mode for Emacs\" id=\"guide-cover\" style=\"height:350px;width=252px\" /></a>\nAdditionally, to celebrate Markdown Mode&#8217;s 10th birthday I am writing\na <a href=\"https://leanpub.com/markdown-mode\">Guide to Markdown Mode for Emacs</a>. This ebook will\nsupplement the existing documentation with in-depth discussion of\nadvanced movement and editing commands, configuration examples, tips\nand tricks, and a survey of other packages that work with Markdown\nMode. It will be <a href=\"https://leanpub.com/markdown-mode\">published at Leanpub</a> and possibly available\nthrough other channels. Please visit the <a href=\"https://leanpub.com/markdown-mode\">book homepage</a> to\nsign up to be notified when it is ready and to help determine the\nprice.</p>\n\n<h2>General</h2>\n\n<ul>\n<li>Menubar reorganization. Grouped related actions together, added\n missing commands, and added several toggle options to the menu.</li>\n<li>Use <code>toggle</code> menu style for macOS compatibility.</li>\n<li>Remove autoload .text files. Thanks to Steve Purcell.</li>\n<li>Don&#8217;t accidentally override user entries in <code>auto-mode-alist</code>.</li>\n<li>Customizable preview window split direction via\n <code>markdown-split-window-direction</code>.</li>\n</ul>\n\n<h2>Element Insertion and Editing</h2>\n\n<ul>\n<li>Now use <kbd>C-c C-j</kbd> for inserting list items, like AUCTeX and\n similar to other programming modes. Since <kbd>C-c C-j</kbd> was\n used for <code>markdown-jump</code> (for moving between reference link/footnote\n markers and their definitions), it has been changed to <kbd>C-c\n C-l</kbd> (think &#8220;leap&#8221; or &#8220;loop&#8221; instead of jump). It&#8217;s also close\n to <kbd>C-c C-o</kbd> (used for opening links).</li>\n<li>Insertion of <code>&lt;kbd&gt;</code> tags with <kbd>C-c C-s k</kbd> or\n <code>markdown-insert-kbd</code>.</li>\n<li>Complete heading markup when point is on an setext heading and\n <code>markdown-insert-header-dwim</code> is invoked (<kbd>C-c C-t h</kbd>).</li>\n<li>Fix <code>markdown-cycle</code> issue with heading-like strings in code blocks.\n Thanks to Syohei Yoshida.</li>\n<li>Fix to honor location setting when inserting reference definitions.</li>\n<li>Don&#8217;t insert empty title strings for links. Thanks to Sebastian\n Wiesner for the patch.</li>\n<li>Inserting a reference link no longer causes an &#8220;args out of range&#8221;\n commit error when the existing reference label is a single commit\n character.</li>\n<li>Fix point position after inserting asymmetric atx headings.</li>\n<li>Backspace now always deletes characters if a region is specified.</li>\n</ul>\n\n<h2>Indentation and Filling</h2>\n\n<ul>\n<li>Set own <code>adaptive-fill-regexp</code> so that <code>fill-paragraph</code> works for\n list items. Thanks to Syohei Yoshida for the patch.</li>\n<li>Maintain cursor position when indenting instead of moving to the\n beginning of the line. Thanks to Isaac Hodes.</li>\n<li>Ignore heading lines in <code>fill-paragraph</code>. Thanks to Syohei Yoshida.</li>\n<li>Fixed an issue where fill paragraph wouldn&#8217;t work following unclosed\n left square brackets.</li>\n<li><code>fill-paragraph</code> now respects paragraph boundaries within\n blockquotes.</li>\n<li>Prevent <code>fill-paragraph</code> from filling lines in code blocks.</li>\n<li>Added option to automatically continue lists when <code>RET</code> is pressed.\n <code>markdown-indent-on-enter</code> now has three settings</li>\n</ul>\n\n<h2>Movement Functions</h2>\n\n<ul>\n<li>Fix moving same level heading over code block issue. Thanks to\n Syohei Yoshida.</li>\n<li>Set mark when calling <code>markdown-up-heading</code>.</li>\n<li>Add smart Markdown block navigation commands <kbd>M-{</kbd>\n and <kbd>M-}</kbd>. These replace the regular-expression-based\n &#8220;paragraph&#8221; movement commands provided by Emacs, which do not\n recognize Markdown syntax (e.g., headings inside of code blocks).\n Also use <kbd>M-h</kbd> for marking a block and <kbd>C-x n b</kbd>\n to narrow to a block.</li>\n</ul>\n\n<h2>Font Lock</h2>\n\n<ul>\n<li>Variable-height headings via <code>markdown-header-scaling</code>.</li>\n<li>Improved font locking after empty <abbr class=\"acronym\" title=\"GitHub Flavored Markdown\">GFM</abbr> code block insertion.</li>\n<li>Fix italic highlighting issue when each line or both lines are list.</li>\n<li>Handle false positive italics across list items.</li>\n<li>Respect <code>font-lock-mode</code> being nil.</li>\n<li>Treat polymode blocks as code blocks when parsing the buffer.</li>\n<li>Add <abbr class=\"acronym\" title=\"YAML Ain't Markup Language\">YAML</abbr> metadata parsing. Also allow multiple Pandoc metadata,\n with tests. Thanks to Danny McClanahan.</li>\n<li>Improved fenced code block parsing. Thanks to Danny McClanahan.</li>\n<li>Move point at least 1 char in <code>markdown-match-propertized-text</code> to\n avoid possible infinite loop in font-lock. Thanks to Vitalie Spinu.</li>\n<li>Fixed an issue where comments of the form <code>&lt;!-- &gt; comment --&gt;</code> were not\n correctly identified.</li>\n<li>Require whitespace atx heading hashmarks, as required by the\n original atx specification (but not enforced by Markdown.pl). The\n benefit is that it prevents false positives for #hashtags and things\n like &#8220;Engine #1&#8221; when lines wrap.</li>\n<li>Prevent spurious bold fontification. Thanks to Kévin Le Gouguec.</li>\n<li>Fix spurious italics from underscores in URLs.</li>\n<li>Support basic TOML metadata. Thanks to Jorge Israel Peña.</li>\n<li>Keep metadata visible when cycling visibility.</li>\n<li>Prohibit setext heading text from starting with hyphens, spaces or\n tabs, so that there is no ambiguity between setext headings and\n in-progress lists.</li>\n<li>Fix <code>markdown-header-face</code> inherit from nil error, e.g., when\n exporting <abbr class=\"abbr\" title=\"Hypertext Markup Language\">HTML</abbr> from an Org mode file containing a Markdown source\n block. Thanks to Moogen Tian for a patch.</li>\n<li>Only call <code>font-lock-refresh-defaults</code> if <code>font-lock-mode</code> is\n non-nil to prevent it from being turned on when disabled by user.\n Thanks to Tom May for the patch.</li>\n<li>Fixed an issue where, if there is special markup at the end of the\n buffer, deleting a character backward would cause the font-lock\n faces to disappear.</li>\n<li>Fixed font lock for links with URLs containing parentheses.</li>\n</ul>\n\n<h2>Imenu</h2>\n\n<ul>\n<li>Added a <code>markdown-nested-imenu-heading-index</code> as a customizable\n option. It may be disabled to instead generate a flat imenu index.\n A flat index may be more useful for keyboard navigation and\n auto-completion, while a nested index is probably more useful for\n menus and for use with packages such as <code>imenu-list</code>.</li>\n<li>Don&#8217;t list heading-like lines in code blocks. Thanks to Syohei\n Yoshida.</li>\n</ul>\n\n<h2>Fenced Code Blocks</h2>\n\n<ul>\n<li>Add used language names to front of list of known languages.</li>\n<li>Fix default language presented when inserting <abbr class=\"acronym\">GFM</abbr> code blocks.\n Thanks to Conal Elliot for a patch.</li>\n<li>Match fenced code blocks with language and info strings.</li>\n</ul>\n\n<h2>Preview &amp; Export</h2>\n\n<ul>\n<li>Suppress minibuffer output when generated <abbr class=\"abbr\">HTML</abbr> is small. Thanks to\n Syohei Yoshida.</li>\n<li>Make live-preview mode follow min or max point. Thanks to Danny\n McClanahan.</li>\n</ul>\n\n<h2>Images</h2>\n\n<ul>\n<li>Implement inline image previews via <code>markdown-toggle-inline-images</code>\n and <kbd>C-c C-i C-t</kbd>. Thanks to Syohei Yoshida.</li>\n</ul>\n\n<h2>Links</h2>\n\n<ul>\n<li>Change the behavior of <kbd>C-c C-o</kbd>\n (<code>markdown-follow-link-at-point</code>) so that if a link is a complete\n <abbr class=\"abbr\" title=\"Uniform Resource Locator\">URL</abbr>, it will open in a browser. Otherwise, open it with <code>find-file</code>\n after stripping anchors and/or query strings.</li>\n</ul>\n\n<h2>Lists</h2>\n\n<ul>\n<li>Basic font lock and filling for definition lists. As a side effect,\n list item navigation and movement should also work.</li>\n<li>Fix list item insertion on ordered lists with hash marks (Pandoc\n &#8220;fancy lists&#8221;).</li>\n<li>Add command for toggling <abbr class=\"acronym\">GFM</abbr> task list items via <kbd>C-c C-c\n C-x</kbd> (<code>markdown-toggle-gfm-checkbox</code>).</li>\n</ul>\n\n<h2>Wiki Links</h2>\n\n<ul>\n<li>Ability to toggle wiki link support via a new custom variable\n <code>markdown-enable-wiki-links</code>. This may be set in a file local\n variable. Also added function <code>markdown-toggle-wiki-links</code> and a\n menu item.</li>\n<li>Make font lock for missing wiki links optional and disabled by\n default. Add new custom variable\n <code>markdown-wiki-link-fontify-missing</code> to control this behavior.</li>\n<li>Added <code>markdown-wiki-link-search-subdirectories</code> to enable searching\n for wiki link files in subdirectories.</li>\n</ul>\n\n<h2>Math Support</h2>\n\n<ul>\n<li>The <em>function</em> <code>markdown-enable-math</code> has been made obsolete and\n renamed to <code>markdown-toggle-math</code>. When called without an argument,\n the result is to toggle this extension rather than enable it. This\n is motivated by the behavior of minor mode functions.</li>\n<li>Improve matching of multiple math blocks with non-math text in between.\n Thanks to Dave Kleinschmidt for a patch.</li>\n<li>Fix incorrect matching of italic text due to underscores in math mode.\n Thanks also to Dave Kleinschmidt.</li>\n</ul>\n\n<h2>Other Improvements &amp; Fixes</h2>\n\n<ul>\n<li>Fix possible infinite loop in <code>markdown-cleanup-list-numbers</code>.\n Thanks to Danny McClanahan.</li>\n<li>Fix an args-out-of-range error due to the syntax-propertize function\n returning point which is larger than <code>point-max</code>. Thanks to Syohei\n Yoshida.</li>\n<li>Respect narrowed region in <code>markdown-find-previous-prop</code>. Thanks to\n Vitalie Spinu.</li>\n<li>Fix an issue where buffers could be marked as modified when no\n modifications were made.</li>\n<li>Markdown Mode is now automatically tested against Emacs 24.1&#8211;24.5\n and 25.1&#8211;25.2.</li>\n</ul>\n"
        },
        {
            "title": "Scripting and Compiling Swift on the Command Line",
            "date_published": "2017-04-05T03:38:00Z",
            "date_modified": "2017-04-05T03:38:00Z",
            "summary": "Examples of using Swift for shell scripts and compiling Swift code on the command line.",
            "id": "tag:jblevins.org,2017:log/swift",
            "url": "https://jblevins.org/log/swift",
            "author" : {
                "name" : "Jason Blevins",
                "url": "https://jblevins.org/"
            },
            "content_html": "<p>Apple&#8217;s Swift programming language is most widely used for iOS and macOS development in Xcode, however, it can also be used in a manner more like a traditional Unix shell script or even compiled into an executable using the command line. Below, I give some examples of these alternative uses.</p>\n\n<p>For scripting, like other shell scripts, the first line of your script&#8217;s <code>.swift</code> file should be a &#8220;shebang&#8221;, which points to the <code>swift</code> executable. Following that, you can write Swift code as usual:</p>\n\n<pre><code class=\"swift\">#!/usr/bin/swift\n\nfunc fibonacci(_ n: Int) -&gt; Int {\n    if n &lt;= 2 {\n        return 1\n    } else {\n        return fibonacci(n - 1) + fibonacci(n - 2)\n    }\n}\n\nprint(fibonacci(10))\n</code></pre>\n\n<p>You can make the script executable and run it as you would any other shell script:</p>\n\n<pre><code>% chmod +x fibonacci.swift\n% ./fibonacci.swift\n55\n</code></pre>\n\n<p>Printing the 10th integer in the Fibonacci sequence is hard coded above, but what if you want to print other values? We can modify the script to take a single command line argument, the index of the Fibonacci number you want to print. Replace the last line above with the following:</p>\n\n<pre><code class=\"swift\">let arg = CommandLine.arguments[1]  // Store first argument.\nif let n = Int(arg) {               // If it converts to Int,\n    print(fibonacci(n))             // print fibonacci(n).\n} else {                            // Otherwise,\n    print(&quot;Usage: fibonacci &lt;n&gt;&quot;)   // print usage and exit.\n}\n</code></pre>\n\n<p>Then invoke the script as follows:</p>\n\n<pre><code>% ./fibonacci.swift 36\n14930352\n% ./fibonacci.swift junk\nUsage: fibonacci &lt;n&gt;\n</code></pre>\n\n<p>As with modern scripting languages such as Python and Ruby, you can also run Swift interactively (with Xcode 6.1 and later). The interactive command-line interface is called the <a href=\"https://developer.apple.com/swift/blog/?id=18\">Swift Read Eval Print Loop (REPL)</a>:</p>\n\n<pre><code>% swift\nWelcome to Apple Swift version 3.1 (swiftlang-802.0.48 clang-802.0.48). Type :help for assistance.\n  1&gt; 1 + 2\n$R0: Int = 3\n  2&gt; print(&quot;hello, world&quot;)\nhello, world\n</code></pre>\n\n<p>Finally, you can also compile Swift code and run it as a binary:</p>\n\n<pre><code>% swiftc -o fibonacci fibonacci.swift\n% ./fibonacci 7\n13\n</code></pre>\n\n<p>As with C and other languages, you can compile multiple Swift files:</p>\n\n<pre><code>% swiftc first.swift second.swift third.swift -o program\n</code></pre>\n\n<p><em>Note:</em> These instructions are valid on macOS Sierra with Xcode 8.3 and Swift 3.1, but as the Swift language evolves they may change.</p>\n"
        }
    ]
}
