Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Source file current_buffer0.ml
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081open!Coreopen!Import0open!Async_kernelmoduleBuffer=Buffer0letget=Funcall.Wrap.("current-buffer"<:nullary@->returnBuffer.t)letset=Funcall.Wrap.("set-buffer"<:Buffer.t@->returnnil)letset_temporarilysync_or_asyncbuffer~f=letold=get()insetbuffer;Sync_or_async.protect[%here]sync_or_async~f~finally:(fun()->ifBuffer.is_liveoldthensetold);;letboundp=Funcall.Wrap.("boundp"<:Symbol.t@->returnbool)letvariable_is_defined=boundpletvalue_is_defined(var:_Var.t)=boundpvar.symbolletsymbol_value=Funcall.Wrap.("symbol-value"<:Symbol.t@->returnvalue)letvalue_internal(var:_Var.t)=symbol_valuevar.symbol|>Value.Type.of_value_exnvar.type_;;letvaluevar=ifnot(value_is_definedvar)thenNoneelseSome(value_internalvar)letvalue_exnvar=ifnot(value_is_definedvar)thenraise_s[%message"[Current_buffer.value_exn] of undefined variable"~_:(var:_Var.t)];value_internalvar;;letvalue_opt_exnvar=matchvalue_exnvarwith|Somex->x|None->raise_s[%message"buffer unexpectedly does not give a value to variable"(var:_Var.t)~buffer:(get():Buffer.t)];;letmakunbound=Funcall.Wrap.("makunbound"<:Symbol.t@->returnnil)letclear_value(var:_Var.t)=makunboundvar.symbolletelisp_set=Funcall.Wrap.("set"<:Symbol.t@->value@->returnnil)letset_value(var:_Var.t)a=elisp_setvar.symbol(a|>Value.Type.to_valuevar.type_)letset_valuesvars_and_values=List.itervars_and_values~f:(fun(Var.And_value.T(var,value))->set_valuevarvalue);;letset_values_temporarilysync_or_asyncvars_and_values~f=letold_buffer=get()inletolds=List.mapvars_and_values~f:(fun(Var.And_value.T(var,_))->Var.And_value_option.T(var,valuevar))inList.itervars_and_values~f:(fun(Var.And_value.T(var,value))->set_valuevarvalue);Sync_or_async.protect[%here]sync_or_async~f~finally:(fun()->letnew_buffer=get()inletbuffer_changed=not(Buffer.equalold_buffernew_buffer)inifbuffer_changedthensetold_buffer;List.iterolds~f:(fun(Var.And_value_option.T(var,value_opt))->matchvalue_optwith|None->clear_valuevar|Somevalue->set_valuevarvalue);ifbuffer_changedthensetnew_buffer);;letset_value_temporarilysync_or_asyncvarvalue~f=set_values_temporarilysync_or_async[T(var,value)]~f;;lethas_non_null_valuevar=matchvalue{varwithtype_=Value.Type.bool}with|None->false|Someb->b;;