Disclaimer: The details of this post are shamelessly ripped from phatness.com. All credit to those guys, I just wanted a copy for myself for future reference.
On every OS ever, Home, End, Pg Up and Pg Down keys work like so:
- Home -> move the cursor to the beginning of the line - End -> move the cursor to the end of the line - Pg-Up -> move the cursor up the length of the viewport - Pg-Dn -> move the cursor down the length of the viewport |
But OSX in all its infinate wisdom decided that doesn’t make sense. Instead they should work like so:
- Home -> move (nothing, not even the cursor, just your view) to the beginning of the DOCUMENT - End -> move (nothing, not even the cursor, just your view) to the end of the DOCUMENT - Pg-Up -> move (nothing, not even the cursor, just your view) up the length of the viewport - Pg-Dn -> move (nothing, not even the cursor, just your view) down the length of the viewport |
Now I’m not one to criticise… but that’s stupid and anyone who likes it is stupid 😉
How to Fix
There’s a really useful open source utility out there called DoubleCommand which is highly recommended and I’m sure broadly used. If you want a non-application solution there are also some config files to edit to get the job done.
Most Applications
Create a file
/home/<username>/Library/KeyBindings/DefaultKeyBinding.dict and add the following:
{ "\UF729" = "moveToBeginningOfLine:"; "$\UF729" = "moveToBeginningOfLineAndModifySelection:"; "\UF72B" = "moveToEndOfLine:"; "$\UF72B" = "moveToEndOfLineAndModifySelection:"; "\UF72C" = "pageUp:"; "\UF72D" = "pageDown:"; } |
Terminal
Open Terminal – Preferences – Settings – Keyboard. Edit each of the following setting their action to ‘send string to shell’.
Key Escape Sequence Home \033[1~ End \033[4~ Page Up \033[5~ Page Down \033[6~ |
Now open /home/<username>/.inputrc and add:
"\e[1~": beginning-of-line "\e[4~": end-of-line "\e[5~": history-search-backward "\e[6~": history-search-forward "\e[3~": delete-char "\e[2~": quoted-insert "\e[5C": forward-word "\e[5D": backward-word "\e\e[C": forward-word "\e\e[D": backward-word set completion-ignore-case On |
Other notes
Restart your machine for changes to take affect. Restarting individual applications also works if you can’t restart for whatever reason. I hear Firefox needs its own changes – if you happen to know what those are comment below and I’ll add them in.