method transpose_lines =
let b = file#buffer in
let insert = b#get_iter `INSERT in
let line = insert#line in
if line = 0 then
()
else
let (line1_start, line1_stop) =
((if insert#starts_line then insert else insert#backward_line#forward_line),
(if insert#is_end then insert else insert#forward_line))
in
let prevline_start = line1_start#backward_line in
(*
prerr_endline (Printf.sprintf "prevline_start:%s" (string_of_location (location_of_iter prevline_start)));
*)
let prevline_stop =
(* do not cut the line with the ending '\\' if we are at the end of the buffer,
to prevent adding a new blank line *)
if line1_stop#is_end or line1_start#equal line1_stop then
prevline_start#forward_to_line_end
else
line1_start
in
(*
prerr_endline (Printf.sprintf "prevline_stop:%s" (string_of_location (location_of_iter prevline_stop)));
*)
let prev_line = b#get_text ~start: prevline_start ~stop: prevline_stop () in
let prev_line =
if line1_stop#is_end or line1_start#equal line1_stop then
"\n"^prev_line
else
prev_line
in
(*
let sline = b#get_text ~start: line1_start ~stop: line1_stop () in
prerr_endline (Printf.sprintf "prev_line=\"%s\"" (self#of_utf8 prev_line));
prerr_endline (Printf.sprintf "line=\"%s\"" (self#of_utf8 sline));
*)
b#begin_user_action ();
self#place_cursor line1_stop;
b#delete ~start: prevline_start ~stop: line1_start;
b#insert prev_line;
self#goto_line (line + 1);
b#end_user_action ()