File: tmkMain.ml

package info (click to toggle)
ocaml-curses 1.0.2-2
  • links: PTS, VCS
  • area: main
  • in suites: lenny
  • size: 328 kB
  • ctags: 869
  • sloc: ml: 2,832; ansic: 673; makefile: 140; sh: 10
file content (71 lines) | stat: -rw-r--r-- 1,560 bytes parent folder | download | duplicates (8)
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
open TmkStruct

exception Exit_run
  
let all_terms = ref []

let try_parse_config_file f () =
  try
    let f = open_in f in
    try
      let l = Lexing.from_channel f in
      let r = TmkStyle_p.parse TmkStyle_l.lexeme l in
      close_in f;
      r
    with e -> close_in f; raise e
  with e ->
    List.iter prerr_string ["Tmk config: "; f; ": "; Printexc.to_string e];
    prerr_newline ();
    []

let init_raw () =
  TmkStyle.S.add_config_source (try_parse_config_file "tmkrc");
  TmkStyle.S.process_config_sources ()

let add_terminal t =
  all_terms := t :: !all_terms

let init () =
  let () = init_raw () in
  let r = new TmkTerminal.terminal_unique in
  all_terms := [r];
  r

let iterate_term (term : TmkWidget.terminal) =
  term#activate ();
  let q = term#event_queue in
  let () = try
    let k = term#read_key () in
    if k = 113 then raise Exit_run;
    if k = -1 then raise Exit;
    let w = term#current_toplevel () in
    Queue.add (fun () -> w#signal_toplevel_event#emit (Toplevel.Key k)) q
  with Exit -> () in
  let something = ref false in
  let () = try
    while true do
      let t = Queue.take q in
      t ();
      something := true
    done
  with Queue.Empty -> () in
  if !something then (
    let (x,y) = term#get_cursor () in
    ignore (Curses.move y x);
    (*ignore (Curses.refresh ())*)
  )
 
  
let iterate () =
  List.iter iterate_term !all_terms
  
let run () =
  try
    while true do
      iterate ();
      Curses.napms 1
    done
  with Exit_run -> ()

let exit () =
  List.iter (fun t -> t#exit ()) !all_terms