To me, making the keyboard more useful is much more about changing the shape of the keyboard than remapping a bunch of keys. An ergo shape and putting more functionality on the thumbs (see the Moonlander for an example, but there are a number of keyboards that do this) has done more to improve my keyboarding experience than twiddling what Control does.
> To me, making the keyboard more useful is much more about changing the shape of the keyboard than remapping a bunch of keys.
I totally agree. One big issue is that many work on laptops and cannot / won't carry an ergo keyboard around.
The second best I found, besides having an ergo keyboard, is to use an actual japanese keyboard: laptops with japanese keyboard can easily be found / shipped. You can have a Mac laptop with a japanese keyboard, for example.
And thanks to the narrow spacebar on japanese keyboards and the additional modifiers, you get more modifiers and they're easier to reach.
So I use a japanese keyboard even though I'm not japanese.
There's pretty active "ortholinear keyboard" community that has boards for basically any shape you really want. It's not a horrible way to get started with PCB design either. I have... too many keyboards now, most of which ortholinear. The most important thing for me being split, it helps immensely with wrist pain. I might find myself picking up a moonlander at some point here too, they look really nice and the high adjustability is pretty nice
I am an advocate for ortholinear boards. I have used simple 4x12 split boards (Let’s Split/Levinson) since 2017 and haven’t had any pain or other issues with my wrists.
It is pretty easy to build your own now as there are hot swap PCBs that don’t require soldering.
The worst part of having a small orthro board is staring at the hundred nice looking keycaps that have no home on your board after buying a set and putting on your base 48 keys.
I started with a Let's Tango (basically, a Let's Split derivative with a nice aluminum case) but have since moved to a mix of Corne and Boardsource's Lulu (Lily58 derivative). 40% split is a sweet spot for me.
I hear you about the keycaps. My solution to this is to just bulk order plain PBT keycaps so it doesn't feel as bad when you have spares, but it certainly doesn't look as good. It also kind sucks that not every profile works well with non-staggered layouts.
Still working on wrist pain though. I think I can attribute it to my slightly too high desk (which is unfortunately not adjustable).
That's why I like Mac keyboards. Cmd is right under your thumb.
I did the same for my Linux machine, so win/alt/ctrl instead of ctrl/win/alt. It's a game changer and doesn't require any hardware modification.
Thumb keys are the most underrated ergo keyboard feature. The thumb (and thumb knuckle) clusters on my Keyboardio Model1 are the best part of its design.
As a piano player I don’t get all that obsession about the home row. I like (and possess) a good quality keyboard as the next guy, but that home row optimization makes no sense to me. Moving your arms is good for you, not bad! Look at a 88 key piano, people manage just fine to move their arms up and down a bit.
Moving your arms, yes, but not your wrists!. Unless you want a row of keys stretching six times as wide as a standard keyboard, we are talking about entirely different movements here.
As a side note, the piano is infamous for causing injuries. A lot of work has gone into mitigating them, but it's not an ideal platform by any means.
What we really need to do for PC keyboards is split the keyboard into two halves and get rid of the typewriter column stagger.
I’m a different piano player than who you are responding to, but I kind of type this way. I’ve never been a home-row person, and will cross my hand over the other if it’s convenient (or, more usually, just drift one hand onto the “other side” or up or down), but don’t have any trouble typing around 130wpm with accuracy (I can go faster but quickly lose accuracy).
Sidenote, but I’ll also do one-hand 5-finger typing on a cellphone screen, because it’s faster than thumbs even with the input lag. Or I did, until I got hooked on word-swiping.
I know I’m biased from years of practice doing it this way, but I still kinda believe that most people don’t because they didn’t take a few minutes out of their day for a week or two to really focus on their hands as they input. Instead, they’ll focus on shifting around their hardware and software, even though rewriting your wetware really doesn’t take that long and is far more portable. I even suspect that the 60-key enthusiasts are actually just tricking themselves into this kind of focus as a kind of oblique strategy.
As a non-piano player that started having wrist problems over 10 years ago, +1 to this. Rewriting my wetware has had the biggest impact.
Two tricks that made all the difference: Float my hands, move from the shoulder.
After trying all sorts of keyboards and mice (and still loving them), I can now type comfortably on any keyboard in any weird position. Hell I do most of my writing on an iPad + Magic Keyboard combo sitting in my lap. Can type for hours like this with zero pain or discomfort.
The hard part was learning how to move my mouse from the shoulder instead of using finger or wrist movements. Keyboard was relatively easy.
> Moving your arms, yes, but not your wrists!. Unless you want a row of keys stretching six times as wide as a standard keyboard, we are talking about entirely different movements here.
Not really. It's the obsession with home row that creates wrist-twisting.
> What we really need to do for PC keyboards is split the keyboard into two halves and get rid of the typewriter column stagger.
I'm self-taught and instead use the edges of the keyboard to orient myself, and use my shoulders and elbows to move my forearm inwards from a very different resting positing. Not much wrist movement.
(for anyone curious, my usual resting keys are around shift/a/w/d/space and alt/l/p/[/] on a US qwerty keyboard, but it's not strict)
I am exactly the same way, and it’s refreshing to run into a like-minded soul. I will admit to having always wanted to try a stenographer’s keyboard, though, just optimized for code.
This response blows my mind. I'm not a piano player, but I have played stringed and brass instruments of various kinds since high school (over 20 years, sheesh).
On every instrument I played, there are fundamentals that are required to get beyond the beginner level. Without proper form more advanced techniques can be harder to learn, and even worse can lead to injury. Louis Armstrong couldn't play trumpet at the end of his career because his lips constantly hurt. I would imagine there are pianists with wrist or finger injuries due to years of playing with improper form.
So on a computer keyboard, the things you want to optimize for are speed, accuracy and ergonomics. It's not like a piano. Expression is not a factor. Nobody cares if you type staccato or legato. Home row typing is the most common way to optimize for this, but not the only way.
I don't use the proper home row, but I did learn to type that way originally courtesy of Mavis Beacon.
Interesting take, I love it. That said - do people play piano for 6-8h a day? Or, knowing piano players and their … let’s say “determination”: after how many hours do your arms get tired?
You have to gain a habit of holding your body and hands very specifically at a piano to not gain an rsi (which at the beginning does make you more tired, but like anything else you gain the needed muscles over time if you stick with it). Most people aren't that careful with their keyboard positioning and how they hold themselves while typing, so I do have to wonder if there's more to be done on the human side even with an unoptimized keyboard layout.
I do wonder what will happen to ergonomics in the upcoming VR-replaces-your-laptop revolution. Apple had some working steps highlighted in their ad for Vision Pro that would make a piano player weep
You raise good points, and just showed me what my fallback career should be: Herman Miller salesperson targeting just professional musicians. Proper ergonomics is going to blow their minds! The people who want orchestras to look they did in 1700s Austria will just have to get over it
I think the rationale is that it aggravates repetitive stress injury. I am not a doctor and lucky not to have an RSI, do not play the piano either, so I do not really have an opinion for this. The reason I avoid the remappings because it messes up my muscle memory when I have to move between computers.
If you are going to do all this, you might be better off getting a half of a steno keyboard, plover, and use https://github.com/Abkwreu/plover-left-hand-modifiers/blob/m.... Essentially, it allows every shortcut to be typed in two strokes/presses of keys, and using only the left hand.
I have access to/can input nearly any shortcut, punctuation, modifier, reg key, numpad, number bar, arrow keys, etc all on one hand, and the system is very easy to learn. I don't care about shortcuts anymore as they are all nearly the same difficulty to input, and I never need to move my hand to do it. This takes only a few hours to learn at most.
Hitting ctrl+t on a keyboard once is more wrist/finger movement than I normally see all day using this.
This is incredible and something I feel I've been waiting for for a while without knowing it. I transitioned to an alternative keyboard layout (colemak) several years ago in order to alleviate some RSI in my wrists. I have a few questions if you wouldn't mind.
How long did it take you to learn this layout? Is there a sequential method to learning it, similar to using tarmak for learning colemak? A difficulty I sometimes face is using a regular qwerty layout—do you experience difficulty using a normal keyboard?
I am/was a long-time colemak user, too. Most keyboard layouts I've found I learn about 1wpm per hour of dedicated typing practice. Qwerty is really bad, but I don't have trouble typing on it, no. I can switch between layouts easily if I have to. I can type one or two more layouts around 30-50wpm as well. I don't have any difficulty using a regular keyboard no, but typing individual letters kind of feels like a scam now.
This system for the shortcuts is only a few hours. A lot of it is phonetic, and the numbers are in binary. Numpad is binary + *, and function keys are binary + r.
So if you know binary and can hold one of three extra keys, you now have three ways to do numbers and the only difference is one key.
Shift+num works for punctuation too, so you don't really need to know all the punctuation shortcuts. You just need to remember what they are on a regular keyboard and then its just sh+binary.
The other things you'd need to know are how letters work (the ones not shown), and the shortcut combinations, but there are not that many of those, and they stack on top of each other visually.
You'd just need a 10-key keyboard, or toggle plover on and off to use this dictionary.
If you mean the rest of plover/steno, its a drastically higher learning curve and is basically a hobby for me. Just being able to fingerspell (type single letters) is learning another keyboard layout. But this combines several of my interests, so its not bad for me.
Learning wise, I am a huge Supermemo fan, so I just use that to memorize/review the stuff that needs it beyond learning the theory (which I also review in Supermemo). Most people would use Anki or Mochi.
Remapping the non-locking caps lock to control is a no brainer - and if you train yourself to use control-[ to get ESC, then you don’t have to leave the home row. (us keyboard - not sure how that works out in other locales, but caps lock should be eliminated everywhere. Or at least require turning two simultaneous icbm style launch keys to engage.)
I've been using the CAPS LOCK as both Control (on hold) and Escape (tap) for years now, and it's just wonderful. I even kept a similar setup when I built my Dactyl Manuform (one of the large thumb keys is both Control and Escape).
If I were ever to design a keyboard with a thumb cluster, I would separate out ctrl and esc to separate keys. When typing quickly, I occasionally get an esc when I wanted ctrl. I've tried fiddling with the delays, but I've never gotten it to work quite right 100% of the time. I suspect my timing (how long I hold the caps lock button) varies depending on what I'm doing and how fast I'm typing.
I did something similar, but I mapped it (on hold) to cmd + control + option + shift so it effectively becomes a new modifier key that I use to define shortcuts that will never clash with any existing shortcuts. I use it to launch / switch to specific apps, move windows, etc.
Caps Lock can be a useful feature. e.g. developers may want to type CONSTANTS_LIKE_THIS; and it's useful to be able to have a "shifted mode" which avoids the need for either alternating shift keys, or holding shift key with a pinky finger.
I saw a feature "Caps Word", which automatically returns to the unshifted state as soon as a non-letter key (like space) was pressed. That seems a good idea.
That said, yeah, Caps Lock isn't so useful that it's worth putting where it is on typical keyboards.
Ah, I'm not saying Caps Lock key is in a good spot. I'm just saying that CapsLock is sometimes a useful mode to use. -- e.g. as you say, if you can activate it some other way, it can still be useful; and there are other features which are similar and useful.
I do think "replace caps lock with ctrl" isn't the best, though. -- Especially if you've got a mind for staying on home row, then I'd instead suggest putting the modifiers Shift/Ctrl/Gui/Alt as tap-hold keys underneath the home row keys.
Being a Windows user I have an AHK script I run on every PC I work on regularly. It remaps Caps Lock into a special modifier key but does so in a conditionally timed way which keeps Caps Lock working as it normally does as an on/off toggle - but only when pressed and released by itself. If I use Caps Lock like a modifier key by holding it down and hitting another key simultaneously then Caps Lock works like a modifier - which I use to remap other home row keys like arrows etc.
This works transparently while giving me another very useful modifier key right on the home row without giving anything up. It's especially useful on laptops where I don't have extra modifier keys like my custom desktop keyboards but I now use it everywhere. Here's the relevant chunk of AHK script:
CapsLock::
KeyWait, CapsLock ; wait for Capslock to be released
KeyWait, CapsLock, D T0.2 ; and pressed again within 0.2 seconds
if ErrorLevel
return
else
if (A_PriorKey = "CapsLock")
SetCapsLockState, % GetKeyState("CapsLock","T") ? "Off" : "On"
return
*CapsLock::
return
#If, GetKeyState("CapsLock", "P") ;Your CapsLock hotkeys go below
i::Send {Up}
j::Send {Left}
k::Send {Down}
l::Send {Right}
m::Send {End}
u::Send {Home}
y::Send {PgUp}
n::Send {PgDn}
h::Send {BS}
`;::Send {Delete}
-::Send {–} ; Alt+Minus = En dash
=::Send {—} ; Shift+Alt+Minus = Em dash
a::^a
Space::Enter
q::PrintScreen
r::F5
s::Browser_Back
d::Browser_Forward
Capslock & LButton::WindowMouseDragMove()
Capslock & RButton::WindowMouseDragResize()
Though, with using fancy keyboard-remapping software, then "dashes as underscores" can be done automatically. e.g. QMK does it with: https://docs.qmk.fm/#/feature_caps_word
Shoutout to vim - select the text then shift+U. Especially nice cause you can use multi select to do it in many places at once. I bet eMacs can’t do that ;)
Very glad you responded kindly, I realized after I posted that that the sarcasm might not be clear. I feel like we’re two soldiers from some long forgotten war, finally shaking hands… ;)
Not a pianist, but I also don't get the obession with the home row. I can snipe the ESC key with my left ring finger faster than pressing that key combo.
My wrist barely moves for that action, and I haven't had RSI yet after 20 years. I do play the guitar though so maybe that gives me some extra dexterity?
With the TPMouse script, I implemented the activation shortcut as [LShift][RShift][C (trackball mode) / G (grid mode) / Q (quit)], which I felt had a nice balance between deliberateness and easy-to-reach (since you are using it with your hands on homerow).
Though because some keyboards have key rollover issues with using both Shifts, [Capslock][<modekey>] is also allowed as an alternative activation shortcut.
I don’t use <CTRL> very often, if I think about it, maybe to open and close tabs in a browser or something. But I really liked “tap caps locks for <ESC>, hold for <CTRL>.”
I find it honestly hilarious that “don’t use caps lock for emphasis” is one of the otherwise very-abstract Hacker News Guidelines. A relic from the great flame wars of the past, I think…
I use it to type in Danish and Italian, as it happens (plus Swedish and French every now and then).
Æ, Ø, Å aren't dead keys, they're available via AltGr + Z, L, and W respectively. However, Italian and French accented letters (as well as Swedish/German Ä/Ö) are available via either AltGr or dead keys - and I find myself almost always using dead keys, perhaps because they are more "logical" so I learned them faster.
And of course, typing any kind of quote is a dead key in every language (quote followed by spacebar).
By now, after so many years, dead keys are well in muscle memory so they feel barely any slower to type than regular two-key combos (like uppercase letters).
inoremap jk <esc> is even more optimal - it's extremely easy to type (in QWERTY, it's under the two strongest fingers you own aside from your thumbs), very fast, and minimally invasive (unless you frequently type the string "jk").
I chose the opposite of customization: I decided to train really hard on my standard country-specific 104/105-key keyboard layout. After 20 years I can blindly type every symbol, reach every key, grab the mouse and find my way back, thanks to those 2 notches on the letters 'F' and 'J' to position your index fingers. I bring such a wireless keyboard with me wherever I go - even on vacation - as I cannot work with notebook layouts or Mac keyboards. I'm confident that this keyboard type will be available to buy for a long time.
Not having to take my eyes off the screen prevents a lot of mistakes.
Those notches are about to turn 50! There's a lot of patents out there for various hand alignment helpers but the one that is closest to what everyone is used to is 3848723 [1] filed 23 July 1973.
Same for me, learned to properly touch type with my language layout and with the help of notches on 'f' and 'j' to help me find home row. Being able to keep my eyes on the screen while typing catches a lot of mistakes.
When travelling I still like to bring the old trusty Microsoft Bluetooth Mobile Keyboard 6000 [1] (phew :), even though the laptop is a Mac.
On Linux, I use keyd[1] and while I understand that keyd itelf could never run on the Mac, I'd love something that could take my keyd conf and make it work (even approximately) on the Mac.
I wish I was a coding god such that the limiting factor was how quickly I could send commands via hotkeys or the interface or whatever. Hell, there are moments that I have to sit there carefully planning out in my mind the sequence of actions I'll need to take to accomplish some task.
The rest of you out there, you're trying to shave 1400ms off your score by being able to use the homerow as if they were arrow keys? Fuck me.
Do you ever go to sit down in front of the tele to watch a movie, and right as you get comfortable, you realise "Bollocks, I forgot to turn that light off"? So you get up, turn off the light, sit back down, and then remember "ah I left my nice warm beverage out of reach". If you are like me, each one of those moments is like a little mental kick in the groin, and that's kind of what it feels like when I reach for the mouse to move a window or click a button I can't just activate with the KB, or when I have to spam Ctrl+RArrow to move across a line. I like to minimise those mental kicks to my groin. I'm not so fussed on speed, I just don't like feeling inefficient in that way.
There are times when you think, plan and read code, and there are times when you just write. Getting fast and accurate at typing allows you to think more freely as you no longer have to think about the individual characters that make up the words you're typing
Maybe the timing is taken from thin air, but +1s is actually very noticeable (it will feel super laggy if an interface has this delay).
And if you do this 1000 times a day (but probably more) you'll remove so much annoyance and it just feels better, more comfortable and at least for me it's easier to enter and stay in the flow state if annoyances like these are kept to the minimum.
Agreed. Also, if only there already existed (for more than half a century too) hard- and software specialised for typing speed that you could use instead of the general purpose system you have available on every computer...
Truly a horrible underdeveloped world we live in, that we have to hack together our configs and code to this degree and having to watch as no wheel in existence can ever be as good as the one I just now built in five minutes.
(terribly sorry for the bitter sarcasm, it's a pain point of mine)
So I actually have a setup like this using a JIS keyboard Moom and Karabiner.
JIS keyboard in QWERTY mode with left thumb key (英数) mapped to cmd and right thumb key (かな) as a modal key that allows me to access a custom layer with:
- esdf as arrow keys
- w/r as backspace/delete
- a/g as home/end
I also map left cmd (英数) + esdf and w/r to behave like holding ctrl on windows. i.e. move and delete by word.
Used to have another mode with phone-like numpad mapping for number entry but never used it enough.
I then have Moom for window managment with shortcut set to ctrl + space and then the following hot keys:
Pitifully inexpensive compared to the value and amount of time that you probably spend at the keyboard.
With two profiles (eg: home / work / laptop), and a dedicated "macro-zone" that you can control the color of the backlights, it's literally a game-changer when not used for gaming purposes.
I've got certain frequently used commands / passwords / passphrases programmed in those buttons (color coded: green for gpg passphrase, blue for ssh, red for login, etc), and it also supports a "layer" mode, so you could use that like a particular "shift key" for your app if you're like a video editor or streamer or something... red for pause, green for play, yellow for cut/paste, etc.
All the buttons are 10000% remappable, it's basically like being able to 'hot-edit' your keyboard in real-time. Map/macro "A" to "Z" or "A" to "AAA" or "Z" to "F12" or whatever. Basically each button on your keyboard can kindof do whatever you want or need to at a time, and you can switch through the different "profiles" in order to change how the keyboard behaves depending on the app/computer/task that you're interacting with.
If you're considering the RGB-version, please consider this a "glowing" review. ;-)
> I've got certain frequently used commands / passwords / passphrases programmed in those buttons (color coded: green for gpg passphrase, blue for ssh, red for login, etc)
Isn't that rather unwise? Your keyboard has become your key to everything.
A password manager and/or USB security key and/or smartphone key vault are much better places to store secrets.
Yeah, I should switch my one USB device that emits keyboard HID events for another USB device that also emits keyboard HID events but is smaller, easier to lose, and has less buttons. ;-)
But yes, I agree with you in principle. In practice, locks are delaying devices and I'm much more worried about MITM or software/malware/supply-chain attacks than physical access attacks to my home office. "Passwords in the keyboard" require a physical presence to access rather than attacking the password-store or sniffing them from environment variables, temp-files, etc. Can't hack the keyboard unless I'm the one pushing they keys.
99% of my passwords are in vaults of some sort and are subsequently backstopped by 2FA/Authenticators. In the case of heightened paranoia (or if anyone other than my immediate family had any kind of access to my office), you could even do something like `1234-$MAGIC_KEYSTROKE-5678`, or `amazon-$MAGIC-2023-01-01` making it a bit more like length-increaser in the "bring-something, know-something, be-something" triangle of authentication.
Buy one and try it! Buy one of these too, and report back if you think it can help your security posture: https://www.securedrive.com/product/secureusb-kp-encrypted-f... ...I'd like to get one and try and figure out how to temp-mount my core password-store, then share/auth that between my various home computers.
Y'all don't map the Caps Lock to a secondary backspace?
Do you never make mistakes? Do you have long fingers that can reach the original backspace without taking your hands off the home row? What do you do ?
Foe me, having a backspace in place of the CapsLocks is absolutely irreplaceable
But to answer your question, yep, long fingers: I can keep my forefinger on the F key while hitting Backspace with my pinky, and it's not that much of a stretch.
That would be a good way to strengthen my pinkie, I would also do it the other way around, d to backspace (move the cursor left), f to delete(move the cursor right)
I do something similar and using the ring + middle finger is actually super comfortable (at least for me). I have it as a one-shot Ctrl (I can either hold or tap it to modify the next keypress).
And yes, it's more comfortable than remapping caps-lock, although I don't use a standard keybord layout and using the weak pinky for such a common action is far from optimal (I use the 34 key Ferris).
Agree re. Caps, it's indeed not a great key (pinky+lateral move), though could't get to a comfortable enough use for simultaneous key presses myself, and with a right Command available for the same functionality not sure it's worth training much as nothing beats thumbs in ease of use
On macbooks at least left and right command keys cannot be detected simultaneously because it's a rare enough use case that they'd rather skimp the 1/4 cent on a diode. If you want modal thumb keys on a standard keyboard, JIS is pretty much your only option.
what do you mean? just tested left+right command simultaneous key press with Karabiner on a macbook and it worked. Also I meant a single right command (or option) as a modifier key instead of S+D
I very much understand people are different and it seems for some people details like these are important.
That said, with the work I do (mostly Java/Kotlin/C# backend and TypeScript frontend) and the way I do it (IDE), if typing speed ever becomes a bottleneck, something has gone horribly wrong somewhere.
And since I have went through a number of times earlier in my life where I thought I had to learn vim, I think it can be good to try the other way around and ask everyone who doesn't love their vim setup but feel they have to:
Why are you doing all this typing? If you update a variable name or a method signature and the rest of the code doesn't automatically update itself as far as possible, why is this? Why is your (hopefully) modern computer allowed to slack of while you have to think and work hard?
Intelligent autocomplete, template insertions and automatic refactoring has been available for a long time now in mainstream languages.
If you aren't using it, chances are you are wired really different than me or you are missing out.
Edit: but if you love your vim setup, just continue. I love watching people who are good with vim. It is performance art.
But I decided it isn't for me, and I personally think for a number of others too, if they had spent a fraction of the time they've spent tweaking their setups on actually learning a real IDE that could have made a bigger difference.
> if typing speed ever becomes a bottleneck, something has gone horribly wrong somewhere.
I've never understood such reasoning. Typing speed is a bottleneck. It cannot be parallelized with other tasks, and therefore, is on the critical path. Improving typing speed will shorten task duration.
What is perhaps meant instead is that typing is not worth improving, because gains wouldn't affect overall task duration significantly. But then, why focus on percentage improvement over task duration? I use a keyboard all day. Any improvement affects my day-to-day quality of life for the rest of my life. Keypresses saved, finger, wrist, arm movements eliminated increases my comfort. Removing frictions in work increases flow.
I personally like not having to move around too much, but beyond CapsLock for Ctrl I’ve never stuck with anything fancy.
That said, I don’t understand how typing speed doesn’t matter - I agree that’s mostly the case for code, but everything in between, from documentation to Slack chats, I think faster than I type and I’m always open to performance improvements. It’s also great if you can context switch with as little friction as possible so that you can hit the ground running each time.
Overall it’s just about actions per second, not actual typing. I agree that IDEs and advanced editors help cut out a lot of stuff (I’ve never understood multiple cursors, for example, because as you say, that’s usually just a structured refactoring). But there are always opportunities to cut down cognitive load or speed up regular tasks. Whether hardware or software, we’re in tech because we believe better tools solve problems better.
The issue isn't really speed, it's moving your hands away from the core of the keyboard. Touch typing means you don't have to think about getting text into your machine (or modifying it) -- it just happens.
Having to move your hand away to somewhere else (arrow keys or, shudder a mouse/trackpad) causes a microinterruption in your flow.
For me it was never about speed, it’s about comfort. I always unconsciously hated having to reach for the arrow keys all the way to the right of the keyboard to select words and move around.
A generation of Swedish programmers grew up on a cruel and unusual keyboard layout that's like
; is shift + , (1 step right of m)
: is shift + . (2 steps right of m)
- is where US layout has /
_ is where US layout has ?
shift + 6 = &
shift + 7 = /
shift + 8 = (
shift + 9 = )
right alt + 7 = {
right alt + 8 = [
right alt + 9 = ]
right alt + 0 = }
right alt + - = \
I invite anyone to try and press right alt + 7 and right alt + 9 on their keyboard. To make things more awkward, it must be the right alt key, it doesn't work with the left. This torture is every time you make a curly brace with this layout.
Same for German and Swiss layouts *sigh. After many years, I am now capable of typing curly and angular brackets by holding left shift with my small finger, left alt with my left thumb, and the corresponding symbol key with my right little finger, without loosing the ten-finger-stance on the keyboard.
(on our keyboards, left shift+alt is an alternative for the right "Alt Gr" key)
If you still can, I highly recommend switching to international.
The main benefit is, how much better default keyboard shortcuts in many Apps become.
Tab switching with CMD+{} and back/forward CMD+[] can be comfortably executed. There are no more inaccessible shortcuts such as Shift+CMD+? or changing playback speed on Youtube.
Specials are somewhat annoying to type with `alt+u aou` and `alt + s`, but nothing I couldn't get used to.
I've done it all my life. Maybe my pain tolerance is way higher?
Edit: I don't know what's wrong with pressing several keys at once to do something. It is like complaining that piano has no individual keys for all the possible chords. What's the alternative? Pressing a single key? What would you be doing with the rest of your fingers anyway?
I’m also Spanish, living in Germany: the Spanish keyboard is actually rather nice, with it it’s easy to type Spanish, German, French, Italian etc. without even changing the layout. It’s even easier to type French than on a French azerty keyboard, but that’s a particularly bad one.
The German and Swedish keyboards mentioned above are rather bad for programming (in the German case, even for typing ß/ss): they have AltGr combinations at the top row, the numbers 7, 8, 9, 0 for instance to get the brackets and braces {, [, ], }.
In the Spanish keyboard they are right of P and Ñ (; in US-English) and those positions are much easier to reach while pressing AltGr.
In addition, in the Spanish keyboard the plain Latin letters are in the standard qwerty positions.
After having had to deal with some terrible keyboard layouts over the years I’ve come to appreciate the Spanish one very much. It’s clear that a lot of thought went into designing it.
The problem is that you need to press multiple keys with the same hand. Typically when touch-typing you press modifier keys with the other hand, to avoid having to move the hand in awkward ways, or typing with the left hand on the right side of the keyboard or some other weird solution.
On top of that, alt+7 is spectacularly awkward, as you need to curl one finger really aggressively and extend another to reach both keys.
Many of these keys are indeed accessible with a single keypress in US QWERTY. That, or a simple shift-combination. They're also much closer to the letter keys across the board.
The worst is tilde (~): right alt + ¨ (where US layout has ]), release both keys then press spacebar. If you hit any other key you apply the tilde modifier to it and end up with e.g. ñ.
` is a bit more ergonomic at shift + \, release, then spacebar. To get ``` you press shift + \ 6 times because ` luckily doesn't modify `.
I switched to qwerty US International years ago and I won't go back. Makes coding much easier. Even diacratics are easier with that layout than with my first language layout (for when I type literature and poetry).
I use a southpaw keyboard with arrow keys on the left side. I think it's a great design, it frees up space for the mouse bringing your arms closer together for a more ergonomic position.
I'm not necessarily saying it's better but it makes you think about how input design shapes the use of software.
So, I use the Vim layer in IntelliJ. While it’s true that the IDE is doing a little bit of the repetitive typing work, there’s still things that are more comfortable with vim commands. To give an example you mentioned:
> Why are you doing all this typing? If you update a variable name or a method signature and the rest of the code doesn't automatically update itself as far as possible, why is this?
I use refactoring tools a ton! Rename Symbol works great. I’ll press the IDE combo for Refactor this (C-t) then the vim combo to, for example, add a suffix to the name that’s now highlighted by the IDE (wi SuffixNameHere<CR>)
It’s not like it’s hard to do that by clicking the end of the word with the cursor, or moving to it with the arrow keys. But it’s so much more comfy to me, once you have a few movements in your head you can precisely communicate “go THERE” to your editor which is worth it to me.
Bonus: @ macros! It’s so useful, even in IDEs, to be able to record (qx) and run (@x) a macro from your keyboard, while typing, if you notice that you’re repeating the same task. An IDE will help with renaming, removing, or re-signaturing… but not with the most annoying work, like numbering things or repeating blocks.
For me, not taking my hands off the keyboard (or more specifically, not touching the mouse) is less about speed, and more that it helps me remain focused on what I’m doing.
I was once IDE-ish, and now Vim-ish, so I think I can answer this a bit. Everything you say is true (I guess except for the typing a lot, I don't find renaming a variable to feel like more typing in an IDE vs. Vim, but you're right that there are some IDE features that make some things easier).
- The biggest problem I have with the IDE workflow is I was never able to get it to scale across projects effectively. E.g., lets say I want to make a find and replace for an API change across ten different projects, then run linters and compilation on all of them, and only be notified if there's an error, and otherwise make identical commits to all of the projects?
- Another issue, is how easy is it for me to take the problem I'm working on, extract it to a complete different context, and then more quickly iterate on finding a solution? E.g., it's common for me to take what I'm working on, in say JavaScript, that's part of a larger application, and then copy/paste the entire problem into a single file with a `#!/usr/bin/env node` shebang, and then do a 1. edit/save 2. run `./my_script.js` workflow until I find the solution. With IDE's, I've found they often don't like working with single files that aren't part of a particular project.
- When tracking down extremely difficult to find bugs, e.g., lets say you have several log files, thousands of lines long, and you want to use CLI tools to do custom analysis looking for patterns (e.g., is there a mismatch in order certain events firing in log files where the bug occurs vs. doesn't?). IDEs don't help much with this.
There's a pattern with the above examples that's the main problem I had with IDEs is that they aren't flexible enough to scale to atypical workflows/problems. All of the above examples also leverage the command line, which is clearly a pattern. The CLI is just a useful open-ended tool to help programmatically solve any problem you might be facing. IDEs are great if you're adding a feature to an application, but they're less great if you're looking to adapt your tools to a specialized workflow that's a better fit for the problem at hand.
Besides the above examples, I've also encountered code bases too large for JetBrains IDEs (rare, but they're out there), and generally find how slow they are to open windows to be disruptive to achieving flow state (I don't think this is normal, I think I personally experience latency more strongly than most other computer users, but just providing a complete picture). I also don't really find autocomplete very useful, which again is atypical, I use it in CLI-based editors like Vim/Emacs because it's trivial to add it with LSP support today, but would be fine working without it. Again it's about what you value, what I value is being able to adapt my tools to developing a specialized workflow to solve the problem at hand, over the features that IDEs offer.
That's a pretty nice solution to a gripe I have with programming and typing.
This year I've practiced touch typing for the first time in 10 years, and turns out it's such a chore to use touch-typing while programming! My right hand has to constantly reposition to use brackets, parenthesis, and all the other non-alphanumeric glyphs (!, -,=, *, &), and I constantly make typos due faulty muscle memory. And I'm not even starting on how hard it is on my right pinky.
It almost feels like I'd need another touch marker for positioning my right hand to the right and one row up, to hit those brackets consistently.
Without touch typing it's even worse, as I often wrongly position my hand after hitting special characters.
Looks like modern programming languages were not created with humans writing on keyboards in mind.
Also, anecdote from series of software developer interviews: all candidates made typos while live coding. And I don't think stress is the only reason :)
Yeah, I can't use a regular keyboard for programming for very long anymore because symbols like {} just put too much strain on my right pinky. I use a kinesis advantage 2 and I've set those all up on the keypad layer on non-pinky keys and made the Delete key in the thumb cluster act as keypad shift. Works really well.
I also put a JIS keyboard in my laptop and use one of the extra keys near space combined with the Linux program keyd to get effectively the same thing. Not quite as good but better than nothing.
Hmm what’s the alternative to touch typing? Are you saying that you look at your keyboard every time you create a bracket, or am i forgetting some middle ground?
For years I’ve been using caps lock as a control/cmd key.
Lately, when I was researching keyboard layouts, I stumbled upon Extend concept for Colemak [1]. I decided to try it out and, for me, it is a game changer.
It is somewhat problematic to work through muscle memory, but I really think it’s worth it, especially since I skip between various editors a lot and adjusting each is a pain and this seems to solve it nicely. I know that for Extend there are multiple implementations for Windows, Linux and Mac.
Hey, another extend user! I literally can't imagine using a computer for a long time if it didn't have extend and colemak-dh. The friction with trying to make extend work on Linux is the main reason I'm stuck on Windows.
A media control knob would be useful - push up and turn to fast-forward/rewind, down and turn for volume. Push left/right for previous/next.
Also, what's with the f/j keyboard bumps - just put braille on every key. We'd all end up learning it without even trying to.
As a programmer, I never really understood why the people who designed keyboards wouldn't have done so in a way that allowed for more common technical uses - why didn't they throw in a row of common mathematical symbols?
> As a programmer, I never really understood why the people who designed keyboards wouldn't have done so in a way that allowed for more common technical uses - why didn't they throw in a row of common mathematical symbols?
I moved to a Dygma keyboard early in the year, and I'm not looking back. The software to record macros, remap is just great, and I'm no longer suffering pain because of my position.
I've found the Leopold FC660C to be the ultimate keyboard:
- Topre silent switches
- Compact layout _with_ arrow keys
- There is a 3rd party (Hasu) replacement controller available to make it fully programmable
I've found custom layouts at the software level are practical only if you use a single computer. My FC660C with the Hasu controller has my custom keymaps defined in the keyboard itself - usable on any computer I plug into!
That’s kinda how it is on Mac unless you want to implement it all via the accessibility api. Even if you go down that route, you’re still limited in window layout and monitoring. A lot of projects end up having to disable sip and hooking the window server in Dock. With these projects, the developer usually ends up abandoning it when they get tired of apple annually pushing out breaking changes. If you really want hyperkey and window management then I’d recommend bettertouchtool.
It appears to me that this solution is only designed for macOS. Anyone knows any cross-platform solution? It would be very interesting to see how the same keybindings are implemented in Windows/Ubuntu/macOS.