BBKEYSRC(5)

NAME
bbkeysrc - bbkeys configuration file

SYNOPSIS
$HOME/.bbkeysrc

DESCRIPTION
bbkeys picks up its configuration settings from $HOME/.bbkeysrc unless overridden on the command line. There are several avenues open to the user to set any key-grabs that the user wishes:

  Using bbconf:
This is a Qt-based application available at http://bbconf.sourceforge.net/.

  Manually editing $HOME/.bbkeysrc:
The format is very easy, and it follows the same format as blackbox's menu files. It must begin with a "[begin]" tag. It may contain a "[config]" tag, containing a configuration section, ending with a "[end]" tag. In fact, all opening section tags must end with an "[end]" tag. It should also contain a "[keybindings]" section.
For more information, see the man page for blackbox's menu.

LIST OF CONFIG OPTIONS

stylefile:
    filename of blackbox style to use (string)

honorModifiers:
    whether or not to break if NumLock or ScrollLock is pressed. (hint: for bbkeys to ignore your keybindings if NumLock or ScrollLock are pressed, set this to true) (true or false)

raiseWhileCycling:
    should bbkeys raise the windows you're cycling through while cycling through them? (true or false)

followWindowOnSend:
    should bbkeys follow the window that you send to another workspace? this will apply to all send-to operations such that if this is set to true, bbkeys will change workspaces to the workspace that you send the window to. (true or false)

includeIconifiedWindowsInCycle:
    should bbkeys include iconified windows in its window-cycling list? (true or false)

showCycleMenu
    show the window-cycling menu or cycle without it? (true or false)

cycleMenuTitle
    show the given string as the title of the window-cycling menu. if an empty string is passed as the parameter to this config option("{}"), then the title will not be drawn. (string value)

menuTextJustify
    how should the window-cycling menu be justified? (left, center, right)

menuTitleJustify
    how should the window-cycling title be justified? (left, center, right)

autoConfig
    should bbkeys watch for changes to its config file? (true or false) Note: if you decide to not do this (though it should be VERY light on system resources), you can always force bbkeys to reconfigure itself by sending it a SIGHUP (killall -HUP bbkeys).

autoConfigCheckTimeout
    how often should bbkeys check for changes made to its config file? (numeric number of seconds)

workspaceColumns
    number of columns that you have your workspaces laid out in your pager (numeric)

workspaceRows
    number of rows that you have your workspaces/desktops laid out in (numeric). As way of an example, if you have your pager laid out in a 4x2 grid (4 wide, 2 high), then you would set workspaceColumns to 4 and workspaceRows to 2.

cycleMenuX
    horizontal position that you want the window cycling menu to show up at. (numeric)

cycleMenuY
    vertical position that you want the window cycling menu to show up at. (numeric) NOTE. The cycleMenuX and cycleMenuY config options allow you to place your window-cycling window exactly where you want to put it on screen. We at the Bbkeys Foundation For Better Software (TM) call this a feature, though some crazy nuts might call it a bug caused by the fact that blackbox's Menu class doesn't have anything in it to center it on-screen, etc. It also doesn't have any methods available to figure out how big the menu will be on-screen. This can be worked around by bbkeys, but I've not the time to do it now. Patch anyone? Or, you can just consider it a really neat feature that you can place the popup window-cycling window anywhere you want. =:D

KEYBINDINGS

The format of this section is similar to the config section, and blackbox's menu structure. Each line will look like this:

    [command] (keys) {parameters}

Parameters:
Not all directives need to have parameters provided, and within the [keybindings] section, the only sub-group allowed (a group that will have an [end] tag) is the [chain] tag. The chain tag is special and allows the user to give emacs-style keybindings, where a certain keystroke is given, released, and then another keystroke is given to complete the action. A good example would be the following:

        [chain] (Control-Mod1-W)
          [sendToWorkspace] (1) {1}
          [sendToWorkspace] (2) {2}
          [sendToWorkspace] (3) {3}
          [sendToWorkspace] (4) {4}
        [end]

Note that both the beginning [chain] and the ending [end] tags must be provided. In this example, the chain is begun by the user pressing (and holding) the Control modifier, the Mod1 (Alt) modifier, and the "W" key on his keyboard. The user then releases these keys and bbkeys enters the chain. Bbkeys will then wait for the user to press one of the keybindings from within that chain to execute the next action. In this case, if bbkeys sees either the 1, 2, 3 or 4 key pressed on the keyboard, it will execute the given action for that key. Again, in this case, bbkeys will send the currently-focused window to the workspace specified in the {}-enclosed parameter (workspace 1, 2, 3, or 4 as the case may be here.

So, the parameters provided in a keybinding directive can be seen as additional information to provide to the "command". In some cases, it will be a number (what workspace to send a window to, how many pixels to move the window, how many pixels to resize a window, etc.). In other cases, it will be a string ("xterm -fn nexus", for example, as an argument to the Execute command. And for many directives, it is not needed at all.

Keys:
The format for the keybindings are using 0 or more modifiers, separated with the "-" character, finally followed by the key name as known to X. The "left" key, for example, is known to X as "Left". The "j" key is known as "J". You get the idea. The modifiers are typically, "Shift", "Control", and "Mod1". An example would be Mod1-Control-K. This would be listed as the second element in a keybinding directive.

Commands:
The following commands are understood by bbkeys. Bbkeys is not case-sensitive with regards to its commands, so the case may be mixed accidentally or on purpose. =:)

execute
    Executes a command. An string argument/parameter is expected for this directive that lists the command to be executed.

iconify

raise

lower

close

toggleShade

toggleOmnipresent
    Sets a window to be "sticky"--on all workspaces.

toggleDecorations
    Either strips a window of all decorations or causes it to be decorated regularly.

moveWindowUp
    A numeric parameter may be provided which tells bbkeys how many pixels in the given direction to move the currently-selected window.

moveWindowDown
    A numeric parameter may be provided which tells bbkeys how many pixels in the given direction to move the currently-selected window.

moveWindowLeft
    A numeric parameter may be provided which tells bbkeys how many pixels in the given direction to move the currently-selected window.

moveWindowRight
    A numeric parameter may be provided which tells bbkeys how many pixels in the given direction to move the currently-selected window.

resizeWindowWidth
    A numeric parameter may be provided which tells bbkeys how many pixels in the given direction to resize the currently-selected window. This may be a positive or negative number, allowing bbkeys to grow or shrink the window.

resizeWindowHeight
    A numeric parameter may be provided which tells bbkeys how many pixels in the given direction to resize the currently-selected window. This may be a positive or negative number, allowing bbkeys to grow or shrink the window.

toggleMaximizeFull

toggleMaximizeVertical

toggleMaximizeHorizontal

sendToWorkspace
    A numeric parameter must be provided which tells bbkeys which workspace (1-based index) to send the current window to.

sendToNextWorkspace

sendToPrevWorkspace

nextWindow
    Used for window cycling (alt-tabbing, most often). Selects the next window according to the window stack.

prevWindow
    Used for window cycling (alt-tabbing, most often). Selects the previous window according to the window stack.

nextWindowOnAllWorkspaces

prevWindowOnAllWorkspaces

nextWindowOnAllScreens

prevWindowOnAllScreens

nextWindowOfClass

prevWindowOfClass

nextWindowOfClassOnAllWorkspaces

prevWindowOfClassOnAllWorkspaces

changeWorkspace
    A numeric parameter must be given to tell bbkeys which 1-based workspace to switch to.

nextWorkspace

prevWorkspace

upWorkspace

downWorkspace

leftWorkspace

rightWorkspace

nextScreen

prevScreen

chain
    No parameter is needed for this directive.

EXAMPLE
Example config file below...
[begin] (bbkeys configuration file)
  [config]
    [option] (stylefile) {~/local/blackbox-CVS/share/blackbox/styles/Cthulhain}
    [option] (honorModifiers) {false}
    [option] (raiseWhileCycling) {false}
    [option] (showCycleMenu) {true}
    [option] (menuTextJustify) {right}
    [option] (autoConfig) {true}
    [option] (autoConfigCheckTimeout) {2}
    [option] (workspaceColumns) {4}
    [option] (workspaceRows) {2}
    [option] (cycleMenuX) {20}
    [option] (cycleMenuY) {20}
  [end]
  [keybindings] (begin keybindings)
    [chain] (Control-Mod1-W)
      [sendToWorkspace] (1) {1}
      [sendToWorkspace] (2) {2}
      [sendToWorkspace] (3) {3}
      [sendToWorkspace] (4) {4}
      [sendToWorkspace] (5) {5}
      [sendToWorkspace] (6) {6}
      [sendToWorkspace] (7) {7}
      [sendToWorkspace] (8) {8}
    [end]
    [chain] (Mod1-Y)
      [execute] (1) {xmms}
      [execute] (2) {aumix -v +5}
      [execute] (3) {aumix -v -5}
    [end]
    [Lower] (Mod1-Down)
    [Raise] (Mod1-Up)
    [toggleShade] (Mod1-F9)
    [Close] (Mod1-F4)
    [Iconify] (Mod1-m)
    [toggleMaximizeFull] (Mod1-F12)
    [toggleMaximizeHorizontal] (Mod1-F11)
    [toggleMaximizeVertical] (Mod1-F10)
    [toggleOmnipresent] (Mod1-Control-S)
    [resizeWindowWidth] (Mod1-Control-Shift-Left) {-5}
    [resizeWindowWidth] (Mod1-Control-Shift-Right) {5}
    [resizeWindowHeight] (Mod1-Control-Shift-Up) {-5}
    [resizeWindowHeight] (Mod1-Control-Shift-Down) {5}
    [moveWindowUp] (Mod1-Control-Up) {1}
    [moveWindowDown] (Mod1-Control-Down) {1}
    [moveWindowLeft] (Mod1-Control-Left) {1}
    [moveWindowRight] (Mod1-Control-Right) {1}
    [NextWindow] (Mod1-Tab)
    [NextWindowOnAllWorkspaces] (Mod1-Control-Tab)
    [PrevWindow] (Mod1-Shift-Tab)
    [changeWorkspace] (Mod1-1) {1}
    [changeWorkspace] (Mod1-2) {2}
    [changeWorkspace] (Mod1-3) {3}
    [changeWorkspace] (Mod1-4) {4}
    [changeWorkspace] (Mod1-5) {5}
    [changeWorkspace] (Mod1-6) {6}
    [changeWorkspace] (Mod1-7) {7}
    [changeWorkspace] (Mod1-8) {8}
    [upWorkspace] (Mod1-Control-K)
    [downWorkspace] (Mod1-Control-J)
    [leftWorkspace] (Mod1-Control-H)
    [rightWorkspace] (Mod1-Control-L)
    [showRootMenu] (Mod1-Control-Escape)
    [Execute] (Mod1-F5) {xrefresh}
    [Execute] (Mod1-F1) {gnome-terminal}
    #[Execute] (Mod4-E) {kfmclient openProfile filemanagement}
    #[Execute] (F20) {kfmclient openProfile filemanagement}
    [Execute] (Mod4-E) {nautilus /home/gideon}
    [Execute] (F20) {nautilus /home/gideon}
  [end] (end keybindings) [end] (end bbkeys configuration)

SEE ALSO
bbkeys(1), blackbox(1)

AUTHOR
Jason 'vanRijn' Kasper <vR@movingparts.net> - bbkeys
Jan Schaumann <jschauma@netmeister.org> - this man page