OS X Lion needs a few tweaks from stock to really make the system cook so I’ve added them in this post as a record for myself and hopefully a help to someone. MacBook Air key mapping tweaks to use the same Home/End/PgUp/PgDown keys in Cocoa apps and Terminal/Vim type applications. Stop Safari from prompting when you attempt to navigate away from a form. This article may be in various states of completeness and may be broken out in to other posts.

 

MacBook Air Home/End/PgUp/PgDown key sanity

terminal settings

 

I have a MacBook Air, so the Home/End/PgUp/PgDown keys in the terminal and Vim are frustrating. To get Vim and terminal page up, page

down, home, end working, go to Terminal > Preferences and change the following keyboard settings:

Home: \033[4~
End: \033[1~
PageUp: \033[5~
PageDown: \033[6~

You’ll have to copy and paste the values since the program will attempt to capture your keystrokes. Then setup those keys to have, linux like, sane behaviour in bash and other readline aware programs, as root edit /etc/inputrc or as user ~/.inputrc:

# Be 8 bit clean.
set input-meta on
set output-meta on
set convert-meta off
# allow the use of the Home/End keys
"\e[1~": beginning-of-line
"\e[4~": end-of-line
# allow the use of the Delete/Insert keys
"\e[3~": delete-char
"\e[2~": quoted-insert
# mappings for "page up" and "page down" to step to the beginning/end
# of the history
"\e[5~": beginning-of-history
"\e[6~": end-of-history
# alternate mappings for "page up" and "page down" to search the history
# "\e[5~": history-search-backward
# "\e[6~": history-search-forward

You should setup all your Cocoa Mac OS X programs to have the same behaviour with end / home / page up / page down keys if. You’ll have to create a new folder called KeyBindings in the ~/Library folder and file here:

~/Library/KeyBindings/DefaultKeyBinding.dict

{
/* Changes home/end keys to a sane behaviour */
"\UF729" = "moveToBeginningOfLine:"; /* home */
"\UF72B" = "moveToEndOfLine:"; /* end */
"$\UF729" = "moveToBeginningOfLineAndModifySelection:"; /* shift + home */
"$\UF72B" = "moveToEndOfLineAndModifySelection:"; /* shift + end */

/* Changes pgup/pgdn keys to sane behaviour */
"\UF72C" = "pageUp:"; /* pgup */
"\UF72D" = "pageDown:"; /* pgdn */
"$\UF72C" = "pageUpAndModifySelection:"; /* shift + pgup */
"$\UF72D" = "pageDownAndModifySelection:"; /* shift + pgdn */
}

Mac-OS-X-Lion-to-launch-at-WWDC

I’ve found that you’ll have to do a reboot to get everything working, but once you do, you’ll be able to use these commands:

Home: fn + left
End: fn + right
PgUp: fn + up
PgDown: fn + down

Hold Shift and use the above keystrokes to select text while traveling the cursor.

Stop Safari from asking you about unsubmitted forms

This one is quick and easy. Just a terminal command.

defaults write com.apple.Safari DebugConfirmTossingUnsubmittedFormText 0

Enable key repeating in Lion

Not sure who’s bright idea it was to disable key repeating (couldn’t we use a modifier key like shift/alt/option/command/etc?), but this is how you re-enable it.

defaults write -g ApplePressAndHoldEnabled -bool false

Program for remapping keys in OS X

This program works in Lion and comes highly recommended; however, I have not tried it myself - keyremap4macbook

Updated app for keyboard customization: karabiner

Turn Off Autosave for Safari

defaults write com.apple.Safari NSQuitAlwaysKeepsWindows -bool false

Turn Off Autosave for Chrome

defaults write com.google.Chrome NSQuitAlwaysKeepsWindows -bool false

Turn Off Autosave for QuickTime

defaults write com.apple.QuickTimePlayerX NSQuitAlwaysKeepsWindows -bool false

Turn Off Autosave for Preview

defaults write com.apple.Preview NSQuitAlwaysKeepsWindows -bool false

Turn Off Autosave for Other Apps

It’s possible to turn off the autosave feature for other applications that create file in ~/Library/Saved Application State/ You’ll want to delete the .savedState file in the folder and then run this in the terminal:

defaults write com.apple.<em>&lt;YOUR_APP&gt;</em> NSQuitAlwaysKeepsWindows -bool false

Just swap out false for true if you want to turn the feature back on.