mirror of
https://github.com/sheumann/hush.git
synced 2025-01-17 16:30:26 +00:00
less: fix 'n'ext match: sometimes was going to 999999th line
This commit is contained in:
parent
8a91081d9d
commit
5c1de36702
@ -342,6 +342,23 @@ static void status_print(void)
|
|||||||
print_hilite(p);
|
print_hilite(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void cap_cur_fline(int nlines)
|
||||||
|
{
|
||||||
|
int diff;
|
||||||
|
if (cur_fline < 0)
|
||||||
|
cur_fline = 0;
|
||||||
|
if (cur_fline + max_displayed_line > max_fline + TILDES) {
|
||||||
|
cur_fline -= nlines;
|
||||||
|
if (cur_fline < 0)
|
||||||
|
cur_fline = 0;
|
||||||
|
diff = max_fline - (cur_fline + max_displayed_line) + TILDES;
|
||||||
|
/* As the number of lines requested was too large, we just move
|
||||||
|
to the end of the file */
|
||||||
|
if (diff > 0)
|
||||||
|
cur_fline += diff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static char controls[] =
|
static char controls[] =
|
||||||
/* NUL: never encountered; TAB: not converted */
|
/* NUL: never encountered; TAB: not converted */
|
||||||
/**/"\x01\x02\x03\x04\x05\x06\x07\x08" "\x0a\x0b\x0c\x0d\x0e\x0f"
|
/**/"\x01\x02\x03\x04\x05\x06\x07\x08" "\x0a\x0b\x0c\x0d\x0e\x0f"
|
||||||
@ -479,18 +496,9 @@ static void buffer_fill_and_print(void)
|
|||||||
/* Move the buffer up and down in the file in order to scroll */
|
/* Move the buffer up and down in the file in order to scroll */
|
||||||
static void buffer_down(int nlines)
|
static void buffer_down(int nlines)
|
||||||
{
|
{
|
||||||
int diff;
|
|
||||||
cur_fline += nlines;
|
cur_fline += nlines;
|
||||||
read_lines();
|
read_lines();
|
||||||
|
cap_cur_fline(nlines);
|
||||||
if (cur_fline + max_displayed_line > max_fline + TILDES) {
|
|
||||||
cur_fline -= nlines;
|
|
||||||
diff = max_fline - (cur_fline + max_displayed_line) + TILDES;
|
|
||||||
/* As the number of lines requested was too large, we just move
|
|
||||||
to the end of the file */
|
|
||||||
if (diff > 0)
|
|
||||||
cur_fline += diff;
|
|
||||||
}
|
|
||||||
buffer_fill_and_print();
|
buffer_fill_and_print();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -763,6 +771,7 @@ static void goto_match(int match)
|
|||||||
if (match >= num_matches && eof_error > 0) {
|
if (match >= num_matches && eof_error > 0) {
|
||||||
cur_fline = MAXLINES; /* look as far as needed */
|
cur_fline = MAXLINES; /* look as far as needed */
|
||||||
read_lines();
|
read_lines();
|
||||||
|
cap_cur_fline(cur_fline);
|
||||||
}
|
}
|
||||||
if (num_matches) {
|
if (num_matches) {
|
||||||
normalize_match_pos(match);
|
normalize_match_pos(match);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user