method get_iter = function
    | `LINECHAR (l,c) ->
        let line = max 0 (min (buffer#line_count - 1) l) in
        let it1 = buffer#get_iter (`LINECHAR (line,0)) in
        let chars = it1#chars_in_line -
          (if line = buffer#line_count - 1 then 0 else 1)
        in
        let c = max 0 (min c chars) in
        buffer#get_iter (`LINECHAR (line,c))
    | loc -> buffer#get_iter loc