diff --git a/src/source_base.cpp b/src/source_base.cpp index 59ee74d..327be0e 100644 --- a/src/source_base.cpp +++ b/src/source_base.cpp @@ -1140,7 +1140,7 @@ void Source::BaseView::insert_snippet(Gtk::TextIter iter, const std::string &sni for(; i < snippet.size() && !(stop_at_curly_end && snippet[i] == '}');) { if(snippet[i] == '\\') { if(i + 1 < snippet.size() && - (snippet[i + 1] == '$' || snippet[i + 1] == '`' || (stop_at_curly_end && snippet[i + 1] == '}'))) { + (snippet[i + 1] == '$' || snippet[i + 1] == '`' || snippet[i + 1] == '\\' || (stop_at_curly_end && snippet[i + 1] == '}'))) { insert += snippet[i + 1]; i += 2; } @@ -1261,6 +1261,11 @@ bool Source::BaseView::select_snippet_parameter() { } get_buffer()->remove_tag(snippet_parameter_tag, get_buffer()->begin(), get_buffer()->end()); + for(auto ¶meters : snippet_parameters_list) { + for(auto ¶meter : parameters) + get_buffer()->apply_tag(snippet_parameter_tag, parameter.start->get_iter(), parameter.end->get_iter()); + } + if(!snippet_parameters_list.empty()) { auto snippet_parameters_it = snippet_parameters_list.begin(); bool first = true; @@ -1281,8 +1286,6 @@ bool Source::BaseView::select_snippet_parameter() { extra_snippet_cursors.emplace_back(ExtraSnippetCursor{get_buffer()->create_mark(start, false), end.get_offset() - start.get_offset()}); extra_snippet_cursors.back().mark->set_visible(true); - get_buffer()->apply_tag(snippet_parameter_tag, start, end); - setup_extra_cursor_signals(); } get_buffer()->delete_mark(snippet_parameter.start); diff --git a/tests/source_test.cpp b/tests/source_test.cpp index 1830b15..17b5dea 100644 --- a/tests/source_test.cpp +++ b/tests/source_test.cpp @@ -675,5 +675,26 @@ int main() { g_assert(buffer->get_text() == "\\begin{te}\n \n\\end{te}"); g_assert(buffer->get_insert()->get_iter().get_offset() == 13); } + { + buffer->set_text(""); + view.insert_snippet(buffer->get_insert()->get_iter(), "\\$"); + g_assert(buffer->get_text() == "$"); + + buffer->set_text(""); + view.insert_snippet(buffer->get_insert()->get_iter(), "\\\\${0:test}"); + g_assert(buffer->get_text() == "\\test"); + + buffer->set_text(""); + view.insert_snippet(buffer->get_insert()->get_iter(), "te{s}t"); + g_assert(buffer->get_text() == "te{s}t"); + + buffer->set_text(""); + view.insert_snippet(buffer->get_insert()->get_iter(), "${0:te{s\\}t}"); + g_assert(buffer->get_text() == "te{s}t"); + + buffer->set_text(""); + view.insert_snippet(buffer->get_insert()->get_iter(), "\\test\\"); + g_assert(buffer->get_text() == "\\test\\"); + } } }