tmux:textobjs: Do not use scroll_region

scroll_region_{upper,lower} are only modified by the DECSTBM escape
sequence:

> This control function sets the top and bottom margins for the current
> page. You cannot perform scrolling outside the margins.

And are 0 and pane_height - 1 otherwise. Tmux implements these such that
command output can't be displayed outside these margins, but the cursor
in copy-mode can. This means that using them to check if the cursor is
at the very top or bottom can break in certain situation (even those
seem extremely rare since I have never heard of this escape sequence).

Get rid of them and just use 0 and the pane height.

[1]: https://vt100.net/docs/vt510-rm/DECSTBM.html
This commit is contained in:
2024-07-05 14:19:56 +02:00
parent 7565ae2f6f
commit 120285c478

View File

@@ -48,10 +48,8 @@ case "$motion" in
scroll_pos="$(get_var scroll_position)" scroll_pos="$(get_var scroll_position)"
hist_size="$(get_var history_size)" hist_size="$(get_var history_size)"
cursor_y="$(get_var copy_cursor_y)" cursor_y="$(get_var copy_cursor_y)"
scroll_upper="$(get_var scroll_region_upper)"
# don't move down if we're at the very first paragraph # don't move down if we're at the very first paragraph
if [ "$scroll_pos" -lt "$hist_size" ] \ if [ "$scroll_pos" -lt "$hist_size" ] || [ "$cursor_y" -gt 0 ]
|| [ "$cursor_y" -gt "$scroll_upper" ]
then then
tmux send -X cursor-down tmux send -X cursor-down
fi fi
@@ -62,9 +60,11 @@ case "$motion" in
scroll_pos="$(get_var scroll_position)" scroll_pos="$(get_var scroll_position)"
cursor_y="$(get_var copy_cursor_y)" cursor_y="$(get_var copy_cursor_y)"
scroll_lower="$(get_var scroll_region_lower)" pane_height="$(get_var pane_height)"
: "$((pane_height -= 1))"
# don't move up if we're at the very last paragraph # don't move up if we're at the very last paragraph
if [ "$scroll_pos" -gt 0 ] || [ "$cursor_y" -lt "$scroll_lower" ]; then if [ "$scroll_pos" -gt 0 ] || [ "$cursor_y" -lt "$pane_height" ]
then
tmux send -X cursor-up tmux send -X cursor-up
fi fi