Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Source file current_buffer0.ml
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586open!Core_kernelopen!Import0open!Async_kernelmoduleBuffer=Buffer0letget=Funcall.("current-buffer"<:nullary@->returnBuffer.t)letset=Funcall.("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.("boundp"<:Symbol.t@->returnbool)letvariable_is_defined=boundpletvalue_is_defined(var:_Var.t)=boundpvar.symbolletsymbol_value=Funcall.("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.("makunbound"<:Symbol.t@->returnnil)letclear_value(var:_Var.t)=makunboundvar.symbolletelisp_set=Funcall.("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;;