Thicket data repository for the EEG
at main 113 kB view raw
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>&quot;</span>description<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>mort: caps_lock -&gt; ctrl<span>&quot;</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>&quot;</span>manipulators<span>&quot;</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>&quot;</span>type<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>basic<span>&quot;</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>&quot;</span>from<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>caps_lock<span>&quot;</span></span><span>,</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>&quot;</span>modifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>{</span></span><span><span><span>&quot;</span>optional<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>&quot;</span>any<span>&quot;</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>&quot;</span>to<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>left_control<span>&quot;</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>&quot;</span>description<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>mort: S-' (<span>\\&quot;</span>) &lt;-&gt; S-2 (@)<span>&quot;</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>&quot;</span>manipulators<span>&quot;</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>&quot;</span>type<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>basic<span>&quot;</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>&quot;</span>from<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>quote<span>&quot;</span></span><span>,</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>&quot;</span>modifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>{</span></span><span><span><span>&quot;</span>mandatory<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>&quot;</span>shift<span>&quot;</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>&quot;</span>to<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>2<span>&quot;</span></span><span>,</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>&quot;</span>modifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>&quot;</span>shift<span>&quot;</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>&quot;</span>type<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>basic<span>&quot;</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>&quot;</span>from<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>2<span>&quot;</span></span><span>,</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>&quot;</span>modifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>{</span></span><span><span><span>&quot;</span>mandatory<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>&quot;</span>shift<span>&quot;</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>&quot;</span>to<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>quote<span>&quot;</span></span><span>,</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>&quot;</span>modifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>&quot;</span>shift<span>&quot;</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>&quot;</span>description<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>mort: <span>\\\\</span> -&gt; #; S-<span>\\\\</span> (|) -&gt; ~<span>&quot;</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>&quot;</span>manipulators<span>&quot;</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>&quot;</span>type<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>basic<span>&quot;</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>&quot;</span>from<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>backslash<span>&quot;</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>&quot;</span>to<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>3<span>&quot;</span></span><span>,</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>&quot;</span>modifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>&quot;</span>option<span>&quot;</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>&quot;</span>type<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>basic<span>&quot;</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>&quot;</span>from<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>backslash<span>&quot;</span></span><span>,</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>&quot;</span>modifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>{</span></span><span><span><span>&quot;</span>mandatory<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>&quot;</span>shift<span>&quot;</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>&quot;</span>to<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>grave_accent_and_tilde<span>&quot;</span></span><span>,</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>&quot;</span>modifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>&quot;</span>shift<span>&quot;</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>&quot;</span>description<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>mort: § -&gt; `; ± (S-§) -&gt; €<span>&quot;</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>&quot;</span>manipulators<span>&quot;</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>&quot;</span>type<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>basic<span>&quot;</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>&quot;</span>from<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>non_us_backslash<span>&quot;</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>&quot;</span>to<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>grave_accent_and_tilde<span>&quot;</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>&quot;</span>type<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>basic<span>&quot;</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>&quot;</span>from<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>non_us_backslash<span>&quot;</span></span><span>,</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>&quot;</span>modifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>{</span></span><span><span><span>&quot;</span>mandatory<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>&quot;</span>shift<span>&quot;</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>&quot;</span>to<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>2<span>&quot;</span></span><span>,</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>&quot;</span>modifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>&quot;</span>option<span>&quot;</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>&quot;</span>type<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>basic<span>&quot;</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>&quot;</span>from<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>non_us_backslash<span>&quot;</span></span><span>,</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>&quot;</span>modifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>{</span></span><span><span><span>&quot;</span>mandatory<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>&quot;</span>command<span>&quot;</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>&quot;</span>to<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>grave_accent_and_tilde<span>&quot;</span></span><span>,</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>&quot;</span>modifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>&quot;</span>command<span>&quot;</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>&quot;</span>type<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>basic<span>&quot;</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>&quot;</span>from<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>non_us_backslash<span>&quot;</span></span><span>,</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>&quot;</span>modifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>{</span></span><span><span><span>&quot;</span>mandatory<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>&quot;</span>command<span>&quot;</span></span><span>,</span> <span><span>&quot;</span>shift<span>&quot;</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>&quot;</span>to<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>grave_accent_and_tilde<span>&quot;</span></span><span>,</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>&quot;</span>modifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>&quot;</span>command<span>&quot;</span></span><span>,</span> <span><span>&quot;</span>shift<span>&quot;</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>&quot;</span>description<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>mort: ` -&gt; <span>\\\\</span>; S-` (~) -&gt; |<span>&quot;</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>&quot;</span>manipulators<span>&quot;</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>&quot;</span>type<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>basic<span>&quot;</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>&quot;</span>from<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>grave_accent_and_tilde<span>&quot;</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>&quot;</span>to<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>backslash<span>&quot;</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>&quot;</span>type<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>basic<span>&quot;</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>&quot;</span>from<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>grave_accent_and_tilde<span>&quot;</span></span><span>,</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>&quot;</span>modifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>{</span></span><span><span><span>&quot;</span>mandatory<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>&quot;</span>shift<span>&quot;</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>&quot;</span>to<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>backslash<span>&quot;</span></span><span>,</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>&quot;</span>modifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>&quot;</span>shift<span>&quot;</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 &gt; Profiles &gt; Keys) but the\nresulting configuration change is also straightforward:</p>\n<pre><code><span>\t\t\t<span><span>&lt;</span><span>key</span><span>&gt;</span></span>Keyboard Map<span><span>&lt;/</span><span>key</span><span>&gt;</span></span>\n</span><span>\t\t\t<span><span>&lt;</span><span>dict</span><span>&gt;</span></span>\n</span><span>...\n</span><span>\t\t\t\t<span><span>&lt;</span><span>key</span><span>&gt;</span></span>0x32-0x80000<span><span>&lt;/</span><span>key</span><span>&gt;</span></span>\n</span><span>\t\t\t\t<span><span>&lt;</span><span>dict</span><span>&gt;</span></span>\n</span><span>\t\t\t\t\t<span><span>&lt;</span><span>key</span><span>&gt;</span></span>Action<span><span>&lt;/</span><span>key</span><span>&gt;</span></span>\n</span><span>\t\t\t\t\t<span><span>&lt;</span><span>integer</span><span>&gt;</span></span>12<span><span>&lt;/</span><span>integer</span><span>&gt;</span></span>\n</span><span>\t\t\t\t\t<span><span>&lt;</span><span>key</span><span>&gt;</span></span>Text<span><span>&lt;/</span><span>key</span><span>&gt;</span></span>\n</span><span>\t\t\t\t\t<span><span>&lt;</span><span>string</span><span>&gt;</span></span>€<span><span>&lt;/</span><span>string</span><span>&gt;</span></span>\n</span><span>\t\t\t\t<span><span>&lt;/</span><span>dict</span><span>&gt;</span></span>\n</span><span>...\n</span><span>\t\t\t\t<span><span>&lt;</span><span>key</span><span>&gt;</span></span>0x33-0x80000<span><span>&lt;/</span><span>key</span><span>&gt;</span></span>\n</span><span>\t\t\t\t<span><span>&lt;</span><span>dict</span><span>&gt;</span></span>\n</span><span>\t\t\t\t\t<span><span>&lt;</span><span>key</span><span>&gt;</span></span>Action<span><span>&lt;/</span><span>key</span><span>&gt;</span></span>\n</span><span>\t\t\t\t\t<span><span>&lt;</span><span>integer</span><span>&gt;</span></span>12<span><span>&lt;/</span><span>integer</span><span>&gt;</span></span>\n</span><span>\t\t\t\t\t<span><span>&lt;</span><span>key</span><span>&gt;</span></span>Text<span><span>&lt;/</span><span>key</span><span>&gt;</span></span>\n</span><span>\t\t\t\t\t<span><span>&lt;</span><span>string</span><span>&gt;</span></span>#<span><span>&lt;/</span><span>string</span><span>&gt;</span></span>\n</span><span>\t\t\t\t<span><span>&lt;/</span><span>dict</span><span>&gt;</span></span>\n</span><span>...\n</span><span>\t\t\t<span><span>&lt;/</span><span>dict</span><span>&gt;</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>&quot;</span>profiles<span>&quot;</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>&quot;</span>devices<span>&quot;</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>&quot;</span>disable_built_in_keyboard_if_exists<span>&quot;</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>&quot;</span>fn_function_keys<span>&quot;</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>&quot;</span>identifiers<span>&quot;</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>&quot;</span>is_keyboard<span>&quot;</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>&quot;</span>is_pointing_device<span>&quot;</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>&quot;</span>product_id<span>&quot;</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>&quot;</span>vendor_id<span>&quot;</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>&quot;</span>ignore<span>&quot;</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>&quot;</span>simple_modifications<span>&quot;</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>&quot;</span>from<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>grave_accent_and_tilde<span>&quot;</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>&quot;</span>to<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>non_us_backslash<span>&quot;</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>&quot;</span>from<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>non_us_backslash<span>&quot;</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>&quot;</span>to<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>grave_accent_and_tilde<span>&quot;</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>&quot;</span>conditions<span>&quot;</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>&quot;</span>type<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>device_if<span>&quot;</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>&quot;</span>identifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>{</span></span><span><span><span>&quot;</span>vendor_id<span>&quot;</span></span></span><span><span>:</span> </span><span><span>1118</span><span>,</span> </span><span><span><span>&quot;</span>product_id<span>&quot;</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>&quot;</span>type<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>basic<span>&quot;</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>&quot;</span>from<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span><span><span><span> </span><span><span><span>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>left_option<span>&quot;</span></span><span>,</span>\n</span></span></span><span><span><span> </span><span><span><span>&quot;</span>modifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>{</span></span><span><span><span>&quot;</span>optional<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>&quot;</span>any<span>&quot;</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>&quot;</span>to<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>left_command<span>&quot;</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>&quot;</span>conditions<span>&quot;</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>&quot;</span>type<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>device_if<span>&quot;</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>&quot;</span>identifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>{</span></span><span><span><span>&quot;</span>vendor_id<span>&quot;</span></span></span><span><span>:</span> </span><span><span>1118</span><span>,</span> </span><span><span><span>&quot;</span>product_id<span>&quot;</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>&quot;</span>type<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>basic<span>&quot;</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>&quot;</span>from<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span><span><span><span> </span><span><span><span>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>left_command<span>&quot;</span></span><span>,</span>\n</span></span></span><span><span><span> </span><span><span><span>&quot;</span>modifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>{</span></span><span><span><span>&quot;</span>optional<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>&quot;</span>any<span>&quot;</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>&quot;</span>to<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>left_option<span>&quot;</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>&quot;</span>conditions<span>&quot;</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>&quot;</span>type<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>device_if<span>&quot;</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>&quot;</span>identifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>{</span></span><span><span><span>&quot;</span>vendor_id<span>&quot;</span></span></span><span><span>:</span> </span><span><span>1118</span><span>,</span> </span><span><span><span>&quot;</span>product_id<span>&quot;</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>&quot;</span>type<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>basic<span>&quot;</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>&quot;</span>from<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span><span><span><span> </span><span><span><span>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>non_us_pound<span>&quot;</span></span>\n</span></span></span><span><span><span> <span>}</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>&quot;</span>to<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>3<span>&quot;</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>&quot;</span>modifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>&quot;</span>option<span>&quot;</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>&quot;</span>conditions<span>&quot;</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>&quot;</span>type<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>device_if<span>&quot;</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>&quot;</span>identifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>{</span></span><span><span><span>&quot;</span>vendor_id<span>&quot;</span></span></span><span><span>:</span> </span><span><span>1118</span><span>,</span> </span><span><span><span>&quot;</span>product_id<span>&quot;</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>&quot;</span>type<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>basic<span>&quot;</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>&quot;</span>from<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span><span><span><span> </span><span><span><span>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>non_us_pound<span>&quot;</span></span><span>,</span>\n</span></span></span><span><span><span> </span><span><span><span>&quot;</span>modifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>{</span></span><span><span><span>&quot;</span>mandatory<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>&quot;</span>shift<span>&quot;</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>&quot;</span>to<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>grave_accent_and_tilde<span>&quot;</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>&quot;</span>modifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>&quot;</span>shift<span>&quot;</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>&quot;</span>description<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>mort: caps_lock -&gt; ctrl<span>&quot;</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>&quot;</span>manipulators<span>&quot;</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>&quot;</span>type<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>basic<span>&quot;</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>&quot;</span>from<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>caps_lock<span>&quot;</span></span><span>,</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>&quot;</span>modifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>{</span></span><span><span><span>&quot;</span>optional<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>&quot;</span>any<span>&quot;</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>&quot;</span>to<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>left_control<span>&quot;</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>&quot;</span>description<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>mort: S-' (<span>\\&quot;</span>) &lt;-&gt; S-2 (@)<span>&quot;</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>&quot;</span>manipulators<span>&quot;</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>&quot;</span>type<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>basic<span>&quot;</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>&quot;</span>from<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>quote<span>&quot;</span></span><span>,</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>&quot;</span>modifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>{</span></span><span><span><span>&quot;</span>mandatory<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>&quot;</span>shift<span>&quot;</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>&quot;</span>to<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>2<span>&quot;</span></span><span>,</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>&quot;</span>modifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>&quot;</span>shift<span>&quot;</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>&quot;</span>type<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>basic<span>&quot;</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>&quot;</span>from<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>2<span>&quot;</span></span><span>,</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>&quot;</span>modifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>{</span></span><span><span><span>&quot;</span>mandatory<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>&quot;</span>shift<span>&quot;</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>&quot;</span>to<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>quote<span>&quot;</span></span><span>,</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>&quot;</span>modifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>&quot;</span>shift<span>&quot;</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>&quot;</span>description<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>mort: <span>\\\\</span> -&gt; #; S-<span>\\\\</span> (|) -&gt; ~<span>&quot;</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>&quot;</span>manipulators<span>&quot;</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>&quot;</span>type<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>basic<span>&quot;</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>&quot;</span>from<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>backslash<span>&quot;</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>&quot;</span>to<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>3<span>&quot;</span></span><span>,</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>&quot;</span>modifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>&quot;</span>option<span>&quot;</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>&quot;</span>type<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>basic<span>&quot;</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>&quot;</span>from<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>backslash<span>&quot;</span></span><span>,</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>&quot;</span>modifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>{</span></span><span><span><span>&quot;</span>mandatory<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>&quot;</span>shift<span>&quot;</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>&quot;</span>to<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>grave_accent_and_tilde<span>&quot;</span></span><span>,</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>&quot;</span>modifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>&quot;</span>shift<span>&quot;</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>&quot;</span>description<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>mort: § -&gt; `; ± (S-§) -&gt; €<span>&quot;</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>&quot;</span>manipulators<span>&quot;</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>&quot;</span>type<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>basic<span>&quot;</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>&quot;</span>from<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>non_us_backslash<span>&quot;</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>&quot;</span>to<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>grave_accent_and_tilde<span>&quot;</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>&quot;</span>type<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>basic<span>&quot;</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>&quot;</span>from<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>non_us_backslash<span>&quot;</span></span><span>,</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>&quot;</span>modifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>{</span></span><span><span><span>&quot;</span>mandatory<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>&quot;</span>shift<span>&quot;</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>&quot;</span>to<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>2<span>&quot;</span></span><span>,</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>&quot;</span>modifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>&quot;</span>option<span>&quot;</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>&quot;</span>type<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>basic<span>&quot;</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>&quot;</span>from<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>non_us_backslash<span>&quot;</span></span><span>,</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>&quot;</span>modifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>{</span></span><span><span><span>&quot;</span>mandatory<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>&quot;</span>command<span>&quot;</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>&quot;</span>to<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>grave_accent_and_tilde<span>&quot;</span></span><span>,</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>&quot;</span>modifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>&quot;</span>command<span>&quot;</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>&quot;</span>type<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>basic<span>&quot;</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>&quot;</span>from<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>non_us_backslash<span>&quot;</span></span><span>,</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>&quot;</span>modifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>{</span></span><span><span><span>&quot;</span>mandatory<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>&quot;</span>command<span>&quot;</span></span><span>,</span> <span><span>&quot;</span>shift<span>&quot;</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>&quot;</span>to<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>grave_accent_and_tilde<span>&quot;</span></span><span>,</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>&quot;</span>modifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>&quot;</span>command<span>&quot;</span></span><span>,</span> <span><span>&quot;</span>shift<span>&quot;</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>&quot;</span>description<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>mort: ` -&gt; <span>\\\\</span>; S-` (~) -&gt; |<span>&quot;</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>&quot;</span>manipulators<span>&quot;</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>&quot;</span>type<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>basic<span>&quot;</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>&quot;</span>from<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>grave_accent_and_tilde<span>&quot;</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>&quot;</span>to<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>backslash<span>&quot;</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>&quot;</span>type<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>basic<span>&quot;</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>&quot;</span>from<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>grave_accent_and_tilde<span>&quot;</span></span><span>,</span>\n</span></span></span></span></span><span><span><span><span><span> </span><span><span><span>&quot;</span>modifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>{</span></span><span><span><span>&quot;</span>mandatory<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>&quot;</span>shift<span>&quot;</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>&quot;</span>to<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>backslash<span>&quot;</span></span><span>,</span>\n</span></span></span></span></span></span><span><span><span><span><span><span> </span><span><span><span>&quot;</span>modifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>&quot;</span>shift<span>&quot;</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 &gt; Profiles &gt; Keys) but the\nresulting configuration change is also straightforward:</p>\n<pre><code><span>\t\t\t<span><span>&lt;</span><span>key</span><span>&gt;</span></span>Keyboard Map<span><span>&lt;/</span><span>key</span><span>&gt;</span></span>\n</span><span>\t\t\t<span><span>&lt;</span><span>dict</span><span>&gt;</span></span>\n</span><span>...\n</span><span>\t\t\t\t<span><span>&lt;</span><span>key</span><span>&gt;</span></span>0x32-0x80000<span><span>&lt;/</span><span>key</span><span>&gt;</span></span>\n</span><span>\t\t\t\t<span><span>&lt;</span><span>dict</span><span>&gt;</span></span>\n</span><span>\t\t\t\t\t<span><span>&lt;</span><span>key</span><span>&gt;</span></span>Action<span><span>&lt;/</span><span>key</span><span>&gt;</span></span>\n</span><span>\t\t\t\t\t<span><span>&lt;</span><span>integer</span><span>&gt;</span></span>12<span><span>&lt;/</span><span>integer</span><span>&gt;</span></span>\n</span><span>\t\t\t\t\t<span><span>&lt;</span><span>key</span><span>&gt;</span></span>Text<span><span>&lt;/</span><span>key</span><span>&gt;</span></span>\n</span><span>\t\t\t\t\t<span><span>&lt;</span><span>string</span><span>&gt;</span></span>€<span><span>&lt;/</span><span>string</span><span>&gt;</span></span>\n</span><span>\t\t\t\t<span><span>&lt;/</span><span>dict</span><span>&gt;</span></span>\n</span><span>...\n</span><span>\t\t\t\t<span><span>&lt;</span><span>key</span><span>&gt;</span></span>0x33-0x80000<span><span>&lt;/</span><span>key</span><span>&gt;</span></span>\n</span><span>\t\t\t\t<span><span>&lt;</span><span>dict</span><span>&gt;</span></span>\n</span><span>\t\t\t\t\t<span><span>&lt;</span><span>key</span><span>&gt;</span></span>Action<span><span>&lt;/</span><span>key</span><span>&gt;</span></span>\n</span><span>\t\t\t\t\t<span><span>&lt;</span><span>integer</span><span>&gt;</span></span>12<span><span>&lt;/</span><span>integer</span><span>&gt;</span></span>\n</span><span>\t\t\t\t\t<span><span>&lt;</span><span>key</span><span>&gt;</span></span>Text<span><span>&lt;/</span><span>key</span><span>&gt;</span></span>\n</span><span>\t\t\t\t\t<span><span>&lt;</span><span>string</span><span>&gt;</span></span>#<span><span>&lt;/</span><span>string</span><span>&gt;</span></span>\n</span><span>\t\t\t\t<span><span>&lt;/</span><span>dict</span><span>&gt;</span></span>\n</span><span>...\n</span><span>\t\t\t<span><span>&lt;/</span><span>dict</span><span>&gt;</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>&quot;</span>profiles<span>&quot;</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>&quot;</span>devices<span>&quot;</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>&quot;</span>disable_built_in_keyboard_if_exists<span>&quot;</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>&quot;</span>fn_function_keys<span>&quot;</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>&quot;</span>identifiers<span>&quot;</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>&quot;</span>is_keyboard<span>&quot;</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>&quot;</span>is_pointing_device<span>&quot;</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>&quot;</span>product_id<span>&quot;</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>&quot;</span>vendor_id<span>&quot;</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>&quot;</span>ignore<span>&quot;</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>&quot;</span>simple_modifications<span>&quot;</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>&quot;</span>from<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>grave_accent_and_tilde<span>&quot;</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>&quot;</span>to<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>non_us_backslash<span>&quot;</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>&quot;</span>from<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>non_us_backslash<span>&quot;</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>&quot;</span>to<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>grave_accent_and_tilde<span>&quot;</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>&quot;</span>conditions<span>&quot;</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>&quot;</span>type<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>device_if<span>&quot;</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>&quot;</span>identifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>{</span></span><span><span><span>&quot;</span>vendor_id<span>&quot;</span></span></span><span><span>:</span> </span><span><span>1118</span><span>,</span> </span><span><span><span>&quot;</span>product_id<span>&quot;</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>&quot;</span>type<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>basic<span>&quot;</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>&quot;</span>from<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span><span><span><span> </span><span><span><span>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>left_option<span>&quot;</span></span><span>,</span>\n</span></span></span><span><span><span> </span><span><span><span>&quot;</span>modifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>{</span></span><span><span><span>&quot;</span>optional<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>&quot;</span>any<span>&quot;</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>&quot;</span>to<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>left_command<span>&quot;</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>&quot;</span>conditions<span>&quot;</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>&quot;</span>type<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>device_if<span>&quot;</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>&quot;</span>identifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>{</span></span><span><span><span>&quot;</span>vendor_id<span>&quot;</span></span></span><span><span>:</span> </span><span><span>1118</span><span>,</span> </span><span><span><span>&quot;</span>product_id<span>&quot;</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>&quot;</span>type<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>basic<span>&quot;</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>&quot;</span>from<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span><span><span><span> </span><span><span><span>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>left_command<span>&quot;</span></span><span>,</span>\n</span></span></span><span><span><span> </span><span><span><span>&quot;</span>modifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>{</span></span><span><span><span>&quot;</span>optional<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>&quot;</span>any<span>&quot;</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>&quot;</span>to<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>left_option<span>&quot;</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>&quot;</span>conditions<span>&quot;</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>&quot;</span>type<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>device_if<span>&quot;</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>&quot;</span>identifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>{</span></span><span><span><span>&quot;</span>vendor_id<span>&quot;</span></span></span><span><span>:</span> </span><span><span>1118</span><span>,</span> </span><span><span><span>&quot;</span>product_id<span>&quot;</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>&quot;</span>type<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>basic<span>&quot;</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>&quot;</span>from<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span><span><span><span> </span><span><span><span>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>non_us_pound<span>&quot;</span></span>\n</span></span></span><span><span><span> <span>}</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>&quot;</span>to<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>3<span>&quot;</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>&quot;</span>modifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>&quot;</span>option<span>&quot;</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>&quot;</span>conditions<span>&quot;</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>&quot;</span>type<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>device_if<span>&quot;</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>&quot;</span>identifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>{</span></span><span><span><span>&quot;</span>vendor_id<span>&quot;</span></span></span><span><span>:</span> </span><span><span>1118</span><span>,</span> </span><span><span><span>&quot;</span>product_id<span>&quot;</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>&quot;</span>type<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>basic<span>&quot;</span></span><span>,</span>\n</span></span><span><span> </span><span><span><span>&quot;</span>from<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>{</span>\n</span></span></span><span><span><span> </span><span><span><span>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>non_us_pound<span>&quot;</span></span><span>,</span>\n</span></span></span><span><span><span> </span><span><span><span>&quot;</span>modifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>{</span></span><span><span><span>&quot;</span>mandatory<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>&quot;</span>shift<span>&quot;</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>&quot;</span>to<span>&quot;</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>&quot;</span>key_code<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>&quot;</span>grave_accent_and_tilde<span>&quot;</span></span><span>,</span>\n</span></span></span></span><span><span><span><span> </span><span><span><span>&quot;</span>modifiers<span>&quot;</span></span></span><span><span>:</span> </span><span><span><span>[</span><span><span>&quot;</span>shift<span>&quot;</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}