diff options
author | Pierre-Marie Pédrot <pierre-marie.pedrot@inria.fr> | 2015-02-13 00:53:44 +0100 |
---|---|---|
committer | Pierre-Marie Pédrot <pierre-marie.pedrot@inria.fr> | 2015-02-13 00:59:29 +0100 |
commit | 7c9938cfbd0cf9093f90b0ee7b856105528c2a87 (patch) | |
tree | 952f451a08f45a4da2fe91396eca61daab9d9412 /ide/session.ml | |
parent | e096b248265ebd6df17fdff18e3967dbd367edc5 (diff) |
Trying to fix bug #3930.
Instead of setting the last modified part of the text to be the insert point,
we register all modifications to the buffer between to user actions and take
the last modified point to be the least offset of all those modifications.
Diffstat (limited to 'ide/session.ml')
-rw-r--r-- | ide/session.ml | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/ide/session.ml b/ide/session.ml index 47b747dae..dc79fa790 100644 --- a/ide/session.ml +++ b/ide/session.ml @@ -133,6 +133,11 @@ let set_buffer_handlers try ignore(buffer#get_mark (`NAME "stop_of_input")) with GText.No_such_mark _ -> assert false in let get_insert () = buffer#get_iter_at_mark `INSERT in + let update_prev it = + let prev = buffer#get_iter_at_mark (`NAME "prev_insert") in + if it#offset < prev#offset then + buffer#move_mark (`NAME "prev_insert") ~where:it + in let debug_edit_zone () = if false (*!Minilib.debug*) then begin buffer#remove_tag Tags.Script.edit_zone ~start:buffer#start_iter ~stop:buffer#end_iter; @@ -147,6 +152,7 @@ let set_buffer_handlers let insert_cb it s = if String.length s = 0 then () else begin Minilib.log ("insert_cb " ^ string_of_int it#offset); let text_mark = add_mark it in + let () = update_prev it in if it#has_tag Tags.Script.to_process then cancel_signal "Altering the script being processed in not implemented" else if it#has_tag Tags.Script.read_only then @@ -162,6 +168,7 @@ let set_buffer_handlers Minilib.log (Printf.sprintf "delete_cb %d %d" start#offset stop#offset); let min_iter, max_iter = if start#compare stop < 0 then start, stop else stop, start in + let () = update_prev min_iter in let text_mark = add_mark min_iter in let rec aux min_iter = if min_iter#equal max_iter then () |