mirror of
https://github.com/tmux/tmux.git
synced 2024-12-13 10:08:47 +00:00
Sync OpenBSD patchset 971:
When copying, make repeat count indicate buffer to replace if used.
This commit is contained in:
parent
cf317412d9
commit
d8d9c2af98
@ -52,7 +52,7 @@ void window_copy_goto_line(struct window_pane *, const char *);
|
|||||||
void window_copy_update_cursor(struct window_pane *, u_int, u_int);
|
void window_copy_update_cursor(struct window_pane *, u_int, u_int);
|
||||||
void window_copy_start_selection(struct window_pane *);
|
void window_copy_start_selection(struct window_pane *);
|
||||||
int window_copy_update_selection(struct window_pane *);
|
int window_copy_update_selection(struct window_pane *);
|
||||||
void window_copy_copy_selection(struct window_pane *);
|
void window_copy_copy_selection(struct window_pane *, int);
|
||||||
void window_copy_clear_selection(struct window_pane *);
|
void window_copy_clear_selection(struct window_pane *);
|
||||||
void window_copy_copy_line(
|
void window_copy_copy_line(
|
||||||
struct window_pane *, char **, size_t *, u_int, u_int, u_int);
|
struct window_pane *, char **, size_t *, u_int, u_int, u_int);
|
||||||
@ -134,7 +134,7 @@ struct window_copy_mode_data {
|
|||||||
const char *inputprompt;
|
const char *inputprompt;
|
||||||
char *inputstr;
|
char *inputstr;
|
||||||
|
|
||||||
u_int numprefix;
|
int numprefix;
|
||||||
|
|
||||||
enum window_copy_input_type searchtype;
|
enum window_copy_input_type searchtype;
|
||||||
char *searchstr;
|
char *searchstr;
|
||||||
@ -165,7 +165,7 @@ window_copy_init(struct window_pane *wp)
|
|||||||
data->inputtype = WINDOW_COPY_OFF;
|
data->inputtype = WINDOW_COPY_OFF;
|
||||||
data->inputprompt = NULL;
|
data->inputprompt = NULL;
|
||||||
data->inputstr = xstrdup("");
|
data->inputstr = xstrdup("");
|
||||||
data->numprefix = 0;
|
data->numprefix = -1;
|
||||||
|
|
||||||
data->searchtype = WINDOW_COPY_OFF;
|
data->searchtype = WINDOW_COPY_OFF;
|
||||||
data->searchstr = NULL;
|
data->searchstr = NULL;
|
||||||
@ -358,12 +358,12 @@ window_copy_key(struct window_pane *wp, struct session *sess, int key)
|
|||||||
const char *word_separators;
|
const char *word_separators;
|
||||||
struct window_copy_mode_data *data = wp->modedata;
|
struct window_copy_mode_data *data = wp->modedata;
|
||||||
struct screen *s = &data->screen;
|
struct screen *s = &data->screen;
|
||||||
u_int n, np;
|
u_int n;
|
||||||
int keys;
|
int np, keys;
|
||||||
enum mode_key_cmd cmd;
|
enum mode_key_cmd cmd;
|
||||||
|
|
||||||
np = data->numprefix;
|
np = data->numprefix;
|
||||||
if (np == 0)
|
if (np <= 0)
|
||||||
np = 1;
|
np = 1;
|
||||||
|
|
||||||
if (data->inputtype == WINDOW_COPY_JUMPFORWARD ||
|
if (data->inputtype == WINDOW_COPY_JUMPFORWARD ||
|
||||||
@ -513,7 +513,7 @@ window_copy_key(struct window_pane *wp, struct session *sess, int key)
|
|||||||
if (sess != NULL &&
|
if (sess != NULL &&
|
||||||
(cmd == MODEKEYCOPY_COPYLINE ||
|
(cmd == MODEKEYCOPY_COPYLINE ||
|
||||||
cmd == MODEKEYCOPY_COPYENDOFLINE)) {
|
cmd == MODEKEYCOPY_COPYENDOFLINE)) {
|
||||||
window_copy_copy_selection(wp);
|
window_copy_copy_selection(wp, -1);
|
||||||
window_pane_reset_mode(wp);
|
window_pane_reset_mode(wp);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -524,7 +524,7 @@ window_copy_key(struct window_pane *wp, struct session *sess, int key)
|
|||||||
break;
|
break;
|
||||||
case MODEKEYCOPY_COPYSELECTION:
|
case MODEKEYCOPY_COPYSELECTION:
|
||||||
if (sess != NULL) {
|
if (sess != NULL) {
|
||||||
window_copy_copy_selection(wp);
|
window_copy_copy_selection(wp, data->numprefix);
|
||||||
window_pane_reset_mode(wp);
|
window_pane_reset_mode(wp);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -664,7 +664,7 @@ window_copy_key(struct window_pane *wp, struct session *sess, int key)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
data->numprefix = 0;
|
data->numprefix = -1;
|
||||||
return;
|
return;
|
||||||
|
|
||||||
input_on:
|
input_on:
|
||||||
@ -696,11 +696,11 @@ window_copy_key_input(struct window_pane *wp, int key)
|
|||||||
struct window_copy_mode_data *data = wp->modedata;
|
struct window_copy_mode_data *data = wp->modedata;
|
||||||
struct screen *s = &data->screen;
|
struct screen *s = &data->screen;
|
||||||
size_t inputlen;
|
size_t inputlen;
|
||||||
u_int np;
|
int np;
|
||||||
|
|
||||||
switch (mode_key_lookup(&data->mdata, key)) {
|
switch (mode_key_lookup(&data->mdata, key)) {
|
||||||
case MODEKEYEDIT_CANCEL:
|
case MODEKEYEDIT_CANCEL:
|
||||||
data->numprefix = 0;
|
data->numprefix = -1;
|
||||||
return (-1);
|
return (-1);
|
||||||
case MODEKEYEDIT_BACKSPACE:
|
case MODEKEYEDIT_BACKSPACE:
|
||||||
inputlen = strlen(data->inputstr);
|
inputlen = strlen(data->inputstr);
|
||||||
@ -712,7 +712,7 @@ window_copy_key_input(struct window_pane *wp, int key)
|
|||||||
break;
|
break;
|
||||||
case MODEKEYEDIT_ENTER:
|
case MODEKEYEDIT_ENTER:
|
||||||
np = data->numprefix;
|
np = data->numprefix;
|
||||||
if (np == 0)
|
if (np <= 0)
|
||||||
np = 1;
|
np = 1;
|
||||||
|
|
||||||
switch (data->inputtype) {
|
switch (data->inputtype) {
|
||||||
@ -738,7 +738,7 @@ window_copy_key_input(struct window_pane *wp, int key)
|
|||||||
*data->inputstr = '\0';
|
*data->inputstr = '\0';
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
data->numprefix = 0;
|
data->numprefix = -1;
|
||||||
return (1);
|
return (1);
|
||||||
case MODEKEY_OTHER:
|
case MODEKEY_OTHER:
|
||||||
if (key < 32 || key > 126)
|
if (key < 32 || key > 126)
|
||||||
@ -767,7 +767,7 @@ window_copy_key_numeric_prefix(struct window_pane *wp, int key)
|
|||||||
if (key < '0' || key > '9')
|
if (key < '0' || key > '9')
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
if (data->numprefix >= 100) /* no more than three digits */
|
if (data->numprefix >= 100) /* no more than three digits */
|
||||||
return 0;
|
return 0;
|
||||||
data->numprefix = data->numprefix * 10 + key - '0';
|
data->numprefix = data->numprefix * 10 + key - '0';
|
||||||
|
|
||||||
@ -834,7 +834,7 @@ reset_mode:
|
|||||||
s->mode &= ~MODE_MOUSE_BUTTON;
|
s->mode &= ~MODE_MOUSE_BUTTON;
|
||||||
s->mode |= MODE_MOUSE_STANDARD;
|
s->mode |= MODE_MOUSE_STANDARD;
|
||||||
if (sess != NULL) {
|
if (sess != NULL) {
|
||||||
window_copy_copy_selection(wp);
|
window_copy_copy_selection(wp, -1);
|
||||||
window_pane_reset_mode(wp);
|
window_pane_reset_mode(wp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1235,7 +1235,7 @@ window_copy_update_selection(struct window_pane *wp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
window_copy_copy_selection(struct window_pane *wp)
|
window_copy_copy_selection(struct window_pane *wp, int idx)
|
||||||
{
|
{
|
||||||
struct window_copy_mode_data *data = wp->modedata;
|
struct window_copy_mode_data *data = wp->modedata;
|
||||||
struct screen *s = &data->screen;
|
struct screen *s = &data->screen;
|
||||||
@ -1315,7 +1315,7 @@ window_copy_copy_selection(struct window_pane *wp)
|
|||||||
} else {
|
} else {
|
||||||
if (keys == MODEKEY_EMACS)
|
if (keys == MODEKEY_EMACS)
|
||||||
lastex = ex;
|
lastex = ex;
|
||||||
else
|
else
|
||||||
lastex = ex + 1;
|
lastex = ex + 1;
|
||||||
restex = xx;
|
restex = xx;
|
||||||
firstsx = sx;
|
firstsx = sx;
|
||||||
@ -1347,8 +1347,11 @@ window_copy_copy_selection(struct window_pane *wp)
|
|||||||
screen_write_setselection(&wp->ictx.ctx, buf, off);
|
screen_write_setselection(&wp->ictx.ctx, buf, off);
|
||||||
|
|
||||||
/* Add the buffer to the stack. */
|
/* Add the buffer to the stack. */
|
||||||
limit = options_get_number(&global_options, "buffer-limit");
|
if (idx == -1) {
|
||||||
paste_add(&global_buffers, buf, off, limit);
|
limit = options_get_number(&global_options, "buffer-limit");
|
||||||
|
paste_add(&global_buffers, buf, off, limit);
|
||||||
|
} else
|
||||||
|
paste_replace(&global_buffers, idx, buf, off);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
Loading…
Reference in New Issue
Block a user