]> git.wh0rd.org Git - nano.git/commitdiff
add the ability to scroll up or down single lines without scrolling the
authorDavid Lawrence Ramsey <pooka109@gmail.com>
Mon, 24 Oct 2005 02:12:09 +0000 (02:12 +0000)
committerDavid Lawrence Ramsey <pooka109@gmail.com>
Mon, 24 Oct 2005 02:12:09 +0000 (02:12 +0000)
cursor, via Meta-- and Meta-+; note that this is disabled when
NANO_SMALL is defined

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

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

index aac77e5ca5350ef1588f96307d3269767af2d6a0..5ecdd1e6634dd3de31a1aa0de3672c00453cc3e1 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,10 @@
 CVS code -
+- General:
+       - Add the ability to scroll up or down single lines without
+         scrolling the cursor, via Meta-- and Meta-+.  Note that this
+         is disabled when NANO_SMALL is defined.  New functions
+         do_scroll_up() and do_scroll_down(); changes to
+         shortcut_init(). (DLR, suggested by Mike Frysinger)
 
 GNU nano 1.3.9 - 2005.10.23
 - General:
index 56835bd5a5a8c6976da16cc86d436f5653aa2af4..fbd02ed012ece463b0871f591fd8844a9bf752c8 100644 (file)
@@ -291,6 +291,10 @@ void shortcut_init(bool unjustify)
     const char *nano_prevword_msg = N_("Move backward one word");
     const char *nano_wordcount_msg =
        N_("Count the number of words, lines, and characters");
+    const char *nano_scrollprev_msg =
+       N_("Scroll up one line without scrolling the cursor");
+    const char *nano_scrollnext_msg =
+       N_("Scroll down one line without scrolling the cursor");
 #endif
 #ifndef DISABLE_JUSTIFY
     const char *nano_parabegin_msg =
@@ -543,6 +547,14 @@ void shortcut_init(bool unjustify)
     sc_init_one(&main_list, NANO_NO_KEY, N_("Word Count"),
        IFHELP(nano_wordcount_msg, NANO_WORDCOUNT_KEY), NANO_NO_KEY,
        NANO_NO_KEY, VIEW, do_wordlinechar_count);
+
+    sc_init_one(&main_list, NANO_NO_KEY, N_("ScrollPrev"),
+       IFHELP(nano_scrollprev_msg, NANO_SCROLLPREV_KEY), NANO_NO_KEY,
+       NANO_SCROLLPREV_ALTKEY, VIEW, do_scroll_up);
+
+    sc_init_one(&main_list, NANO_NO_KEY, N_("ScrollNext"),
+       IFHELP(nano_scrollnext_msg, NANO_SCROLLNEXT_KEY), NANO_NO_KEY,
+       NANO_SCROLLNEXT_ALTKEY, VIEW, do_scroll_down);
 #endif
 
 #ifndef DISABLE_JUSTIFY
index ae432999dcdc96978573aa0b929997b12fc64dc5..00bafa70e5a5ebbcb24c647cdd6e8b2d044f5180 100644 (file)
@@ -512,6 +512,31 @@ void do_up(void)
     }
 }
 
+#ifndef NANO_SMALL
+void do_scroll_up(void)
+{
+    check_statusblank();
+
+#ifndef DISABLE_WRAPPING
+    wrap_reset();
+#endif
+
+    /* 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);
+}
+#endif /* !NANO_SMALL */
+
 void do_down(void)
 {
     check_statusblank();
@@ -550,6 +575,31 @@ void do_down(void)
     }
 }
 
+#ifndef NANO_SMALL
+void do_scroll_down(void)
+{
+    check_statusblank();
+
+#ifndef DISABLE_WRAPPING
+    wrap_reset();
+#endif
+
+    /* If we're at the bottom of the file, get out. */
+    if (openfile->current->next == NULL)
+       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);
+}
+#endif /* !NANO_SMALL */
+
 void do_left(void)
 {
     size_t pww_save = openfile->placewewant;
index 97ecd6dbcb9bddc20ac3a2383c66f1f4a1f6ac53..e2c35f20e610f4033812a261e0ea55ac1044e5fd 100644 (file)
@@ -360,13 +360,17 @@ typedef struct rcoption {
 #define NANO_ALT_SPACE ' '
 #define NANO_ALT_LPAREN '('
 #define NANO_ALT_RPAREN ')'
+#define NANO_ALT_PLUS '+'
 #define NANO_ALT_COMMA ','
+#define NANO_ALT_MINUS '-'
 #define NANO_ALT_PERIOD '.'
 #define NANO_ALT_9 '9'
 #define NANO_ALT_0 '0'
 #define NANO_ALT_LCARAT '<'
+#define NANO_ALT_EQUALS '='
 #define NANO_ALT_RCARAT '>'
 #define NANO_ALT_RBRACKET ']'
+#define NANO_ALT_USCORE '_'
 #define NANO_ALT_A 'a'
 #define NANO_ALT_B 'b'
 #define NANO_ALT_C 'c'
@@ -473,6 +477,10 @@ typedef struct rcoption {
 #define NANO_NEXTWORD_KEY      NANO_CONTROL_SPACE
 #define NANO_PREVWORD_KEY      NANO_ALT_SPACE
 #define NANO_WORDCOUNT_KEY     NANO_ALT_D
+#define NANO_SCROLLPREV_KEY    NANO_ALT_MINUS
+#define NANO_SCROLLNEXT_KEY    NANO_ALT_PLUS
+#define NANO_SCROLLPREV_ALTKEY NANO_ALT_USCORE
+#define NANO_SCROLLNEXT_ALTKEY NANO_ALT_EQUALS
 #define NANO_CUTTILLEND_KEY    NANO_CONTROL_X
 #define NANO_CUTTILLEND_ALTKEY NANO_ALT_T
 #define NANO_PARABEGIN_KEY     NANO_CONTROL_W
index dfc9ba16ecf50fab938a18d790969f135c14c862..871a684cd255d309e5358458d775200aa7903e86 100644 (file)
@@ -333,7 +333,13 @@ void do_prev_word_void(void);
 void do_home(void);
 void do_end(void);
 void do_up(void);
+#ifndef NANO_SMALL
+void do_scroll_up(void);
+#endif
 void do_down(void);
+#ifndef NANO_SMALL
+void do_scroll_down(void);
+#endif
 void do_left(void);
 void do_right(void);