diff options
author | Jacques Garrigue <garrigue at math.nagoya-u.ac.jp> | 2000-04-12 03:43:25 +0000 |
---|---|---|
committer | Jacques Garrigue <garrigue at math.nagoya-u.ac.jp> | 2000-04-12 03:43:25 +0000 |
commit | 780b65fca6ed06966864d76755dc1dad94c39ade (patch) | |
tree | a93efbe44a2b54752fbb4a0b2e994c0a4505b271 /otherlibs/labltk/browser/editor.ml | |
parent | 975d4dc752a717b2da0bb0f3307af6635572d3c5 (diff) |
nouvelle syntaxe avec tilde
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@3061 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
Diffstat (limited to 'otherlibs/labltk/browser/editor.ml')
-rw-r--r-- | otherlibs/labltk/browser/editor.ml | 404 |
1 files changed, 202 insertions, 202 deletions
diff --git a/otherlibs/labltk/browser/editor.ml b/otherlibs/labltk/browser/editor.ml index 6725f5dab..acc514d77 100644 --- a/otherlibs/labltk/browser/editor.ml +++ b/otherlibs/labltk/browser/editor.ml @@ -24,18 +24,18 @@ and type_on_load = ref false let compiler_preferences () = let tl = Jg_toplevel.titled "Compiler" in - Wm.transient_set tl master:Widget.default_toplevel; - let mk_chkbutton :text :ref :invert = - let variable = Textvariable.create on:tl () in + Wm.transient_set tl ~master:Widget.default_toplevel; + let mk_chkbutton ~text ~ref ~invert = + let variable = Textvariable.create ~on:tl () in if (if invert then not !ref else !ref) then Textvariable.set variable "1"; - Checkbutton.create tl :text :variable, + Checkbutton.create tl ~text ~variable, (fun () -> ref := Textvariable.get variable = (if invert then "0" else "1")) in let chkbuttons, setflags = List.split (List.map - f:(fun (text, ref, invert) -> mk_chkbutton :text :ref :invert) + ~f:(fun (text, ref, invert) -> mk_chkbutton ~text ~ref ~invert) [ "No pervasives", Clflags.nopervasives, false; "No warnings", Typecheck.nowarnings, false; "Modern", Clflags.classic, true; @@ -43,16 +43,16 @@ let compiler_preferences () = "Type on load", type_on_load, false ]) in let buttons = Frame.create tl in - let ok = Button.create buttons text:"Ok" padx:20 command: + let ok = Button.create buttons ~text:"Ok" ~padx:20 ~command: begin fun () -> - List.iter f:(fun f -> f ()) setflags; + List.iter ~f:(fun f -> f ()) setflags; destroy tl end - and cancel = Jg_button.create_destroyer tl parent:buttons text:"Cancel" + and cancel = Jg_button.create_destroyer tl ~parent:buttons ~text:"Cancel" in - pack chkbuttons side:`Top anchor:`W; - pack [ok;cancel] side:`Left fill:`X expand:true; - pack [buttons] side:`Bottom fill:`X + pack chkbuttons ~side:`Top ~anchor:`W; + pack [ok;cancel] ~side:`Left ~fill:`X ~expand:true; + pack [buttons] ~side:`Bottom ~fill:`X let rec exclude txt = function [] -> [] @@ -60,75 +60,75 @@ let rec exclude txt = function let goto_line tw = let tl = Jg_toplevel.titled "Go to" in - Wm.transient_set tl master:Widget.default_toplevel; + Wm.transient_set tl ~master:Widget.default_toplevel; Jg_bind.escape_destroy tl; let ef = Frame.create tl in let fl = Frame.create ef and fi = Frame.create ef in - let ll = Label.create fl text:"Line number:" - and il = Entry.create fi width:10 - and lc = Label.create fl text:"Col number:" - and ic = Entry.create fi width:10 + let ll = Label.create fl ~text:"Line ~number:" + and il = Entry.create fi ~width:10 + and lc = Label.create fl ~text:"Col ~number:" + and ic = Entry.create fi ~width:10 and get_int ew = try int_of_string (Entry.get ew) with Failure "int_of_string" -> 0 in let buttons = Frame.create tl in - let ok = Button.create buttons text:"Ok" command: + let ok = Button.create buttons ~text:"Ok" ~command: begin fun () -> let l = get_int il and c = get_int ic in - Text.mark_set tw mark:"insert" index:(`Linechar (l,0), [`Char c]); - Text.see tw index:(`Mark "insert", []); + Text.mark_set tw ~mark:"insert" ~index:(`Linechar (l,0), [`Char c]); + Text.see tw ~index:(`Mark "insert", []); destroy tl end - and cancel = Jg_button.create_destroyer tl parent:buttons text:"Cancel" in + and cancel = Jg_button.create_destroyer tl ~parent:buttons ~text:"Cancel" in Focus.set il; - List.iter [il; ic] f: + List.iter [il; ic] ~f: begin fun w -> Jg_bind.enter_focus w; - Jg_bind.return_invoke w button:ok + Jg_bind.return_invoke w ~button:ok end; - pack [ll; lc] side:`Top anchor:`W; - pack [il; ic] side:`Top fill:`X expand:true; - pack [fl; fi] side:`Left fill:`X expand:true; - pack [ok; cancel] side:`Left fill:`X expand:true; - pack [ef; buttons] side:`Top fill:`X expand:true + pack [ll; lc] ~side:`Top ~anchor:`W; + pack [il; ic] ~side:`Top ~fill:`X ~expand:true; + pack [fl; fi] ~side:`Left ~fill:`X ~expand:true; + pack [ok; cancel] ~side:`Left ~fill:`X ~expand:true; + pack [ef; buttons] ~side:`Top ~fill:`X ~expand:true let select_shell txt = let shells = Shell.get_all () in - let shells = Sort.list shells order:(fun (x,_) (y,_) -> x <= y) in + let shells = Sort.list shells ~order:(fun (x,_) (y,_) -> x <= y) in let tl = Jg_toplevel.titled "Select Shell" in Jg_bind.escape_destroy tl; - Wm.transient_set tl master:(Winfo.toplevel txt.tw); - let label = Label.create tl text:"Send to:" + Wm.transient_set tl ~master:(Winfo.toplevel txt.tw); + let label = Label.create tl ~text:"Send ~to:" and box = Listbox.create tl and frame = Frame.create tl in Jg_bind.enter_focus box; - let cancel = Jg_button.create_destroyer tl parent:frame text:"Cancel" - and ok = Button.create frame text:"Ok" command: + let cancel = Jg_button.create_destroyer tl ~parent:frame ~text:"Cancel" + and ok = Button.create frame ~text:"Ok" ~command: begin fun () -> try - let name = Listbox.get box index:`Active in + let name = Listbox.get box ~index:`Active in txt.shell <- Some (name, List.assoc name shells); destroy tl with Not_found -> txt.shell <- None; destroy tl end in - Listbox.insert box index:`End texts:(List.map f:fst shells); - Listbox.configure box height:(List.length shells); - bind box events:[`KeyPressDetail"Return"] breakable:true - action:(fun _ -> Button.invoke ok; break ()); - bind box events:[`Modified([`Double],`ButtonPressDetail 1)] breakable:true - fields:[`MouseX;`MouseY] - action:(fun ev -> - Listbox.activate box index:(`Atxy (ev.ev_MouseX, ev.ev_MouseY)); + Listbox.insert box ~index:`End ~texts:(List.map ~f:fst shells); + Listbox.configure box ~height:(List.length shells); + bind box ~events:[`KeyPressDetail"Return"] ~breakable:true + ~action:(fun _ -> Button.invoke ok; break ()); + bind box ~events:[`Modified([`Double],`ButtonPressDetail 1)] ~breakable:true + ~fields:[`MouseX;`MouseY] + ~action:(fun ev -> + Listbox.activate box ~index:(`Atxy (ev.ev_MouseX, ev.ev_MouseY)); Button.invoke ok; break ()); - pack [label] side:`Top anchor:`W; - pack [box] side:`Top fill:`Both; - pack [frame] side:`Bottom fill:`X expand:true; - pack [ok;cancel] side:`Left fill:`X expand:true + pack [label] ~side:`Top ~anchor:`W; + pack [box] ~side:`Top ~fill:`Both; + pack [frame] ~side:`Bottom ~fill:`X ~expand:true; + pack [ok;cancel] ~side:`Left ~fill:`X ~expand:true open Parser @@ -141,13 +141,13 @@ let send_phrase txt = match txt.shell with None -> () | Some (_,sh) -> try - let i1,i2 = Text.tag_nextrange txt.tw tag:"sel" start:tstart in - let phrase = Text.get txt.tw start:(i1,[]) end:(i2,[]) in + let i1,i2 = Text.tag_nextrange txt.tw ~tag:"sel" ~start:tstart in + let phrase = Text.get txt.tw ~start:(i1,[]) ~stop:(i2,[]) in sh#send phrase; - if Str.string_match phrase pat:(Str.regexp ";;") pos:0 + if Str.string_match phrase ~pat:(Str.regexp ";;") ~pos:0 then sh#send "\n" else sh#send ";;\n" with Not_found | Protocol.TkError _ -> - let text = Text.get txt.tw start:tstart end:tend in + let text = Text.get txt.tw ~start:tstart ~stop:tend in let buffer = Lexing.from_string text in let start = ref 0 and block_start = ref [] @@ -161,12 +161,12 @@ let send_phrase txt = in let bol = (pos = 0) || text.[pos-1] = '\n' in if not !after && - Text.compare txt.tw index:(tpos pos) op:(if bol then `Gt else `Ge) - index:(`Mark"insert",[]) + Text.compare txt.tw ~index:(tpos pos) ~op:(if bol then `Gt else `Ge) + ~index:(`Mark"insert",[]) then begin after := true; let anon, real = - List.partition !block_start f:(fun x -> x = -1) in + List.partition !block_start ~f:(fun x -> x = -1) in block_start := anon; if real <> [] then start := List.hd real; end; @@ -194,46 +194,46 @@ let send_phrase txt = | _ -> () done; - let phrase = String.sub text pos:!start len:(!pend - !start) in + let phrase = String.sub text ~pos:!start ~len:(!pend - !start) in sh#send phrase; sh#send ";;\n" -let search_pos_window txt :x :y = +let search_pos_window txt ~x ~y = if txt.structure = [] & txt.psignature = [] then () else - let `Linechar (l, c) = Text.index txt.tw index:(`Atxy(x,y), []) in + let `Linechar (l, c) = Text.index txt.tw ~index:(`Atxy(x,y), []) in let text = Jg_text.get_all txt.tw in - let pos = Searchpos.lines_to_chars l in:text + c in + let pos = Searchpos.lines_to_chars l ~text + c in try if txt.structure <> [] then - try Searchpos.search_pos_structure txt.structure :pos + try Searchpos.search_pos_structure txt.structure ~pos with Searchpos.Found_str (kind, env) -> - Searchpos.view_type kind :env + Searchpos.view_type kind ~env else try Searchpos.search_pos_signature - txt.psignature :pos env:!Searchid.start_env; + txt.psignature ~pos ~env:!Searchid.start_env; () with Searchpos.Found_sig (kind, lid, env) -> - Searchpos.view_decl lid :kind :env + Searchpos.view_decl lid ~kind ~env with Not_found -> () -let search_pos_menu txt :x :y = +let search_pos_menu txt ~x ~y = if txt.structure = [] & txt.psignature = [] then () else - let `Linechar (l, c) = Text.index txt.tw index:(`Atxy(x,y), []) in + let `Linechar (l, c) = Text.index txt.tw ~index:(`Atxy(x,y), []) in let text = Jg_text.get_all txt.tw in - let pos = Searchpos.lines_to_chars l in:text + c in + let pos = Searchpos.lines_to_chars l ~text + c in try if txt.structure <> [] then - try Searchpos.search_pos_structure txt.structure :pos + try Searchpos.search_pos_structure txt.structure ~pos with Searchpos.Found_str (kind, env) -> - let menu = Searchpos.view_type_menu kind :env parent:txt.tw in + let menu = Searchpos.view_type_menu kind ~env ~parent:txt.tw in let x = x + Winfo.rootx txt.tw and y = y + Winfo.rooty txt.tw - 10 in - Menu.popup menu :x :y + Menu.popup menu ~x ~y else try Searchpos.search_pos_signature - txt.psignature :pos env:!Searchid.start_env; + txt.psignature ~pos ~env:!Searchid.start_env; () with Searchpos.Found_sig (kind, lid, env) -> - let menu = Searchpos.view_decl_menu lid :kind :env parent:txt.tw in + let menu = Searchpos.view_decl_menu lid ~kind ~env ~parent:txt.tw in let x = x + Winfo.rootx txt.tw and y = y + Winfo.rooty txt.tw - 10 in - Menu.popup menu :x :y + Menu.popup menu ~x ~y with Not_found -> () let string_width s = @@ -247,54 +247,54 @@ let string_width s = let indent_line = let ins = `Mark"insert" and reg = Str.regexp "[ \t]*" in fun tw -> - let `Linechar(l,c) = Text.index tw index:(ins,[]) - and line = Text.get tw start:(ins,[`Linestart]) end:(ins,[`Lineend]) in - ignore (Str.string_match pat:reg line pos:0); + let `Linechar(l,c) = Text.index tw ~index:(ins,[]) + and line = Text.get tw ~start:(ins,[`Linestart]) ~stop:(ins,[`Lineend]) in + ignore (Str.string_match ~pat:reg line ~pos:0); let len = Str.match_end () in - if len < c then Text.insert tw index:(ins,[]) text:"\t" else + if len < c then Text.insert tw ~index:(ins,[]) ~text:"\t" else let width = string_width (Str.matched_string line) in - Text.mark_set tw mark:"insert" index:(ins,[`Linestart;`Char len]); + Text.mark_set tw ~mark:"insert" ~index:(ins,[`Linestart;`Char len]); let indent = if l <= 1 then 2 else let previous = - Text.get tw start:(ins,[`Line(-1);`Linestart]) - end:(ins,[`Line(-1);`Lineend]) in - ignore (Str.string_match pat:reg previous pos:0); + Text.get tw ~start:(ins,[`Line(-1);`Linestart]) + ~stop:(ins,[`Line(-1);`Lineend]) in + ignore (Str.string_match ~pat:reg previous ~pos:0); let previous = Str.matched_string previous in let width_previous = string_width previous in if width_previous <= width then 2 else width_previous - width in - Text.insert tw index:(ins,[]) text:(String.make indent ' ') + Text.insert tw ~index:(ins,[]) ~text:(String.make indent ' ') (* The editor class *) -class editor :top :menus = object (self) - val file_menu = new Jg_menu.c "File" parent:menus - val edit_menu = new Jg_menu.c "Edit" parent:menus - val compiler_menu = new Jg_menu.c "Compiler" parent:menus - val module_menu = new Jg_menu.c "Modules" parent:menus - val window_menu = new Jg_menu.c "Windows" parent:menus +class editor ~top ~menus = object (self) + val file_menu = new Jg_menu.c "File" ~parent:menus + val edit_menu = new Jg_menu.c "Edit" ~parent:menus + val compiler_menu = new Jg_menu.c "Compiler" ~parent:menus + val module_menu = new Jg_menu.c "Modules" ~parent:menus + val window_menu = new Jg_menu.c "Windows" ~parent:menus val label = - Checkbutton.create menus state:`Disabled - onvalue:"modified" offvalue:"unchanged" + Checkbutton.create menus ~state:`Disabled + ~onvalue:"modified" ~offvalue:"unchanged" val mutable current_dir = Unix.getcwd () val mutable error_messages = [] val mutable windows = [] val mutable current_tw = Text.create top - val vwindow = Textvariable.create on:top () + val vwindow = Textvariable.create ~on:top () val mutable window_counter = 0 method reset_window_menu = - Menu.delete window_menu#menu first:(`Num 0) last:`End; + Menu.delete window_menu#menu ~first:(`Num 0) ~last:`End; List.iter - (Sort.list windows order: + (Sort.list windows ~order: (fun w1 w2 -> Filename.basename w1.name < Filename.basename w2.name)) - f: + ~f: begin fun txt -> Menu.add_radiobutton window_menu#menu - label:(Filename.basename txt.name) - variable:vwindow value:txt.number - command:(fun () -> self#set_edit txt) + ~label:(Filename.basename txt.name) + ~variable:vwindow ~value:txt.number + ~command:(fun () -> self#set_edit txt) end method set_edit txt = @@ -303,74 +303,74 @@ class editor :top :menus = object (self) windows <- txt :: exclude txt windows; self#reset_window_menu; current_tw <- txt.tw; - Checkbutton.configure label text:(Filename.basename txt.name) - variable:txt.modified; + Checkbutton.configure label ~text:(Filename.basename txt.name) + ~variable:txt.modified; Textvariable.set vwindow txt.number; - Text.yview txt.tw scroll:(`Page 0); - pack [txt.frame] fill:`Both expand:true side:`Bottom + Text.yview txt.tw ~scroll:(`Page 0); + pack [txt.frame] ~fill:`Both ~expand:true ~side:`Bottom method new_window name = let tl, tw, sb = Jg_text.create_with_scrollbar top in - Text.configure tw background:`White; + Text.configure tw ~background:`White; Jg_bind.enter_focus tw; window_counter <- window_counter + 1; let txt = { name = name; tw = tw; frame = tl; number = string_of_int window_counter; - modified = Textvariable.create on:tw (); + modified = Textvariable.create ~on:tw (); shell = None; structure = []; signature = []; psignature = [] } in let control c = Char.chr (Char.code c - 96) in - bind tw events:[`Modified([`Alt], `KeyPress)] action:ignore; - bind tw events:[`KeyPress] fields:[`Char] - action:(fun ev -> + bind tw ~events:[`Modified([`Alt], `KeyPress)] ~action:ignore; + bind tw ~events:[`KeyPress] ~fields:[`Char] + ~action:(fun ev -> if ev.ev_Char <> "" & (ev.ev_Char.[0] >= ' ' or List.mem ev.ev_Char.[0] - (List.map f:control ['d'; 'h'; 'i'; 'k'; 'o'; 't'; 'w'; 'y'])) + (List.map ~f:control ['d'; 'h'; 'i'; 'k'; 'o'; 't'; 'w'; 'y'])) then Textvariable.set txt.modified "modified"); - bind tw events:[`KeyPressDetail"Tab"] breakable:true - action:(fun _ -> + bind tw ~events:[`KeyPressDetail"Tab"] ~breakable:true + ~action:(fun _ -> indent_line tw; Textvariable.set txt.modified "modified"; break ()); - bind tw events:[`Modified([`Control],`KeyPressDetail"k")] - action:(fun _ -> + bind tw ~events:[`Modified([`Control],`KeyPressDetail"k")] + ~action:(fun _ -> let text = - Text.get tw start:(`Mark"insert",[]) end:(`Mark"insert",[`Lineend]) - in ignore (Str.string_match pat:(Str.regexp "[ \t]*") text pos:0); + Text.get tw ~start:(`Mark"insert",[]) ~stop:(`Mark"insert",[`Lineend]) + in ignore (Str.string_match ~pat:(Str.regexp "[ \t]*") text ~pos:0); if Str.match_end () <> String.length text then begin Clipboard.clear (); - Clipboard.append data:text () + Clipboard.append ~data:text () end); - bind tw events:[`KeyRelease] fields:[`Char] - action:(fun ev -> + bind tw ~events:[`KeyRelease] ~fields:[`Char] + ~action:(fun ev -> if ev.ev_Char <> "" then - Lexical.tag tw start:(`Mark"insert", [`Linestart]) - end:(`Mark"insert", [`Lineend])); - bind tw events:[`Motion] action:(fun _ -> Focus.set tw); - bind tw events:[`ButtonPressDetail 2] - action:(fun _ -> + Lexical.tag tw ~start:(`Mark"insert", [`Linestart]) + ~stop:(`Mark"insert", [`Lineend])); + bind tw ~events:[`Motion] ~action:(fun _ -> Focus.set tw); + bind tw ~events:[`ButtonPressDetail 2] + ~action:(fun _ -> Textvariable.set txt.modified "modified"; - Lexical.tag txt.tw start:(`Mark"insert", [`Linestart]) - end:(`Mark"insert", [`Lineend])); - bind tw events:[`Modified([`Double], `ButtonPressDetail 1)] - fields:[`MouseX;`MouseY] - action:(fun ev -> search_pos_window txt x:ev.ev_MouseX y:ev.ev_MouseY); - bind tw events:[`ButtonPressDetail 3] fields:[`MouseX;`MouseY] - action:(fun ev -> search_pos_menu txt x:ev.ev_MouseX y:ev.ev_MouseY); - - pack [sb] fill:`Y side:`Right; - pack [tw] fill:`Both expand:true side:`Left; + Lexical.tag txt.tw ~start:(`Mark"insert", [`Linestart]) + ~stop:(`Mark"insert", [`Lineend])); + bind tw ~events:[`Modified([`Double], `ButtonPressDetail 1)] + ~fields:[`MouseX;`MouseY] + ~action:(fun ev -> search_pos_window txt ~x:ev.ev_MouseX ~y:ev.ev_MouseY); + bind tw ~events:[`ButtonPressDetail 3] ~fields:[`MouseX;`MouseY] + ~action:(fun ev -> search_pos_menu txt ~x:ev.ev_MouseX ~y:ev.ev_MouseY); + + pack [sb] ~fill:`Y ~side:`Right; + pack [tw] ~fill:`Both ~expand:true ~side:`Left; self#set_edit txt; Checkbutton.deselect label; Lexical.init_tags txt.tw method clear_errors () = - Text.tag_remove current_tw tag:"error" start:tstart end:tend; + Text.tag_remove current_tw ~tag:"error" ~start:tstart ~stop:tend; List.iter error_messages - f:(fun tl -> try destroy tl with Protocol.TkError _ -> ()); + ~f:(fun tl -> try destroy tl with Protocol.TkError _ -> ()); error_messages <- [] method typecheck () = @@ -378,7 +378,7 @@ class editor :top :menus = object (self) error_messages <- Typecheck.f (List.hd windows) method lex () = - Text.tag_remove current_tw tag:"error" start:tstart end:tend; + Text.tag_remove current_tw ~tag:"error" ~start:tstart ~stop:tend; Lexical.tag current_tw method save_text ?name:l txt = @@ -389,17 +389,17 @@ class editor :top :menus = object (self) try if Sys.file_exists name then if txt.name = name then - Sys.rename old:name new:(name ^ "~") + Sys.rename ~src:name ~dst:(name ^ "~") else begin match - Jg_message.ask master:top title:"Save" + Jg_message.ask ~master:top ~title:"Save" ("File `" ^ name ^ "' exists. Overwrite it?") with `yes -> () | `no | `cancel -> raise Exit end; let file = open_out name in - let text = Text.get txt.tw start:tstart end:(tposend 1) in + let text = Text.get txt.tw ~start:tstart ~stop:(tposend 1) in output_string file text; close_out file; - Checkbutton.configure label text:(Filename.basename name); + Checkbutton.configure label ~text:(Filename.basename name); Checkbutton.deselect label; txt.name <- name with @@ -411,17 +411,17 @@ class editor :top :menus = object (self) try let index = try - self#set_edit (List.find windows f:(fun x -> x.name = name)); + self#set_edit (List.find windows ~f:(fun x -> x.name = name)); let txt = List.hd windows in if Textvariable.get txt.modified = "modified" then - begin match Jg_message.ask master:top title:"Open" + begin match Jg_message.ask ~master:top ~title:"Open" ("`" ^ Filename.basename txt.name ^ "' modified. Save it?") with `yes -> self#save_text txt | `no -> () | `cancel -> raise Exit end; Checkbutton.deselect label; - (Text.index current_tw index:(`Mark"insert", []), []) + (Text.index current_tw ~index:(`Mark"insert", []), []) with Not_found -> self#new_window name; tstart in current_dir <- Filename.dirname name; @@ -429,16 +429,16 @@ class editor :top :menus = object (self) and tw = current_tw and len = ref 0 and buf = String.create 4096 in - Text.delete tw start:tstart end:tend; + Text.delete tw ~start:tstart ~stop:tend; while - len := input file :buf pos:0 len:4096; + len := input file ~buf ~pos:0 ~len:4096; !len > 0 do - Jg_text.output tw :buf pos:0 len:!len + Jg_text.output tw ~buf ~pos:0 ~len:!len done; close_in file; - Text.mark_set tw mark:"insert" :index; - Text.see tw :index; + Text.mark_set tw ~mark:"insert" ~index; + Text.see tw ~index; if Filename.check_suffix name ".ml" or Filename.check_suffix name ".mli" then begin @@ -451,7 +451,7 @@ class editor :top :menus = object (self) method close_window txt = try if Textvariable.get txt.modified = "modified" then - begin match Jg_message.ask master:top title:"Close" + begin match Jg_message.ask ~master:top ~title:"Close" ("`" ^ Filename.basename txt.name ^ "' modified. Save it?") with `yes -> self#save_text txt | `no -> () @@ -465,8 +465,8 @@ class editor :top :menus = object (self) with Exit -> () method open_file () = - Fileselect.f title:"Open File" action:self#load_text - dir:current_dir filter:("*.{ml,mli}") sync:true () + Fileselect.f ~title:"Open File" ~action:self#load_text + ~dir:current_dir ~filter:("*.{ml,mli}") ~sync:true () method save_file () = self#save_text (List.hd windows) @@ -474,27 +474,27 @@ class editor :top :menus = object (self) method quit () = try - List.iter windows f: + List.iter windows ~f: begin fun txt -> if Textvariable.get txt.modified = "modified" then - match Jg_message.ask master:top title:"Quit" + match Jg_message.ask ~master:top ~title:"Quit" ("`" ^ Filename.basename txt.name ^ "' modified. Save it?") with `yes -> self#save_text txt | `no -> () | `cancel -> raise Exit end; - bind top events:[`Destroy]; + bind top ~events:[`Destroy]; destroy top; break () with Exit -> break () - method reopen :file :pos = + method reopen ~file ~pos = if not (Winfo.ismapped top) then Wm.deiconify top; match file with None -> () | Some file -> self#load_text [file]; - Text.mark_set current_tw mark:"insert" index:(tpos pos); + Text.mark_set current_tw ~mark:"insert" ~index:(tpos pos); Text.yview_index current_tw - index:(`Linechar(1,0),[`Char pos; `Line (-2)]) + ~index:(`Linechar(1,0),[`Char pos; `Line (-2)]) initializer (* Create a first window *) @@ -508,60 +508,60 @@ class editor :top :menus = object (self) [`Alt], "x", (fun () -> send_phrase (List.hd windows)); [`Alt], "l", self#lex; [`Alt], "t", self#typecheck ] - f:begin fun (modi,key,act) -> - bind top events:[`Modified(modi, `KeyPressDetail key)] breakable:true - action:(fun _ -> act (); break ()) + ~f:begin fun (modi,key,act) -> + bind top ~events:[`Modified(modi, `KeyPressDetail key)] ~breakable:true + ~action:(fun _ -> act (); break ()) end; - bind top events:[`Destroy] breakable:true fields:[`Widget] action: + bind top ~events:[`Destroy] ~breakable:true ~fields:[`Widget] ~action: begin fun ev -> if Widget.name ev.ev_Widget = Widget.name top then self#quit () end; (* File menu *) - file_menu#add_command "Open File..." command:self#open_file; + file_menu#add_command "Open File..." ~command:self#open_file; file_menu#add_command "Reopen" - command:(fun () -> self#load_text [(List.hd windows).name]); - file_menu#add_command "Save File" command:self#save_file accelerator:"M-s"; - file_menu#add_command "Save As..." underline:5 command: + ~command:(fun () -> self#load_text [(List.hd windows).name]); + file_menu#add_command "Save File" ~command:self#save_file ~accelerator:"M-s"; + file_menu#add_command "Save As..." ~underline:5 ~command: begin fun () -> let txt = List.hd windows in - Fileselect.f title:"Save as File" - action:(fun name -> self#save_text txt :name) - dir:(Filename.dirname txt.name) - filter:"*.{ml,mli}" - file:(Filename.basename txt.name) - sync:true usepath:false () + Fileselect.f ~title:"Save as File" + ~action:(fun name -> self#save_text txt ~name) + ~dir:(Filename.dirname txt.name) + ~filter:"*.{ml,mli}" + ~file:(Filename.basename txt.name) + ~sync:true ~usepath:false () end; - file_menu#add_command "Close File" command:self#close_file; - file_menu#add_command "Close Window" command:self#quit underline:6; + file_menu#add_command "Close File" ~command:self#close_file; + file_menu#add_command "Close Window" ~command:self#quit ~underline:6; (* Edit menu *) - edit_menu#add_command "Paste selection" command: + edit_menu#add_command "Paste selection" ~command: begin fun () -> - Text.insert current_tw index:(`Mark"insert",[]) - text:(Selection.get displayof:top ()) + Text.insert current_tw ~index:(`Mark"insert",[]) + ~text:(Selection.get ~displayof:top ()) end; - edit_menu#add_command "Goto..." accelerator:"C-g" - command:(fun () -> goto_line current_tw); - edit_menu#add_command "Search..." accelerator:"C-s" - command:(fun () -> Jg_text.search_string current_tw); - edit_menu#add_command "To shell" accelerator:"M-x" - command:(fun () -> send_phrase (List.hd windows)); + edit_menu#add_command "Goto..." ~accelerator:"C-g" + ~command:(fun () -> goto_line current_tw); + edit_menu#add_command "Search..." ~accelerator:"C-s" + ~command:(fun () -> Jg_text.search_string current_tw); + edit_menu#add_command "To shell" ~accelerator:"M-x" + ~command:(fun () -> send_phrase (List.hd windows)); edit_menu#add_command "Select shell..." - command:(fun () -> select_shell (List.hd windows)); + ~command:(fun () -> select_shell (List.hd windows)); (* Compiler menu *) compiler_menu#add_command "Preferences..." - command:compiler_preferences; - compiler_menu#add_command "Lex" accelerator:"M-l" - command:self#lex; - compiler_menu#add_command "Typecheck" accelerator:"M-t" - command:self#typecheck; + ~command:compiler_preferences; + compiler_menu#add_command "Lex" ~accelerator:"M-l" + ~command:self#lex; + compiler_menu#add_command "Typecheck" ~accelerator:"M-t" + ~command:self#typecheck; compiler_menu#add_command "Clear errors" - command:self#clear_errors; - compiler_menu#add_command "Signature..." command: + ~command:self#clear_errors; + compiler_menu#add_command "Signature..." ~command: begin fun () -> let txt = List.hd windows in if txt.signature <> [] then let basename = Filename.basename txt.name in @@ -571,47 +571,47 @@ class editor :top :menus = object (self) Env.add_module (Ident.create modname) (Types.Tmty_signature txt.signature) Env.initial - in Viewer.view_defined (Longident.Lident modname) :env + in Viewer.view_defined (Longident.Lident modname) ~env end; (* Modules *) module_menu#add_command "Path editor..." - command:(fun () -> Setpath.set dir:current_dir); + ~command:(fun () -> Setpath.set ~dir:current_dir); module_menu#add_command "Reset cache" - command:(fun () -> Setpath.exec_update_hooks (); Env.reset_cache ()); + ~command:(fun () -> Setpath.exec_update_hooks (); Env.reset_cache ()); module_menu#add_command "Search symbol..." - command:Viewer.search_symbol; + ~command:Viewer.search_symbol; module_menu#add_command "Close all" - command:Viewer.close_all_views; + ~command:Viewer.close_all_views; (* pack everything *) - pack (List.map f:(fun m -> coe m#button) + pack (List.map ~f:(fun m -> coe m#button) [file_menu; edit_menu; compiler_menu; module_menu; window_menu] @ [coe label]) - side:`Left ipadx:5 anchor:`W; - pack [menus] before:(List.hd windows).frame side:`Top fill:`X + ~side:`Left ~ipadx:5 ~anchor:`W; + pack [menus] ~before:(List.hd windows).frame ~side:`Top ~fill:`X end (* The main function starts here ! *) let already_open : editor option ref = ref None -let editor ?:file ?(:pos=0) () = +let editor ?file ?(pos=0) () = if match !already_open with None -> false | Some ed -> - try ed#reopen :file :pos; true + try ed#reopen ~file ~pos; true with Protocol.TkError _ -> already_open := None; false then () else let top = Jg_toplevel.titled "Editor" in - let menus = Frame.create top name:"menubar" in - let ed = new editor :top :menus in + let menus = Frame.create top ~name:"menubar" in + let ed = new editor ~top ~menus in already_open := Some ed; - if file <> None then ed#reopen :file :pos + if file <> None then ed#reopen ~file ~pos -let f ?:file ?:pos ?(:opendialog=false) () = +let f ?file ?pos ?(opendialog=false) () = if opendialog then - Fileselect.f title:"Open File" - action:(function [file] -> editor :file () | _ -> ()) - filter:("*.{ml,mli}") sync:true () - else editor ?:file ?:pos () + Fileselect.f ~title:"Open File" + ~action:(function [file] -> editor ~file () | _ -> ()) + ~filter:("*.{ml,mli}") ~sync:true () + else editor ?file ?pos () |