Index: .cvsignore
===================================================================
RCS file: /cvs/gnome/vte/src/.cvsignore,v
retrieving revision 1.4
diff -U5 -r1.4 .cvsignore
--- .cvsignore	10 Feb 2006 09:25:56 -0000	1.4
+++ .cvsignore	28 Aug 2006 02:32:10 -0000
@@ -25,5 +25,9 @@
 vteconv
 vterdb
 vtetc
 xticker
 vteseq-gen
+*.lo
+*.la
+.deps
+.libs
Index: vte.c
===================================================================
RCS file: /cvs/gnome/vte/src/vte.c,v
retrieving revision 1.483
diff -U5 -r1.483 vte.c
--- vte.c	27 Aug 2006 01:01:01 -0000	1.483
+++ vte.c	28 Aug 2006 02:32:15 -0000
@@ -1451,24 +1451,24 @@
 			vte_terminal_queue_adjustment_changed(terminal);
 		}
 	}
 }
 
-/* Scroll up or down in the current screen. */
+/* Scroll a fixed number of lines up or down in the current screen. */
 static void
-vte_terminal_scroll_pages(VteTerminal *terminal, gint pages)
+vte_terminal_scroll_lines(VteTerminal *terminal, gint lines)
 {
 	glong destination;
 	g_assert(VTE_IS_TERMINAL(terminal));
 #ifdef VTE_DEBUG
 	if (_vte_debug_on(VTE_DEBUG_IO)) {
-		fprintf(stderr, "Scrolling %d pages.\n", pages);
+		fprintf(stderr, "Scrolling %d lines.\n", lines);
 	}
 #endif
 	/* Calculate the ideal position where we want to be before clamping. */
 	destination = floor(gtk_adjustment_get_value(terminal->adjustment));
-	destination += (pages * terminal->row_count);
+	destination += lines;
 	/* Can't scroll past data we have. */
 	destination = CLAMP(destination,
 			    terminal->adjustment->lower,
 			    terminal->adjustment->upper - terminal->row_count);
 	/* Tell the scrollbar to adjust itself. */
@@ -1477,10 +1477,17 @@
 	_vte_terminal_match_contents_clear(terminal);
 	/* Notify viewers that the contents have changed. */
 	_vte_terminal_emit_contents_changed(terminal);
 }
 
+/* Scroll a fixed number of pages up or down, in the current screen. */
+static void
+vte_terminal_scroll_pages(VteTerminal *terminal, gint pages)
+{
+	vte_terminal_scroll_lines(terminal, pages * terminal->row_count);
+}
+
 /* Scroll so that the scroll delta is the minimum value. */
 static void
 vte_terminal_maybe_scroll_to_top(VteTerminal *terminal)
 {
 	long delta;
@@ -3962,10 +3969,30 @@
 				handled = TRUE;
 				suppress_meta_esc = TRUE;
 			}
 			break;
 		/* Keypad/motion keys. */
+		case GDK_KP_Up:
+		case GDK_Up:
+			if (terminal->pvt->modifiers & GDK_CONTROL_MASK 
+                            && terminal->pvt->modifiers & GDK_SHIFT_MASK) {
+				vte_terminal_scroll_lines(terminal, -1);
+				scrolled = TRUE;
+				handled = TRUE;
+				suppress_meta_esc = TRUE;
+			}
+			break;
+		case GDK_KP_Down:
+		case GDK_Down:
+			if (terminal->pvt->modifiers & GDK_CONTROL_MASK
+                            && terminal->pvt->modifiers & GDK_SHIFT_MASK) {
+				vte_terminal_scroll_lines(terminal, 1);
+				scrolled = TRUE;
+				handled = TRUE;
+				suppress_meta_esc = TRUE;
+			}
+			break;
 		case GDK_KP_Page_Up:
 		case GDK_Page_Up:
 			if (terminal->pvt->modifiers & GDK_SHIFT_MASK) {
 				vte_terminal_scroll_pages(terminal, -1);
 				scrolled = TRUE;
