method select_location loc =
let (l,c) = line_char_of_location buffer (Some loc) in
self#set_location (l,c);
buffer#place_cursor ~where: (buffer#get_iter (`LINECHAR (l,c)));
let (start,stop) =
match loc with
| Linechar (l,c) ->
let n = (buffer#get_iter (`LINECHAR (l,c)))#offset in
(n, n)
| Linechars (l,(start,stop)) ->
let it = buffer#get_iter (`LINECHAR (l,c)) in
let start2 = it#offset in
let stop = (it#forward_cursor_positions (stop-start))#offset in
(start2, stop)
| Chars (start,stop) -> (start,stop)
| Char start -> (start,start)
in
buffer#select_range
(buffer#get_iter (`OFFSET start))
(buffer#get_iter (`OFFSET stop))