let create_add_binding_commands 
  (option:(Okey.keyhit_state * string) Config_file.list_cp)
    name =
  let f_add = fun key_state command ->
    let l = (key_state, command) :: option#get in
    option#set l
  in
  let f_add_string = fun key_state_string ->
    let key_state = Ed_config.key_state_wrappers.Config_file.of_raw
      (Config_file.Raw.of_string key_state_string)
    in
    f_add key_state
  in
  let com_name = Printf.sprintf "add_%s_key_binding" name in
  let f_com args =
    let len = Array.length args in
    if len < 2 then
      failwith (Printf.sprintf "Usage: %s <list of keys> <command>" com_name);
    f_add_string args.(0) args.(1)
  in
  let com =
    { Cam_commands.com_name = com_name;
      com_args = [| "list of keys" ; "command" |] ;
      com_more_args = None ;
      com_f = f_com ;
    } 
  in
  Cam_commands.register com;
  (f_add, f_add_string)