diff --git a/src/source_base.cc b/src/source_base.cc index 6fca2d1..9484e0f 100644 --- a/src/source_base.cc +++ b/src/source_base.cc @@ -806,6 +806,14 @@ void Source::BaseView::paste() { scroll_to_cursor_delayed(this, false, false); } +std::string Source::BaseView::get_selected_text() { + Gtk::TextIter start, end; + if(!get_buffer()->get_selection_bounds(start, end)) { + return {}; + } + return get_buffer()->get_text(start, end); +} + void Source::BaseView::search_highlight(const std::string &text, bool case_sensitive, bool regex) { gtk_source_search_settings_set_case_sensitive(search_settings, case_sensitive); gtk_source_search_settings_set_regex_enabled(search_settings, regex); diff --git a/src/source_base.h b/src/source_base.h index 63cec20..f5abf00 100644 --- a/src/source_base.h +++ b/src/source_base.h @@ -64,6 +64,8 @@ namespace Source { void paste(); + std::string get_selected_text(); + void search_highlight(const std::string &text, bool case_sensitive, bool regex); void search_forward(); void search_backward(); diff --git a/src/window.cc b/src/window.cc index e3487a4..20bca22 100644 --- a/src/window.cc +++ b/src/window.cc @@ -1446,6 +1446,12 @@ void Window::search_and_replace_entry() { }); auto search_entry_it = EntryBox::get().entries.begin(); search_entry_it->set_placeholder_text("Find"); + if(auto view = Notebook::get().get_current_view()) { + auto const selected = view->get_selected_text(); + if(!selected.empty()) { + search_entry_it->set_text(selected); + } + } if(auto view = Notebook::get().get_current_view()) { view->update_search_occurrences = [label_it](int number) { label_it->update(0, std::to_string(number));