123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146open!Coreopen!Async_kernelopen!ImportmoduleQ=structincludeQletdefault_value="default-value"|>Symbol.internendmoduleY_or_n_with_timeout=structtype'at=|Y|N|Timeoutof'a[@@derivingsexp_of]endmoduleHistory=structtypet=TofstringlistVar.t[@@derivingsexp_of]letsymbol(Tt)=Var.symboltletcreatesymbolhere=T(Defvar.defvarsymbolhere~docstring:"A minibuffer history list."~type_:Value.Type.(liststring)~initial_value:[]~include_in_all_defvar_symbols:false());;letall_by_symbol_name=Hashtbl.create(moduleString)letfind_or_createsymbolhere=Hashtbl.find_or_addall_by_symbol_name(Symbol.namesymbol)~default:(fun()->createsymbolhere);;endlethistory:History.t=TVar.Wrap.("minibuffer-history"<:liststring)moduleHistory_length=structtypet=|Truncate_afterofint|No_truncation[@@derivingsexp_of]letof_value_exnvalue=ifValue.is_integervaluethenTruncate_after(Value.to_int_exnvalue)elseifValue.eqValue.tvaluethenNo_truncationelseraise_s[%sexp"Could not translate value to History_length.t",(value:Value.t)];;letto_value=function|Truncate_afteri->Value.of_int_exni|No_truncation->Value.t;;lett=Value.Type.create[%sexp"history-length"][%sexp_of:t]of_value_exnto_valueendlethistory_length=Customization.Wrap.("history-length"<:History_length.t)lety_or_n=lety_or_n_p=Funcall.Wrap.("y-or-n-p"<:string@->returnbool)infun~prompt->Async_ecaml.Private.run_outside_async[%here](fun()->y_or_n_pprompt);;includestructopenstructlety_or_n_p_with_timeout=Funcall.Wrap.("y-or-n-p-with-timeout"<:string@->float@->Symbol.t@->returnvalue);;endlety_or_n_with_timeout~prompt~timeout:(span,a)=Async_ecaml.Private.run_outside_async[%here](fun()->letresult=y_or_n_p_with_timeoutprompt(span|>Time_ns.Span.to_sec)Q.default_valueinifValue.is_nilresultthenY_or_n_with_timeout.NelseifValue.equalresultValue.tthenYelseTimeouta);;endletyes_or_no=letyes_or_no_p=Funcall.Wrap.("yes-or-no-p"<:string@->returnbool)infun~prompt->Async_ecaml.Private.run_outside_async[%here](fun()->yes_or_no_pprompt);;letread_from=letread_from_minibuffer=Funcall.Wrap.("read-from-minibuffer"<:string@->nil_orstring@->nil_orKeymap.t@->bool@->value@->nil_orstring@->returnstring)infun~prompt?initial_contents?default_value~history?history_pos()->Async_ecaml.Private.run_outside_async[%here](fun()->lethistory=History.symbolhistory|>Symbol.to_valueinread_from_minibufferpromptinitial_contentsNonefalse(matchhistory_poswith|None->history|Somei->Value.conshistory(i|>Value.of_int_exn))default_value);;letexit_hook=Hook.Wrap.("minibuffer-exit-hook"<:Normal_hook)letsetup_hook=Hook.Wrap.("minibuffer-setup-hook"<:Normal_hook)letactive_window=Funcall.Wrap.("active-minibuffer-window"<:nullary@->return(nil_orWindow.t));;letprompt=Funcall.Wrap.("minibuffer-prompt"<:nullary@->return(nil_orstring))letexit=letexit_minibuffer=Funcall.Wrap.("exit-minibuffer"<:nullary@->returnnil)infun()->exit_minibuffer();assertfalse;;letdepth=Funcall.Wrap.("minibuffer-depth"<:nullary@->returnint)letcontents=Funcall.Wrap.("minibuffer-contents"<:nullary@->returnstring)