diff --git a/edit/ChangeLog b/edit/ChangeLog index cbcb4be26..8f00ce552 100644 --- a/edit/ChangeLog +++ b/edit/ChangeLog @@ -1,3 +1,9 @@ +2002-11-14 Pavel Roskin + + * exit.c (edit_delete_line): Don't remove and restore the + preceding newline. Don't treat binary zero as newline. + From Dmitry Semyonov + 2002-11-12 Pavel Roskin * *.c: Fix all global functions without declarations - declare, diff --git a/edit/edit.c b/edit/edit.c index 1da2887d1..550beaa7f 100644 --- a/edit/edit.c +++ b/edit/edit.c @@ -1765,17 +1765,32 @@ static void edit_delete_to_line_begin (WEdit * edit) } } -void edit_delete_line (WEdit * edit) +void +edit_delete_line (WEdit *edit) { - int c; - do { - c = edit_delete (edit); - } while (c != '\n' && c); - do { - c = edit_backspace (edit); - } while (c != '\n' && c); - if (c) - edit_insert (edit, '\n'); + /* + * Delete right part of the line. + * Note that edit_get_byte() returns '\n' when byte position is + * beyond EOF. + */ + while (edit_get_byte (edit, edit->curs1) != '\n') { + (void) edit_delete (edit); + } + + /* + * Delete '\n' char. + * Note that edit_delete() will not corrupt anything if called while + * cursor position is EOF. + */ + (void) edit_delete (edit); + + /* + * Delete left part of the line. + * Note, that edit_get_byte() returns '\n' when byte position is < 0. + */ + while (edit_get_byte (edit, edit->curs1 - 1) != '\n') { + (void) edit_backspace (edit); + }; } static void insert_spaces_tab (WEdit * edit, int half)