Project

General

Profile

unexist.dev

subtle

Assorted tidbits and projects

Grabs » History » Version 38

« Previous - Version 38/56 (diff) - Next » - Current version
Anonymous, 05/30/2010 06:18 PM


Grabs\015\012\015\012{{>toc}}\015\012\015\012Grabs are the mouse button/keyboard mappings in subtle and can be used in various combinations, no grab is limited either to button or keyboard only. Generally they are combinations or chains of one or more modifiers and a button/key.\015\012\015\012Genereally there are different types of grabs:\015\012# Predefined grabs\015\012# Grabs that call a Ruby block\015\012# Grabs that exec a program\015\012\015\012h2. Keys\015\012\015\012The best resource for getting the correct key names is the /usr/include/X11/keysymdef.h, but to make life easier here are some hints about it:\015\012\015\012* Numbers and letters keep their names, so a is a and 0 is 0\015\012* Keypad keys need KP_ as prefix, so KP_1 is 1 on the keypad\015\012* Strip the XK_ from the key names if looked up in /usr/include/X11/keysymdef.h\015\012* Keys usually have meaningful english names\015\012* Modifier keys have special meaning (Alt, Control, Meta, Shift, Super)\015\012\015\012h3. Mouse buttons\015\012\015\012* B1 = Button1 (Left mouse button)\015\012* B2 = Button2 (Middle mouse button)\015\012* B3 = Button3 (Right mouse button)\015\012* B4 = Button4\015\012* B5 = Button5\015\012\015\012h3. Modifier keys\015\012\015\012* A = Alt key\015\012* C = Control key\015\012* M = Meta key\015\012* S = Shift key\015\012* W = Super (Windows key)\015\012\015\012h3. Common keys\015\012\015\012* Space\015\012* Tab\015\012* Enter / Return\015\012* F1 - F12\015\012* Left, Down, Up, Right\015\012* Next, Prior\015\012* Page_Up, Page_Down\015\012* Home, End\015\012* Insert, Delete\015\012* Add, Subtract, Multiply, Divide, Equal\015\012* Decimal\015\012* Num_Lock\015\012* Escape\015\012\015\012h3. Multimedia keys\015\012\015\012* XF86AudioMute\015\012* XF86AudioRaiseVolume\015\012* XF86AudioLowerVolume\015\012* XF86AudioPlay\015\012* XF86AudioPrev\015\012* XF86AudioNext\015\012* XF86Go\015\012* XF86HomePage\015\012* XF86Mail\015\012\015\012h3. Fn keys\015\012\015\012Fn keys found on notebooks other than numpad keys can't be used directly, they need to be defined. See Grabs.\015\012\015\012h3. Examples\015\012\015\012
\015\012"S-B1"    => WindowMove\015\012"A-space" => lambda { |c| c.toggle_float }\015\012"W-F1"    => "xterm -sb"\015\012
\015\012\015\012h2. Assigning keynames\015\012\015\012Keys like the multimedia keys are unassigned or even unknown to the xserver and can't be used directly, but xmodmap can be used to assign keynames to these new keycodes. To get the actual keycodes of a key there is showkey, a tool that can't be used in a virtual terminal.\015\012\015\012# Get keycode\015\012\015\012
\015\012kb mode was XLATE\015\012\015\012press any key (program terminates 10s after last keypress)...\015\012keycode  28 release\015\012keycode 153 press\015\012keycode 153 release\015\012
\015\012\015\012# Add to ~/.Xmodmap\015\012\015\012
\015\012keycode 153 = XF86AudioNext\015\012
\015\012\015\012# Add grab to subtle config\015\012\015\012
\015\012"XF86AudioNext" => "mpc next"\015\012
\015\012\015\012h2. Predefined\015\012\015\012h3. Views\015\012\015\012Move pointer to the numbered view.\015\012\015\012* ViewJump1\015\012* ViewJump2\015\012* ...\015\012* ViewJumpN\015\012\015\012h3. Screens\015\012\015\012Move pointer to the numbered screen.\015\012\015\012* ScreenJump1\015\012* ScreenJump2\015\012* ..\015\012* ScreenJumpN\015\012\015\012Move window to the numbered screen.\015\012\015\012* WindowScreen1\015\012* WindowScreen2\015\012* ..\015\012* WindowScreenN\015\012\015\012h3. Windows\015\012\015\012Window grabs manipulate/toggle various properties of client windows.\015\012\015\012* WindowMove\015\012* WindowResize\015\012* WindowFloat\015\012* WindowFull\015\012* WindowStick\015\012* WindowRaise\015\012* WindowLower\015\012* WindowLeft\015\012* WindowDown\015\012* WindowUp\015\012* WindowRight\015\012* WindowKill\015\012\015\012h3. Gravities\015\012\015\012Gravity grabs change the gravity of the selected client on the current view, they are basically a list of gravities and are toggled.\015\012\015\012+Example+:\015\012
"W-KP_7" => [ :top_left, :top_left66, :top_left33 ]
\015\012\015\012h2. Blocks\015\012\015\012Grabs can also call a Ruby block (aka lambda/proc), the arity of the block is either a client window or none. Inside of the blocks the whole API of subtlext can be used, the extension will be loaded ondemand.\015\012\015\012+Example+:\015\012
"S-F1" => lambda { |c| puts c.name }
\015\012\015\012h2. Exec\015\012\015\012Invoke a shell and exec a program.\015\012\015\012+Example+:\015\012
"W-Return" => "xterm +sb"