version 1.75, 2011/11/15 23:24:04 |
version 1.76, 2011/12/04 16:18:01 |
|
|
void window_copy_cursor_down(struct window_pane *, int); |
void window_copy_cursor_down(struct window_pane *, int); |
void window_copy_cursor_jump(struct window_pane *); |
void window_copy_cursor_jump(struct window_pane *); |
void window_copy_cursor_jump_back(struct window_pane *); |
void window_copy_cursor_jump_back(struct window_pane *); |
|
void window_copy_cursor_jump_to(struct window_pane *); |
|
void window_copy_cursor_jump_to_back(struct window_pane *); |
void window_copy_cursor_next_word(struct window_pane *, const char *); |
void window_copy_cursor_next_word(struct window_pane *, const char *); |
void window_copy_cursor_next_word_end(struct window_pane *, const char *); |
void window_copy_cursor_next_word_end(struct window_pane *, const char *); |
void window_copy_cursor_previous_word(struct window_pane *, const char *); |
void window_copy_cursor_previous_word(struct window_pane *, const char *); |
|
|
WINDOW_COPY_SEARCHDOWN, |
WINDOW_COPY_SEARCHDOWN, |
WINDOW_COPY_JUMPFORWARD, |
WINDOW_COPY_JUMPFORWARD, |
WINDOW_COPY_JUMPBACK, |
WINDOW_COPY_JUMPBACK, |
|
WINDOW_COPY_JUMPTOFORWARD, |
|
WINDOW_COPY_JUMPTOBACK, |
WINDOW_COPY_GOTOLINE, |
WINDOW_COPY_GOTOLINE, |
}; |
}; |
|
|
|
|
|
|
enum window_copy_input_type inputtype; |
enum window_copy_input_type inputtype; |
const char *inputprompt; |
const char *inputprompt; |
char *inputstr; |
char *inputstr; |
|
|
int numprefix; |
int numprefix; |
|
|
|
|
np = 1; |
np = 1; |
|
|
if (data->inputtype == WINDOW_COPY_JUMPFORWARD || |
if (data->inputtype == WINDOW_COPY_JUMPFORWARD || |
data->inputtype == WINDOW_COPY_JUMPBACK) { |
data->inputtype == WINDOW_COPY_JUMPBACK || |
|
data->inputtype == WINDOW_COPY_JUMPTOFORWARD || |
|
data->inputtype == WINDOW_COPY_JUMPTOBACK) { |
/* Ignore keys with modifiers. */ |
/* Ignore keys with modifiers. */ |
if ((key & KEYC_MASK_MOD) == 0) { |
if ((key & KEYC_MASK_MOD) == 0) { |
data->jumpchar = key; |
data->jumpchar = key; |
if (data->inputtype == WINDOW_COPY_JUMPFORWARD) { |
if (data->inputtype == WINDOW_COPY_JUMPFORWARD) { |
for (; np != 0; np--) |
for (; np != 0; np--) |
window_copy_cursor_jump(wp); |
window_copy_cursor_jump(wp); |
} else { |
} else if (data->inputtype == WINDOW_COPY_JUMPBACK) { |
for (; np != 0; np--) |
for (; np != 0; np--) |
window_copy_cursor_jump_back(wp); |
window_copy_cursor_jump_back(wp); |
|
} else if (data->inputtype == WINDOW_COPY_JUMPTOFORWARD) { |
|
for (; np != 0; np--) |
|
window_copy_cursor_jump_to(wp); |
|
} else if (data->inputtype == WINDOW_COPY_JUMPTOBACK) { |
|
for (; np != 0; np--) |
|
window_copy_cursor_jump_to_back(wp); |
} |
} |
} |
} |
data->jumptype = data->inputtype; |
data->jumptype = data->inputtype; |
|
|
} else if (data->jumptype == WINDOW_COPY_JUMPBACK) { |
} else if (data->jumptype == WINDOW_COPY_JUMPBACK) { |
for (; np != 0; np--) |
for (; np != 0; np--) |
window_copy_cursor_jump_back(wp); |
window_copy_cursor_jump_back(wp); |
|
} else if (data->jumptype == WINDOW_COPY_JUMPTOFORWARD) { |
|
for (; np != 0; np--) |
|
window_copy_cursor_jump_to(wp); |
|
} else if (data->jumptype == WINDOW_COPY_JUMPTOBACK) { |
|
for (; np != 0; np--) |
|
window_copy_cursor_jump_to_back(wp); |
} |
} |
break; |
break; |
case MODEKEYCOPY_JUMPREVERSE: |
case MODEKEYCOPY_JUMPREVERSE: |
|
|
} else if (data->jumptype == WINDOW_COPY_JUMPBACK) { |
} else if (data->jumptype == WINDOW_COPY_JUMPBACK) { |
for (; np != 0; np--) |
for (; np != 0; np--) |
window_copy_cursor_jump(wp); |
window_copy_cursor_jump(wp); |
|
} else if (data->jumptype == WINDOW_COPY_JUMPTOFORWARD) { |
|
for (; np != 0; np--) |
|
window_copy_cursor_jump_to_back(wp); |
|
} else if (data->jumptype == WINDOW_COPY_JUMPTOBACK) { |
|
for (; np != 0; np--) |
|
window_copy_cursor_jump_to(wp); |
} |
} |
break; |
break; |
case MODEKEYCOPY_JUMPBACK: |
case MODEKEYCOPY_JUMPBACK: |
|
|
*data->inputstr = '\0'; |
*data->inputstr = '\0'; |
window_copy_redraw_lines(wp, screen_size_y(s) - 1, 1); |
window_copy_redraw_lines(wp, screen_size_y(s) - 1, 1); |
return; /* skip numprefix reset */ |
return; /* skip numprefix reset */ |
|
case MODEKEYCOPY_JUMPTO: |
|
data->inputtype = WINDOW_COPY_JUMPTOFORWARD; |
|
data->inputprompt = "Jump To"; |
|
*data->inputstr = '\0'; |
|
window_copy_redraw_lines(wp, screen_size_y(s) - 1, 1); |
|
return; /* skip numprefix reset */ |
|
case MODEKEYCOPY_JUMPTOBACK: |
|
data->inputtype = WINDOW_COPY_JUMPTOBACK; |
|
data->inputprompt = "Jump To Back"; |
|
*data->inputstr = '\0'; |
|
window_copy_redraw_lines(wp, screen_size_y(s) - 1, 1); |
|
return; /* skip numprefix reset */ |
case MODEKEYCOPY_SEARCHUP: |
case MODEKEYCOPY_SEARCHUP: |
data->inputtype = WINDOW_COPY_SEARCHUP; |
data->inputtype = WINDOW_COPY_SEARCHUP; |
data->inputprompt = "Search Up"; |
data->inputprompt = "Search Up"; |
|
|
case WINDOW_COPY_GOTOLINE: |
case WINDOW_COPY_GOTOLINE: |
case WINDOW_COPY_JUMPFORWARD: |
case WINDOW_COPY_JUMPFORWARD: |
case WINDOW_COPY_JUMPBACK: |
case WINDOW_COPY_JUMPBACK: |
|
case WINDOW_COPY_JUMPTOFORWARD: |
|
case WINDOW_COPY_JUMPTOBACK: |
case WINDOW_COPY_NUMERICPREFIX: |
case WINDOW_COPY_NUMERICPREFIX: |
break; |
break; |
case WINDOW_COPY_SEARCHUP: |
case WINDOW_COPY_SEARCHUP: |
|
|
case WINDOW_COPY_OFF: |
case WINDOW_COPY_OFF: |
case WINDOW_COPY_JUMPFORWARD: |
case WINDOW_COPY_JUMPFORWARD: |
case WINDOW_COPY_JUMPBACK: |
case WINDOW_COPY_JUMPBACK: |
|
case WINDOW_COPY_JUMPTOFORWARD: |
|
case WINDOW_COPY_JUMPTOBACK: |
case WINDOW_COPY_NUMERICPREFIX: |
case WINDOW_COPY_NUMERICPREFIX: |
break; |
break; |
case WINDOW_COPY_SEARCHUP: |
case WINDOW_COPY_SEARCHUP: |
|
|
&& gc->data == data->jumpchar) { |
&& gc->data == data->jumpchar) { |
|
|
window_copy_update_cursor(wp, px, data->cy); |
window_copy_update_cursor(wp, px, data->cy); |
|
if (window_copy_update_selection(wp)) |
|
window_copy_redraw_lines(wp, data->cy, 1); |
|
return; |
|
} |
|
if (px == 0) |
|
break; |
|
px--; |
|
} |
|
} |
|
|
|
void |
|
window_copy_cursor_jump_to(struct window_pane *wp) |
|
{ |
|
struct window_copy_mode_data *data = wp->modedata; |
|
struct screen *back_s = data->backing; |
|
const struct grid_cell *gc; |
|
u_int px, py, xx; |
|
|
|
px = data->cx + 1; |
|
py = screen_hsize(back_s) + data->cy - data->oy; |
|
xx = window_copy_find_length(wp, py); |
|
|
|
while (px < xx) { |
|
gc = grid_peek_cell(back_s->grid, px, py); |
|
if ((gc->flags & (GRID_FLAG_PADDING|GRID_FLAG_UTF8)) == 0 |
|
&& gc->data == data->jumpchar) { |
|
|
|
window_copy_update_cursor(wp, px - 1, data->cy); |
|
if (window_copy_update_selection(wp)) |
|
window_copy_redraw_lines(wp, data->cy, 1); |
|
return; |
|
} |
|
px++; |
|
} |
|
} |
|
|
|
void |
|
window_copy_cursor_jump_to_back(struct window_pane *wp) |
|
{ |
|
struct window_copy_mode_data *data = wp->modedata; |
|
struct screen *back_s = data->backing; |
|
const struct grid_cell *gc; |
|
u_int px, py; |
|
|
|
px = data->cx; |
|
py = screen_hsize(back_s) + data->cy - data->oy; |
|
|
|
if (px > 0) |
|
px--; |
|
|
|
for (;;) { |
|
gc = grid_peek_cell(back_s->grid, px, py); |
|
if ((gc->flags & (GRID_FLAG_PADDING|GRID_FLAG_UTF8)) == 0 |
|
&& gc->data == data->jumpchar) { |
|
|
|
window_copy_update_cursor(wp, px + 1, data->cy); |
if (window_copy_update_selection(wp)) |
if (window_copy_update_selection(wp)) |
window_copy_redraw_lines(wp, data->cy, 1); |
window_copy_redraw_lines(wp, data->cy, 1); |
return; |
return; |