Modifier Keys

An integer bit field indicating the modifier keys in effect. You can examine individual flag settings using the C bitwise AND operator.

65536 NSAlphaShiftKeyMask

Set if Caps Lock key is pressed.

131072 NSShiftKeyMask

Set if Shift key is pressed.

262144 NSControlKeyMask

Set if Control key is pressed.

524288 NSAlternateKeyMask

Set if Option or Alternate key is pressed.

1048576 NSCommandKeyMask

Set if Command key is pressed.

2097152 NSNumericPadKeyMask

Set if any key in the numeric keypad is pressed. The numeric keypad is generally on the right side of the keyboard.

4194304 NSHelpKeyMask

Set if the Help key is pressed.

8388608 NSFunctionKeyMask

Set if any function key is pressed. The function keys include the F keys at the top of most keyboards (F1, F2, and so on) and the navigation keys in the center of most keyboards (Help, Forward Delete, Home, End, Page Up, Page Down, and the arrow keys).

arrow keys have an extra modifier value of 10485760

so for a shift arrow key do a bitwise 'or' with the shift mask:

10485760 | 131072

= 10616832 // this is the mask for shift arrow key

Three usage examples, direct and with helper methods

isCaps, isShift, isCtrl, isAlt, isCmd, isNumPad, isHelp, isFun:

(

w = Window.new.front; w.addFlowLayout;

// direct, using bit field

Button(w, Rect(0,0,390,50)).states_([["hold shift/alt keys and click"]])

.action_ { |but, mod|

if (mod & 131072 == 131072) { "shift key was pressed.".postln; };

if (mod & 524288 == 524288) { "alt key was pressed.".postln; };

};

// using helper methods

Button(w, Rect(0,0,390,50)).states_([["hold any mod keys and click"]])

.action_ { |but, mod|

if(mod.isCaps) { "mod pressed: Caps.".postln };

if(mod.isShift) { "mod pressed: Shift.".postln };

if(mod.isCtrl) { "mod pressed: Ctrl.".postln };

if(mod.isAlt) { "mod pressed: Alt.".postln };

if(mod.isNumPad) { "mod pressed: NumPad.".postln };

if(mod.isHelp) { "mod pressed: Help.".postln };

if(mod.isFun) { "mod pressed: Fun.".postln };

};

// collecting all modifiers

Button(w, Rect(0,0,390,50)).states_([["hold any mod keys and click"]])

.action_ { |but, mod|

var pressed;

#[\isCaps, \isShift, \isCtrl, \isAlt, \isCmd, \isNumPad, \isHelp, \isFun].do { |x|

if(mod.perform(x)) { pressed = pressed.add(x) }

};

pressed.postln;

};

)