let rec re_search_buffer ?(wrapped=false) forward (buffer: my_buffer) ?start s_utf8 =
  let (start, stop) =
    if forward then
      match start with
        None -> (buffer#get_iter `INSERT, buffer#end_iter)
      | Some i -> (i, buffer#end_iter)
    else
      match start with
        None -> (buffer#start_iter, buffer#get_iter `INSERT)
      | Some i -> (buffer#start_iter, i)
  in
  let gsearch = buffer#re_search forward in
  match gsearch ~start ~stop (Pcre.regexp s_utf8) with
    None ->
      if wrapped then
        (wrapped, None)
      else
        let start = if forward then buffer#start_iter else buffer#end_iter in
        re_search_buffer ~wrapped: true forward buffer ~start s_utf8
  | Some (start,stop) ->
      (wrapped, Some (start, stop))