Blame examples_camltk/mytext.ml

Packit bd2e5d
(***********************************************************************)
Packit bd2e5d
(*                                                                     *)
Packit bd2e5d
(*                 MLTk, Tcl/Tk interface of OCaml                     *)
Packit bd2e5d
(*                                                                     *)
Packit bd2e5d
(*    Francois Rouaix, Francois Pessaux, Jun Furuse and Pierre Weis    *)
Packit bd2e5d
(*               projet Cristal, INRIA Rocquencourt                    *)
Packit bd2e5d
(*            Jacques Garrigue, Kyoto University RIMS                  *)
Packit bd2e5d
(*                                                                     *)
Packit bd2e5d
(*  Copyright 2002 Institut National de Recherche en Informatique et   *)
Packit bd2e5d
(*  en Automatique and Kyoto University.  All rights reserved.         *)
Packit bd2e5d
(*  This file is distributed under the terms of the GNU Library        *)
Packit bd2e5d
(*  General Public License, with the special exception on linking      *)
Packit bd2e5d
(*  described in file LICENSE found in the OCaml source tree.          *)
Packit bd2e5d
(*                                                                     *)
Packit bd2e5d
(***********************************************************************)
Packit bd2e5d
open Camltk
Packit bd2e5d
Packit bd2e5d
let top = opentk ()
Packit bd2e5d
Packit bd2e5d
let scroll_link sb tx =
Packit bd2e5d
  Text.configure tx [YScrollCommand (Scrollbar.set sb)];
Packit bd2e5d
  Scrollbar.configure sb [ScrollCommand (Text.yview tx)]
Packit bd2e5d
Packit bd2e5d
let f = Frame.create top []
Packit bd2e5d
let text = Text.create f []
Packit bd2e5d
let scrollbar = Scrollbar.create f []
Packit bd2e5d
Packit bd2e5d
(* kill buffer *)
Packit bd2e5d
let buffer = ref ""
Packit bd2e5d
Packit bd2e5d
(* Note: for the text widgets, the insertion cursor is
Packit bd2e5d
    not TextIndex(Insert, []),
Packit bd2e5d
    but TextIndex(Mark  "insert", [])
Packit bd2e5d
*)
Packit bd2e5d
let insertMark = TextIndex(Mark "insert", [])
Packit bd2e5d
let eol_insertMark = TextIndex(Mark "insert", [LineEnd])
Packit bd2e5d
Packit bd2e5d
let kill () =
Packit bd2e5d
  buffer :=
Packit bd2e5d
     Text.get text insertMark eol_insertMark;
Packit bd2e5d
  prerr_endline ("Killed: " ^ !buffer);
Packit bd2e5d
  Text.delete text insertMark eol_insertMark
Packit bd2e5d
;;
Packit bd2e5d
Packit bd2e5d
let yank () =
Packit bd2e5d
  Text.insert text insertMark !buffer [];
Packit bd2e5d
  prerr_endline ("Yanked: " ^ !buffer)
Packit bd2e5d
;;
Packit bd2e5d
Packit bd2e5d
let _ =
Packit bd2e5d
  scroll_link scrollbar text;
Packit bd2e5d
Packit bd2e5d
  pack [text; scrollbar][Side Side_Left; Fill Fill_Y];
Packit bd2e5d
  pack [f][];
Packit bd2e5d
Packit bd2e5d
  bind text [[Control], KeyPressDetail "y"]
Packit bd2e5d
   (BindSet ([], fun _ -> yank () ));
Packit bd2e5d
  bind text [[Control], KeyPressDetail "k"]
Packit bd2e5d
   (BindSet ([], fun _ -> kill () ));
Packit bd2e5d
Packit bd2e5d
  mainLoop ()
Packit bd2e5d
;;