0.20110708.*
  - patch from wxs to clean up errors when building with clang.
  - Fix bug in grid-nav where the column was selected first, when the first
    letter is that of the row.

0.20101224.*
  - Fix a bug in how I use strtok_r that causes crashes in FreeBSD.
    Reported by Richard Kolkovich.

0.20101014.*
  - Added 'restart' command. Makes keynav restart. Useful for binding a key to
    reload the config.
  - Added 'loadconfig' command. This lets you include additional config files
    to load on the command line or in one of the default keynavrc files.
    (requested by Axel Beckert)
  - keynav will now restart if it receives SIGHUP or SIGUSR1
  - Map 'Enter' by default to 'warp,click 1,end' (requested by Axel Beckert)
    by Axel Beckert)
  - Fix a bug causing the point under the mouse cursor to not click through the 
    keynav window in certain conditions. Reported via mailing list by Eric Van
    Dewoestine and Krister Svanlund.
    
0.20100623.*
  - No functional changes.
  - Remove monolithic build against libxdo. xdotool is now available in just
    about every major platform (fedora, ubuntu, archlinux, freebsd, and more)
    that we don't need to ship with xdotool.

0.20100601.*:
  - Update to follow API changes in libxdo.
    Now requires libxdo = 2.x

0.20100403.*:
  - Use cairo graphics for drawing instead of raw Xlib. This makes drawing a
    little bit less painful and will allow me to more quickly prototype ideas
    in the future.
  - Add 'grid nav' navigation. The original prototype was written by Nazri in 2008.
    This adds a new command: grid-nav. This command takes one argument, of:
    toggle, on, off.  When on grid navigation, you can select a specific grid
    by coordinate. The coordinates at this time are A to Z for both row and
    column. 
    For example, if your grid is 2x2, you can select the top-right cell by
    typing 'AB' when grid nav is activated.

0.20100302.*:
  - Started using glib for dynamic arrays (GPtrArray)
  - Uses new versioning scheme major.date.svnrev
  - Added 'version' (or -v or --version) to output the keynav version
  - Now requires libxdo.so.1 (via xdotool)
  - Add ability to record keynav actions with the 'record' command. Optional argument
    is a filename to save the recordings to for persistence across keynav runs.
    Example in keynavrc to bind 'q' to record to ~/.keynav_macros:
      q record ~/.keynav_macros
    Works similar to vim recording. 
      1) Hit record once
      2) Type the key you want to record to
      3) Do things in keynav you want recorded.
      4) Any 'end' operation or hitting record again will terminate and save
         this recording.
    Recordings only persist if you specify a file to save to, otherwise they are lost
    across keynav restarts.

20091231.04:
  - Try repeatedly to grab the keyboard with XGrabKeyboard on 'start' commands.
    This loop is a necessary workaround for programs like xbindkeys that could
    launch keynav but at the time of launch still hold a keyboard grab
    themselves. Reported by Colin Shea.

20091231.02:
  - Nonfunctional bug fixes and other code cleanup from patches by Russell Harmon

20091231.01:
  - Some internal code refactor/cleanup
  - Reduce drawing flicker by drawing to a Pixmap and blitting to the window.
  - Allow commands to be given on keynav startup. (Reported by Colin Shea)
    The same commands valid as keybindings are valid as startup commands:
    % keynav "start, grid 3x3"
  - Allow clicking through the keynav grid window area (Reported by Yuri D'Elia)
  - Support daemonizing using the 'daemonize' command in keynavrc. Added an
    example to the distributed keynavrc.
  - Use new library features given by xdotool/libxdo 20091231.01

20091208:
  - Support linking against libxdo.so if it is found, otherwise we build xdo.o
    into keynav. The original intent of including xdotool in the release package
    was to make make it easy to build keynav without a packaging system. Now
    that more distros have keynav and xdotool, this requirement is less
    important.

    This change is in response to Debian rqeuest: 
      http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=560103

20091108:
  - Added xinerama support.
    * Default 'start' will now only be fullscreen on your current xinerama
    display. You can move between screens by using the move-* actions to move
    the current selection outside the border of the current screne.
  - All xdotool commands now integers so we can forward their return status
    to the user.
  - Actually handle SIGCHLD now so the shell commands get reaped on exit.

20080614.01:
  - Several bug fixes and feature additions suggested by Yuri D'Elia.
  - Sync xdotool library to 20080606
  - Added default key binding Ctrl+[ as 'end' (requested by Luke Macken)
  - New command: 'sh' - Executes shell commands.
    Example keynavrc: ctrl+x sh "xterm -bg black -fg white"
  - New command: 'history-back' - Undo a window change operation
    Example keynavrc: a history-back
    + Such operations include: cut-*, grid, cell-select, move-*
    + The history size is currently hard-coded at 100 entries. 
    + If you exceed 100 moves, the oldest entry will be removed.
    + Every time keynav is activated, the history is wiped.
  - Fix: Any command starting with "start" is now bound globally.
  - Fix: All rendering is delayed until after the end of the current command
    sequence. This fixes (in order of annoyance, worst first):
    1) Crash when a 'start' and 'end' exist in the same command sequence.
    2) Visible 2x2 grid first, before a 3x3 grid when the start command is
       'start, grid 3x3'
    3) Rendering blinking a full white window on the screen before clipping to
       the grid.
    4) Visible blink when "cut-left,cut-up" and such are run simultaneously.
  - Fix: If the 'start' command is invoked again while keynav is active, then
    the default arrangement is set (full screen and 2x2 grid). Previously, the
    'start' command was a no-op if keynav was active.

20080522:
  - Sync xdotool library to 20080521.
  - Added 2 grid examples to keynavrc
  - Applied patches from Richard Kolkovich
    + Fix backwards math when calculating Nth cell when using 'cell-select N'
    + Fix dislexia when doing 'cell-select NxM'
    + Abort update() calls when app is inactive.
  - Now warns you if you try to execute an invalid command.

20080509:
  Feature request: Grid support.
  * New command: 'grid NxM' N and M are row and columns, respectively.
    You can divide the screen into any number of rows and columns.
    The default is 2x2.
  * New command: 'cell-select N' or 'cell-select NxM'
    With this command you can select a specific cell to zoom to.
    Usage: cell-select N
      Selects the Nth cell, counting from top left to bottom right. 
      The order of a 3x3 grid would be:
        1 2 3
        4 5 6
        7 8 9
    Usage: cell-select NxM
      Selects the specific cell at NxM. '2x2' will select row 2 column 2.

  Other important changes:
  - Whitespace before command names works now.
  - Added a pile of new examples in keynavrc.

20080508:
  Bug fix:
    If you tried to override an existing key binding, it would add a 2nd
    binding for that key instead of actually overriding it.
  Reported by Tim Schumacher.

20080501:
  Patches from Mark (20080501)
   * ~/.keynavrc extends defaults rather than replacing them
   * "clear" in ~/.keynavrc resets keybindings
   * comments can appear anywhere on a line

  Patches from Eric (20080501)
   * If the move or size value is greater than 1.0, then assume it is an absolute value.

  Patches from Lukas Mai (20080429)
   * Fixes a few minor bugs
   * Clean up to compile without most warnings when -pendantic and -Wall are enabled.

20071031:
  - Fix support when NumLock/ScrollLock/CapsLock is on.

20071023:
  - Add support for {Super,Hyper}_{R,L} modifiers (aka Mod4Mask)

20070903:
  - Drag is now working. Problem was KeyEvent.state contains masks such as
    | Button1Mask which is set when mouse button 1 is held, so keybindings stopped
    | working. Ignoring Button[1-5]Mask in this value fixes the problem.
  - Drag takes two optional arguments: a button followed by a keysequence to fire.
    | 'drag 1 alt' will do an alt+leftclick drag.
    | 'drag 2' will do a middleclick drag.
  - sync to xdotool@20070903
  - Fix a bug in parse_mods and parse_keysym where it was destructively changing the string.
  - Fix a bug where I was using the loop iterator 'i' inside another for loop. Oops.
  - Add to defaults my nethack-vi-style diagonal keybindings


20070814:
  - Arguments for {move,cut}_{up,left,down,right} in form of percentage values.
    Default for cut is 0.5 (cut the window in half)
    Default for move is 1.0 (move the full width/height of the window)
  - More examples in distributed keynavrc
  - sync to xdotool-20070812

20070705:
  - Report when keysyms or keycodes cannot be looked up for whatever reason.

20070703:
  - Include COPYRIGHT (bsd license) and a sample keynavrc in the release.

20070629:
  - Correctly use defaults if no $HOME and no $HOME/.keynavrc is found (patch from wxs)
  - Clean target is now recursive
20070627:
  - Config file support. Loads ~/.keynavrc
    + The config file lets you much more than the original keynav.
  - Uses xdo for mouse activity
  - Some drawing fixes
