let select_string ?history (mb : Ed_minibuffer.minibuffer) ~title ~choices text f =
let on_complete () =
let s = of_utf8 mb#get_user_text in
let entries = List.filter
(fun choice -> is_prefix choice s)
choices
in
let (list,text) =
match max_common entries with
None -> (["[No match]"], s)
| Some s ->
match entries with
[_] -> ([], s)
| _ -> (entries, s)
in
mb#set_text
~list: (List.map to_utf8 list)
~fixed: (title^": ")
(to_utf8 text)
in
let on_eval () =
let s = of_utf8 mb#get_user_text in
mb#set_text "";
mb#set_active false;
f s
in
mb#clear;
mb#set_text ~fixed: (title^": ") text;
(match history with None -> () | Some h -> mb#set_history h);
mb#set_on_eval on_eval;
mb#set_on_complete on_complete;
mb#set_active true