******************************************************************************)
let onselect mods x y nclicks =
let sx,sy = !edit_view.pos and w,h = !edit_view.dim in
- Printf.printf "lines: %d\n" ((h - sy) / Draw.font.height);
Printf.printf "select (%d,%d) %d" x y nclicks;
print_endline ""
let buffer csr buf clr off =
dark_bkg (csr.width - csr.x) (csr.height - csr.y) csr;
csr.y <- csr.y + 2;
- let num = ref 0 and csr = (restart csr 2 0) and boxes = ref [] in
+ let num = ref 0 and csr = (restart csr 2 0)
+ and boxes = ref [] and lines = ref [] in
let draw_rune c =
let pos = off + !num in
if pos == (Buf.csrpos buf) then
draw_cursor csr;
+ if csr.x == csr.startx then
+ lines := pos :: !lines;
boxes := draw_glyph csr c (Colormap.find pos clr) (Buf.selected buf pos) !boxes;
num := !num + 1;
has_next_line csr
in
Buf.iter draw_rune buf off;
List.iter X11.draw_rect !boxes; (* draw selection boxes *)
- !num
+ (!num, !lines)
let status csr str =
dark_bkg csr.width (4 + font_height) csr;
let edit csr buf clr =
dark_bkg (csr.width - csr.x) (csr.height - csr.y) csr;
- buffer csr buf clr
+ let nchars = buffer csr buf clr in
+ nchars
val light_bkg : int -> int -> Cursor.t -> unit
val rule_bkg : int -> int -> Cursor.t -> unit
-val buffer : Cursor.t -> Buf.t -> Colormap.t -> int -> int
+val buffer : Cursor.t -> Buf.t -> Colormap.t -> int -> (int * int list)
val string : string -> Cursor.t -> unit
val hrule : int -> Cursor.t -> unit
val status : Cursor.t -> string -> unit
val tags : Cursor.t -> Buf.t -> unit
val scroll : Cursor.t -> (float * float) -> unit
-val edit : Cursor.t -> Buf.t -> Colormap.t -> int -> int
+val edit : Cursor.t -> Buf.t -> Colormap.t -> int -> (int * int list)
type t = {
num : int;
+ lines: int list;
buf : Buf.t;
map : Scrollmap.t;
clr : Colormap.t;
}
let from_buffer buf width height =
- { num = 0; buf = buf;
+ { num = 0; buf = buf; lines = [];
map = Scrollmap.make buf width 0;
clr = Colormap.make (Buf.make_lexer buf);
pos = (0,0);
let draw view csr =
let view = (resize view (Draw.Cursor.max_width csr)) in
let newcsr = (Draw.Cursor.clone csr) in
- let num = Draw.buffer newcsr view.buf view.clr (Scrollmap.first view.map) in
+ let num, lines = Draw.buffer newcsr view.buf view.clr (Scrollmap.first view.map) in
{ view with
num = num;
+ lines = lines;
pos = Draw.Cursor.pos csr;
dim = Draw.Cursor.dim csr }