let set_syntax_mode v args =
  let len = Array.length args in
  if len > 0 then
    let name = args.(0) in
    try
      let lang = List.find
        (fun l -> l#get_name = name) languages_manager#get_available_languages
      in
      v#set_syntax_mode lang
    with
      Not_found ->
        Ed_misc.error_message
          (Printf.sprintf "Unknown syntax mode \"%s\"" name)
  else
    let f mode =
      let com = Printf.sprintf "%s_set_syntax_mode %s"
        factory_name (Filename.quote mode)
      in
      Cam_commands.eval_command com
    in
    let languages = List.map
      (fun l -> l#get_name) languages_manager#get_available_languages
    in
    Ed_misc.select_string ~history: syntax_mode_history
      v#minibuffer
      ~title: "Syntax mode"
      ~choices: languages
      ""
      f