From ef422a35e58e4aee65f8e35bc638407ae0559cb3 Mon Sep 17 00:00:00 2001 From: eidheim Date: Sun, 30 Aug 2015 14:33:13 +0200 Subject: [PATCH 1/5] Now only reparse when needed at tab switch. --- src/notebook.cc | 9 +++++++++ src/source.h | 1 + src/window.cc | 8 ++++++-- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/notebook.cc b/src/notebook.cc index ad329ab..f8f6feb 100644 --- a/src/notebook.cc +++ b/src/notebook.cc @@ -113,6 +113,15 @@ bool Notebook::save(int page) { auto view=get_view(page); if (view->file_path != "" && view->get_buffer()->get_modified()) { if(juci::filesystem::write(view->file_path, view->get_buffer())) { + if(auto clang_view=dynamic_cast(view)) { + for(auto a_view: source_views) { + if(auto a_clang_view=dynamic_cast(a_view)) { + if(clang_view!=a_clang_view) + a_clang_view->start_reparse_needed=true; + } + } + } + view->get_buffer()->set_modified(false); Singleton::terminal()->print("File saved to: " +view->file_path.string()+"\n"); diff --git a/src/source.h b/src/source.h index 32bdb0d..3abf39b 100644 --- a/src/source.h +++ b/src/source.h @@ -126,6 +126,7 @@ namespace Source { ClangViewParse(const boost::filesystem::path &file_path, const boost::filesystem::path& project_path); boost::filesystem::path project_path; void start_reparse(); + bool start_reparse_needed=false; protected: void init_parse(); bool on_key_press_event(GdkEventKey* key); diff --git a/src/window.cc b/src/window.cc index 23f6adc..c00581b 100644 --- a/src/window.cc +++ b/src/window.cc @@ -93,8 +93,12 @@ Window::Window() : box(Gtk::ORIENTATION_VERTICAL), notebook(directories), compil directories.select(notebook.get_current_view()->file_path); - if(auto source_view=dynamic_cast(notebook.get_current_view())) - source_view->start_reparse(); + if(auto source_view=dynamic_cast(notebook.get_current_view())) { + if(source_view->start_reparse_needed) { + source_view->start_reparse(); + source_view->start_reparse_needed=false; + } + } Singleton::status()->set_text(notebook.get_current_view()->status); } From 6393b90e499229fb44dce10aadc654610dc52667 Mon Sep 17 00:00:00 2001 From: eidheim Date: Sun, 30 Aug 2015 14:44:34 +0200 Subject: [PATCH 2/5] Now should start reparse also when for instance renaming a new variable name. --- src/source.cc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/source.cc b/src/source.cc index e89914f..8465fe2 100644 --- a/src/source.cc +++ b/src/source.cc @@ -1330,6 +1330,8 @@ void Source::ClangViewAutocomplete::autocomplete() { get_source_buffer()->begin_user_action(); completion_dialog->show(); } + else + start_reparse(); } else { set_status(""); From 7196ff5c58fc2035bfb0216cc0ab459ec694116c Mon Sep 17 00:00:00 2001 From: eidheim Date: Sun, 30 Aug 2015 15:33:06 +0200 Subject: [PATCH 3/5] Improved syntax highlighting. --- src/source.cc | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/source.cc b/src/source.cc index 8465fe2..b732b59 100644 --- a/src/source.cc +++ b/src/source.cc @@ -962,10 +962,23 @@ void Source::ClangViewParse::update_syntax() { auto kind=(int)token.get_cursor().get_kind(); if(kind==101 || kind==102) kind=(int)token.get_cursor().get_referenced().get_kind(); - ranges.emplace_back(token.offsets, kind); //TODO: Need to get type of referenced token if any + else if(kind==500) { + auto iter=get_buffer()->get_iter_at_line_index(token.offsets.first.line-1, token.offsets.first.index-1); + if(iter.backward_char() && *iter=='<') + token.offsets.first.index--; + iter=get_buffer()->get_iter_at_line_index(token.offsets.second.line-1, token.offsets.second.index-1); + if(*iter=='>' || *iter=='.' || *iter=='/') + token.offsets.second.index++; + } + ranges.emplace_back(token.offsets, kind); + } + else if(token.get_kind()==3) { // LiteralToken + int kind=109; + if(*get_buffer()->get_iter_at_line(token.offsets.first.line-1)=='#') { + kind=500; + } + ranges.emplace_back(token.offsets, kind); } - else if(token.get_kind()==3) // LiteralToken - ranges.emplace_back(token.offsets, 109); else if(token.get_kind()==4) // CommentToken ranges.emplace_back(token.offsets, 705); } @@ -1544,7 +1557,7 @@ Source::ClangViewAutocomplete(file_path, project_path) { Source::ClangView::ClangView(const boost::filesystem::path &file_path, const boost::filesystem::path& project_path, Glib::RefPtr language): ClangViewRefactor(file_path, project_path) { if(language) { - get_source_buffer()->set_highlight_syntax(false); + get_source_buffer()->set_highlight_syntax(true); get_source_buffer()->set_language(language); } From 96b7071b035ccabaced0d551242c80edd74c8111 Mon Sep 17 00:00:00 2001 From: eidheim Date: Sun, 30 Aug 2015 18:25:59 +0200 Subject: [PATCH 4/5] Minor fix. --- src/source.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/source.cc b/src/source.cc index b732b59..2be1844 100644 --- a/src/source.cc +++ b/src/source.cc @@ -320,7 +320,8 @@ Source::View::~View() { g_clear_object(&search_context); g_clear_object(&search_settings); - delete_aspell_speller(spellcheck_checker); + if(spellcheck_checker!=NULL) + delete_aspell_speller(spellcheck_checker); } void Source::View::search_highlight(const std::string &text, bool case_sensitive, bool regex) { From 24c2ca4db8d24351d234ba5e3435973dbde16216 Mon Sep 17 00:00:00 2001 From: eidheim Date: Sun, 30 Aug 2015 20:34:49 +0200 Subject: [PATCH 5/5] Now using same colors for #include ... as in cpp-gtksourceview-style. --- src/files.h | 1 - src/source.cc | 17 +++-------------- 2 files changed, 3 insertions(+), 15 deletions(-) diff --git a/src/files.h b/src/files.h index 44995f6..5153dba 100644 --- a/src/files.h +++ b/src/files.h @@ -29,7 +29,6 @@ const std::string configjson = " \"45\": \"def:type\",\n" " \"46\": \"def:identifier\",\n" " \"109\": \"def:string\",\n" -" \"500\": \"def:preprocessor\",\n" " \"702\": \"def:statement\",\n" " \"705\": \"def:comment\"\n" " },\n" diff --git a/src/source.cc b/src/source.cc index 2be1844..a9f76de 100644 --- a/src/source.cc +++ b/src/source.cc @@ -963,22 +963,11 @@ void Source::ClangViewParse::update_syntax() { auto kind=(int)token.get_cursor().get_kind(); if(kind==101 || kind==102) kind=(int)token.get_cursor().get_referenced().get_kind(); - else if(kind==500) { - auto iter=get_buffer()->get_iter_at_line_index(token.offsets.first.line-1, token.offsets.first.index-1); - if(iter.backward_char() && *iter=='<') - token.offsets.first.index--; - iter=get_buffer()->get_iter_at_line_index(token.offsets.second.line-1, token.offsets.second.index-1); - if(*iter=='>' || *iter=='.' || *iter=='/') - token.offsets.second.index++; - } - ranges.emplace_back(token.offsets, kind); + if(kind!=500) + ranges.emplace_back(token.offsets, kind); } else if(token.get_kind()==3) { // LiteralToken - int kind=109; - if(*get_buffer()->get_iter_at_line(token.offsets.first.line-1)=='#') { - kind=500; - } - ranges.emplace_back(token.offsets, kind); + ranges.emplace_back(token.offsets, 109); } else if(token.get_kind()==4) // CommentToken ranges.emplace_back(token.offsets, 705);