static void scroll(Terminal *term, int topline, int botline, int lines, int sb)
{
termline *line;
- int i, seltop, olddisptop, shift;
+ int i, seltop;
+#ifdef OPTIMISE_SCROLL
+ int olddisptop, shift;
+#endif /* OPTIMISE_SCROLL */
if (topline != 0 || term->alt_which != 0)
sb = FALSE;
+#ifdef OPTIMISE_SCROLL
olddisptop = term->disptop;
shift = lines;
+#endif /* OPTIMISE_SCROLL */
if (lines < 0) {
while (lines < 0) {
line = delpos234(term->screen, botline);
}
term->termstate = SEEN_CSI;
} else if (c == ';') {
- if (++term->esc_nargs <= ARGS_MAX)
- term->esc_args[term->esc_nargs - 1] = ARG_DEFAULT;
+ if (term->esc_nargs < ARGS_MAX)
+ term->esc_args[term->esc_nargs++] = ARG_DEFAULT;
term->termstate = SEEN_CSI;
} else if (c < '@') {
if (term->esc_query)
}
/*
+ * Scroll the scrollback to centre it on the beginning or end of the
+ * current selection, if any.
+ */
+void term_scroll_to_selection(Terminal *term, int which_end)
+{
+ pos target;
+ int y;
+ int sbtop = -sblines(term);
+
+ if (term->selstate != SELECTED)
+ return;
+ if (which_end)
+ target = term->selend;
+ else
+ target = term->selstart;
+
+ y = target.y - term->rows/2;
+ if (y < sbtop)
+ y = sbtop;
+ else if (y > 0)
+ y = 0;
+ term_scroll(term, -1, y);
+}
+
+/*
* Helper routine for clipme(): growing buffer.
*/
typedef struct {