From 7362e65af31a4bbe4d13ad490d2a1f06f5c7a317 Mon Sep 17 00:00:00 2001 From: eidheim Date: Sat, 21 Jan 2017 10:55:59 +0100 Subject: [PATCH] Fixes backspace and delete key for files with CR+LF line endings --- src/source.cc | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/source.cc b/src/source.cc index a277dd6..dd0cf45 100644 --- a/src/source.cc +++ b/src/source.cc @@ -1543,10 +1543,11 @@ bool Source::View::on_key_press_event_basic(GdkEventKey* key) { } } if(do_smart_backspace) { - auto line_start_iter=iter; - if(line_start_iter.backward_chars(line.size())) { - line_start_iter.backward_char(); - get_buffer()->erase(iter, line_start_iter); + auto previous_line_end_iter=iter; + if(previous_line_end_iter.backward_chars(line.size()+1)) { + if(!previous_line_end_iter.ends_line()) // For CR+LF + previous_line_end_iter.backward_char(); + get_buffer()->erase(previous_line_end_iter, iter); return true; } } @@ -1561,14 +1562,17 @@ bool Source::View::on_key_press_event_basic(GdkEventKey* key) { break; } if(iter.ends_line()) { + if(*iter=='\r') // For CR+LF + iter.forward_char(); if(!iter.forward_char()) do_smart_delete=false; break; } } while(iter.forward_char()); if(do_smart_delete) { - if(!insert_iter.starts_line()) + if(!insert_iter.starts_line()) { while((*iter==' ' || *iter=='\t') && iter.forward_char()) {} + } get_buffer()->erase(insert_iter, iter); return true; }