From fc5c11f61ee7535f0eccc04aa77dcd28e018861d Mon Sep 17 00:00:00 2001 From: ckurz Date: Wed, 29 Aug 2018 10:04:16 +0200 Subject: [PATCH] Find dialog will now use selection from active view as initial text. --- src/source_base.cc | 8 ++++++++ src/source_base.h | 2 ++ src/window.cc | 6 ++++++ 3 files changed, 16 insertions(+) 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));