]> git.wh0rd.org Git - nano.git/commitdiff
tweak a few functions to remove the assumption that the file always ends
authorDavid Lawrence Ramsey <pooka109@gmail.com>
Thu, 3 Nov 2005 21:08:39 +0000 (21:08 +0000)
committerDavid Lawrence Ramsey <pooka109@gmail.com>
Thu, 3 Nov 2005 21:08:39 +0000 (21:08 +0000)
in a magicline, and to rely on fileage and filebot instead of NULL for
their checks to detect the top or bottom of the file

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

ChangeLog
src/cut.c
src/move.c
src/nano.c
src/search.c
src/text.c

index e681b2c58f0d7057f47ebcc354584d33ae63de07..179fcdb89458e06a35bc584d86845a0c56a0f471 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -37,6 +37,15 @@ CVS code -
          source file, and adjust related variables accordingly.  New
          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(),
+         do_next_word(), 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(),
+         do_page_down(), do_para_end(), do_next_word(), do_prev_word(),
+         do_up(), do_down(), do_scroll_down(), do_right(), do_mouse(),
+         do_gotolinecolumn(), do_delete(), and find_paragraph(). (DLR)
 - nano.h:
        - Readd MIN_EDITOR_COLS #define. (DLR)
 - winio.c:
index d8cb01beb11d163b01eabe618dcd76f23e0822b6..79bbf8bbc39ddaf11680691971ead635c661c654 100644 (file)
--- a/src/cut.c
+++ b/src/cut.c
@@ -38,12 +38,12 @@ void cutbuffer_reset(void)
     keep_cutbuffer = FALSE;
 }
 
-/* If we're not on the magicline, 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. */
+/* 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. */
 void cut_line(void)
 {
-    if (openfile->current->next != NULL) {
+    if (openfile->current != openfile->filebot) {
        move_to_filestruct(&cutbuffer, &cutbottom, openfile->current, 0,
                openfile->current->next, 0);
        openfile->placewewant = xplustabs();
@@ -68,9 +68,9 @@ void cut_marked(void)
 /* If we're not at the end of the current line, move all the text from
  * the current cursor position to the end of the current line,
  * not counting the newline at the end, to the cutbuffer.  If we are,
- * and we're not on the magicline, move the newline at the end to the
- * cutbuffer, and set the current place we want to where the newline
- * used to be. */
+ * and we're not on the last line of the file, move the newline at the
+ * end to the cutbuffer, and set the current place we want to where the
+ * newline used to be. */
 void cut_to_eol(void)
 {
     size_t data_len = strlen(openfile->current->data);
@@ -83,11 +83,11 @@ void cut_to_eol(void)
         * the end, to the cutbuffer. */
        move_to_filestruct(&cutbuffer, &cutbottom, openfile->current,
                openfile->current_x, openfile->current, data_len);
-    else if (openfile->current->next != NULL) {
-       /* If we're at the end of the line, and it isn't the magicline,
-        * move all the text from the current position up to the
-        * beginning of the next line, i.e, the newline at the end, to
-        * the cutbuffer. */
+    else if (openfile->current != openfile->filebot) {
+       /* If we're at the end of the line, and it isn't the last line
+        * of the file, move all the text from the current position up
+        * to the beginning of the next line, i.e, the newline at the
+        * end, to the cutbuffer. */
        move_to_filestruct(&cutbuffer, &cutbottom, openfile->current,
                openfile->current_x, openfile->current->next, 0);
        openfile->placewewant = xplustabs();
@@ -149,7 +149,8 @@ void do_cut_till_end(void)
     check_statusblank();
 
     move_to_filestruct(&cutbuffer, &cutbottom, openfile->current,
-       openfile->current_x, openfile->filebot, 0);
+       openfile->current_x, openfile->filebot,
+       strlen(openfile->filebot->data));
 
     edit_refresh();
     set_modified();
index 00bafa70e5a5ebbcb24c647cdd6e8b2d044f5180..fc86a3bcaf27c92358bdf12d3259c79bc7b17617 100644 (file)
@@ -86,8 +86,8 @@ void do_page_up(void)
     }
 #endif
 
-    for (i = editwinrows - 2; i > 0 && openfile->current->prev != NULL;
-       i--)
+    for (i = editwinrows - 2; i > 0 && openfile->current !=
+       openfile->fileage; i--)
        openfile->current = openfile->current->prev;
 
     openfile->current_x = actual_x(openfile->current->data,
@@ -127,8 +127,8 @@ void do_page_down(void)
     }
 #endif
 
-    for (i = editwinrows - 2; i > 0 && openfile->current->next != NULL;
-       i--)
+    for (i = editwinrows - 2; i > 0 && openfile->current !=
+       openfile->filebot; i--)
        openfile->current = openfile->current->next;
 
     openfile->current_x = actual_x(openfile->current->data,
@@ -151,7 +151,7 @@ void do_para_begin(bool allow_update)
     openfile->current_x = 0;
     openfile->placewewant = 0;
 
-    if (openfile->current->prev != NULL) {
+    if (openfile->current != openfile->fileage) {
        do {
            openfile->current = openfile->current->prev;
            openfile->current_y--;
@@ -181,17 +181,18 @@ void do_para_end(bool allow_update)
     openfile->current_x = 0;
     openfile->placewewant = 0;
 
-    while (openfile->current->next != NULL && !inpar(openfile->current))
+    while (openfile->current != openfile->filebot &&
+       !inpar(openfile->current))
        openfile->current = openfile->current->next;
 
-    while (openfile->current->next != NULL &&
+    while (openfile->current != openfile->filebot &&
        inpar(openfile->current->next) &&
        !begpar(openfile->current->next)) {
        openfile->current = openfile->current->next;
        openfile->current_y++;
     }
 
-    if (openfile->current->next != NULL)
+    if (openfile->current != openfile->filebot)
        openfile->current = openfile->current->next;
 
     if (allow_update)
@@ -272,7 +273,7 @@ bool do_next_word(bool allow_punct, bool allow_update)
        if (!end_line)
            break;
 
-       if (openfile->current->next != NULL) {
+       if (openfile->current != openfile->filebot) {
            end_line = FALSE;
            openfile->current_x = 0;
        }
@@ -282,8 +283,10 @@ bool do_next_word(bool allow_punct, bool allow_update)
 
     /* If we haven't found it, leave the cursor at the end of the
      * file. */
-    if (openfile->current == NULL)
+    if (openfile->current == NULL) {
        openfile->current = openfile->filebot;
+       openfile->current_x = strlen(openfile->filebot->data);
+    }
 
     openfile->placewewant = xplustabs();
 
@@ -372,7 +375,7 @@ bool do_prev_word(bool allow_punct, bool allow_update)
        if (!begin_line)
            break;
 
-       if (openfile->current->prev != NULL) {
+       if (openfile->current != openfile->fileage) {
            begin_line = FALSE;
            openfile->current_x = strlen(openfile->current->prev->data);
        }
@@ -483,7 +486,7 @@ void do_up(void)
 #endif
 
     /* If we're at the top of the file, get out. */
-    if (openfile->current->prev == NULL)
+    if (openfile->current == openfile->fileage)
        return;
 
     assert(openfile->current_y == openfile->current->lineno - openfile->edittop->lineno);
@@ -546,7 +549,7 @@ void do_down(void)
 #endif
 
     /* If we're at the bottom of the file, get out. */
-    if (openfile->current->next == NULL)
+    if (openfile->current == openfile->filebot)
        return;
 
     assert(openfile->current_y == openfile->current->lineno - openfile->edittop->lineno);
@@ -585,7 +588,7 @@ void do_scroll_down(void)
 #endif
 
     /* If we're at the bottom of the file, get out. */
-    if (openfile->current->next == NULL)
+    if (openfile->current == openfile->filebot)
        return;
 
     assert(openfile->current_y == openfile->current->lineno - openfile->edittop->lineno);
@@ -631,7 +634,7 @@ void do_right(void)
     if (openfile->current->data[openfile->current_x] != '\0')
        openfile->current_x = move_mbright(openfile->current->data,
                openfile->current_x);
-    else if (openfile->current->next != NULL) {
+    else if (openfile->current != openfile->filebot) {
        do_down();
        openfile->current_x = 0;
     }
index aaf17a12159eca3587d2aa30adcc96963c6cc1f3..83d3d61fcd06a4aa0198c67ce422d8c37bb2790f 100644 (file)
@@ -230,7 +230,7 @@ partition *partition_filestruct(filestruct *top, size_t top_x,
 }
 
 /* Unpartition a filestruct so it begins at (fileage, 0) and ends at
- * (filebot, strlen(filebot)) again. */
+ * (filebot, strlen(filebot->data)) again. */
 void unpartition_filestruct(partition **p)
 {
     char *tmp;
@@ -1412,10 +1412,12 @@ bool do_mouse(void)
 
            /* Move to where the click occurred. */
            for (; openfile->current_y < mouse_y &&
-               openfile->current->next != NULL; openfile->current_y++)
+               openfile->current != openfile->filebot;
+               openfile->current_y++)
                openfile->current = openfile->current->next;
            for (; openfile->current_y > mouse_y &&
-               openfile->current->prev != NULL; openfile->current_y--)
+               openfile->current != openfile->fileage;
+               openfile->current_y--)
                openfile->current = openfile->current->prev;
 
            openfile->current_x = actual_x(openfile->current->data,
index 47070afc7e42bc25be272a54cb4025e9555dfde6..60d212619a153578675dc99f6340a031c04a8db4 100644 (file)
@@ -994,7 +994,7 @@ void do_gotolinecolumn(ssize_t line, ssize_t column, bool use_answer,
     }
 
     for (openfile->current = openfile->fileage;
-       openfile->current->next != NULL && line > 1; line--)
+       openfile->current != openfile->filebot && line > 1; line--)
        openfile->current = openfile->current->next;
 
     openfile->current_x = actual_x(openfile->current->data, column - 1);
index 5ed4cc9e70679c6fc62af3d185d28d70962c5863..e3559d730091d297a27d74c4de31f35f4688373c 100644 (file)
@@ -97,11 +97,7 @@ void do_delete(void)
            openfile->mark_begin_x -= char_buf_len;
 #endif
        openfile->totsize--;
-    } else if (openfile->current != openfile->filebot &&
-       (openfile->current->next != openfile->filebot ||
-       openfile->current->data[0] == '\0')) {
-       /* We can delete the line before filebot only if it is blank: it
-        * becomes the new magicline then. */
+    } else if (openfile->current != openfile->filebot) {
        filestruct *foo = openfile->current->next;
 
        assert(openfile->current_x == strlen(openfile->current->data));
@@ -132,6 +128,12 @@ void do_delete(void)
 #ifndef DISABLE_WRAPPING
        wrap_reset();
 #endif
+
+       /* If we deleted the line before filebot, and the resulting
+        * line at filebot isn't blank, add a new magicline. */
+       if (openfile->current == openfile->filebot &&
+               openfile->current->data[0] != '\0')
+           new_magicline();
     } else
        return;
 
@@ -1065,7 +1067,7 @@ bool find_paragraph(size_t *const quote, size_t *const par)
        if (openfile->current == current_save ||
                !inpar(openfile->current->prev))
            return FALSE;
-       if (openfile->current->prev != NULL)
+       if (openfile->current != openfile->fileage)
            openfile->current = openfile->current->prev;
     }
     if (!begpar(openfile->current))
@@ -2074,21 +2076,15 @@ void do_wordlinechar_count(void)
     size_t pww_save = openfile->placewewant;
     filestruct *current_save = openfile->current;
     bool old_mark_set = openfile->mark_set;
-    bool added_magicline = FALSE;
-       /* Whether we added a magicline after filebot. */
     filestruct *top, *bot;
     size_t top_x, bot_x;
 
     if (old_mark_set) {
        /* If the mark is on, partition the filestruct so that it
-        * contains only the marked text, keep track of whether the text
-        * will need a magicline added while we're counting words, add
-        * the magicline if necessary, and turn the mark off. */
+        * contains only the marked text, and turn the mark off. */
        mark_order((const filestruct **)&top, &top_x,
            (const filestruct **)&bot, &bot_x, NULL);
        filepart = partition_filestruct(top, top_x, bot, bot_x);
-       if ((added_magicline = (openfile->filebot->data[0] != '\0')))
-           new_magicline();
        openfile->mark_set = FALSE;
     }
 
@@ -2102,7 +2098,7 @@ void do_wordlinechar_count(void)
      * until we reach the end of the file, incrementing the total word
      * count whenever we're on a word just before moving. */
     while (openfile->current != openfile->filebot ||
-       openfile->current_x != 0) {
+       openfile->current->data[openfile->current_x] != '\0') {
        if (do_next_word(TRUE, FALSE))
            words++;
     }
@@ -2110,11 +2106,6 @@ void do_wordlinechar_count(void)
     /* Get the total line and character counts, as "wc -l"  and "wc -c"
      * do, but get the latter in multibyte characters. */
     if (old_mark_set) {
-       /* If the mark was on and we added a magicline, remove it
-        * now. */
-       if (added_magicline)
-           remove_magicline();
-
        lines = openfile->filebot->lineno -
                openfile->fileage->lineno + 1;
        chars = get_totsize(openfile->fileage, openfile->filebot);