From 4d43649c069ebd98a07945148026ccf96f308eed Mon Sep 17 00:00:00 2001 From: eidheim Date: Sun, 3 Sep 2017 07:24:34 +0200 Subject: [PATCH] Fixed end of line insert placement in some cases when performing clang-format --- src/source.cc | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/source.cc b/src/source.cc index 8136c16..7532999 100644 --- a/src/source.cc +++ b/src/source.cc @@ -241,6 +241,18 @@ Source::View::View(const boost::filesystem::path &file_path, Glib::RefPtr line_index(c, offset-previous_bytes); auto start=get_buffer()->get_iter_at_line_index(line_index.first, line_index.second); + // Use left gravity insert to avoid moving cursor from end of line + bool left_gravity_insert=false; + if(get_buffer()->get_insert()->get_iter()==start) { + auto iter=start; + do { + if(*iter!=' ' && *iter!='\t') { + left_gravity_insert=iter.ends_line(); + break; + } + } while(iter.forward_char()); + } + if(length>0) { auto offset_end=offset+length; size_t bytes=0; @@ -255,7 +267,14 @@ Source::View::View(const boost::filesystem::path &file_path, Glib::RefPtrinsert(start, replacement_str); + if(left_gravity_insert) { + auto mark=get_buffer()->create_mark(start); + get_buffer()->insert(start, replacement_str); + get_buffer()->place_cursor(mark->get_iter()); + get_buffer()->delete_mark(mark); + } + else + get_buffer()->insert(start, replacement_str); break; } }