mirror of
https://github.com/tmux/tmux.git
synced 2024-12-13 01:48:47 +00:00
Fix a few errors in how the selected line is chosen after resize,
reported by Felix Rosencrantz in GitHub issue 1059.
This commit is contained in:
parent
78cf3c14ca
commit
f56f09ea38
27
mode-tree.c
27
mode-tree.c
@ -127,6 +127,17 @@ mode_tree_free_items(struct mode_tree_list *mtl)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
mode_tree_check_selected(struct mode_tree_data *mtd)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* If the current line would now be off screen reset the offset to the
|
||||||
|
* last visible line.
|
||||||
|
*/
|
||||||
|
if (mtd->current > mtd->height - 1)
|
||||||
|
mtd->offset = mtd->current - mtd->height + 1;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
mode_tree_clear_lines(struct mode_tree_data *mtd)
|
mode_tree_clear_lines(struct mode_tree_data *mtd)
|
||||||
{
|
{
|
||||||
@ -192,7 +203,7 @@ mode_tree_set_current(struct mode_tree_data *mtd, uint64_t tag)
|
|||||||
if (i != mtd->line_size) {
|
if (i != mtd->line_size) {
|
||||||
mtd->current = i;
|
mtd->current = i;
|
||||||
if (mtd->current > mtd->height - 1)
|
if (mtd->current > mtd->height - 1)
|
||||||
mtd->offset = 1 + mtd->current - mtd->height;
|
mtd->offset = mtd->current - mtd->height + 1;
|
||||||
else
|
else
|
||||||
mtd->offset = 0;
|
mtd->offset = 0;
|
||||||
} else {
|
} else {
|
||||||
@ -361,6 +372,7 @@ mode_tree_build(struct mode_tree_data *mtd)
|
|||||||
mtd->height = screen_size_y(s);
|
mtd->height = screen_size_y(s);
|
||||||
} else
|
} else
|
||||||
mtd->height = screen_size_y(s);
|
mtd->height = screen_size_y(s);
|
||||||
|
mode_tree_check_selected(mtd);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -792,7 +804,7 @@ mode_tree_key(struct mode_tree_data *mtd, struct client *c, key_code *key,
|
|||||||
case KEYC_END:
|
case KEYC_END:
|
||||||
mtd->current = mtd->line_size - 1;
|
mtd->current = mtd->line_size - 1;
|
||||||
if (mtd->current > mtd->height - 1)
|
if (mtd->current > mtd->height - 1)
|
||||||
mtd->offset = mtd->current - mtd->height;
|
mtd->offset = mtd->current - mtd->height + 1;
|
||||||
else
|
else
|
||||||
mtd->offset = 0;
|
mtd->offset = 0;
|
||||||
break;
|
break;
|
||||||
@ -870,15 +882,8 @@ mode_tree_key(struct mode_tree_data *mtd, struct client *c, key_code *key,
|
|||||||
case 'v':
|
case 'v':
|
||||||
mtd->preview = !mtd->preview;
|
mtd->preview = !mtd->preview;
|
||||||
mode_tree_build(mtd);
|
mode_tree_build(mtd);
|
||||||
|
if (mtd->preview)
|
||||||
/*
|
mode_tree_check_selected(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;
|
break;
|
||||||
}
|
}
|
||||||
return (0);
|
return (0);
|
||||||
|
Loading…
Reference in New Issue
Block a user