Thicket data repository for the EEG
1{
2 "id": "https://mort.io/blog/mess-with-my-keyboard/",
3 "title": "Spring Loading Karabiner in the Autumn",
4 "link": "https://mort.io/blog/mess-with-my-keyboard/",
5 "updated": "2017-10-30T00:00:00",
6 "published": "2017-10-30T00:00:00",
7 "summary": "<p>I recently took the plunge and upgraded my OS X. Not to vN of <em>Sierra</em> as I’d\nhoped, but to v0 <em>High Sierra</em>– the perils of waiting too long…</p>\n<p>Unfortunately, this toasted<a href=\"https://mort.io/blog/mess-with-my-keyboard/#1\">1</a> my carefully curated keyboard remappings as\n<a href=\"https://pqrs.org/osx/karabiner/\">Karabiner</a> used a kernel extension, for which everything changed. All was not\nlost however, as the rewrite to support Sierra/High Sierra was well underway. Or\nso I thought until I realised that the configuration file had changed from XML\nto JSON. And so my configuration journey began. (But it all ends well, so that’s\ngood.)</p>\n<div>1\n<p>To be honest, I suspect even the <em>Sierra</em> upgrade would’ve done this.</p>\n</div>\n<h2><a href=\"https://mort.io/blog/mess-with-my-keyboard/#controlling-the-config\">Controlling the config</a></h2>\n<p>The first thing was to get the new configuration matters under control. I did\nthis per the documentation, symlinking the config subdirectory from my\n<code>rc-files</code> repo:</p>\n<pre><code><span><span><span>cd</span></span><span> <span><span>~</span></span>/.config/</span>\n</span><span><span><span>mv</span></span><span> karabiner/ <span><span>~</span></span>/rc-files/</span>\n</span><span><span><span>ln</span></span><span><span><span> -</span>s</span> <span><span>~</span></span>/rc-files/karabiner</span>\n</span></code></pre>\n<h2><a href=\"https://mort.io/blog/mess-with-my-keyboard/#internal-apple-keyboard\">Internal Apple keyboard</a></h2>\n<p>In the interests of keeping all configuration in one place (but see below), I\ndecided to do this via a set of <a href=\"https://github.com/mor1/rc-karabiner/blob/master/assets/complex_modifications/mort-keymap.json\">complex modifications</a>. In summary this\nmeant:</p>\n<ul>\n<li>swap <code>(caps_lock)</code> and <code>(control)</code>:</li>\n</ul>\n<pre><code><span> <span><span>{</span>\n</span></span><span><span> </span><span><span><span>"</span>description<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>mort: caps_lock -> ctrl<span>"</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>"</span>manipulators<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span><span><span><span> <span><span>{</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>type<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>basic<span>"</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>from<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>caps_lock<span>"</span></span><span>,</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>"</span>modifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span></span><span><span><span>"</span>optional<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>"</span>any<span>"</span></span><span>]</span></span><span>}</span></span>\n</span></span></span></span></span><span><span><span><span><span> <span>}</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>to<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span></span></span><span><span><span><span><span> <span><span>{</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>left_control<span>"</span></span>\n</span></span></span></span></span></span><span><span><span><span><span><span> <span>}</span></span>\n</span></span></span></span></span><span><span><span><span><span> <span>]</span></span>\n</span></span></span></span><span><span><span><span> <span>}</span></span>\n</span></span></span><span><span><span> <span>]</span></span>\n</span></span><span><span> <span>}</span></span>,\n</span></code></pre>\n<ul>\n<li>swap <code>\"</code> (glyph <code>S-'</code>) with <code>@</code> (glyph <code>S-2</code>):</li>\n</ul>\n<pre><code><span> <span><span>{</span>\n</span></span><span><span> </span><span><span><span>"</span>description<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>mort: S-' (<span>\\"</span>) <-> S-2 (@)<span>"</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>"</span>manipulators<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span><span><span><span> <span><span>{</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>type<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>basic<span>"</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>from<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>quote<span>"</span></span><span>,</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>"</span>modifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span></span><span><span><span>"</span>mandatory<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>"</span>shift<span>"</span></span><span>]</span></span><span>}</span></span>\n</span></span></span></span></span><span><span><span><span><span> <span>}</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>to<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span></span></span><span><span><span><span><span> <span><span>{</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>2<span>"</span></span><span>,</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>modifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>"</span>shift<span>"</span></span><span>]</span></span><span>}</span></span>\n</span></span></span></span></span><span><span><span><span><span> <span>]</span></span>\n</span></span></span></span><span><span><span><span> <span>}</span></span><span>,</span>\n</span></span></span><span><span><span> <span><span>{</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>type<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>basic<span>"</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>from<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>2<span>"</span></span><span>,</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>"</span>modifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span></span><span><span><span>"</span>mandatory<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>"</span>shift<span>"</span></span><span>]</span></span><span>}</span></span>\n</span></span></span></span></span><span><span><span><span><span> <span>}</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>to<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span></span></span><span><span><span><span><span> <span><span>{</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>quote<span>"</span></span><span>,</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>modifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>"</span>shift<span>"</span></span><span>]</span></span>\n</span></span></span></span></span></span><span><span><span><span><span><span> <span>}</span></span>\n</span></span></span></span></span><span><span><span><span><span> <span>]</span></span>\n</span></span></span></span><span><span><span><span> <span>}</span></span>\n</span></span></span><span><span><span> <span>]</span></span>\n</span></span><span><span> <span>}</span></span>,\n</span></code></pre>\n<ul>\n<li>map <code>(backslash)</code> (glyph <code>\\</code>) to <code>#</code>, and <code>S-\\</code> (glyph <code>|</code>) to <code>~</code>:</li>\n</ul>\n<pre><code><span> <span><span>{</span>\n</span></span><span><span> </span><span><span><span>"</span>description<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>mort: <span>\\\\</span> -> #; S-<span>\\\\</span> (|) -> ~<span>"</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>"</span>manipulators<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span><span><span><span> <span><span>{</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>type<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>basic<span>"</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>from<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>backslash<span>"</span></span>\n</span></span></span></span></span><span><span><span><span><span> <span>}</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>to<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span></span></span><span><span><span><span><span> <span><span>{</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>3<span>"</span></span><span>,</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>modifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>"</span>option<span>"</span></span><span>]</span></span>\n</span></span></span></span></span></span><span><span><span><span><span><span> <span>}</span></span>\n</span></span></span></span></span><span><span><span><span><span> <span>]</span></span>\n</span></span></span></span><span><span><span><span> <span>}</span></span><span>,</span>\n</span></span></span><span><span><span> <span><span>{</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>type<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>basic<span>"</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>from<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>backslash<span>"</span></span><span>,</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>"</span>modifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span></span><span><span><span>"</span>mandatory<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>"</span>shift<span>"</span></span><span>]</span></span><span>}</span></span>\n</span></span></span></span></span><span><span><span><span><span> <span>}</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>to<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span></span></span><span><span><span><span><span> <span><span>{</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>grave_accent_and_tilde<span>"</span></span><span>,</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>modifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>"</span>shift<span>"</span></span><span>]</span></span>\n</span></span></span></span></span></span><span><span><span><span><span><span> <span>}</span></span>\n</span></span></span></span></span><span><span><span><span><span> <span>]</span></span>\n</span></span></span></span><span><span><span><span> <span>}</span></span><span>,</span>\n</span></span></span><span><span><span><span>.</span><span>.</span><span>.</span>\n</span></span></span><span><span><span> <span>}</span>\n</span></span></span></code></pre>\n<ul>\n<li>map <code>(non_us_backslash)</code> (glyph <code>§</code>) to <code>`</code> and <code>S-(non_us_backslash)</code>\n(glyph <code>±</code>) to <code>€</code>, and then patch things up so that the usual window\nswitching works (using <code>(command)-`</code>):</li>\n</ul>\n<pre><code><span> <span><span>{</span>\n</span></span><span><span> </span><span><span><span>"</span>description<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>mort: § -> `; ± (S-§) -> €<span>"</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>"</span>manipulators<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span><span><span><span> <span><span>{</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>type<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>basic<span>"</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>from<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>non_us_backslash<span>"</span></span>\n</span></span></span></span></span><span><span><span><span><span> <span>}</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>to<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span></span></span><span><span><span><span><span> <span><span>{</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>grave_accent_and_tilde<span>"</span></span>\n</span></span></span></span></span></span><span><span><span><span><span><span> <span>}</span></span>\n</span></span></span></span></span><span><span><span><span><span> <span>]</span></span>\n</span></span></span></span><span><span><span><span> <span>}</span></span><span>,</span>\n</span></span></span><span><span><span> <span><span>{</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>type<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>basic<span>"</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>from<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>non_us_backslash<span>"</span></span><span>,</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>"</span>modifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span></span><span><span><span>"</span>mandatory<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>"</span>shift<span>"</span></span><span>]</span></span><span>}</span></span>\n</span></span></span></span></span><span><span><span><span><span> <span>}</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>to<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span></span></span><span><span><span><span><span> <span><span>{</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>2<span>"</span></span><span>,</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>modifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>"</span>option<span>"</span></span><span>]</span></span>\n</span></span></span></span></span></span><span><span><span><span><span><span> <span>}</span></span>\n</span></span></span></span></span><span><span><span><span><span> <span>]</span></span>\n</span></span></span></span><span><span><span><span> <span>}</span></span><span>,</span>\n</span></span></span><span><span><span> <span><span>{</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>type<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>basic<span>"</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>from<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>non_us_backslash<span>"</span></span><span>,</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>"</span>modifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span></span><span><span><span>"</span>mandatory<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>"</span>command<span>"</span></span><span>]</span></span><span>}</span></span>\n</span></span></span></span></span><span><span><span><span><span> <span>}</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>to<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span></span></span><span><span><span><span><span> <span><span>{</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>grave_accent_and_tilde<span>"</span></span><span>,</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>modifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>"</span>command<span>"</span></span><span>]</span></span>\n</span></span></span></span></span></span><span><span><span><span><span><span> <span>}</span></span>\n</span></span></span></span></span><span><span><span><span><span> <span>]</span></span>\n</span></span></span></span><span><span><span><span> <span>}</span></span><span>,</span>\n</span></span></span><span><span><span> <span><span>{</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>type<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>basic<span>"</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>from<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>non_us_backslash<span>"</span></span><span>,</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>"</span>modifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span></span><span><span><span>"</span>mandatory<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>"</span>command<span>"</span></span><span>,</span> <span><span>"</span>shift<span>"</span></span><span>]</span></span><span>}</span></span>\n</span></span></span></span></span><span><span><span><span><span> <span>}</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>to<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span></span></span><span><span><span><span><span> <span><span>{</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>grave_accent_and_tilde<span>"</span></span><span>,</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>modifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>"</span>command<span>"</span></span><span>,</span> <span><span>"</span>shift<span>"</span></span><span>]</span></span>\n</span></span></span></span></span></span><span><span><span><span><span><span> <span>}</span></span>\n</span></span></span></span></span><span><span><span><span><span> <span>]</span></span>\n</span></span></span></span><span><span><span><span> <span>}</span></span>\n</span></span></span><span><span><span> <span>]</span></span>\n</span></span><span><span> <span>}</span></span>,\n</span></code></pre>\n<ul>\n<li>finally, map <code>`</code> to <code>\\</code> and <code>S-`</code> to <code>|</code></li>\n</ul>\n<pre><code><span> <span><span>{</span>\n</span></span><span><span> </span><span><span><span>"</span>description<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>mort: ` -> <span>\\\\</span>; S-` (~) -> |<span>"</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>"</span>manipulators<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span><span><span><span> <span><span>{</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>type<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>basic<span>"</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>from<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>grave_accent_and_tilde<span>"</span></span>\n</span></span></span></span></span><span><span><span><span><span> <span>}</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>to<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span></span></span><span><span><span><span><span> <span><span>{</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>backslash<span>"</span></span>\n</span></span></span></span></span></span><span><span><span><span><span><span> <span>}</span></span>\n</span></span></span></span></span><span><span><span><span><span> <span>]</span></span>\n</span></span></span></span><span><span><span><span> <span>}</span></span><span>,</span>\n</span></span></span><span><span><span> <span><span>{</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>type<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>basic<span>"</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>from<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>grave_accent_and_tilde<span>"</span></span><span>,</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>"</span>modifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span></span><span><span><span>"</span>mandatory<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>"</span>shift<span>"</span></span><span>]</span></span><span>}</span></span>\n</span></span></span></span></span><span><span><span><span><span> <span>}</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>to<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span></span></span><span><span><span><span><span> <span><span>{</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>backslash<span>"</span></span><span>,</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>modifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>"</span>shift<span>"</span></span><span>]</span></span>\n</span></span></span></span></span></span><span><span><span><span><span><span> <span>}</span></span>\n</span></span></span></span></span><span><span><span><span><span> <span>]</span></span>\n</span></span></span></span><span><span><span><span> <span>}</span></span>\n</span></span></span><span><span><span> <span>]</span></span>\n</span></span><span><span> <span>}</span></span>,\n</span></code></pre>\n<h2><a href=\"https://mort.io/blog/mess-with-my-keyboard/#iterm2\">iTerm2</a></h2>\n<p>Unfortunately for me, iTerm2 then gets a bit confused as it wants to leave\n<code>(command)</code> alone, only allowing mapping of <code>(option)</code> to <code>(meta)</code> (or, in fact,\n<code>(esc+)</code>). In the past I swapped <code>(left_command)</code> and <code>(left_option)</code> to make\nthe usual shell (<code>bash</code>) CLI editing combinations (roughly, <code>emacs</code>) work. That\nwasn’t ideal though as I then had to fix up the window cycling commands\n(<code>(command)-` </code> and so on). Fortunately, the fix this time seems easier: just\nconfigure the two tricky mappings (involving generating a keypress modified with\n<code>(option)</code>) to be interpreted by iTerm2 to just send the appropriate text\nthrough. Again, I did this in the UI (Preferences > Profiles > Keys) but the\nresulting configuration change is also straightforward:</p>\n<pre><code><span>\t\t\t<span><span><</span><span>key</span><span>></span></span>Keyboard Map<span><span></</span><span>key</span><span>></span></span>\n</span><span>\t\t\t<span><span><</span><span>dict</span><span>></span></span>\n</span><span>...\n</span><span>\t\t\t\t<span><span><</span><span>key</span><span>></span></span>0x32-0x80000<span><span></</span><span>key</span><span>></span></span>\n</span><span>\t\t\t\t<span><span><</span><span>dict</span><span>></span></span>\n</span><span>\t\t\t\t\t<span><span><</span><span>key</span><span>></span></span>Action<span><span></</span><span>key</span><span>></span></span>\n</span><span>\t\t\t\t\t<span><span><</span><span>integer</span><span>></span></span>12<span><span></</span><span>integer</span><span>></span></span>\n</span><span>\t\t\t\t\t<span><span><</span><span>key</span><span>></span></span>Text<span><span></</span><span>key</span><span>></span></span>\n</span><span>\t\t\t\t\t<span><span><</span><span>string</span><span>></span></span>€<span><span></</span><span>string</span><span>></span></span>\n</span><span>\t\t\t\t<span><span></</span><span>dict</span><span>></span></span>\n</span><span>...\n</span><span>\t\t\t\t<span><span><</span><span>key</span><span>></span></span>0x33-0x80000<span><span></</span><span>key</span><span>></span></span>\n</span><span>\t\t\t\t<span><span><</span><span>dict</span><span>></span></span>\n</span><span>\t\t\t\t\t<span><span><</span><span>key</span><span>></span></span>Action<span><span></</span><span>key</span><span>></span></span>\n</span><span>\t\t\t\t\t<span><span><</span><span>integer</span><span>></span></span>12<span><span></</span><span>integer</span><span>></span></span>\n</span><span>\t\t\t\t\t<span><span><</span><span>key</span><span>></span></span>Text<span><span></</span><span>key</span><span>></span></span>\n</span><span>\t\t\t\t\t<span><span><</span><span>string</span><span>></span></span>#<span><span></</span><span>string</span><span>></span></span>\n</span><span>\t\t\t\t<span><span></</span><span>dict</span><span>></span></span>\n</span><span>...\n</span><span>\t\t\t<span><span></</span><span>dict</span><span>></span></span>\n</span></code></pre>\n<h2><a href=\"https://mort.io/blog/mess-with-my-keyboard/#microsoft-digital-media-keyboard\">Microsoft Digital Media keyboard</a></h2>\n<p>Examining the key codes using the Karabiner Event-Viewer, it seemed that the\nfirst thing to do was to swap <code>(grave_accent_and_tilde)</code> (glyph <code>`</code>) and\n<code>(non_us_backslash)</code> (slightly confusingly, glyph <code>\\</code> on my keyboard). I started\nout trying to do this as a complex modification so that all the remappings were\nin <a href=\"https://github.com/mor1/rc-karabiner/blob/master/assets/complex_modifications/mort-keymap.json\">one file</a>, but couldn’t: I couldn’t figure out how to control the\napplication order of mappings in that file. However, simple modifications are\napplied before complex modifications, and this <em>is</em> a simple modification as\nit’s a direct swap, so I just used the UI and did it there. For the sake of\ncompleteness, the resulting modification to <a href=\"https://github.com/mor1/rc-karabiner/blob/master/karabiner.json\"><code>karabiner.json</code></a> is:</p>\n<pre><code><span><span><span>{</span>\n</span></span><span><span><span>.</span><span>.</span><span>.</span>\n</span></span><span><span> </span><span><span><span>"</span>profiles<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span><span><span><span> <span><span>{</span>\n</span></span></span></span><span><span><span><span><span>.</span><span>.</span><span>.</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>devices<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span></span></span><span><span><span><span><span> <span><span>{</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>disable_built_in_keyboard_if_exists<span>"</span></span></span><span><span>:</span> </span><span><span>false</span><span>,</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>fn_function_keys<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span>]</span></span><span>,</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>identifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span></span></span></span></span><span><span><span><span><span><span><span> </span><span><span><span>"</span>is_keyboard<span>"</span></span></span><span><span>:</span> </span><span><span>true</span><span>,</span>\n</span></span></span></span></span></span></span><span><span><span><span><span><span><span> </span><span><span><span>"</span>is_pointing_device<span>"</span></span></span><span><span>:</span> </span><span><span>false</span><span>,</span>\n</span></span></span></span></span></span></span><span><span><span><span><span><span><span> </span><span><span><span>"</span>product_id<span>"</span></span></span><span><span>:</span> </span><span><span>180</span><span>,</span>\n</span></span></span></span></span></span></span><span><span><span><span><span><span><span> </span><span><span><span>"</span>vendor_id<span>"</span></span></span><span><span>:</span> </span><span><span>1118</span>\n</span></span></span></span></span></span></span><span><span><span><span><span><span><span> <span>}</span></span><span>,</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>ignore<span>"</span></span></span><span><span>:</span> </span><span><span>false</span><span>,</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>simple_modifications<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span></span></span></span></span><span><span><span><span><span><span><span> <span><span>{</span>\n</span></span></span></span></span></span></span></span><span><span><span><span><span><span><span><span> </span><span><span><span>"</span>from<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span></span></span></span></span></span></span><span><span><span><span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>grave_accent_and_tilde<span>"</span></span>\n</span></span></span></span></span></span></span></span></span><span><span><span><span><span><span><span><span><span> <span>}</span></span><span>,</span>\n</span></span></span></span></span></span></span></span><span><span><span><span><span><span><span><span> </span><span><span><span>"</span>to<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span></span></span></span></span></span></span><span><span><span><span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>non_us_backslash<span>"</span></span>\n</span></span></span></span></span></span></span></span></span><span><span><span><span><span><span><span><span><span> <span>}</span></span>\n</span></span></span></span></span></span></span></span><span><span><span><span><span><span><span><span> <span>}</span></span><span>,</span>\n</span></span></span></span></span></span></span><span><span><span><span><span><span><span> <span><span>{</span>\n</span></span></span></span></span></span></span></span><span><span><span><span><span><span><span><span> </span><span><span><span>"</span>from<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span></span></span></span></span></span></span><span><span><span><span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>non_us_backslash<span>"</span></span>\n</span></span></span></span></span></span></span></span></span><span><span><span><span><span><span><span><span><span> <span>}</span></span><span>,</span>\n</span></span></span></span></span></span></span></span><span><span><span><span><span><span><span><span> </span><span><span><span>"</span>to<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span></span></span></span></span></span></span><span><span><span><span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>grave_accent_and_tilde<span>"</span></span>\n</span></span></span></span></span></span></span></span></span><span><span><span><span><span><span><span><span><span> <span>}</span></span>\n</span></span></span></span></span></span></span></span><span><span><span><span><span><span><span><span> <span>}</span></span>\n</span></span></span></span></span></span></span><span><span><span><span><span><span><span> <span>]</span></span>\n</span></span></span></span></span></span><span><span><span><span><span><span> <span>}</span></span>\n</span></span></span></span></span><span><span><span><span><span> <span>]</span></span><span>,</span>\n</span></span></span></span><span><span><span><span><span>.</span><span>.</span><span>.</span>\n</span></span></span></span><span><span><span><span> <span>}</span></span>\n</span></span></span><span><span><span> <span>]</span></span>\n</span></span><span><span><span>}</span></span>\n</span></code></pre>\n<p>The next step was to patch up the complex modifications. Once I realised that\nthe event viewer was claiming that the key with glyph <code>#</code> was emitting\n<code>(backslash)</code> while it was, in fact, emitting <code>(non_us_pound)</code>, this was fairly\nstraightforward:</p>\n<ul>\n<li>swap <code>(command)</code> (glyph <code>Alt</code>) and <code>(option)</code> (glyph <code>Start</code>):</li>\n</ul>\n<pre><code><span> <span><span>{</span>\n</span></span><span><span> </span><span><span><span>"</span>conditions<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span><span><span><span> <span><span>{</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>type<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>device_if<span>"</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>identifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>{</span></span><span><span><span>"</span>vendor_id<span>"</span></span></span><span><span>:</span> </span><span><span>1118</span><span>,</span> </span><span><span><span>"</span>product_id<span>"</span></span></span><span><span>:</span> </span><span><span>180</span><span>}</span></span><span>]</span></span>\n</span></span></span></span><span><span><span><span> <span>}</span></span>\n</span></span></span><span><span><span> <span>]</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>"</span>type<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>basic<span>"</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>"</span>from<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>left_option<span>"</span></span><span>,</span>\n</span></span></span><span><span><span> </span><span><span><span>"</span>modifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span></span><span><span><span>"</span>optional<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>"</span>any<span>"</span></span><span>]</span></span><span>}</span></span>\n</span></span></span><span><span><span> <span>}</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>"</span>to<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span><span><span><span> <span><span>{</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>left_command<span>"</span></span>\n</span></span></span></span><span><span><span><span> <span>}</span></span>\n</span></span></span><span><span><span> <span>]</span></span>\n</span></span><span><span> <span>}</span></span>,\n</span><span> <span><span>{</span>\n</span></span><span><span> </span><span><span><span>"</span>conditions<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span><span><span><span> <span><span>{</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>type<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>device_if<span>"</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>identifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>{</span></span><span><span><span>"</span>vendor_id<span>"</span></span></span><span><span>:</span> </span><span><span>1118</span><span>,</span> </span><span><span><span>"</span>product_id<span>"</span></span></span><span><span>:</span> </span><span><span>180</span><span>}</span></span><span>]</span></span>\n</span></span></span></span><span><span><span><span> <span>}</span></span>\n</span></span></span><span><span><span> <span>]</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>"</span>type<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>basic<span>"</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>"</span>from<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>left_command<span>"</span></span><span>,</span>\n</span></span></span><span><span><span> </span><span><span><span>"</span>modifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span></span><span><span><span>"</span>optional<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>"</span>any<span>"</span></span><span>]</span></span><span>}</span></span>\n</span></span></span><span><span><span> <span>}</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>"</span>to<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span><span><span><span> <span><span>{</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>left_option<span>"</span></span>\n</span></span></span></span><span><span><span><span> <span>}</span></span>\n</span></span></span><span><span><span> <span>]</span></span>\n</span></span><span><span> <span>}</span></span>\n</span><span> ]\n</span><span> },\n</span></code></pre>\n<ul>\n<li>add coverage of <code>(non_us_pound)</code> to the rule that remaps <code>\\</code> to <code>#</code>:</li>\n</ul>\n<pre><code><span> <span><span>{</span>\n</span></span><span><span> </span><span><span><span>"</span>conditions<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span><span><span><span> <span><span>{</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>type<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>device_if<span>"</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>identifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>{</span></span><span><span><span>"</span>vendor_id<span>"</span></span></span><span><span>:</span> </span><span><span>1118</span><span>,</span> </span><span><span><span>"</span>product_id<span>"</span></span></span><span><span>:</span> </span><span><span>180</span><span>}</span></span><span>]</span></span>\n</span></span></span></span><span><span><span><span> <span>}</span></span>\n</span></span></span><span><span><span> <span>]</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>"</span>type<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>basic<span>"</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>"</span>from<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>non_us_pound<span>"</span></span>\n</span></span></span><span><span><span> <span>}</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>"</span>to<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span><span><span><span> <span><span>{</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>3<span>"</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>modifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>"</span>option<span>"</span></span><span>]</span></span>\n</span></span></span></span><span><span><span><span> <span>}</span></span>\n</span></span></span><span><span><span> <span>]</span></span>\n</span></span><span><span> <span>}</span></span>,\n</span><span> <span><span>{</span>\n</span></span><span><span> </span><span><span><span>"</span>conditions<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span><span><span><span> <span><span>{</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>type<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>device_if<span>"</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>identifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>{</span></span><span><span><span>"</span>vendor_id<span>"</span></span></span><span><span>:</span> </span><span><span>1118</span><span>,</span> </span><span><span><span>"</span>product_id<span>"</span></span></span><span><span>:</span> </span><span><span>180</span><span>}</span></span><span>]</span></span>\n</span></span></span></span><span><span><span><span> <span>}</span></span>\n</span></span></span><span><span><span> <span>]</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>"</span>type<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>basic<span>"</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>"</span>from<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>non_us_pound<span>"</span></span><span>,</span>\n</span></span></span><span><span><span> </span><span><span><span>"</span>modifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span></span><span><span><span>"</span>mandatory<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>"</span>shift<span>"</span></span><span>]</span></span><span>}</span></span>\n</span></span></span><span><span><span> <span>}</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>"</span>to<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span><span><span><span> <span><span>{</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>grave_accent_and_tilde<span>"</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>modifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>"</span>shift<span>"</span></span><span>]</span></span>\n</span></span></span></span><span><span><span><span> <span>}</span></span>\n</span></span></span><span><span><span> <span>]</span></span>\n</span></span><span><span> <span>}</span></span>\n</span></code></pre>\n<p>…and that’s it. My keyboard is, once again, my castle.</p>",
8 "content": "<p>I recently took the plunge and upgraded my OS X. Not to vN of <em>Sierra</em> as I’d\nhoped, but to v0 <em>High Sierra</em>– the perils of waiting too long…</p>\n<p>Unfortunately, this toasted<a href=\"https://mort.io/blog/mess-with-my-keyboard/#1\">1</a> my carefully curated keyboard remappings as\n<a href=\"https://pqrs.org/osx/karabiner/\">Karabiner</a> used a kernel extension, for which everything changed. All was not\nlost however, as the rewrite to support Sierra/High Sierra was well underway. Or\nso I thought until I realised that the configuration file had changed from XML\nto JSON. And so my configuration journey began. (But it all ends well, so that’s\ngood.)</p>\n<div>1\n<p>To be honest, I suspect even the <em>Sierra</em> upgrade would’ve done this.</p>\n</div>\n<h2><a href=\"https://mort.io/blog/mess-with-my-keyboard/#controlling-the-config\">Controlling the config</a></h2>\n<p>The first thing was to get the new configuration matters under control. I did\nthis per the documentation, symlinking the config subdirectory from my\n<code>rc-files</code> repo:</p>\n<pre><code><span><span><span>cd</span></span><span> <span><span>~</span></span>/.config/</span>\n</span><span><span><span>mv</span></span><span> karabiner/ <span><span>~</span></span>/rc-files/</span>\n</span><span><span><span>ln</span></span><span><span><span> -</span>s</span> <span><span>~</span></span>/rc-files/karabiner</span>\n</span></code></pre>\n<h2><a href=\"https://mort.io/blog/mess-with-my-keyboard/#internal-apple-keyboard\">Internal Apple keyboard</a></h2>\n<p>In the interests of keeping all configuration in one place (but see below), I\ndecided to do this via a set of <a href=\"https://github.com/mor1/rc-karabiner/blob/master/assets/complex_modifications/mort-keymap.json\">complex modifications</a>. In summary this\nmeant:</p>\n<ul>\n<li>swap <code>(caps_lock)</code> and <code>(control)</code>:</li>\n</ul>\n<pre><code><span> <span><span>{</span>\n</span></span><span><span> </span><span><span><span>"</span>description<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>mort: caps_lock -> ctrl<span>"</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>"</span>manipulators<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span><span><span><span> <span><span>{</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>type<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>basic<span>"</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>from<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>caps_lock<span>"</span></span><span>,</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>"</span>modifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span></span><span><span><span>"</span>optional<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>"</span>any<span>"</span></span><span>]</span></span><span>}</span></span>\n</span></span></span></span></span><span><span><span><span><span> <span>}</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>to<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span></span></span><span><span><span><span><span> <span><span>{</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>left_control<span>"</span></span>\n</span></span></span></span></span></span><span><span><span><span><span><span> <span>}</span></span>\n</span></span></span></span></span><span><span><span><span><span> <span>]</span></span>\n</span></span></span></span><span><span><span><span> <span>}</span></span>\n</span></span></span><span><span><span> <span>]</span></span>\n</span></span><span><span> <span>}</span></span>,\n</span></code></pre>\n<ul>\n<li>swap <code>\"</code> (glyph <code>S-'</code>) with <code>@</code> (glyph <code>S-2</code>):</li>\n</ul>\n<pre><code><span> <span><span>{</span>\n</span></span><span><span> </span><span><span><span>"</span>description<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>mort: S-' (<span>\\"</span>) <-> S-2 (@)<span>"</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>"</span>manipulators<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span><span><span><span> <span><span>{</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>type<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>basic<span>"</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>from<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>quote<span>"</span></span><span>,</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>"</span>modifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span></span><span><span><span>"</span>mandatory<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>"</span>shift<span>"</span></span><span>]</span></span><span>}</span></span>\n</span></span></span></span></span><span><span><span><span><span> <span>}</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>to<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span></span></span><span><span><span><span><span> <span><span>{</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>2<span>"</span></span><span>,</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>modifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>"</span>shift<span>"</span></span><span>]</span></span><span>}</span></span>\n</span></span></span></span></span><span><span><span><span><span> <span>]</span></span>\n</span></span></span></span><span><span><span><span> <span>}</span></span><span>,</span>\n</span></span></span><span><span><span> <span><span>{</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>type<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>basic<span>"</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>from<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>2<span>"</span></span><span>,</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>"</span>modifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span></span><span><span><span>"</span>mandatory<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>"</span>shift<span>"</span></span><span>]</span></span><span>}</span></span>\n</span></span></span></span></span><span><span><span><span><span> <span>}</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>to<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span></span></span><span><span><span><span><span> <span><span>{</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>quote<span>"</span></span><span>,</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>modifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>"</span>shift<span>"</span></span><span>]</span></span>\n</span></span></span></span></span></span><span><span><span><span><span><span> <span>}</span></span>\n</span></span></span></span></span><span><span><span><span><span> <span>]</span></span>\n</span></span></span></span><span><span><span><span> <span>}</span></span>\n</span></span></span><span><span><span> <span>]</span></span>\n</span></span><span><span> <span>}</span></span>,\n</span></code></pre>\n<ul>\n<li>map <code>(backslash)</code> (glyph <code>\\</code>) to <code>#</code>, and <code>S-\\</code> (glyph <code>|</code>) to <code>~</code>:</li>\n</ul>\n<pre><code><span> <span><span>{</span>\n</span></span><span><span> </span><span><span><span>"</span>description<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>mort: <span>\\\\</span> -> #; S-<span>\\\\</span> (|) -> ~<span>"</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>"</span>manipulators<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span><span><span><span> <span><span>{</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>type<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>basic<span>"</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>from<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>backslash<span>"</span></span>\n</span></span></span></span></span><span><span><span><span><span> <span>}</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>to<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span></span></span><span><span><span><span><span> <span><span>{</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>3<span>"</span></span><span>,</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>modifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>"</span>option<span>"</span></span><span>]</span></span>\n</span></span></span></span></span></span><span><span><span><span><span><span> <span>}</span></span>\n</span></span></span></span></span><span><span><span><span><span> <span>]</span></span>\n</span></span></span></span><span><span><span><span> <span>}</span></span><span>,</span>\n</span></span></span><span><span><span> <span><span>{</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>type<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>basic<span>"</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>from<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>backslash<span>"</span></span><span>,</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>"</span>modifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span></span><span><span><span>"</span>mandatory<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>"</span>shift<span>"</span></span><span>]</span></span><span>}</span></span>\n</span></span></span></span></span><span><span><span><span><span> <span>}</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>to<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span></span></span><span><span><span><span><span> <span><span>{</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>grave_accent_and_tilde<span>"</span></span><span>,</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>modifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>"</span>shift<span>"</span></span><span>]</span></span>\n</span></span></span></span></span></span><span><span><span><span><span><span> <span>}</span></span>\n</span></span></span></span></span><span><span><span><span><span> <span>]</span></span>\n</span></span></span></span><span><span><span><span> <span>}</span></span><span>,</span>\n</span></span></span><span><span><span><span>.</span><span>.</span><span>.</span>\n</span></span></span><span><span><span> <span>}</span>\n</span></span></span></code></pre>\n<ul>\n<li>map <code>(non_us_backslash)</code> (glyph <code>§</code>) to <code>`</code> and <code>S-(non_us_backslash)</code>\n(glyph <code>±</code>) to <code>€</code>, and then patch things up so that the usual window\nswitching works (using <code>(command)-`</code>):</li>\n</ul>\n<pre><code><span> <span><span>{</span>\n</span></span><span><span> </span><span><span><span>"</span>description<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>mort: § -> `; ± (S-§) -> €<span>"</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>"</span>manipulators<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span><span><span><span> <span><span>{</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>type<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>basic<span>"</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>from<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>non_us_backslash<span>"</span></span>\n</span></span></span></span></span><span><span><span><span><span> <span>}</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>to<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span></span></span><span><span><span><span><span> <span><span>{</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>grave_accent_and_tilde<span>"</span></span>\n</span></span></span></span></span></span><span><span><span><span><span><span> <span>}</span></span>\n</span></span></span></span></span><span><span><span><span><span> <span>]</span></span>\n</span></span></span></span><span><span><span><span> <span>}</span></span><span>,</span>\n</span></span></span><span><span><span> <span><span>{</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>type<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>basic<span>"</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>from<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>non_us_backslash<span>"</span></span><span>,</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>"</span>modifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span></span><span><span><span>"</span>mandatory<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>"</span>shift<span>"</span></span><span>]</span></span><span>}</span></span>\n</span></span></span></span></span><span><span><span><span><span> <span>}</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>to<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span></span></span><span><span><span><span><span> <span><span>{</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>2<span>"</span></span><span>,</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>modifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>"</span>option<span>"</span></span><span>]</span></span>\n</span></span></span></span></span></span><span><span><span><span><span><span> <span>}</span></span>\n</span></span></span></span></span><span><span><span><span><span> <span>]</span></span>\n</span></span></span></span><span><span><span><span> <span>}</span></span><span>,</span>\n</span></span></span><span><span><span> <span><span>{</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>type<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>basic<span>"</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>from<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>non_us_backslash<span>"</span></span><span>,</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>"</span>modifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span></span><span><span><span>"</span>mandatory<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>"</span>command<span>"</span></span><span>]</span></span><span>}</span></span>\n</span></span></span></span></span><span><span><span><span><span> <span>}</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>to<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span></span></span><span><span><span><span><span> <span><span>{</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>grave_accent_and_tilde<span>"</span></span><span>,</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>modifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>"</span>command<span>"</span></span><span>]</span></span>\n</span></span></span></span></span></span><span><span><span><span><span><span> <span>}</span></span>\n</span></span></span></span></span><span><span><span><span><span> <span>]</span></span>\n</span></span></span></span><span><span><span><span> <span>}</span></span><span>,</span>\n</span></span></span><span><span><span> <span><span>{</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>type<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>basic<span>"</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>from<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>non_us_backslash<span>"</span></span><span>,</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>"</span>modifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span></span><span><span><span>"</span>mandatory<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>"</span>command<span>"</span></span><span>,</span> <span><span>"</span>shift<span>"</span></span><span>]</span></span><span>}</span></span>\n</span></span></span></span></span><span><span><span><span><span> <span>}</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>to<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span></span></span><span><span><span><span><span> <span><span>{</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>grave_accent_and_tilde<span>"</span></span><span>,</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>modifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>"</span>command<span>"</span></span><span>,</span> <span><span>"</span>shift<span>"</span></span><span>]</span></span>\n</span></span></span></span></span></span><span><span><span><span><span><span> <span>}</span></span>\n</span></span></span></span></span><span><span><span><span><span> <span>]</span></span>\n</span></span></span></span><span><span><span><span> <span>}</span></span>\n</span></span></span><span><span><span> <span>]</span></span>\n</span></span><span><span> <span>}</span></span>,\n</span></code></pre>\n<ul>\n<li>finally, map <code>`</code> to <code>\\</code> and <code>S-`</code> to <code>|</code></li>\n</ul>\n<pre><code><span> <span><span>{</span>\n</span></span><span><span> </span><span><span><span>"</span>description<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>mort: ` -> <span>\\\\</span>; S-` (~) -> |<span>"</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>"</span>manipulators<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span><span><span><span> <span><span>{</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>type<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>basic<span>"</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>from<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>grave_accent_and_tilde<span>"</span></span>\n</span></span></span></span></span><span><span><span><span><span> <span>}</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>to<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span></span></span><span><span><span><span><span> <span><span>{</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>backslash<span>"</span></span>\n</span></span></span></span></span></span><span><span><span><span><span><span> <span>}</span></span>\n</span></span></span></span></span><span><span><span><span><span> <span>]</span></span>\n</span></span></span></span><span><span><span><span> <span>}</span></span><span>,</span>\n</span></span></span><span><span><span> <span><span>{</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>type<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>basic<span>"</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>from<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>grave_accent_and_tilde<span>"</span></span><span>,</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>"</span>modifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span></span><span><span><span>"</span>mandatory<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>"</span>shift<span>"</span></span><span>]</span></span><span>}</span></span>\n</span></span></span></span></span><span><span><span><span><span> <span>}</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>to<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span></span></span><span><span><span><span><span> <span><span>{</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>backslash<span>"</span></span><span>,</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>modifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>"</span>shift<span>"</span></span><span>]</span></span>\n</span></span></span></span></span></span><span><span><span><span><span><span> <span>}</span></span>\n</span></span></span></span></span><span><span><span><span><span> <span>]</span></span>\n</span></span></span></span><span><span><span><span> <span>}</span></span>\n</span></span></span><span><span><span> <span>]</span></span>\n</span></span><span><span> <span>}</span></span>,\n</span></code></pre>\n<h2><a href=\"https://mort.io/blog/mess-with-my-keyboard/#iterm2\">iTerm2</a></h2>\n<p>Unfortunately for me, iTerm2 then gets a bit confused as it wants to leave\n<code>(command)</code> alone, only allowing mapping of <code>(option)</code> to <code>(meta)</code> (or, in fact,\n<code>(esc+)</code>). In the past I swapped <code>(left_command)</code> and <code>(left_option)</code> to make\nthe usual shell (<code>bash</code>) CLI editing combinations (roughly, <code>emacs</code>) work. That\nwasn’t ideal though as I then had to fix up the window cycling commands\n(<code>(command)-` </code> and so on). Fortunately, the fix this time seems easier: just\nconfigure the two tricky mappings (involving generating a keypress modified with\n<code>(option)</code>) to be interpreted by iTerm2 to just send the appropriate text\nthrough. Again, I did this in the UI (Preferences > Profiles > Keys) but the\nresulting configuration change is also straightforward:</p>\n<pre><code><span>\t\t\t<span><span><</span><span>key</span><span>></span></span>Keyboard Map<span><span></</span><span>key</span><span>></span></span>\n</span><span>\t\t\t<span><span><</span><span>dict</span><span>></span></span>\n</span><span>...\n</span><span>\t\t\t\t<span><span><</span><span>key</span><span>></span></span>0x32-0x80000<span><span></</span><span>key</span><span>></span></span>\n</span><span>\t\t\t\t<span><span><</span><span>dict</span><span>></span></span>\n</span><span>\t\t\t\t\t<span><span><</span><span>key</span><span>></span></span>Action<span><span></</span><span>key</span><span>></span></span>\n</span><span>\t\t\t\t\t<span><span><</span><span>integer</span><span>></span></span>12<span><span></</span><span>integer</span><span>></span></span>\n</span><span>\t\t\t\t\t<span><span><</span><span>key</span><span>></span></span>Text<span><span></</span><span>key</span><span>></span></span>\n</span><span>\t\t\t\t\t<span><span><</span><span>string</span><span>></span></span>€<span><span></</span><span>string</span><span>></span></span>\n</span><span>\t\t\t\t<span><span></</span><span>dict</span><span>></span></span>\n</span><span>...\n</span><span>\t\t\t\t<span><span><</span><span>key</span><span>></span></span>0x33-0x80000<span><span></</span><span>key</span><span>></span></span>\n</span><span>\t\t\t\t<span><span><</span><span>dict</span><span>></span></span>\n</span><span>\t\t\t\t\t<span><span><</span><span>key</span><span>></span></span>Action<span><span></</span><span>key</span><span>></span></span>\n</span><span>\t\t\t\t\t<span><span><</span><span>integer</span><span>></span></span>12<span><span></</span><span>integer</span><span>></span></span>\n</span><span>\t\t\t\t\t<span><span><</span><span>key</span><span>></span></span>Text<span><span></</span><span>key</span><span>></span></span>\n</span><span>\t\t\t\t\t<span><span><</span><span>string</span><span>></span></span>#<span><span></</span><span>string</span><span>></span></span>\n</span><span>\t\t\t\t<span><span></</span><span>dict</span><span>></span></span>\n</span><span>...\n</span><span>\t\t\t<span><span></</span><span>dict</span><span>></span></span>\n</span></code></pre>\n<h2><a href=\"https://mort.io/blog/mess-with-my-keyboard/#microsoft-digital-media-keyboard\">Microsoft Digital Media keyboard</a></h2>\n<p>Examining the key codes using the Karabiner Event-Viewer, it seemed that the\nfirst thing to do was to swap <code>(grave_accent_and_tilde)</code> (glyph <code>`</code>) and\n<code>(non_us_backslash)</code> (slightly confusingly, glyph <code>\\</code> on my keyboard). I started\nout trying to do this as a complex modification so that all the remappings were\nin <a href=\"https://github.com/mor1/rc-karabiner/blob/master/assets/complex_modifications/mort-keymap.json\">one file</a>, but couldn’t: I couldn’t figure out how to control the\napplication order of mappings in that file. However, simple modifications are\napplied before complex modifications, and this <em>is</em> a simple modification as\nit’s a direct swap, so I just used the UI and did it there. For the sake of\ncompleteness, the resulting modification to <a href=\"https://github.com/mor1/rc-karabiner/blob/master/karabiner.json\"><code>karabiner.json</code></a> is:</p>\n<pre><code><span><span><span>{</span>\n</span></span><span><span><span>.</span><span>.</span><span>.</span>\n</span></span><span><span> </span><span><span><span>"</span>profiles<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span><span><span><span> <span><span>{</span>\n</span></span></span></span><span><span><span><span><span>.</span><span>.</span><span>.</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>devices<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span></span></span><span><span><span><span><span> <span><span>{</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>disable_built_in_keyboard_if_exists<span>"</span></span></span><span><span>:</span> </span><span><span>false</span><span>,</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>fn_function_keys<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span>]</span></span><span>,</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>identifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span></span></span></span></span><span><span><span><span><span><span><span> </span><span><span><span>"</span>is_keyboard<span>"</span></span></span><span><span>:</span> </span><span><span>true</span><span>,</span>\n</span></span></span></span></span></span></span><span><span><span><span><span><span><span> </span><span><span><span>"</span>is_pointing_device<span>"</span></span></span><span><span>:</span> </span><span><span>false</span><span>,</span>\n</span></span></span></span></span></span></span><span><span><span><span><span><span><span> </span><span><span><span>"</span>product_id<span>"</span></span></span><span><span>:</span> </span><span><span>180</span><span>,</span>\n</span></span></span></span></span></span></span><span><span><span><span><span><span><span> </span><span><span><span>"</span>vendor_id<span>"</span></span></span><span><span>:</span> </span><span><span>1118</span>\n</span></span></span></span></span></span></span><span><span><span><span><span><span><span> <span>}</span></span><span>,</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>ignore<span>"</span></span></span><span><span>:</span> </span><span><span>false</span><span>,</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>"</span>simple_modifications<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span></span></span></span></span><span><span><span><span><span><span><span> <span><span>{</span>\n</span></span></span></span></span></span></span></span><span><span><span><span><span><span><span><span> </span><span><span><span>"</span>from<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span></span></span></span></span></span></span><span><span><span><span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>grave_accent_and_tilde<span>"</span></span>\n</span></span></span></span></span></span></span></span></span><span><span><span><span><span><span><span><span><span> <span>}</span></span><span>,</span>\n</span></span></span></span></span></span></span></span><span><span><span><span><span><span><span><span> </span><span><span><span>"</span>to<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span></span></span></span></span></span></span><span><span><span><span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>non_us_backslash<span>"</span></span>\n</span></span></span></span></span></span></span></span></span><span><span><span><span><span><span><span><span><span> <span>}</span></span>\n</span></span></span></span></span></span></span></span><span><span><span><span><span><span><span><span> <span>}</span></span><span>,</span>\n</span></span></span></span></span></span></span><span><span><span><span><span><span><span> <span><span>{</span>\n</span></span></span></span></span></span></span></span><span><span><span><span><span><span><span><span> </span><span><span><span>"</span>from<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span></span></span></span></span></span></span><span><span><span><span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>non_us_backslash<span>"</span></span>\n</span></span></span></span></span></span></span></span></span><span><span><span><span><span><span><span><span><span> <span>}</span></span><span>,</span>\n</span></span></span></span></span></span></span></span><span><span><span><span><span><span><span><span> </span><span><span><span>"</span>to<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span></span></span></span></span></span></span><span><span><span><span><span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>grave_accent_and_tilde<span>"</span></span>\n</span></span></span></span></span></span></span></span></span><span><span><span><span><span><span><span><span><span> <span>}</span></span>\n</span></span></span></span></span></span></span></span><span><span><span><span><span><span><span><span> <span>}</span></span>\n</span></span></span></span></span></span></span><span><span><span><span><span><span><span> <span>]</span></span>\n</span></span></span></span></span></span><span><span><span><span><span><span> <span>}</span></span>\n</span></span></span></span></span><span><span><span><span><span> <span>]</span></span><span>,</span>\n</span></span></span></span><span><span><span><span><span>.</span><span>.</span><span>.</span>\n</span></span></span></span><span><span><span><span> <span>}</span></span>\n</span></span></span><span><span><span> <span>]</span></span>\n</span></span><span><span><span>}</span></span>\n</span></code></pre>\n<p>The next step was to patch up the complex modifications. Once I realised that\nthe event viewer was claiming that the key with glyph <code>#</code> was emitting\n<code>(backslash)</code> while it was, in fact, emitting <code>(non_us_pound)</code>, this was fairly\nstraightforward:</p>\n<ul>\n<li>swap <code>(command)</code> (glyph <code>Alt</code>) and <code>(option)</code> (glyph <code>Start</code>):</li>\n</ul>\n<pre><code><span> <span><span>{</span>\n</span></span><span><span> </span><span><span><span>"</span>conditions<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span><span><span><span> <span><span>{</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>type<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>device_if<span>"</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>identifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>{</span></span><span><span><span>"</span>vendor_id<span>"</span></span></span><span><span>:</span> </span><span><span>1118</span><span>,</span> </span><span><span><span>"</span>product_id<span>"</span></span></span><span><span>:</span> </span><span><span>180</span><span>}</span></span><span>]</span></span>\n</span></span></span></span><span><span><span><span> <span>}</span></span>\n</span></span></span><span><span><span> <span>]</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>"</span>type<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>basic<span>"</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>"</span>from<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>left_option<span>"</span></span><span>,</span>\n</span></span></span><span><span><span> </span><span><span><span>"</span>modifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span></span><span><span><span>"</span>optional<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>"</span>any<span>"</span></span><span>]</span></span><span>}</span></span>\n</span></span></span><span><span><span> <span>}</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>"</span>to<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span><span><span><span> <span><span>{</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>left_command<span>"</span></span>\n</span></span></span></span><span><span><span><span> <span>}</span></span>\n</span></span></span><span><span><span> <span>]</span></span>\n</span></span><span><span> <span>}</span></span>,\n</span><span> <span><span>{</span>\n</span></span><span><span> </span><span><span><span>"</span>conditions<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span><span><span><span> <span><span>{</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>type<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>device_if<span>"</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>identifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>{</span></span><span><span><span>"</span>vendor_id<span>"</span></span></span><span><span>:</span> </span><span><span>1118</span><span>,</span> </span><span><span><span>"</span>product_id<span>"</span></span></span><span><span>:</span> </span><span><span>180</span><span>}</span></span><span>]</span></span>\n</span></span></span></span><span><span><span><span> <span>}</span></span>\n</span></span></span><span><span><span> <span>]</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>"</span>type<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>basic<span>"</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>"</span>from<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>left_command<span>"</span></span><span>,</span>\n</span></span></span><span><span><span> </span><span><span><span>"</span>modifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span></span><span><span><span>"</span>optional<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>"</span>any<span>"</span></span><span>]</span></span><span>}</span></span>\n</span></span></span><span><span><span> <span>}</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>"</span>to<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span><span><span><span> <span><span>{</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>left_option<span>"</span></span>\n</span></span></span></span><span><span><span><span> <span>}</span></span>\n</span></span></span><span><span><span> <span>]</span></span>\n</span></span><span><span> <span>}</span></span>\n</span><span> ]\n</span><span> },\n</span></code></pre>\n<ul>\n<li>add coverage of <code>(non_us_pound)</code> to the rule that remaps <code>\\</code> to <code>#</code>:</li>\n</ul>\n<pre><code><span> <span><span>{</span>\n</span></span><span><span> </span><span><span><span>"</span>conditions<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span><span><span><span> <span><span>{</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>type<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>device_if<span>"</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>identifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>{</span></span><span><span><span>"</span>vendor_id<span>"</span></span></span><span><span>:</span> </span><span><span>1118</span><span>,</span> </span><span><span><span>"</span>product_id<span>"</span></span></span><span><span>:</span> </span><span><span>180</span><span>}</span></span><span>]</span></span>\n</span></span></span></span><span><span><span><span> <span>}</span></span>\n</span></span></span><span><span><span> <span>]</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>"</span>type<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>basic<span>"</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>"</span>from<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>non_us_pound<span>"</span></span>\n</span></span></span><span><span><span> <span>}</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>"</span>to<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span><span><span><span> <span><span>{</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>3<span>"</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>modifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>"</span>option<span>"</span></span><span>]</span></span>\n</span></span></span></span><span><span><span><span> <span>}</span></span>\n</span></span></span><span><span><span> <span>]</span></span>\n</span></span><span><span> <span>}</span></span>,\n</span><span> <span><span>{</span>\n</span></span><span><span> </span><span><span><span>"</span>conditions<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span><span><span><span> <span><span>{</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>type<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>device_if<span>"</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>identifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>{</span></span><span><span><span>"</span>vendor_id<span>"</span></span></span><span><span>:</span> </span><span><span>1118</span><span>,</span> </span><span><span><span>"</span>product_id<span>"</span></span></span><span><span>:</span> </span><span><span>180</span><span>}</span></span><span>]</span></span>\n</span></span></span></span><span><span><span><span> <span>}</span></span>\n</span></span></span><span><span><span> <span>]</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>"</span>type<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>basic<span>"</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>"</span>from<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>non_us_pound<span>"</span></span><span>,</span>\n</span></span></span><span><span><span> </span><span><span><span>"</span>modifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>{</span></span><span><span><span>"</span>mandatory<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>"</span>shift<span>"</span></span><span>]</span></span><span>}</span></span>\n</span></span></span><span><span><span> <span>}</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>"</span>to<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span>\n</span></span></span><span><span><span> <span><span>{</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>key_code<span>"</span></span></span><span><span>:</span> </span><span><span><span>"</span>grave_accent_and_tilde<span>"</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>"</span>modifiers<span>"</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>"</span>shift<span>"</span></span><span>]</span></span>\n</span></span></span></span><span><span><span><span> <span>}</span></span>\n</span></span></span><span><span><span> <span>]</span></span>\n</span></span><span><span> <span>}</span></span>\n</span></code></pre>\n<p>…and that’s it. My keyboard is, once again, my castle.</p>",
9 "content_type": "html",
10 "author": {
11 "name": "Unknown",
12 "email": null,
13 "uri": null
14 },
15 "categories": [],
16 "source": "https://mort.io/atom.xml"
17}