Merge branch 'obsd-master'

This commit is contained in:
Thomas Adam 2024-08-04 12:01:09 +01:00
commit 651891c3bd
7 changed files with 51 additions and 25 deletions

View File

@ -1273,6 +1273,16 @@ yylex(void)
continue; continue;
} }
if (ch == '\r') {
/*
* Treat \r\n as \n.
*/
ch = yylex_getc();
if (ch != '\n') {
yylex_ungetc(ch);
ch = '\r';
}
}
if (ch == '\n') { if (ch == '\n') {
/* /*
* End of line. Update the line number. * End of line. Update the line number.
@ -1619,6 +1629,13 @@ yylex_token(int ch)
log_debug("%s: end at EOF", __func__); log_debug("%s: end at EOF", __func__);
break; break;
} }
if (state == NONE && ch == '\r') {
ch = yylex_getc();
if (ch != '\n') {
yylex_ungetc(ch);
ch = '\r';
}
}
if (state == NONE && ch == '\n') { if (state == NONE && ch == '\n') {
log_debug("%s: end at EOL", __func__); log_debug("%s: end at EOL", __func__);
break; break;

View File

@ -261,19 +261,21 @@ mode_tree_up(struct mode_tree_data *mtd, int wrap)
} }
} }
void int
mode_tree_down(struct mode_tree_data *mtd, int wrap) mode_tree_down(struct mode_tree_data *mtd, int wrap)
{ {
if (mtd->current == mtd->line_size - 1) { if (mtd->current == mtd->line_size - 1) {
if (wrap) { if (wrap) {
mtd->current = 0; mtd->current = 0;
mtd->offset = 0; mtd->offset = 0;
} } else
return (0);
} else { } else {
mtd->current++; mtd->current++;
if (mtd->current > mtd->offset + mtd->height - 1) if (mtd->current > mtd->offset + mtd->height - 1)
mtd->offset++; mtd->offset++;
} }
return (1);
} }
void * void *

View File

@ -397,7 +397,7 @@ const struct options_table_entry options_table[] = {
.type = OPTIONS_TABLE_STRING, .type = OPTIONS_TABLE_STRING,
.scope = OPTIONS_TABLE_SERVER, .scope = OPTIONS_TABLE_SERVER,
.flags = OPTIONS_TABLE_IS_ARRAY, .flags = OPTIONS_TABLE_IS_ARRAY,
.default_str = "", .default_str = "linux*:AX@",
.separator = ",", .separator = ",",
.text = "List of terminal capabilities overrides." .text = "List of terminal capabilities overrides."
}, },

2
tmux.1
View File

@ -1359,8 +1359,8 @@ specified multiple times.
.Op Fl B Ar name:what:format .Op Fl B Ar name:what:format
.Op Fl C Ar size .Op Fl C Ar size
.Op Fl f Ar flags .Op Fl f Ar flags
.Op Fl r Ar pane:report
.Op Fl l Op Ar target-pane .Op Fl l Op Ar target-pane
.Op Fl r Ar pane:report
.Op Fl t Ar target-client .Op Fl t Ar target-client
.Op Ar adjustment .Op Ar adjustment
.Xc .Xc

2
tmux.h
View File

@ -3187,7 +3187,7 @@ int mode_tree_set_current(struct mode_tree_data *, uint64_t);
void mode_tree_each_tagged(struct mode_tree_data *, mode_tree_each_cb, void mode_tree_each_tagged(struct mode_tree_data *, mode_tree_each_cb,
struct client *, key_code, int); struct client *, key_code, int);
void mode_tree_up(struct mode_tree_data *, int); void mode_tree_up(struct mode_tree_data *, int);
void mode_tree_down(struct mode_tree_data *, int); int mode_tree_down(struct mode_tree_data *, int);
struct mode_tree_data *mode_tree_start(struct window_pane *, struct args *, struct mode_tree_data *mode_tree_start(struct window_pane *, struct args *,
mode_tree_build_cb, mode_tree_draw_cb, mode_tree_search_cb, mode_tree_build_cb, mode_tree_draw_cb, mode_tree_search_cb,
mode_tree_menu_cb, mode_tree_height_cb, mode_tree_key_cb, void *, mode_tree_menu_cb, mode_tree_height_cb, mode_tree_key_cb, void *,

30
tty.c
View File

@ -2778,7 +2778,6 @@ static void
tty_colours(struct tty *tty, const struct grid_cell *gc) tty_colours(struct tty *tty, const struct grid_cell *gc)
{ {
struct grid_cell *tc = &tty->cell; struct grid_cell *tc = &tty->cell;
int have_ax;
/* No changes? Nothing is necessary. */ /* No changes? Nothing is necessary. */
if (gc->fg == tc->fg && gc->bg == tc->bg && gc->us == tc->us) if (gc->fg == tc->fg && gc->bg == tc->bg && gc->us == tc->us)
@ -2792,28 +2791,18 @@ tty_colours(struct tty *tty, const struct grid_cell *gc)
*/ */
if (COLOUR_DEFAULT(gc->fg) || COLOUR_DEFAULT(gc->bg)) { if (COLOUR_DEFAULT(gc->fg) || COLOUR_DEFAULT(gc->bg)) {
/* /*
* If don't have AX but do have op, send sgr0 (op can't * If don't have AX, send sgr0. This resets both colours to default.
* actually be used because it is sometimes the same as sgr0
* and sometimes isn't). This resets both colours to default.
*
* Otherwise, try to set the default colour only as needed. * Otherwise, try to set the default colour only as needed.
*/ */
have_ax = tty_term_flag(tty->term, TTYC_AX); if (!tty_term_flag(tty->term, TTYC_AX))
if (!have_ax && tty_term_has(tty->term, TTYC_OP))
tty_reset(tty); tty_reset(tty);
else { else {
if (COLOUR_DEFAULT(gc->fg) && !COLOUR_DEFAULT(tc->fg)) { if (COLOUR_DEFAULT(gc->fg) && !COLOUR_DEFAULT(tc->fg)) {
if (have_ax) tty_puts(tty, "\033[39m");
tty_puts(tty, "\033[39m");
else if (tc->fg != 7)
tty_putcode_i(tty, TTYC_SETAF, 7);
tc->fg = gc->fg; tc->fg = gc->fg;
} }
if (COLOUR_DEFAULT(gc->bg) && !COLOUR_DEFAULT(tc->bg)) { if (COLOUR_DEFAULT(gc->bg) && !COLOUR_DEFAULT(tc->bg)) {
if (have_ax) tty_puts(tty, "\033[49m");
tty_puts(tty, "\033[49m");
else if (tc->bg != 0)
tty_putcode_i(tty, TTYC_SETAB, 0);
tc->bg = gc->bg; tc->bg = gc->bg;
} }
} }
@ -2825,7 +2814,7 @@ tty_colours(struct tty *tty, const struct grid_cell *gc)
/* /*
* Set the background colour. This must come after the foreground as * Set the background colour. This must come after the foreground as
* tty_colour_fg() can call tty_reset(). * tty_colours_fg() can call tty_reset().
*/ */
if (!COLOUR_DEFAULT(gc->bg) && gc->bg != tc->bg) if (!COLOUR_DEFAULT(gc->bg) && gc->bg != tc->bg)
tty_colours_bg(tty, gc); tty_colours_bg(tty, gc);
@ -2973,6 +2962,15 @@ tty_colours_fg(struct tty *tty, const struct grid_cell *gc)
struct grid_cell *tc = &tty->cell; struct grid_cell *tc = &tty->cell;
char s[32]; char s[32];
/*
* If the current colour is an aixterm bright colour and the new is not,
* reset because some terminals do not clear bright correctly.
*/
if (tty->cell.fg >= 90 &&
tty->cell.bg <= 97 &&
(gc->fg < 90 || gc->fg > 97))
tty_reset(tty);
/* Is this a 24-bit or 256-colour colour? */ /* Is this a 24-bit or 256-colour colour? */
if (gc->fg & COLOUR_FLAG_RGB || gc->fg & COLOUR_FLAG_256) { if (gc->fg & COLOUR_FLAG_RGB || gc->fg & COLOUR_FLAG_256) {
if (tty_try_colour(tty, gc->fg, "38") == 0) if (tty_try_colour(tty, gc->fg, "38") == 0)

View File

@ -408,8 +408,17 @@ window_buffer_do_delete(void *modedata, void *itemdata,
struct window_buffer_itemdata *item = itemdata; struct window_buffer_itemdata *item = itemdata;
struct paste_buffer *pb; struct paste_buffer *pb;
if (item == mode_tree_get_current(data->data)) if (item == mode_tree_get_current(data->data) &&
mode_tree_down(data->data, 0); !mode_tree_down(data->data, 0)) {
/*
*If we were unable to select the item further down we are at
* the end of the list. Move one element up instead, to make
* sure that we preserve a valid selection or we risk having
* the tree build logic reset it to the first item.
*/
mode_tree_up(data->data, 0);
}
if ((pb = paste_get_name(item->name)) != NULL) if ((pb = paste_get_name(item->name)) != NULL)
paste_free(pb); paste_free(pb);
} }
@ -508,7 +517,7 @@ window_buffer_key(struct window_mode_entry *wme, struct client *c,
struct window_buffer_itemdata *item; struct window_buffer_itemdata *item;
int finished; int finished;
if (paste_get_top(NULL) == NULL) { if (paste_is_empty()) {
finished = 1; finished = 1;
goto out; goto out;
} }
@ -541,7 +550,7 @@ window_buffer_key(struct window_mode_entry *wme, struct client *c,
} }
out: out:
if (finished || paste_get_top(NULL) == NULL) if (finished || paste_is_empty())
window_pane_reset_mode(wp); window_pane_reset_mode(wp);
else { else {
mode_tree_draw(mtd); mode_tree_draw(mtd);