Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Page
Library
Module
Module type
Parameter
Class
Class type
Source
mode.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
(* * mode.ml * ----------- * Copyright : (c) 2019 - 2020, ZAN DoYe <zandoye@gmail.com> * Licence : MIT * * This file is a part of mew. *) module type Name = sig type t val compare : t -> t -> int end module Make(Key:Key.S) (Name:Name) = struct module KeyTrie = Trie.Make(Key) type name= Name.t type action= | Switch of name | Key of Key.t | KeySeq of Key.t Queue.t | Custom of (unit -> unit) type t= { name: name; timeout: float option; bindings: action KeyTrie.node; } module Modes = Map.Make(Name) type modes= t Modes.t let name m= m.name let timeout m= m.timeout let bindings m= m.bindings let compare m1 m2= compare m1.name m2.name let default_mode modes= Modes.bindings modes |> List.hd let bind mode keyseq action= KeyTrie.set mode.bindings keyseq action let unbind mode keyseq= KeyTrie.unset mode.bindings keyseq end