Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New layout: "Four columns" (English). #292

Merged
merged 3 commits into from
Jun 18, 2023
Merged

Conversation

mockballed
Copy link
Contributor

This layout introduces a fourth column for letters and switches to a vertical, centered spacebar.

The idea is that each thumb gets assigned to a couple of columns and that they can reach horizontally to alternate pressing the spacebar. It also works well with one handed typing.

Design points

The spacebar is the most used key by far. Trying to reduce thumb fatigue by having it through the middle of the keyboard to avoid reaching down to tap it.

Backspace positioned at the usual place of the spacebar and shift/caps-lock are set as vertical swipes there.

Avoids using diagonal swipes.

The key distribution is guided by the QWERTY layout for familiarity, but in a way that the most common letters are center key-taps.

Letter distribution logic

For each letter-row of a QWERTY layout, pick the 4 most common letters and assign them as center-keys.

qwertyuiop -> e | t | i | o
asdfghjkl -> a | s | h | l
zxcvbnm -> c | b | n | m

The remaining keys are set as swipes on their nearest center-key in their letter-row, taking care to balance the overall cumulative frequency for each key.

qw[e] | r[t] | y[i]u | [o]p
a | [s]df | g[h] | jk[l]
zx[c] | v[b] | [n] | [m]

Downward swipes are assigned for the second most frequent letter, both left and right swipes for the third most frequent letter and upwards swipes for the less frequent one.

Finally, the extra keys usually make it possible for accented letters to be set as swipes on the same key as their base letter.

~

I've sketched layouts for Deutch (qwertz), French (azerty), Italian, Portuguese, Spanish, and they work out to have 8 to 10 of their most common letters as center-keys (French is the exception, with 7 of them). If this layout fits within Thumb-Key, I'll do a pr with the layouts for them.

Spanish layout:

I've been typing with these layouts for a few weeks and can touch-type by now :D.

I Used this study as a reference: "Letter Frequency Analysis of Languages Using Latin Alphabet"

Note: the layout is titled "v. Four Columns english v1" so it goes to the bottom of the list.

This layout introduces a fourth column for letters and switches to a vertical, centered spacebar.
Copy link
Owner

@dessalines dessalines left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks! I'll get this added shortly.

@dessalines dessalines merged commit c6e6524 into dessalines:main Jun 18, 2023
1 check passed
display = KeyDisplay.TextDisplay("q"),
action = KeyAction.CommitText("q"),
),
SwipeDirection.LEFT to KeyC(

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this necessary? I test this swipe, and although it does not display anything to the left, when you actually swipe it, a Q does print.

display = KeyDisplay.TextDisplay("y"),
action = KeyAction.CommitText("y"),
),
SwipeDirection.LEFT to KeyC(

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this necessary? Maybe you can simply delete this?

),
swipeType = SwipeNWay.FOUR_WAY_CROSS,
swipes = mapOf(
SwipeDirection.RIGHT to KeyC(

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this necessary? Maybe you can simply delete this? See above.

),
swipeType = SwipeNWay.FOUR_WAY_CROSS,
swipes = mapOf(
SwipeDirection.RIGHT to KeyC(

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this necessary? Maybe you can simply delete this? See above.

display = KeyDisplay.TextDisplay("z"),
action = KeyAction.CommitText("z"),
),
SwipeDirection.LEFT to KeyC(

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this necessary? Maybe you can simply delete this? See above.

display = KeyDisplay.TextDisplay("Q"),
action = KeyAction.CommitText("Q"),
),
SwipeDirection.LEFT to KeyC(

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this necessary? Maybe you can simply delete this? See above.

display = KeyDisplay.TextDisplay("Y"),
action = KeyAction.CommitText("Y"),
),
SwipeDirection.LEFT to KeyC(

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this necessary? Maybe you can simply delete this? See above.

),
swipeType = SwipeNWay.FOUR_WAY_CROSS,
swipes = mapOf(
SwipeDirection.RIGHT to KeyC(

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this necessary? Maybe you can simply delete this? See above.

),
swipeType = SwipeNWay.FOUR_WAY_CROSS,
swipes = mapOf(
SwipeDirection.RIGHT to KeyC(

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this necessary? Maybe you can simply delete this? See above.

action = KeyAction.CommitText("Z"),
),
SwipeDirection.LEFT to KeyC(
display = null,

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this necessary? Maybe you can simply delete this? See above.

@dominmana
Copy link

I love this idea and am testing it. I also made a Polish four column layout. I don't know how to use github really so I took the liberty of attaching the file to this thread - where the original idea comes from. I hope the file is correctly edited, I am not sure how to verify it. I simply replaced the layout by @mockballed with Polish characters. You can maybe add it to your pull request when you finish the other layouts you mentioned. I removed some lines that I thought were unnecessary.

When constructing this layout I followed @mockballed's guidelines, i.e. I calculated the frequencies of all "keys". They are not perfect, but maybe a good starting point. Some keys have a "total" frequency that is slightly higher than others.

image

Here is a preview of the Polish layout:

preview 4c-pl

Hope you can take care of this.
FourColumnsPLv1.zip

@mockballed
Copy link
Contributor Author

mockballed commented Jun 21, 2023

Neatly done, @dominmana. I'm happy you dig the design.

I'm about to submit some layouts and I'll focus on the Polish one next.

At a first glance, the center-keys for the first key-row should be ERIO, since the letter r is more common than the letter t edit: I see it's set so in the layout file you provided. The letter y could also fit as an horizontal swipe on the R key.

The "invisible" swipes you pointed out are intentional. My suggestion is that horizontal swipes should "head inwards" (towards the center of each pair of columns), but if someone were to find it more comfortable otherwise, they'd have the option. I figured people will find this by trial and error, though the feature could be indicated in a non-obstrusive manner.

I'd leave these hidden swipes as is for now. If they cause issues I won't be against removing them.

@dessalines
Copy link
Owner

@mockballed Also, could you create a name / prefix for these new layouts? In the same way that there is Thumb Key espanol, etc, you could create a special name for this group.

@mockballed
Copy link
Contributor Author

@dessalines yes, gladly. Do you mean something other than "Four Columns"?
This is how I've got the KeyboardLayout enum set at Types.kt:

enum class KeyboardLayout(val title: String, val index: Int) {
ThumbKeyENv4("Thumb-Key english v4", 0),
ThumbKeyENv4Symbols("Thumb-Key english v4 with symbols", 21),
ThumbKeyENv4Programmer("Thumb-Key english v4 (programmer)", 1),
ThumbKeyDEv2("Thumb-Key deutsch v2", 2),
ThumbKeyDAv1("Thumb-Key dansk v1", 3),
ThumbKeyESv1("Thumb-Key español v1", 4),
ThumbKeyEUv1("Thumb-Key euskara v1", 5),
ThumbKeyFAv1("Thumb-Key فارسیv1", 6),
ThumbKeyFIv1("Thumb-Key suomi v1", 7),
ThumbKeyFIv1Wide("Thumb-Key suomi v1 wide", 22),
ThumbKeyFRv1("Thumb-Key français v1", 8),
ThumbKeyITv1("Thumb-Key italiano v1", 9),
ThumbKeyNLv1("Thumb-Key nederlands v1", 10),
ThumbKeyPLv2("Thumb-Key polski v2", 11),
ThumbKeyPTv1("Thumb-Key português v1", 12),
ThumbKeyRUv2("Thumb-Key русский v2", 13),
ThumbKeyRUv2Symbols("Thumb-Key русский v2 с символами", 18),
ThumbKeyBYv1("Thumb-Key беларуская v1", 19),
ThumbKeyBYv1Symbols("Thumb-Key беларуская v1 з сімваламі", 20),
ThumbKeyUKv1("Thumb-Key українська v1", 14),
MessageEaseEN("MessageEase english", 15),
MessageEaseENSymbols("MessageEase english with symbols", 16),
MessageEaseHE("MessageEase עברית", 17),
MessageEaseDE("MessageEase deutsch", 23),
ThumbKeyNOv1("Thumb-Key norsk v1", 24),
ThumbKeyDEv2MultiLingual("Thumb-Key deutsch v2 multilingual", 25),
ThumbKeyKAv1("Thumb-Key kartuli ena v1", 26),
ThumbKeyIDv1("Thumb-Key bahasa indonesia with symbols v1", 27),
MessageEaseFR("MessageEase français", 28),
MessageEaseRUSymbols("MessageEase русский with Symbols", 29),
T9v1("T9 v1", 30),
ThumbKeyJAv1Hiragana("Thumb-Key japanese Hiragana v1", 31),
ThumbKeyJAv1Katakana("Thumb-Key japanese Katakana v1", 32),
ThumbKeyFRv2("Thumb-Key français v2", 33),
ThumbKeySVv1("Thumb-Key svenska v1", 34),
ThumbKeyTRv1("Thumb-Key Türkçe v1", 35),
FourColumnsENv2("vFour-Columns english v2", 36),
FourColumnsESv1("vFour-Columns español v1", 37),
FourColumnsDEv1("vFour-Columns deutsch v1", 38),
FourColumnsFRv1("vFour-Columns français v1", 39),
FourColumnsITv1("vFour-Columns italiano v1", 40),
FourColumnsPTv1("vFour-Columns português v1", 41),
}

@dessalines
Copy link
Owner

Yeah, like a short codename of some kind. Other people might make , column layouts.

@dominmana
Copy link

The letter y could also fit as an horizontal swipe on the R key.

In my first layout y was on the R key but then I looked at the calculated frequencies for the R and I keys and decided to move it to a 'vowel' key. But your idea to put y on the R key might be better. I have limited experience with this so you should decide.

I am also not sure what the difference is between top and side swipe in terms of ergonomics but I definitely have problems with diagonal ones, maybe I'm too old. I'm typing this comment on the new 4 column layout and it is much easier for my boomer thumbs.

The "invisible" swipes you pointed out are intentional. My suggestion is that horizontal swipes should "head inwards" (towards the center of each pair of columns), but if someone were to find it more comfortable otherwise, they'd have the option. I figured people will find this by trial and error, though the feature could be indicated in a non-obstrusive manner.

I'd leave these hidden swipes as is for now. If they cause issues I won't be against removing them.

I haven't thought of this and definitely see merits in having the invisible swipe option after your explanation.

@dominmana
Copy link

Yeah, like a short codename of some kind. Other people might make , column layouts.

Maybe "QWERThumb"?

@mockballed
Copy link
Contributor Author

I went with "Type-Split", but I'm not sure that's what Dessalines had in mind. I think this layout group should be under the main Thumb-Key ones.

@dominmana I did a PR with the Polish layout. Would you take a look?
#296 (comment)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants