summaryrefslogtreecommitdiff
path: root/usr.bin
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@cvs.openbsd.org>2009-07-12 16:12:35 +0000
committerNicholas Marriott <nicm@cvs.openbsd.org>2009-07-12 16:12:35 +0000
commitcce3b6f7896fd45d90f7eeefeedd71e28daabea9 (patch)
tree7063a6c215634a113a8a1e3edb782144d823cc51 /usr.bin
parent39af6e40b829b36363ca048341c7f623110f52d7 (diff)
Merge three copies of identical code to move the cursor x position into a
single function, from Kalle Olavi Niemitalo.
Diffstat (limited to 'usr.bin')
-rw-r--r--usr.bin/tmux/window-copy.c118
1 files changed, 36 insertions, 82 deletions
diff --git a/usr.bin/tmux/window-copy.c b/usr.bin/tmux/window-copy.c
index 3bb667e2422..115a8a2b1cc 100644
--- a/usr.bin/tmux/window-copy.c
+++ b/usr.bin/tmux/window-copy.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: window-copy.c,v 1.4 2009/07/11 19:09:24 nicm Exp $ */
+/* $OpenBSD: window-copy.c,v 1.5 2009/07/12 16:12:34 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -48,6 +48,7 @@ void window_copy_copy_line(
struct window_pane *, char **, size_t *, u_int, u_int, u_int);
int window_copy_is_space(struct window_pane *, u_int, u_int);
u_int window_copy_find_length(struct window_pane *, u_int);
+void window_copy_set_cursor_x(struct window_pane *, u_int);
void window_copy_cursor_start_of_line(struct window_pane *);
void window_copy_cursor_end_of_line(struct window_pane *);
void window_copy_cursor_left(struct window_pane *);
@@ -542,30 +543,15 @@ window_copy_find_length(struct window_pane *wp, u_int py)
return (px);
}
+/*
+ * Set the cursor X coordinate and scroll horizontally to make it visible.
+ * Also redraw the selection or the cursor, as needed.
+ */
void
-window_copy_cursor_start_of_line(struct window_pane *wp)
-{
- struct window_copy_mode_data *data = wp->modedata;
-
- if (data->ox != 0)
- window_copy_scroll_right(wp, data->ox);
- data->cx = 0;
-
- if (window_copy_update_selection(wp))
- window_copy_redraw_lines(wp, data->cy, 1);
- else
- window_copy_update_cursor(wp);
-}
-
-void
-window_copy_cursor_end_of_line(struct window_pane *wp)
+window_copy_set_cursor_x(struct window_pane *wp, u_int px)
{
struct window_copy_mode_data *data = wp->modedata;
struct screen *s = &data->screen;
- u_int px, py;
-
- py = screen_hsize(&wp->base) + data->cy - data->oy;
- px = window_copy_find_length(wp, py);
/* On screen. */
if (px > data->ox && px <= data->ox + screen_size_x(s) - 1)
@@ -600,6 +586,33 @@ window_copy_cursor_end_of_line(struct window_pane *wp)
}
void
+window_copy_cursor_start_of_line(struct window_pane *wp)
+{
+ struct window_copy_mode_data *data = wp->modedata;
+
+ if (data->ox != 0)
+ window_copy_scroll_right(wp, data->ox);
+ data->cx = 0;
+
+ if (window_copy_update_selection(wp))
+ window_copy_redraw_lines(wp, data->cy, 1);
+ else
+ window_copy_update_cursor(wp);
+}
+
+void
+window_copy_cursor_end_of_line(struct window_pane *wp)
+{
+ struct window_copy_mode_data *data = wp->modedata;
+ u_int px, py;
+
+ py = screen_hsize(&wp->base) + data->cy - data->oy;
+ px = window_copy_find_length(wp, py);
+
+ window_copy_set_cursor_x(wp, px);
+}
+
+void
window_copy_cursor_left(struct window_pane *wp)
{
struct window_copy_mode_data *data = wp->modedata;
@@ -748,43 +761,13 @@ window_copy_cursor_next_word(struct window_pane *wp)
}
out:
- /* On screen. */
- if (px > data->ox && px <= data->ox + screen_size_x(s) - 1)
- data->cx = px - data->ox;
-
- /* Off right of screen. */
- if (px > data->ox + screen_size_x(s) - 1) {
- /* Move cursor to last and scroll screen. */
- window_copy_scroll_left(
- wp, px - data->ox - (screen_size_x(s) - 1));
- data->cx = screen_size_x(s) - 1;
- }
-
- /* Off left of screen. */
- if (px <= data->ox) {
- if (px < screen_size_x(s) - 1) {
- /* Short enough to fit on screen. */
- window_copy_scroll_right(wp, data->ox);
- data->cx = px;
- } else {
- /* Too long to fit on screen. */
- window_copy_scroll_right(
- wp, data->ox - (px - (screen_size_x(s) - 1)));
- data->cx = screen_size_x(s) - 1;
- }
- }
-
- if (window_copy_update_selection(wp))
- window_copy_redraw_lines(wp, data->cy, 1);
- else
- window_copy_update_cursor(wp);
+ window_copy_set_cursor_x(wp, px);
}
void
window_copy_cursor_previous_word(struct window_pane *wp)
{
struct window_copy_mode_data *data = wp->modedata;
- struct screen *s = &data->screen;
u_int ox, px, py, skip;
ox = px = data->ox + data->cx;
@@ -830,36 +813,7 @@ window_copy_cursor_previous_word(struct window_pane *wp)
}
out:
- /* On screen. */
- if (px > data->ox && px <= data->ox + screen_size_x(s) - 1)
- data->cx = px - data->ox;
-
- /* Off right of screen. */
- if (px > data->ox + screen_size_x(s) - 1) {
- /* Move cursor to last and scroll screen. */
- window_copy_scroll_left(
- wp, px - data->ox - (screen_size_x(s) - 1));
- data->cx = screen_size_x(s) - 1;
- }
-
- /* Off left of screen. */
- if (px <= data->ox) {
- if (px < screen_size_x(s) - 1) {
- /* Short enough to fit on screen. */
- window_copy_scroll_right(wp, data->ox);
- data->cx = px;
- } else {
- /* Too long to fit on screen. */
- window_copy_scroll_right(
- wp, data->ox - (px - (screen_size_x(s) - 1)));
- data->cx = screen_size_x(s) - 1;
- }
- }
-
- if (window_copy_update_selection(wp))
- window_copy_redraw_lines(wp, data->cy, 1);
- else
- window_copy_update_cursor(wp);
+ window_copy_set_cursor_x(wp, px);
}
void