def bind_key keycode, descr, &block
      if descr.is_a? Action
        @key_map[keycode] = descr
     else
       @key_map[keycode] = Action.new(descr), block
     end
    end
def bind_key keycode, descr, &block
      if descr.is_a? Action
        @key_map[keycode] = descr
     else
       @key_map[keycode] = Action.new(descr), block
     end
    end
convenience method to bind a key or array /range of keys, or regex to a block
 @param [int, String, #include?, Regexp] keycode If the user presses this key, then execute given block
 @param [String, Action] descr is either a textual description of the key
     or an Action object
 @param [block] unless an Action object has been passed, a block is passed for execution

 @example
     bind_key '%', 'Do something' {|obj, ch| actions ... }
     bind_key [?\C-h.getbyte(0), 127], 'Delete something' {|obj, ch| actions ... }
     bind_key Regexp.new('[a-zA-Z_\.]'), 'Append char' {|obj, ch| actions ... }
 TODO test this