]> git.wh0rd.org Git - nano.git/commitdiff
consolidate do_scroll_(up|down)() into do_(up|down)(), as they have a
authorDavid Lawrence Ramsey <pooka109@gmail.com>
Thu, 6 Jul 2006 22:17:47 +0000 (22:17 +0000)
committerDavid Lawrence Ramsey <pooka109@gmail.com>
Thu, 6 Jul 2006 22:17:47 +0000 (22:17 +0000)
lot of common code

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

ChangeLog
src/global.c
src/move.c
src/proto.h

index dfd4bec1df2136488e9ff0ba865ede190b6e8bf4..986101cbee0415121d5f91a111f6d08e54b33d2a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -22,6 +22,11 @@ CVS code -
          do_indent_marked_void() (renamed do_indent_void()), and
          do_unindent_marked_void() (renamed do_unindent()). (DLR,
          suggested by John M. Gabriele)
+       - Consolidate do_scroll_(up|down)() into do_(up|down)(), as
+         they have a lot of common code.  New functions do_up_void()
+         and do_down_void(); changes to shortcut_init(), do_up(),
+         do_scroll_up(), do_down(), do_scroll_down(), do_left(), and
+         do_right(). (DLR)
 - browser.c:
   do_browser()
        - Refactor the mouse support, modeling it after do_mouse() for
index 3af86a922427d1ef9cac3e6d1e44c9a760d236cd..9745013e8ca15b447ac50a35568bfec0c9309be8 100644 (file)
@@ -616,11 +616,11 @@ void shortcut_init(bool unjustify)
 
     sc_init_one(&main_list, NANO_PREVLINE_KEY, N_("Prev Line"),
        IFHELP(nano_prevline_msg, FALSE), NANO_NO_KEY, NANO_NO_KEY,
-       NANO_NO_KEY, VIEW, do_up);
+       NANO_NO_KEY, VIEW, do_up_void);
 
     sc_init_one(&main_list, NANO_NEXTLINE_KEY, N_("Next Line"),
        IFHELP(nano_nextline_msg, TRUE), NANO_NO_KEY, NANO_NO_KEY,
-       NANO_NO_KEY, VIEW, do_down);
+       NANO_NO_KEY, VIEW, do_down_void);
 
     sc_init_one(&main_list, NANO_HOME_KEY, N_("Home"),
        IFHELP(nano_home_msg, FALSE), NANO_NO_KEY, NANO_NO_KEY,
index f7f770b6efc4c7cdd29d60eaadb479d37d63cdb1..3e44adb9008d161f41c4f3bf4f851104f0899910 100644 (file)
@@ -471,11 +471,23 @@ void do_end(void)
        update_line(openfile->current, openfile->current_x);
 }
 
-/* Move up one line. */
-void do_up(void)
+/* If scroll_only is FALSE, move up one line.  If scroll_only is TRUE,
+ * scroll up one line without scrolling the cursor. */
+void do_up(
+#ifndef NANO_TINY
+       bool scroll_only
+#else
+       void
+#endif
+       )
 {
-    /* If we're at the top of the file, get out. */
-    if (openfile->current == openfile->fileage)
+    /* If we're at the top of the file, or if scroll_only is TRUE and
+     * the top of the file is onscreen, get out. */
+    if (openfile->current == openfile->fileage
+#ifndef NANO_TINY
+       || (scroll_only && openfile->edittop == openfile->fileage)
+#endif
+       )
        return;
 
     assert(openfile->current_y == openfile->current->lineno - openfile->edittop->lineno);
@@ -485,58 +497,60 @@ void do_up(void)
     openfile->current_x = actual_x(openfile->current->data,
        openfile->placewewant);
 
-    /* If we're on the first line of the edit window, scroll the edit
-     * window up one line if we're in smooth scrolling mode, or up half
-     * a page if we're not. */
-    if (openfile->current_y == 0)
+    /* If scroll_only is FALSE and if we're on the first line of the
+     * edit window, scroll the edit window up one line if we're in
+     * smooth scrolling mode, or up half a page if we're not.  If
+     * scroll_only is TRUE, scroll the edit window up one line
+     * unconditionally. */
+    if (openfile->current_y == 0
+#ifndef NANO_TINY
+       || scroll_only
+#endif
+       )
        edit_scroll(UP,
 #ifndef NANO_TINY
-               ISSET(SMOOTH_SCROLL) ? 1 :
+               (ISSET(SMOOTH_SCROLL) || scroll_only) ? 1 :
 #endif
                editwinrows / 2);
-    /* If we're not on the first line of the edit window, update the
+
+    /* If we're below the first line of the edit window, update the
      * line we were on before and the line we're on now.  The former
      * needs to be redrawn if we're not on the first page, and the
      * latter needs to be drawn unconditionally. */
-    else {
+    if (openfile->current_y > 0) {
        if (need_vertical_update(0))
            update_line(openfile->current->next, 0);
        update_line(openfile->current, openfile->current_x);
     }
 }
 
+/* Move up one line. */
+void do_up_void(void)
+{
+    do_up(
+#ifndef NANO_TINY
+       FALSE
+#endif
+       );
+}
+
 #ifndef NANO_TINY
 /* Scroll up one line without scrolling the cursor. */
 void do_scroll_up(void)
 {
-    /* If the top of the file is onscreen, get out. */
-    if (openfile->edittop == openfile->fileage)
-       return;
-
-    assert(openfile->current_y == openfile->current->lineno - openfile->edittop->lineno);
-
-    /* Move the current line of the edit window up. */
-    openfile->current = openfile->current->prev;
-    openfile->current_x = actual_x(openfile->current->data,
-       openfile->placewewant);
-
-    /* Scroll the edit window up one line. */
-    edit_scroll(UP, 1);
-
-    /* If we're not on the first line of the edit window, update the
-     * line we were on before and the line we're on now.  The former
-     * needs to be redrawn if we're not on the first page, and the
-     * latter needs to be drawn unconditionally. */
-    if (openfile->current_y > 0) {
-       if (need_vertical_update(0))
-           update_line(openfile->current->next, 0);
-       update_line(openfile->current, openfile->current_x);
-    }
+    do_up(TRUE);
 }
-#endif /* !NANO_TINY */
+#endif
 
-/* Move down one line. */
-void do_down(void)
+/* If scroll_only is FALSE, move down one line.  If scroll_only is TRUE,
+ * scroll down one line without scrolling the cursor. */
+void do_down(
+#ifndef NANO_TINY
+       bool scroll_only
+#else
+       void
+#endif
+       )
 {
     /* If we're at the bottom of the file, get out. */
     if (openfile->current == openfile->filebot)
@@ -549,55 +563,50 @@ void do_down(void)
     openfile->current_x = actual_x(openfile->current->data,
        openfile->placewewant);
 
-    /* If we're on the last line of the edit window, scroll the edit
-     * window down one line if we're in smooth scrolling mode, or down
-     * half a page if we're not. */
-    if (openfile->current_y == editwinrows - 1)
+    /* If scroll_only is FALSE and if we're on the first line of the
+     * edit window, scroll the edit window down one line if we're in
+     * smooth scrolling mode, or down half a page if we're not.  If
+     * scroll_only is TRUE, scroll the edit window down one line
+     * unconditionally. */
+    if (openfile->current_y == editwinrows - 1
+#ifndef NANO_TINY
+       || scroll_only
+#endif
+       )
        edit_scroll(DOWN,
 #ifndef NANO_TINY
-               ISSET(SMOOTH_SCROLL) ? 1 :
+               (ISSET(SMOOTH_SCROLL) || scroll_only) ? 1 :
 #endif
                editwinrows / 2);
-    /* If we're not on the last line of the edit window, update the line
+
+    /* If we're above the last line of the edit window, update the line
      * we were on before and the line we're on now.  The former needs to
      * be redrawn if we're not on the first page, and the latter needs
      * to be drawn unconditionally. */
-    else {
+    if (openfile->current_y < editwinrows - 1) {
        if (need_vertical_update(0))
            update_line(openfile->current->prev, 0);
        update_line(openfile->current, openfile->current_x);
     }
 }
 
+/* Move down one line. */
+void do_down_void(void)
+{
+    do_down(
+#ifndef NANO_TINY
+       FALSE
+#endif
+       );
+}
+
 #ifndef NANO_TINY
 /* Scroll down one line without scrolling the cursor. */
 void do_scroll_down(void)
 {
-    /* If we're at the bottom of the file, get out. */
-    if (openfile->current == openfile->filebot)
-       return;
-
-    assert(openfile->current_y == openfile->current->lineno - openfile->edittop->lineno);
-
-    /* Move the current line of the edit window down. */
-    openfile->current = openfile->current->next;
-    openfile->current_x = actual_x(openfile->current->data,
-       openfile->placewewant);
-
-    /* Scroll the edit window down one line. */
-    edit_scroll(DOWN, 1);
-
-    /* If we're not on the last line of the edit window, update the line
-     * we were on before and the line we're on now.  The former needs to
-     * be redrawn if we're not on the first page, and the latter needs
-     * to be drawn unconditionally. */
-    if (openfile->current_y < editwinrows - 1) {
-       if (need_vertical_update(0))
-           update_line(openfile->current->prev, 0);
-       update_line(openfile->current, openfile->current_x);
-    }
+    do_down(TRUE);
 }
-#endif /* !NANO_TINY */
+#endif
 
 /* Move left one character. */
 void do_left(void)
@@ -608,7 +617,7 @@ void do_left(void)
        openfile->current_x = move_mbleft(openfile->current->data,
                openfile->current_x);
     else if (openfile->current != openfile->fileage) {
-       do_up();
+       do_up_void();
        openfile->current_x = strlen(openfile->current->data);
     }
 
@@ -629,7 +638,7 @@ void do_right(void)
        openfile->current_x = move_mbright(openfile->current->data,
                openfile->current_x);
     else if (openfile->current != openfile->filebot) {
-       do_down();
+       do_down_void();
        openfile->current_x = 0;
     }
 
index e1abf4d54e1a8f8023df1bb4f9190749302c4039..b7242362cae87239660bcfc684da83f8f4dbced4 100644 (file)
@@ -389,11 +389,25 @@ void do_prev_word_void(void);
 #endif
 void do_home(void);
 void do_end(void);
-void do_up(void);
+void do_up(
+#ifndef NANO_TINY
+       bool scroll_only
+#else
+       void
+#endif
+       );
+void do_up_void(void);
 #ifndef NANO_TINY
 void do_scroll_up(void);
 #endif
-void do_down(void);
+void do_down(
+#ifndef NANO_TINY
+       bool scroll_only
+#else
+       void
+#endif
+       );
+void do_down_void(void);
 #ifndef NANO_TINY
 void do_scroll_down(void);
 #endif