diff options
Diffstat (limited to 'article')
-rw-r--r-- | article/index.html | 4 | ||||
-rw-r--r-- | article/sway-keysym.html | 90 |
2 files changed, 94 insertions, 0 deletions
diff --git a/article/index.html b/article/index.html index fb5c9cf..47c3524 100644 --- a/article/index.html +++ b/article/index.html @@ -12,7 +12,11 @@ <p>Pages for other projects (i.e. Evosaur) are not listed—only independent articles are listed here. These are sorted from newest to oldest. Some do not come with HTML anchors: these articles are not published online, but are still listed here. For these, you may ask me for a copy in real life, but it is within my rights to decline such requests. Note that if an article ID has an asterisk (*), it is considered fiction and its meaning shall not be interpreted literally.</p> <p><a href="/contact.html">Feel free to comment on any of the articles.</a></p> <ul> +<<<<<<< HEAD <li><a href="affirmative-action.txt">Affirmative Action in Light of Harvard/UNC Case</a> (21)</li> +======= + <li><a href="sway-keysym.html">Sway keysym</a> (21)</li> +>>>>>>> fe23d62 (Sway keysym) <li><a href="hardware-oligopoly.html">Hardware Oligopolies and the Decentralization of Hardware Production</a> (20)</li> <li><a href="unicorn.html">Unicorn</a> (19*)</li> <li><a href="texmacs-maxima-integral.html">TeXmacs Maxima Integrals</a> (18)</li> diff --git a/article/sway-keysym.html b/article/sway-keysym.html new file mode 100644 index 0000000..cf93b4f --- /dev/null +++ b/article/sway-keysym.html @@ -0,0 +1,90 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en"> + <head> + <title>Sway keysym</title> + <link rel="stylesheet" href="/plain.css" /> + <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" /> + <meta charset="utf-8" /> + </head> + <body> + <h1>Sway keysym</h1> + <p>Article ID: 21</p> + <p> + Under the <a href="https://swaywm.org/">Sway</a> Wayland compositor, we could set set <code>xkb_layout</code> and <code>xkb_options</code> for keyboards in order to do weird key mapping related things. Many people use <code>caps:ctrl_modifier</code> and <code>caps:escape</code> in <code>xkb_options</code> (see <a href="https://man.openbsd.org/xkeyboard-config">xkeyboard-config(7)</a> for other options) to make Caps Lock function as an extra Ctrl or Esc key. + </p> + <p> + If all you want to do is do a relatively common modification like that, chances are that <code>xkb_variant</code> and <code>xkb_options</code> already has what you want, and you should just set that. + </p> + <hr /> + <p> + But if what you want isn't covered in the standard XKB files, hear my story. I personally wanted Caps Lock to function as an additional Shift key, which isn't covered in <code>xkb_options</code>. (<code>caps:shift</code> doesn't differ much from normal Caps Lock, make it confusingly documented and doesn't make the Caps Lock function as an extra Shift.) + </p> + <p> + On X11, I would simply use <code>xmodmap -e "keysym Caps_Lock = Shift_L"</code>. Now my Caps Lock functions as an extra Left Shift. Works just alright. + </p> + <p> + But now that I switched to Wayland, Sway in particular, <code>xmodmap</code> for X11 isn't going to work. What I ended up doing was the following: + </p> + <p> + <b><code>$HOME/.xkb/symbols/gbcustom</code></b> + </p> +<pre>default partial alphanumeric_keys +xkb_symbols "basic" { // leave "basic" in-tact unless you know what you're doing + include "gb" // or whatever base layout you use, most likely "us" + name[Group1] = "English (UK) Customized"; + key <CAPS> { [ Shift_L, Shift_L, Shift_L, Shift_L ] }; +};</pre> + <p> + Note that here, the ``<code>key</code>'' lines are in the form <code>key <X> { [ A, B, C, D ] } ;</code>, where ``<code>X</code>'' is the keycode symbolic name of the physical key you want to press. In my case, it is <code>CAPS</code>. Check <code>/usr/share/X11/xkb/symbols/pc</code> and <code>/usr/share/X11/xkb/symbols/latin</code>, or the relevant files for your keyboard configuration, to look up the keycode symbolic name from the name you're used to. (Looking up <code>Shift_L</code> in <code>symbols/pc</code> gets you to <code>LFSH</code>, which is what you would use in place of ``<code>X</code>''. <code>A</code> is triggered when <code>X</code> is pressed alone, <code>B</code> when it's pressd with Shift, <code>C</code> with AltGr, and <code>D</code> with both AltGr and Shift. + </p> + <p> + <b><code>$HOME/.config/sway/config</code></b> + </p> +<pre>input "1:1:AT_Translated_Set_2_keyboard" { + xkb_layout "gbcustom" +}</pre> + <p> + Of course, replace ``<code>1:1:AT_Translated_Set_2_keyboard</code>'' with your actual keyboard identifier listed in <code>swaymsg -t get_inputs</code>. And reload Sway. + </p> + <p> + There might be better ways to do so, but I've got this to work. For these unusual setups, it is a bit complicated and not as straightforward as adding a <code>xmondmap</code> line to <code>.xinitrc</code>. Hopefully things would get better as Wayland matures. + </p> + <p> + <a href="https://github.com/swaywm/sway/issues/4250">This GitHub issue</a> and <a href="https://www.city17.xyz/keychron/#xkb-here-be-dragons">jman's article on this</a> were extremely helpful. Thanks to <a href="https://sr.ht/~brocellous">brocellous</a> for pointing out the solution involving custom options. + </p> + <hr /> + <p> + Another, potentially better method involving defining custom <code>xkb_options</code>, propsed by brocellous: + </p> + <p> + <b><code>$HOME/.xkb/symbols/customsymbol</code></b> + </p> +<pre>// Remap caps to Shift_L +partial modifier_keys +xkb_symbols "caps_lshift" { + replace key <CAPS> { + type[group1] = "ONE_LEVEL", + symbols[group1] = [ Shift_L ], + actions[group1] = [ SetMods(modifiers=Shift) ] + }; +};</pre> + <p> + <b><code>$HOME/.xkb/rules/evdev</code></b> + </p> +<pre>! option = symbols + custom:caps_lshift = +customsymbol(caps_lshift) + +! include %S/evdev</pre> + <p> + <b><code>$HOME/.config/sway/config</code></b> + </p> +<pre>input "1:1:AT_Translated_Set_2_keyboard" { + xkb_layout "gb" + xkb_options "custom:caps_lshift" +}</pre> + <div id="footer"> + <hr /> + <p><a href="/">Andrew Yu's Website</a></p> + </div> + </body> +</html> |