@@ -276,19 +276,8 @@ edit_search_fix_search_start_if_selection (WEdit *edit)
276276 if (!edit_search_options .only_in_selection )
277277 return ;
278278
279- if (!eval_marks (edit , & start_mark , & end_mark ))
280- return ;
281-
282- if (edit_search_options .backwards )
283- {
284- if (edit -> search_start > end_mark || edit -> search_start <= start_mark )
285- edit -> search_start = end_mark ;
286- }
287- else
288- {
289- if (edit -> search_start < start_mark || edit -> search_start >= end_mark )
290- edit -> search_start = start_mark ;
291- }
279+ if (eval_marks (edit , & start_mark , & end_mark ))
280+ edit -> search_start = edit_search_options .backwards ? end_mark : start_mark ;
292281}
293282
294283/* --------------------------------------------------------------------------------------------- */
@@ -323,20 +312,15 @@ edit_find (edit_search_status_msg_t *esm, gsize *len)
323312 const off_t bol =
324313 edit_calculate_start_of_current_line (buf , search_start , end_string_symbol );
325314
326- if (search_start != bol )
327- {
328- start_mark = edit_calculate_start_of_next_line (buf , start_mark , buf -> size ,
329- end_string_symbol );
330- start_from_next_line = TRUE;
331- }
315+ start_from_next_line = search_start != bol ;
332316 }
333317
334318 if ((edit -> search_line_type & MC_SEARCH_LINE_END ) != 0
335319 && (end_mark - 1 != buf -> size
336320 || edit_buffer_get_byte (buf , end_mark ) != end_string_symbol ))
337321 end_mark = edit_calculate_end_of_previous_line (buf , end_mark , end_string_symbol );
338322
339- if (start_mark >= end_mark )
323+ if (search_start >= end_mark )
340324 {
341325 mc_search_set_error (edit -> search , MC_SEARCH_E_NOTFOUND , "%s" , _ (STR_E_NOTFOUND ));
342326 return FALSE;
@@ -396,12 +380,29 @@ edit_find (edit_search_status_msg_t *esm, gsize *len)
396380
397381 // correct end_mark if cursor is in column 0: move end_mark to the end of previous line
398382 if (end_mark == edit_calculate_start_of_current_line (buf , end_mark , end_string_symbol ))
383+ {
399384 end_mark = edit_calculate_end_of_previous_line (buf , end_mark , end_string_symbol );
400385
386+ // update bottom marker
387+ if (edit -> mark2 >= 0 && edit -> mark2 != edit -> mark1 )
388+ {
389+ if (edit -> mark2 > edit -> mark1 )
390+ edit -> mark2 = end_mark ;
391+ else
392+ edit -> mark1 = end_mark ;
393+ }
394+ }
395+
401396 if (start_from_next_line )
402397 search_start =
403398 edit_calculate_start_of_next_line (buf , search_start , end_mark , end_string_symbol );
404399
400+ if (search_start >= end_mark )
401+ {
402+ mc_search_set_error (edit -> search , MC_SEARCH_E_NOTFOUND , "%s" , _ (STR_E_NOTFOUND ));
403+ return FALSE;
404+ }
405+
405406 return mc_search_run (edit -> search , (void * ) esm , search_start , end_mark , len );
406407}
407408
0 commit comments