KeyBindings

last edited December 20, 2004 14:40:21 (24.95.135.124)
CocoaDev is sponsored by: Panic: Shockingly good Mac software!

CocoaGlossary

Cocoa's default key bindings are here: file:///System/Library/Frameworks/AppKit.framework/Resources/StandardKeyBinding.dict

The file ~/Library/KeyBindings/DefaultKeyBinding?.dict allows you to override the defaults.

Here's Apple's documentation on this topic: http://developer.apple.com/documentation/Cocoa/Conceptual/BasicEventHandling/Tasks/TextDefaultsAndBindings.html

Here's everything I've figured out about the file format so far:

Syntax notes:
     Modifiers:
         ^ : Ctrl
         $ : Shift
         ~ : Option (Alt)
         @ : Command (Apple)
         # : Numeric Keypad
        
     Keycode formats:
         \NNN   = Octal
         \UXXXX = Hex
            
     Printing characters (including space) can be specified by 
         using the character itself.
            
     Keycodes for non-printing keys:
         These are equal to the ASCII codes:

         Backspace:  \U0008
         Tab:        \U0009
         Escape:     \U001B
         Enter:      \U000A (newline) or \U000D (cr)?

         Other non-printing keys are represented by "unicodes" 0xF700-0xF8FF.  The
         complete list can be found in the NSEvent.h header file.  The availability of 
         various keys will be system-dependent.

         Up Arrow:   \UF700
         Down Arrow: \UF701
         Left Arrow: \UF702
         Right Arrow:\UF703

         F1:         \UF704
         F2:         \UF705
         F3:         \UF706
         ...
         F12:        \UF70F
         ...
         F35:        \UF726

         Insert:     \UF727
         Delete:     \UF728  (also ASCII code \177)
         Home:       \UF729
         End:        \UF72B
         Page Up:    \UF72C
         Page Down:  \UF72D

         Print Screen: \UF72E
         Scroll Lock:  \UF72F
         Pause:        \UF730
         SysReq:       \UF731
         Break:        \UF732

         Menu:         \UF735
         Help:         \UF746

     Sub-structure syntax:
         Nested dictionary (for multi-key bindings like ^X^S):  
             { key1 = val1; key2 = val2; ... }
         Nested array (for binding to a sequence of commands (??)):
             ( elt1, elt2, ... )

     The commands (like "pageUp:" and "moveToEndOfLine:") are Action methods
     of the NSResponder class.


You can enter the code for any key by pressing Ctrl-q first. For example to set a keybinding for F1 you would hit Ctrl-q, then type F1 to insert the squiggley symbol that corresponds to the Unicode value for F1 into your keybindings file.

You can bind any standard NSResponder message and expect it to work. selectLine: and selectWord: are quite useful...