version 1.4, 2009/07/11 19:09:24 |
version 1.5, 2009/07/12 16:12:34 |
|
|
struct window_pane *, char **, size_t *, u_int, u_int, u_int); |
struct window_pane *, char **, size_t *, u_int, u_int, u_int); |
int window_copy_is_space(struct window_pane *, 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); |
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_start_of_line(struct window_pane *); |
void window_copy_cursor_end_of_line(struct window_pane *); |
void window_copy_cursor_end_of_line(struct window_pane *); |
void window_copy_cursor_left(struct window_pane *); |
void window_copy_cursor_left(struct window_pane *); |
|
|
return (px); |
return (px); |
} |
} |
|
|
|
/* |
|
* Set the cursor X coordinate and scroll horizontally to make it visible. |
|
* Also redraw the selection or the cursor, as needed. |
|
*/ |
void |
void |
window_copy_cursor_start_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 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; |
|
struct screen *s = &data->screen; |
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. */ |
/* On screen. */ |
if (px > data->ox && px <= data->ox + screen_size_x(s) - 1) |
if (px > data->ox && px <= data->ox + screen_size_x(s) - 1) |
data->cx = px - data->ox; |
data->cx = px - data->ox; |
|
|
} |
} |
|
|
void |
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) |
window_copy_cursor_left(struct window_pane *wp) |
{ |
{ |
struct window_copy_mode_data *data = wp->modedata; |
struct window_copy_mode_data *data = wp->modedata; |
|
|
} |
} |
out: |
out: |
|
|
/* On screen. */ |
window_copy_set_cursor_x(wp, px); |
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); |
|
} |
} |
|
|
void |
void |
window_copy_cursor_previous_word(struct window_pane *wp) |
window_copy_cursor_previous_word(struct window_pane *wp) |
{ |
{ |
struct window_copy_mode_data *data = wp->modedata; |
struct window_copy_mode_data *data = wp->modedata; |
struct screen *s = &data->screen; |
|
u_int ox, px, py, skip; |
u_int ox, px, py, skip; |
|
|
ox = px = data->ox + data->cx; |
ox = px = data->ox + data->cx; |
|
|
} |
} |
out: |
out: |
|
|
/* On screen. */ |
window_copy_set_cursor_x(wp, px); |
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); |
|
} |
} |
|
|
void |
void |