blob: 8836af09f8bcbe48a60ddc1f2bd245891d613682 (
plain)
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
|
(* $Id$ *)
let lt_string ?:nocase{=false} s1 s2 =
if nocase then String.lowercase s1 < String.lowercase s2 else s1 < s2
class completion ?:nocase texts = object
val mutable texts = texts
val nocase = nocase
val mutable prefix = ""
val mutable current = 0
method add c =
prefix <- prefix ^ c;
while current < List.length texts - 1 &
lt_string (List.nth texts pos:current) prefix ?:nocase
do
current <- current + 1
done;
current
method current = current
method get_current = List.nth texts pos:current
method reset =
prefix <- "";
current <- 0
end
class timed ?:nocase ?:wait texts = object (self)
inherit completion texts ?:nocase as super
val wait = match wait with None -> 500 | Some n -> n
val mutable timer = None
method add c =
begin match timer with
None -> self#reset
| Some t -> Timer.remove t
end;
timer <- Some (Timer.add ms:wait callback:(fun () -> self#reset));
super#add c
method reset =
timer <- None; super#reset
end
|