mirror of
https://github.com/RGBCube/Site
synced 2025-07-30 20:47:46 +00:00
Add swap-i blog post
This commit is contained in:
parent
f37d06b07b
commit
532e2ed431
2 changed files with 140 additions and 0 deletions
BIN
site/assets/turkish-q-i.webp
Normal file
BIN
site/assets/turkish-q-i.webp
Normal file
Binary file not shown.
After Width: | Height: | Size: 13 KiB |
140
site/blog/swap-i.md
Normal file
140
site/blog/swap-i.md
Normal file
|
@ -0,0 +1,140 @@
|
|||
---
|
||||
title: Swap the ı and i key on your keyboard for faster modal editing
|
||||
description: How to swap the ı and i key on your Turkish keyboard on Linux.
|
||||
|
||||
date: 2024-05-20
|
||||
|
||||
tags:
|
||||
- localisation
|
||||
- modal-editors
|
||||
---
|
||||
|
||||
If you have ever used a Turkish-Q keyboard in combination with a modal
|
||||
editor before, you might have noticed that the `i` key is pretty far off
|
||||
to the side:
|
||||
|
||||

|
||||
|
||||
This blog post will guide you on how to swap the `ı` key with the `i` key
|
||||
(but not the `I` and `İ` keys). This will be a great change if you write primarily
|
||||
in English but need the Turkish symbols sometimes.
|
||||
|
||||
> There is `tr(us)` in the `xkeyboard_config` package that does something similar to this:
|
||||
>
|
||||
> ```cpp
|
||||
> // The basic Turkish layout with "i" and "ı" swapped.
|
||||
> // Originally by Ali Riza KESKIN <parduscix@yandex.ru>, 2021.
|
||||
> partial
|
||||
> xkb_symbols "us" {
|
||||
>
|
||||
> include "tr(basic)"
|
||||
>
|
||||
> name[Group1]="Turkish (i and ı swapped)";
|
||||
>
|
||||
> key <AC11> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC",
|
||||
> [ i, I, paragraph, none ]};
|
||||
> key <AD08> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC",
|
||||
> [ idotless, Iabovedot, apostrophe, dead_caron ]};
|
||||
> };
|
||||
> ```
|
||||
>
|
||||
> However, this only swaps the uppercase letters, so the `i` key is unchanged but
|
||||
> the uppercase of that key is `I` like in English. However, this is usually not
|
||||
> desired as this still reduces your typing speed (as the `iI` key is too far).
|
||||
|
||||
Let's create our own layout that does something similar but swaps the lowercase
|
||||
letters instead. Here is the code for that:
|
||||
|
||||
```cpp
|
||||
default partial
|
||||
xkb_symbols "basic" {
|
||||
include "tr(basic)"
|
||||
|
||||
name[Group1]="Turkish (i and ı swapped correctly)";
|
||||
|
||||
key <AC11> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC",
|
||||
[ idotless, Iabovedot, paragraph , none ]};
|
||||
key <AD08> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC",
|
||||
[ i , I , apostrophe, dead_caron ]};
|
||||
};
|
||||
```
|
||||
|
||||
The `default` key is needed because we are going to make this a standalone file.
|
||||
Save this to `~/.config/xkb/symbols/tr-swapped-i` and you can tell your WM/DE
|
||||
to use the `tr-swapped-i` XKB layout.
|
||||
|
||||
In Hyprland (The WM I use) you can do it like this:
|
||||
|
||||
```cpp
|
||||
# In ~/.config/hypr/hyprland.conf
|
||||
input {
|
||||
kb_layout = "tr-swapped-i"
|
||||
}
|
||||
```
|
||||
|
||||
That should swap the `ı` and `i` keys on your WM/DE successfully. However, we are not done
|
||||
yet.
|
||||
|
||||
The TTY (swap to TTY 2 by doing `CTRL-ALT-F2`) still doesn't use this layout, which is a problem.
|
||||
And it seems that the format the TTY uses is a little different.
|
||||
Looking at the `kbd` package, it uses a format called `.map`.
|
||||
|
||||
Here is a `.map` file that overrides the `trq` layout and swaps the `ı` and `i` keys:
|
||||
|
||||
```cpp
|
||||
include "/usr/share/keymaps/i386/qwerty/trq.map"
|
||||
|
||||
keycode 23 = i
|
||||
altgr keycode 23 = +icircumflex
|
||||
altgr shift keycode 23 = +Icircumflex
|
||||
|
||||
keycode 40 = +dotlessi +Idotabove
|
||||
```
|
||||
|
||||
Save it to the directory where you store your maps.
|
||||
|
||||
Note that the path `/usr/share/keymaps` might differ based on your distro. You
|
||||
can check what it is it by doing `man loadkeys` and scrolling to the bottom.
|
||||
|
||||
After that, consult your distro's docs on how to change the system keyboard locale.
|
||||
|
||||
This is how it is done on NixOS:
|
||||
|
||||
```nix
|
||||
{ pkgs, ... }: {
|
||||
console.keyMap = pkgs.writeText "trq-swapped-i.map" ''
|
||||
include "${pkgs.kbd}/share/keymaps/i386/qwerty/trq.map"
|
||||
|
||||
keycode 23 = i
|
||||
altgr keycode 23 = +icircumflex
|
||||
altgr shift keycode 23 = +Icircumflex
|
||||
|
||||
keycode 40 = +dotlessi +Idotabove
|
||||
'';
|
||||
}
|
||||
```
|
||||
|
||||
And this is how it is done on Arch:
|
||||
|
||||
```shell
|
||||
cat << :end
|
||||
include "/usr/share/kbd/keymaps/i386/qwerty/trq.map"
|
||||
|
||||
keycode 23 = i
|
||||
altgr keycode 23 = +icircumflex
|
||||
altgr shift keycode 23 = +Icircumflex
|
||||
|
||||
keycode 40 = +dotlessi +Idotabove
|
||||
:end > /usr/share/kbd/keymaps/i386/qwerty/trq-swapped-i.map
|
||||
|
||||
localectl set-keymap --no-convert tr-swapped-i
|
||||
```
|
||||
|
||||
After that, your TTY should also use this locale.
|
||||
|
||||
Gotta love having to mess with deep parts of your system because the Turkish-Q
|
||||
layout did the big mistake of reusing the `i` key as `ı`!
|
||||
|
||||
At least I'll type and edit faster now...
|
||||
|
||||
[Here is the commit where I implemented this, might be worth a look if you use NixOS.](https://github.com/RGBCube/NCC/commit/6d18066eb5ccefa4539205f3d6721e4a8ff8b97e)
|
Loading…
Add table
Add a link
Reference in a new issue