From 25cf126de8abe607d2b0e63815bc1db4fd313173 Mon Sep 17 00:00:00 2001 From: nicm Date: Sun, 27 Aug 2017 08:33:55 +0000 Subject: Use kind and kri for S-Up/Down as well as kUP and kDN. --- tmux.h | 2 ++ tty-keys.c | 2 ++ tty-term.c | 44 +++++++++++++++++++++++--------------------- 3 files changed, 27 insertions(+), 21 deletions(-) diff --git a/tmux.h b/tmux.h index 68bb5466..8ee267bc 100644 --- a/tmux.h +++ b/tmux.h @@ -361,6 +361,7 @@ enum tty_code_code { TTYC_KIC6, TTYC_KIC7, TTYC_KICH1, + TTYC_KIND, TTYC_KLFT2, TTYC_KLFT3, TTYC_KLFT4, @@ -382,6 +383,7 @@ enum tty_code_code { TTYC_KPRV5, TTYC_KPRV6, TTYC_KPRV7, + TTYC_KRI, TTYC_KRIT2, TTYC_KRIT3, TTYC_KRIT4, diff --git a/tty-keys.c b/tty-keys.c index ca03628d..6e02bdc1 100644 --- a/tty-keys.c +++ b/tty-keys.c @@ -271,6 +271,7 @@ static const struct tty_default_key_code tty_default_code_keys[] = { { TTYC_KDC5, KEYC_DC|KEYC_CTRL|KEYC_XTERM }, { TTYC_KDC6, KEYC_DC|KEYC_SHIFT|KEYC_CTRL|KEYC_XTERM }, { TTYC_KDC7, KEYC_DC|KEYC_ESCAPE|KEYC_CTRL|KEYC_XTERM }, + { TTYC_KIND, KEYC_UP|KEYC_SHIFT|KEYC_XTERM }, { TTYC_KDN2, KEYC_DOWN|KEYC_SHIFT|KEYC_XTERM }, { TTYC_KDN3, KEYC_DOWN|KEYC_ESCAPE|KEYC_XTERM }, { TTYC_KDN4, KEYC_DOWN|KEYC_SHIFT|KEYC_ESCAPE|KEYC_XTERM }, @@ -319,6 +320,7 @@ static const struct tty_default_key_code tty_default_code_keys[] = { { TTYC_KRIT5, KEYC_RIGHT|KEYC_CTRL|KEYC_XTERM }, { TTYC_KRIT6, KEYC_RIGHT|KEYC_SHIFT|KEYC_CTRL|KEYC_XTERM }, { TTYC_KRIT7, KEYC_RIGHT|KEYC_ESCAPE|KEYC_CTRL|KEYC_XTERM }, + { TTYC_KRI, KEYC_UP|KEYC_SHIFT|KEYC_XTERM }, { TTYC_KUP2, KEYC_UP|KEYC_SHIFT|KEYC_XTERM }, { TTYC_KUP3, KEYC_UP|KEYC_ESCAPE|KEYC_XTERM }, { TTYC_KUP4, KEYC_UP|KEYC_SHIFT|KEYC_ESCAPE|KEYC_XTERM }, diff --git a/tty-term.c b/tty-term.c index 3d06728b..0807f858 100644 --- a/tty-term.c +++ b/tty-term.c @@ -65,36 +65,36 @@ static const struct tty_term_code_entry tty_term_codes[] = { [TTYC_CNORM] = { TTYCODE_STRING, "cnorm" }, [TTYC_COLORS] = { TTYCODE_NUMBER, "colors" }, [TTYC_CR] = { TTYCODE_STRING, "Cr" }, - [TTYC_CS] = { TTYCODE_STRING, "Cs" }, [TTYC_CSR] = { TTYCODE_STRING, "csr" }, - [TTYC_CUB] = { TTYCODE_STRING, "cub" }, + [TTYC_CS] = { TTYCODE_STRING, "Cs" }, [TTYC_CUB1] = { TTYCODE_STRING, "cub1" }, - [TTYC_CUD] = { TTYCODE_STRING, "cud" }, + [TTYC_CUB] = { TTYCODE_STRING, "cub" }, [TTYC_CUD1] = { TTYCODE_STRING, "cud1" }, - [TTYC_CUF] = { TTYCODE_STRING, "cuf" }, + [TTYC_CUD] = { TTYCODE_STRING, "cud" }, [TTYC_CUF1] = { TTYCODE_STRING, "cuf1" }, + [TTYC_CUF] = { TTYCODE_STRING, "cuf" }, [TTYC_CUP] = { TTYCODE_STRING, "cup" }, - [TTYC_CUU] = { TTYCODE_STRING, "cuu" }, [TTYC_CUU1] = { TTYCODE_STRING, "cuu1" }, + [TTYC_CUU] = { TTYCODE_STRING, "cuu" }, [TTYC_CVVIS] = { TTYCODE_STRING, "cvvis" }, - [TTYC_DCH] = { TTYCODE_STRING, "dch" }, [TTYC_DCH1] = { TTYCODE_STRING, "dch1" }, + [TTYC_DCH] = { TTYCODE_STRING, "dch" }, [TTYC_DIM] = { TTYCODE_STRING, "dim" }, - [TTYC_DL] = { TTYCODE_STRING, "dl" }, [TTYC_DL1] = { TTYCODE_STRING, "dl1" }, + [TTYC_DL] = { TTYCODE_STRING, "dl" }, [TTYC_E3] = { TTYCODE_STRING, "E3" }, [TTYC_ECH] = { TTYCODE_STRING, "ech" }, [TTYC_ED] = { TTYCODE_STRING, "ed" }, - [TTYC_EL] = { TTYCODE_STRING, "el" }, [TTYC_EL1] = { TTYCODE_STRING, "el1" }, + [TTYC_EL] = { TTYCODE_STRING, "el" }, [TTYC_ENACS] = { TTYCODE_STRING, "enacs" }, [TTYC_FSL] = { TTYCODE_STRING, "fsl" }, [TTYC_HOME] = { TTYCODE_STRING, "home" }, [TTYC_HPA] = { TTYCODE_STRING, "hpa" }, - [TTYC_ICH] = { TTYCODE_STRING, "ich" }, [TTYC_ICH1] = { TTYCODE_STRING, "ich1" }, - [TTYC_IL] = { TTYCODE_STRING, "il" }, + [TTYC_ICH] = { TTYCODE_STRING, "ich" }, [TTYC_IL1] = { TTYCODE_STRING, "il1" }, + [TTYC_IL] = { TTYCODE_STRING, "il" }, [TTYC_INDN] = { TTYCODE_STRING, "indn" }, [TTYC_INVIS] = { TTYCODE_STRING, "invis" }, [TTYC_KCBT] = { TTYCODE_STRING, "kcbt" }, @@ -109,20 +109,19 @@ static const struct tty_term_code_entry tty_term_codes[] = { [TTYC_KDC6] = { TTYCODE_STRING, "kDC6" }, [TTYC_KDC7] = { TTYCODE_STRING, "kDC7" }, [TTYC_KDCH1] = { TTYCODE_STRING, "kdch1" }, - [TTYC_KDN2] = { TTYCODE_STRING, "kDN" }, + [TTYC_KDN2] = { TTYCODE_STRING, "kDN" }, /* not kDN2 */ [TTYC_KDN3] = { TTYCODE_STRING, "kDN3" }, [TTYC_KDN4] = { TTYCODE_STRING, "kDN4" }, [TTYC_KDN5] = { TTYCODE_STRING, "kDN5" }, [TTYC_KDN6] = { TTYCODE_STRING, "kDN6" }, [TTYC_KDN7] = { TTYCODE_STRING, "kDN7" }, - [TTYC_KEND] = { TTYCODE_STRING, "kend" }, [TTYC_KEND2] = { TTYCODE_STRING, "kEND" }, [TTYC_KEND3] = { TTYCODE_STRING, "kEND3" }, [TTYC_KEND4] = { TTYCODE_STRING, "kEND4" }, [TTYC_KEND5] = { TTYCODE_STRING, "kEND5" }, [TTYC_KEND6] = { TTYCODE_STRING, "kEND6" }, [TTYC_KEND7] = { TTYCODE_STRING, "kEND7" }, - [TTYC_KF1] = { TTYCODE_STRING, "kf1" }, + [TTYC_KEND] = { TTYCODE_STRING, "kend" }, [TTYC_KF10] = { TTYCODE_STRING, "kf10" }, [TTYC_KF11] = { TTYCODE_STRING, "kf11" }, [TTYC_KF12] = { TTYCODE_STRING, "kf12" }, @@ -133,7 +132,7 @@ static const struct tty_term_code_entry tty_term_codes[] = { [TTYC_KF17] = { TTYCODE_STRING, "kf17" }, [TTYC_KF18] = { TTYCODE_STRING, "kf18" }, [TTYC_KF19] = { TTYCODE_STRING, "kf19" }, - [TTYC_KF2] = { TTYCODE_STRING, "kf2" }, + [TTYC_KF1] = { TTYCODE_STRING, "kf1" }, [TTYC_KF20] = { TTYCODE_STRING, "kf20" }, [TTYC_KF21] = { TTYCODE_STRING, "kf21" }, [TTYC_KF22] = { TTYCODE_STRING, "kf22" }, @@ -144,7 +143,7 @@ static const struct tty_term_code_entry tty_term_codes[] = { [TTYC_KF27] = { TTYCODE_STRING, "kf27" }, [TTYC_KF28] = { TTYCODE_STRING, "kf28" }, [TTYC_KF29] = { TTYCODE_STRING, "kf29" }, - [TTYC_KF3] = { TTYCODE_STRING, "kf3" }, + [TTYC_KF2] = { TTYCODE_STRING, "kf2" }, [TTYC_KF30] = { TTYCODE_STRING, "kf30" }, [TTYC_KF31] = { TTYCODE_STRING, "kf31" }, [TTYC_KF32] = { TTYCODE_STRING, "kf32" }, @@ -155,7 +154,7 @@ static const struct tty_term_code_entry tty_term_codes[] = { [TTYC_KF37] = { TTYCODE_STRING, "kf37" }, [TTYC_KF38] = { TTYCODE_STRING, "kf38" }, [TTYC_KF39] = { TTYCODE_STRING, "kf39" }, - [TTYC_KF4] = { TTYCODE_STRING, "kf4" }, + [TTYC_KF3] = { TTYCODE_STRING, "kf3" }, [TTYC_KF40] = { TTYCODE_STRING, "kf40" }, [TTYC_KF41] = { TTYCODE_STRING, "kf41" }, [TTYC_KF42] = { TTYCODE_STRING, "kf42" }, @@ -166,7 +165,7 @@ static const struct tty_term_code_entry tty_term_codes[] = { [TTYC_KF47] = { TTYCODE_STRING, "kf47" }, [TTYC_KF48] = { TTYCODE_STRING, "kf48" }, [TTYC_KF49] = { TTYCODE_STRING, "kf49" }, - [TTYC_KF5] = { TTYCODE_STRING, "kf5" }, + [TTYC_KF4] = { TTYCODE_STRING, "kf4" }, [TTYC_KF50] = { TTYCODE_STRING, "kf50" }, [TTYC_KF51] = { TTYCODE_STRING, "kf51" }, [TTYC_KF52] = { TTYCODE_STRING, "kf52" }, @@ -177,11 +176,12 @@ static const struct tty_term_code_entry tty_term_codes[] = { [TTYC_KF57] = { TTYCODE_STRING, "kf57" }, [TTYC_KF58] = { TTYCODE_STRING, "kf58" }, [TTYC_KF59] = { TTYCODE_STRING, "kf59" }, - [TTYC_KF6] = { TTYCODE_STRING, "kf6" }, + [TTYC_KF5] = { TTYCODE_STRING, "kf5" }, [TTYC_KF60] = { TTYCODE_STRING, "kf60" }, [TTYC_KF61] = { TTYCODE_STRING, "kf61" }, [TTYC_KF62] = { TTYCODE_STRING, "kf62" }, [TTYC_KF63] = { TTYCODE_STRING, "kf63" }, + [TTYC_KF6] = { TTYCODE_STRING, "kf6" }, [TTYC_KF7] = { TTYCODE_STRING, "kf7" }, [TTYC_KF8] = { TTYCODE_STRING, "kf8" }, [TTYC_KF9] = { TTYCODE_STRING, "kf9" }, @@ -199,6 +199,7 @@ static const struct tty_term_code_entry tty_term_codes[] = { [TTYC_KIC6] = { TTYCODE_STRING, "kIC6" }, [TTYC_KIC7] = { TTYCODE_STRING, "kIC7" }, [TTYC_KICH1] = { TTYCODE_STRING, "kich1" }, + [TTYC_KIND] = { TTYCODE_STRING, "kind" }, [TTYC_KLFT2] = { TTYCODE_STRING, "kLFT" }, [TTYC_KLFT3] = { TTYCODE_STRING, "kLFT3" }, [TTYC_KLFT4] = { TTYCODE_STRING, "kLFT4" }, @@ -226,7 +227,8 @@ static const struct tty_term_code_entry tty_term_codes[] = { [TTYC_KRIT5] = { TTYCODE_STRING, "kRIT5" }, [TTYC_KRIT6] = { TTYCODE_STRING, "kRIT6" }, [TTYC_KRIT7] = { TTYCODE_STRING, "kRIT7" }, - [TTYC_KUP2] = { TTYCODE_STRING, "kUP" }, + [TTYC_KRI] = { TTYCODE_STRING, "kri" }, + [TTYC_KUP2] = { TTYCODE_STRING, "kUP" }, /* not kUP2 */ [TTYC_KUP3] = { TTYCODE_STRING, "kUP3" }, [TTYC_KUP4] = { TTYCODE_STRING, "kUP4" }, [TTYC_KUP5] = { TTYCODE_STRING, "kUP5" }, @@ -239,11 +241,11 @@ static const struct tty_term_code_entry tty_term_codes[] = { [TTYC_RMACS] = { TTYCODE_STRING, "rmacs" }, [TTYC_RMCUP] = { TTYCODE_STRING, "rmcup" }, [TTYC_RMKX] = { TTYCODE_STRING, "rmkx" }, - [TTYC_SE] = { TTYCODE_STRING, "Se" }, [TTYC_SETAB] = { TTYCODE_STRING, "setab" }, [TTYC_SETAF] = { TTYCODE_STRING, "setaf" }, [TTYC_SETRGBB] = { TTYCODE_STRING, "setrgbb" }, [TTYC_SETRGBF] = { TTYCODE_STRING, "setrgbf" }, + [TTYC_SE] = { TTYCODE_STRING, "Se" }, [TTYC_SGR0] = { TTYCODE_STRING, "sgr0" }, [TTYC_SITM] = { TTYCODE_STRING, "sitm" }, [TTYC_SMACS] = { TTYCODE_STRING, "smacs" }, @@ -255,8 +257,8 @@ static const struct tty_term_code_entry tty_term_codes[] = { [TTYC_SS] = { TTYCODE_STRING, "Ss" }, [TTYC_TC] = { TTYCODE_FLAG, "Tc" }, [TTYC_TSL] = { TTYCODE_STRING, "tsl" }, - [TTYC_VPA] = { TTYCODE_STRING, "vpa" }, [TTYC_U8] = { TTYCODE_NUMBER, "U8" }, + [TTYC_VPA] = { TTYCODE_STRING, "vpa" }, [TTYC_XENL] = { TTYCODE_FLAG, "xenl" }, [TTYC_XT] = { TTYCODE_FLAG, "XT" }, }; -- cgit From fccfc4e4bed37b42c80797178621fe0d28c2f33b Mon Sep 17 00:00:00 2001 From: nicm Date: Sun, 27 Aug 2017 09:08:36 +0000 Subject: Do not allow the current line of screen when the preview is toggled, from Thomas Adam. --- mode-tree.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mode-tree.c b/mode-tree.c index 4e11a3b4..fc31592a 100644 --- a/mode-tree.c +++ b/mode-tree.c @@ -870,6 +870,15 @@ mode_tree_key(struct mode_tree_data *mtd, struct client *c, key_code *key, case 'v': mtd->preview = !mtd->preview; mode_tree_build(mtd); + + /* + * If the current line would now be off screen now the preview + * is on, reset the the offset to the last visible line. + */ + if (mtd->preview && mtd->current > mtd->height - 1) { + mtd->offset = mtd->current - mtd->height; + mtd->current--; + } break; } return (0); -- cgit From fe4467ad2bf7b37a12330ed0a147e7230d60179a Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 28 Aug 2017 12:36:38 +0000 Subject: Do not forbid targets to specify non-visible panes - the checks for visibility are better where the target is used. GitHub issue 1049. --- cmd-find.c | 32 +++++++++++++------------------- resize.c | 2 ++ tmux.h | 1 - window.c | 19 ++++++++----------- 4 files changed, 23 insertions(+), 31 deletions(-) diff --git a/cmd-find.c b/cmd-find.c index 89771814..8fd98c94 100644 --- a/cmd-find.c +++ b/cmd-find.c @@ -510,7 +510,7 @@ cmd_find_get_pane(struct cmd_find_state *fs, const char *pane, int only) /* Check for pane ids starting with %. */ if (*pane == '%') { fs->wp = window_pane_find_by_id_str(pane); - if (fs->wp == NULL || window_pane_outside(fs->wp)) + if (fs->wp == NULL) return (-1); fs->w = fs->wp->window; return (cmd_find_best_session_with_window(fs)); @@ -547,7 +547,7 @@ cmd_find_get_pane_with_session(struct cmd_find_state *fs, const char *pane) /* Check for pane ids starting with %. */ if (*pane == '%') { fs->wp = window_pane_find_by_id_str(pane); - if (fs->wp == NULL || window_pane_outside(fs->wp)) + if (fs->wp == NULL) return (-1); fs->w = fs->wp->window; return (cmd_find_best_winlink_with_window(fs)); @@ -579,7 +579,7 @@ cmd_find_get_pane_with_window(struct cmd_find_state *fs, const char *pane) /* Check for pane ids starting with %. */ if (*pane == '%') { fs->wp = window_pane_find_by_id_str(pane); - if (fs->wp == NULL || window_pane_outside(fs->wp)) + if (fs->wp == NULL) return (-1); if (fs->wp->window != fs->w) return (-1); @@ -591,27 +591,27 @@ cmd_find_get_pane_with_window(struct cmd_find_state *fs, const char *pane) if (fs->w->last == NULL) return (-1); fs->wp = fs->w->last; - if (fs->wp == NULL || window_pane_outside(fs->wp)) + if (fs->wp == NULL) return (-1); return (0); } else if (strcmp(pane, "{up-of}") == 0) { fs->wp = window_pane_find_up(fs->w->active); - if (fs->wp == NULL || window_pane_outside(fs->wp)) + if (fs->wp == NULL) return (-1); return (0); } else if (strcmp(pane, "{down-of}") == 0) { fs->wp = window_pane_find_down(fs->w->active); - if (fs->wp == NULL || window_pane_outside(fs->wp)) + if (fs->wp == NULL) return (-1); return (0); } else if (strcmp(pane, "{left-of}") == 0) { fs->wp = window_pane_find_left(fs->w->active); - if (fs->wp == NULL || window_pane_outside(fs->wp)) + if (fs->wp == NULL) return (-1); return (0); } else if (strcmp(pane, "{right-of}") == 0) { fs->wp = window_pane_find_right(fs->w->active); - if (fs->wp == NULL || window_pane_outside(fs->wp)) + if (fs->wp == NULL) return (-1); return (0); } @@ -627,7 +627,7 @@ cmd_find_get_pane_with_window(struct cmd_find_state *fs, const char *pane) fs->wp = window_pane_next_by_number(fs->w, wp, n); else fs->wp = window_pane_previous_by_number(fs->w, wp, n); - if (fs->wp != NULL && !window_pane_outside(fs->wp)) + if (fs->wp != NULL) return (0); } @@ -635,13 +635,13 @@ cmd_find_get_pane_with_window(struct cmd_find_state *fs, const char *pane) idx = strtonum(pane, 0, INT_MAX, &errstr); if (errstr == NULL) { fs->wp = window_pane_at_index(fs->w, idx); - if (fs->wp != NULL && !window_pane_outside(fs->wp)) + if (fs->wp != NULL) return (0); } /* Try as a description. */ fs->wp = window_find_string(fs->w, pane); - if (fs->wp != NULL && !window_pane_outside(fs->wp)) + if (fs->wp != NULL) return (0); return (-1); @@ -689,9 +689,7 @@ cmd_find_valid_state(struct cmd_find_state *fs) if (fs->w != fs->wl->window) return (0); - if (!window_has_pane(fs->w, fs->wp)) - return (0); - return (!window_pane_outside(fs->wp)); + return (window_has_pane(fs->w, fs->wp)); } /* Copy a state. */ @@ -818,10 +816,6 @@ cmd_find_from_pane(struct cmd_find_state *fs, struct window_pane *wp) { if (cmd_find_from_window(fs, wp->window) != 0) return (-1); - if (window_pane_outside(wp)) { - cmd_find_clear_state(fs, 0); - return (-1); - } fs->wp = wp; cmd_find_log_state(__func__, fs); @@ -1016,7 +1010,7 @@ cmd_find_target(struct cmd_find_state *fs, struct cmdq_item *item, switch (type) { case CMD_FIND_PANE: fs->wp = cmd_mouse_pane(m, &fs->s, &fs->wl); - if (fs->wp != NULL && !window_pane_outside(fs->wp)) + if (fs->wp != NULL) fs->w = fs->wl->window; break; case CMD_FIND_WINDOW: diff --git a/resize.c b/resize.c index 4c41f769..0fd30ba0 100644 --- a/resize.c +++ b/resize.c @@ -159,6 +159,8 @@ recalculate_sizes(void) if (w->active == wp) break; } + if (w->active == w->last) + w->last = NULL; server_redraw_window(w); notify_window("window-layout-changed", w); diff --git a/tmux.h b/tmux.h index 8ee267bc..7a54823b 100644 --- a/tmux.h +++ b/tmux.h @@ -2162,7 +2162,6 @@ int window_pane_set_mode(struct window_pane *, void window_pane_reset_mode(struct window_pane *); void window_pane_key(struct window_pane *, struct client *, struct session *, key_code, struct mouse_event *); -int window_pane_outside(struct window_pane *); int window_pane_visible(struct window_pane *); u_int window_pane_search(struct window_pane *, const char *); const char *window_printable_flags(struct winlink *); diff --git a/window.c b/window.c index f08e35ab..1c97fb8d 100644 --- a/window.c +++ b/window.c @@ -634,6 +634,8 @@ window_add_pane(struct window *w, struct window_pane *other, int before, void window_lost_pane(struct window *w, struct window_pane *wp) { + log_debug("%s: @%u pane %%%u", __func__, w->id, wp->id); + if (wp == marked_pane.wp) server_clear_marked(); @@ -1279,23 +1281,18 @@ window_pane_key(struct window_pane *wp, struct client *c, struct session *s, } int -window_pane_outside(struct window_pane *wp) +window_pane_visible(struct window_pane *wp) { struct window *w = wp->window; + if (wp->layout_cell == NULL) + return (0); + if (wp->xoff >= w->sx || wp->yoff >= w->sy) - return (1); + return (0); if (wp->xoff + wp->sx > w->sx || wp->yoff + wp->sy > w->sy) - return (1); - return (0); -} - -int -window_pane_visible(struct window_pane *wp) -{ - if (wp->layout_cell == NULL) return (0); - return (!window_pane_outside(wp)); + return (1); } u_int -- cgit