• Stars
    star
    116
  • Rank 303,894 (Top 6 %)
  • Language AutoHotkey
  • License
    MIT License
  • Created about 9 years ago
  • Updated 6 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A better modifier based keyboard layout

3l - A better modifier based keyboard layout

Three Layout, more commonly called 3l, is an alternative keyboard layout designed for efficiently typing both English text and computer programs. 3l is modifier based, so many of the keys which would normally be accessed on the top row (with numbers on QWERTY) can be accessed on the main part of the keyboard.

To give you an idea on how much this layout can improve your typing efficiency, compare typing distance of George Orwell's Nineteen Eighty-Four to other common layouts:

QWERTY 10.4 miles
Neo 2.0 6.3 miles
Antibracket (which this keyboard layout was based on) 6.3 miles
Dvorak 6.2 miles
Colemak 5.9 miles
Workman 5.8 miles
WULY (my old layout) 5.6 miles
ARENSITO 5.3 miles
3l 4.9 miles

Typing distance is not the only factor that 3l optimizes for. 3l helps increase hand alternation, reduce bottom-to-top row jumps, decrease lateral motion, and also strives to be easy to learn.

docs/standard_three.png

See the docs directory for more images of the layout.

Testing the layout without installation

On Linux (using X or Wayland):

  • If you have xkeyboard-config 2.27 or later: 3l is already installed on your system. Just type setxkbmap us 3l or use your window manager's settings to adjust your layout.

  • If you have xkeyboard-config 2.26 or earlier: clone this repository and run this command:

    setxkbmap 3l -print | xkbcomp -Ilinux/xkb - $DISPLAY
    

To return to QWERTY keyboard layout, type setxkbmap us.

On Windows, compile and run the provided AHK script. Your keyboard layout will return to normal when the script exits (in system tray). You may also be interested in toggling the layout.

On 9front, copy the file 9front/3l to /sys/lib/kbmap/3l. You can use kbmap(1) to switch between layouts.

Installation

Linux

To set 3l as the default keyboard layout for your system, add a section to your X11 configuration:

$ cat /etc/X11/xorg.conf.d/99-keyboard.conf
Section "InputClass"
        Identifier "system-keyboard"
        MatchIsKeyboard "on"
        Option "XkbLayout" "us"
        Option "XkbVariant" "3l"
EndSection

systemd has the localectl utility that you may optionally use to maintain this configuration file.

If you don't have xkeyboard-config 2.27 or later

Place the linux/xkb/symbols/3l file in your system's symbols directory. This is typically something like /usr/share/X11/xkb/symbols. You'll need the configuration to look a little different:

$ cat /etc/X11/xorg.conf.d/99-keyboard.conf
Section "InputClass"
        Identifier "system-keyboard"
        MatchIsKeyboard "on"
        Option "XkbLayout" "3l"
EndSection

Mac OS X [2]

  1. Install Karabiner Elements
  2. Copy the macosx/karabiner.json file to the ~/.config/karabiner/ directory.
  3. Select the 3l profile from Karabiner Elements.
[2]Get off your hipster butt. This can be used to refer to "OS X" and "macOS" as well.

Windows

There are two implementations of 3l for Windows, a simple AutoHotkey script located in this repository, and the more advanced ReNeo also offers a configuration for 3l. Depending on your needs, you may want to check out the ReNeo driver for advanced customization options.

AutoHotkey

Place the AHK script in your "Startup" folder.

To toggle between 3l and your system layout (e.g., QWERTY), press both Alt keys at the same time.

ReNeo

See the ReNeo repository for install instructions.

9front

Copy the file 9front/3l to /sys/lib/kbmap/3l. You can toggle the layout with kbmap(1).

To set the layout on boot, add it to your plan9.ini(8):

% 9fs 9fat
% cat /n/9fat/plan9.ini
  ...
  kbmap=3l
  ...
% unmount /n/9fat

Ensure that the file ends in a newline. You will also need to rebuild your kernel, following the instructions under FQA 5.

Frequently Asked Questions

What happens if I have to use someone else's computer and all they've got is QWERTY?

Short-term use of someone's computer with QWERTY is usually a non-concern. Since most keyboards have the layout printed on the key caps, most users of 3l don't have any issues surviving.

For long-term use (such as on a shared machine, or a school lab computer), applying the layout temporarily usually only takes a few minutes to setup and can help relieve some pains.

What happens if someone has to temporarily use my computer?

For Windows, see toggling the layout.

For Linux, most window managers provide a convenient way to toggle between layouts. If your window manager does not have that, just bind a key to run setxkbmap.

If anyone has some Mac OS X tips, please submit a PR. (I presume Karabiner makes this pretty easy.)

For 9front, use kbmap(1) to switch layouts.

How should I start learning?

The Klavaro Typing Tutor is configurable to multiple layouts (you can put in 3l as a custom layout) and is an excellent option for learning. You should start with the basic skills courses before the speed-typing courses.

Most users will recommend going cold turkey from your old layout when just starting to learn. This will help you focus on your learning, and learning survival QWERTY later is always an option.

How long does it take to learn?

Most users are able to accomplish survival typing skills (>20 WPM) within one week of starting to learn. Focusing on accuracy over speed during your first few weeks of learning will help you be successful, and you'll pick up the speed in the long run.

Will I forget QWERTY?

Most users seem to indicate that they lost some QWERTY skills while re-training their brain to 3l, but were eventually able to recover enough skills to survive in the long term.

Will I type faster than on my old layout?

Maybe. While most users report they are able to type faster than they could on QWERTY, the primary benefit of trying an alternative layout is in typing comfort and health. Many users enjoy reduced repetitive motions, and find typing longer hours less difficult.

Will I have to re-configure my text editor for the new layout?

3l was designed partly with keeping vanilla Vi-style keybindings somewhat sane in mind. If you find yourself using many systems and don't want to have to keep configuration in sync, you'll appreciate how easy it is to use Vi or Vim style editors with the default configuration. I personally use Emacs with Evil mode, and haven't had any issues keeping most of the Vi-style bindings in their standard configuration. That being said, if you find that some sort of rebinding with respect to 3l helps you, I'm curious to see what you've done. Maybe we can drop this in some sort of contrib/ directory.

I'm curious to hear if and what people do to work with 3l and non-Vi editors. Drop me an email or a PR :)

Is the symbols layer designed for a specific programming language?

The symbols layer is mostly derived from the Neo 2.0 keyboard layout, and to the best of my knowledge, was not designed with any specific programming language in mind. I've used it with everything from C-style languages, to HTML, to Haskell, to Python, and Lisp and have found that most every language benefits from the symbols layer.

What about using the layout on mobile?

Modern mobile keyboards (such as Gboard) tend to use machine learning algorithms for predictive input and autocorrect, and these algorithms were trained on QWERTY users. In addition, QWERTY's design of common bigraphs spaced far apart is incidentally a helpful design when using swipe typing. For these reasons, nobody has bothered with making a moblie version.

However, an Android or iOS version of the layout could potentially be useful for tablet typing. If someone with expertise in this domain wanted to implement this and submit a PR, that would be very much appreciated.

Community

Matrix Room

Join our Matrix chat room at #threelayout:ohea.xyz.

Mailing List

There is an email list for general chat about the layout. Please subscribe to the list. You can send mail to the list using the address:

[email protected]

You do not have to be a member to post, so feel free to reach out on this list with questions about the layout, even if you're not a user yet.

Users' Registry

This section lists people who have learned to type on 3l. Users who learn to type at least 15 WPM (that's what it takes to get past the initial learning threshold) on 3l can be added to this list. This list is included here so you can query typists to see what they like and dislike about the layout before you dedicate time to learning, or so you can reach out for learning tips.

If you learn the layout, feel free to submit a PR with your name added.

More Repositories

1

sdraw-racket

Draw cons-cell diagrams using Racket's pict library
Racket
12
star
2

micropython-ti89

Work in progress attempts to bring MicroPython to the TI-89 calculator. Because I can.
C
12
star
3

legacy-cgi

Fork of the standard library cgi and cgitb modules, being deprecated in PEP-594
Python
9
star
4

lambdacalc

Beta reducer and shorthand representer for the Ξ»-calculus
Python
4
star
5

dunnet-cl

WIP port of Dunnet (Emacs text-based adventure) to Common Lisp
Common Lisp
4
star
6

algobowl

The web app that serves our competition-based group project for Algorithms courses
Python
4
star
7

ec-zephyr-build

Hack to use EC makefile for Zephyr on Kukui EC PoC. Paste in zephyrproject directory, build zephyr and run make in EC directory
C
4
star
8

shell-starter-code

Write your own UNIX Shell in C! Here's some code to get you started.
C
3
star
9

navajo

BashNET Navajo is a HTTP server written in pure Bash. We are a direct competitor to the Apache Web Server.
Shell
3
star
10

puzzle-challenge-website

CS@Mines Puzzle Challenge Website (written in Python with TurboGears 2)
Python
2
star
11

csmdirsearch

Search the Mines directory
Python
2
star
12

esphome-configs

My personal ESPHome configs
Python
2
star
13

kconfiglib

Kconfig implementation in Python (original abandoned repo: https://github.com/ulfalizer/Kconfiglib)
Python
2
star
14

gdb-tutorial

A tutorial on GDB
TeX
1
star
15

cweather

Python
1
star
16

netregcli

python command line tool to register mac addresses on mines network
Python
1
star
17

voteserver

Vote using netcat!
Python
1
star
18

racket-sat

SAT Solver in Racket
Racket
1
star
19

slytherlisp-starter-code

Python
1
star
20

lug-docutils-presentation

TeX
1
star
21

lug-python-presentation

"The Pythonic Way", a presentation on the Python language and its cool corners!
TeX
1
star
22

busraffle

Script for running a raffle of n identical items
Python
1
star
23

suicide

An esoteric programming language. Not for the faint of heart. Note: this programming language is a joke.
Python
1
star
24

rubik-solver

Rubik's Cube solver. Note the project was not finished entirely due to time constraints (3D display works).
Java
1
star
25

adventure-dsl

Racket
1
star
26

schdl

A Scheme Inspired Hardware Description Language
Python
1
star
27

dotfiles

My personal config files for Linux/BSD
Emacs Lisp
1
star
28

vimqrc

Vim Quick Reference Card -- formatted for US letter paper
TeX
1
star