let string_to_key s =
  let mask = ref [] in
  let key = try
    let pos = String.rindex s '-' in
    for i = 0 to pos - 1 do
      let m = match s.[i] with
        'C' -> `CONTROL
      | 'S' -> `SHIFT
      | 'L' -> `LOCK
      | 'M' -> `MOD1
      | 'A' -> `MOD1
      | '1' -> `MOD1
      | '2' -> `MOD2
      | '3' -> `MOD3
      | '4' -> `MOD4
      | '5' -> `MOD5
      | _ ->
          prerr_endline s;
          raise Not_found
      in
      mask := m :: !mask
    done;
    String.sub s (pos+1) (String.length s - pos - 1)
  with _ ->
    s
  in
  try
    !mask, List.assoc key name_to_keysym
  with
    e ->
      prerr_endline s;
      raise e