browser: keep the highlight in the same spot or column, when possible
When doing a PageUp or PageDown in the browser, don't move the highlight to the first line in the same column, but keep it in the same relative position of the screen. If we're already on the first or last page, move the highlight to the first or last line, but keep it in the same column. If we're already on the first or last line, only then move it to the first or last entry.master
parent
36df5ceef6
commit
58404e4ba2
|
@ -187,14 +187,20 @@ char *do_browser(char *path, DIR *dir)
|
||||||
/* Search for another filename. */
|
/* Search for another filename. */
|
||||||
do_fileresearch();
|
do_fileresearch();
|
||||||
} else if (func == do_page_up) {
|
} else if (func == do_page_up) {
|
||||||
if (selected >= (editwinrows + fileline % editwinrows) * width)
|
if (selected < width)
|
||||||
selected -= (editwinrows + fileline % editwinrows) * width;
|
|
||||||
else
|
|
||||||
selected = 0;
|
selected = 0;
|
||||||
|
else if (selected < editwinrows * width)
|
||||||
|
selected = selected % width;
|
||||||
|
else
|
||||||
|
selected -= editwinrows * width;
|
||||||
} else if (func == do_page_down) {
|
} else if (func == do_page_down) {
|
||||||
selected += (editwinrows - fileline % editwinrows) * width;
|
if (selected + width >= filelist_len - 1)
|
||||||
if (selected > filelist_len - 1)
|
|
||||||
selected = filelist_len - 1;
|
selected = filelist_len - 1;
|
||||||
|
else if (selected + editwinrows * width >= filelist_len)
|
||||||
|
selected = (selected + editwinrows * width - filelist_len) %
|
||||||
|
width + filelist_len - width;
|
||||||
|
else
|
||||||
|
selected += editwinrows * width;
|
||||||
} else if (func == do_first_file) {
|
} else if (func == do_first_file) {
|
||||||
selected = 0;
|
selected = 0;
|
||||||
} else if (func == do_last_file) {
|
} else if (func == do_last_file) {
|
||||||
|
|
Loading…
Reference in New Issue