set_star self#ppFilename false
method goto (pos: [`Top | `Bottom | `Cursor]) () =
+ let getpos _ = buffer#get_iter_at_mark (`MARK locked_mark) in
match pos with
| `Top -> self#goto_top; self#notify
| `Bottom ->
(try
- let getpos _ = buffer#get_iter_at_mark (`MARK locked_mark) in
let rec dowhile pos =
self#_advance ();
if pos#compare (getpos ()) < 0 then
| `Cursor ->
let locked_iter () = buffer#get_iter_at_mark (`NAME "locked") in
let cursor_iter () = buffer#get_iter_at_mark `INSERT in
- let rec forward_until_cursor () = (* go forward until locked > cursor *)
- self#_advance ();
- if (locked_iter ())#compare (cursor_iter ()) < 0 then
- forward_until_cursor ()
+ let forward_until_cursor () = (* go forward until locked > cursor *)
+ let rec aux oldpos =
+ self#_advance ();
+ if (locked_iter ())#compare (cursor_iter ()) < 0 &&
+ oldpos#compare (getpos ()) < 0
+ then
+ aux (getpos ())
+ in
+ aux (getpos ())
in
let rec back_until_cursor () = (* go backward until locked < cursor *)
self#_retract ();