]> git.wh0rd.org Git - nano.git/commitdiff
more fixes for files that don't end in magiclines: make cut_line() cut
authorDavid Lawrence Ramsey <pooka109@gmail.com>
Tue, 8 Nov 2005 23:59:29 +0000 (23:59 +0000)
committerDavid Lawrence Ramsey <pooka109@gmail.com>
Tue, 8 Nov 2005 23:59:29 +0000 (23:59 +0000)
the text of the current line (if any), minus the nonexistent newline,
when we're on the last line of the file, and make sure again that the
file isn't marked as modified if the magicline is deleted and we're
supposed to have one, as it's more consistent that way (a marked cut of
the magicline adds a newline to the cutbuffer, while deleting the
magicline adds nothing)

git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@3114 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

ChangeLog
src/cut.c
src/text.c

index 48c4e00c381353c8614fd48ae6b5179b212d94a0..2c81aeb2ac4a859f72d695bc0d8dce6588cbef66 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -38,9 +38,10 @@ CVS code -
          file help.c; changes to help_init(), help_line_len(), and
          do_help() (all moved to help.c). (DLR)
        - Tweak a few functions to remove the assumption that the file
-         always ends in a magicline.  Changes to do_cut_till_end(),
-         open_buffer(), read_file(), write_file(), do_last_line(),
-         do_alt_speller(), and do_wordlinechar_count(). (DLR)
+         always ends in a magicline.  Changes to cut_line(),
+         do_cut_till_end(), open_buffer(), read_file(), write_file(),
+         do_last_line(), do_alt_speller(), and do_wordlinechar_count().
+         (DLR)
        - Tweak a few functions to rely on fileage and filebot instead
          of NULL for their checks to detect the top or bottom of the
          file.  Changes to cut_line(), cut_to_eol(), do_page_up(),
index 79bbf8bbc39ddaf11680691971ead635c661c654..5581a243d61b1b2151401168cc49bccc2772f18c 100644 (file)
--- a/src/cut.c
+++ b/src/cut.c
@@ -40,14 +40,24 @@ void cutbuffer_reset(void)
 
 /* If we're not on the last line of the file, move all the text of the
  * current line, plus the newline at the end, to the cutbuffer, and set
- * the current place we want to where the line used to start. */
+ * the current place we want to where the line used to start.  If we
+ * are, and the last line of the file isn't blank, move all of the text
+ * of the current line to the cutbuffer, and set the current place we
+ * want to where the now-blank line starts. */
 void cut_line(void)
 {
-    if (openfile->current != openfile->filebot) {
+    size_t data_len = strlen(openfile->current->data);
+
+    assert(openfile->current_x <= data_len);
+
+    if (openfile->current != openfile->filebot)
        move_to_filestruct(&cutbuffer, &cutbottom, openfile->current, 0,
                openfile->current->next, 0);
-       openfile->placewewant = xplustabs();
-    }
+    else if (data_len > 0)
+       move_to_filestruct(&cutbuffer, &cutbottom, openfile->current, 0,
+               openfile->current, data_len);
+
+    openfile->placewewant = xplustabs();
 }
 
 #ifndef NANO_SMALL
index 4d6d855bee9a05e1157ec68f16911a4dd8f75e36..c135c5d27a688851d47c188987a248d5dd05b1f7 100644 (file)
@@ -96,6 +96,8 @@ void do_delete(void)
            openfile->mark_begin_x -= char_buf_len;
 #endif
        openfile->totsize--;
+
+       set_modified();
     } else if (openfile->current != openfile->filebot) {
        filestruct *foo = openfile->current->next;
 
@@ -130,14 +132,17 @@ void do_delete(void)
 
        /* If the NO_NEWLINES flag isn't set, and text has been added to
         * the magicline as a result of deleting at the end of the line
-        * before filebot, add a new magicline. */
+        * before filebot, add a new magicline.  This effectively leaves
+        * the text unchanged, so don't mark the file as modified after
+        * doing this. */
        if (!ISSET(NO_NEWLINES) && openfile->current ==
                openfile->filebot && openfile->current->data[0] != '\0')
            new_magicline();
+       else
+           set_modified();
     } else
        return;
 
-    set_modified();
 
 #ifdef ENABLE_COLOR
     /* If color syntaxes are available and turned on, we need to call