+
+ return endpos.y - pagerpos.y;
+}
+
+static void
+start_paging(GtkTextView *textview)
+{
+ currently_paging = TRUE;
+ g_signal_handler_unblock(textview, expose_handler);
+ g_signal_handler_unblock(textview, pager_handler);
+}
+
+static void
+stop_paging(GtkTextView *textview)
+{
+ currently_paging = FALSE;
+ g_signal_handler_block(textview, expose_handler);
+ g_signal_handler_block(textview, pager_handler);
+}
+
+static void
+after_insert(GtkTextBuffer *buffer, GtkTextIter *location, gchar *text, gint len, GtkTextView *textview)
+{
+ while(gtk_events_pending())
+ gtk_main_iteration();
+
+ /* Move the pager to the last visible character in the buffer */
+ gint scroll_distance = move_pager_and_get_scroll_distance(textview);
+
+ /* Wait for a keypress to advance the pager */
+ if(scroll_distance > 0 && !currently_paging)
+ start_paging(textview);
+}
+
+static gboolean
+pager_wait(GtkTextView *textview, GdkEventKey *event, GtkTextBuffer *buffer)
+{
+ GtkTextMark *pagermark = gtk_text_buffer_get_mark(buffer, "pager_position");
+ gtk_text_view_scroll_to_mark(textview, pagermark, 0.0, TRUE, 0.0, 0.0);
+
+ /*** ALTERNATIVE, POSSIBLY BETTER, METHOD OF SCROLLING ***
+ GtkWidget *scrolledwindow = gtk_widget_get_parent(GTK_WIDGET(textview));
+ GtkAdjustment *adjustment = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(scrolledwindow));
+ gdouble page_size; // SUCKY_DEBIAN: use gtk_adjustment_get_page_size() post 2.12
+ g_object_get(adjustment, "page-size", &page_size, NULL);
+ gtk_adjustment_set_value(adjustment, gtk_adjustment_get_value(adjustment) + page_size);
+ */
+
+ while(gtk_events_pending())
+ gtk_main_iteration();
+
+ /* Move the pager to the last visible character in the buffer */
+ gint scroll_distance = move_pager_and_get_scroll_distance(textview);
+
+ if(scroll_distance == 0)
+ stop_paging(textview);
+
+ return TRUE; /* block further handlers */
+}
+
+static gboolean
+expose_prompt(GtkTextView *textview, GdkEventExpose *event)
+{
+ /* Use Cairo? Cairo supported on Iliad? */
+ PangoLayout *prompt = gtk_widget_create_pango_layout(GTK_WIDGET(textview), "More");
+ gint promptwidth, promptheight;
+ pango_layout_get_pixel_size(prompt, &promptwidth, &promptheight);
+
+ GdkGC *context = gdk_gc_new(GDK_DRAWABLE(event->window));
+ GdkColor red, white;
+ gdk_color_parse("red", &red);
+ gdk_color_parse("white", &white);
+
+ gint winx, winy, winwidth, winheight;
+ gdk_window_get_position(event->window, &winx, &winy);
+ gdk_drawable_get_size(GDK_DRAWABLE(event->window), &winwidth, &winheight);
+
+ gdk_draw_layout_with_colors(event->window, context,
+ winx + winwidth - promptwidth,
+ winy + winheight - promptheight,
+ prompt, &white, &red);
+
+ return FALSE; /* Propagate event further */