tweaks: add an auxiliary variable, to prepare for handling --zero

master
Benno Schulenberg 2021-11-14 16:09:15 +01:00
parent 0655c8aa6c
commit d19842ed73
1 changed files with 15 additions and 11 deletions

View File

@ -32,6 +32,8 @@ static char **filelist = NULL;
/* The list of files to display in the file browser. */ /* The list of files to display in the file browser. */
static size_t list_length = 0; static size_t list_length = 0;
/* The number of files in the list. */ /* The number of files in the list. */
static size_t usable_rows = 0;
/* The number of screen rows we can use to display the list. */
static size_t piles = 0; static size_t piles = 0;
/* The number of files that we can display per screen row. */ /* The number of files that we can display per screen row. */
static size_t longest = 0; static size_t longest = 0;
@ -104,6 +106,8 @@ void read_the_list(const char *path, DIR *dir)
* spaces beyond the right edge, and adding two spaces of padding * spaces beyond the right edge, and adding two spaces of padding
* between columns. */ * between columns. */
piles = (COLS + 2) / (longest + 2); piles = (COLS + 2) / (longest + 2);
usable_rows = editwinrows;
} }
/* Look for needle. If we find it, set selected to its location. /* Look for needle. If we find it, set selected to its location.
@ -143,8 +147,8 @@ void browser_refresh(void)
titlebar(present_path); titlebar(present_path);
blank_edit(); blank_edit();
for (size_t index = selected - selected % (editwinrows * piles); for (size_t index = selected - selected % (usable_rows * piles);
index < list_length && row < editwinrows; index++) { index < list_length && row < usable_rows; index++) {
const char *thename = tail(filelist[index]); const char *thename = tail(filelist[index]);
/* The filename we display, minus the path. */ /* The filename we display, minus the path. */
size_t namelen = breadth(thename); size_t namelen = breadth(thename);
@ -489,7 +493,7 @@ char *browse(char *path)
/* When the user clicked in the file list, select a filename. */ /* When the user clicked in the file list, select a filename. */
if (get_mouseinput(&mouse_y, &mouse_x, TRUE) == 0 && if (get_mouseinput(&mouse_y, &mouse_x, TRUE) == 0 &&
wmouse_trafo(edit, &mouse_y, &mouse_x, FALSE)) { wmouse_trafo(edit, &mouse_y, &mouse_x, FALSE)) {
selected = selected - selected % (editwinrows * piles) + selected = selected - selected % (usable_rows * piles) +
(mouse_y * piles) + (mouse_x / (longest + 2)); (mouse_y * piles) + (mouse_x / (longest + 2));
/* When beyond end-of-row, select the preceding filename. */ /* When beyond end-of-row, select the preceding filename. */
@ -560,11 +564,11 @@ char *browse(char *path)
if (selected + piles <= list_length - 1) if (selected + piles <= list_length - 1)
selected += piles; selected += piles;
} else if (func == to_prev_block) { } else if (func == to_prev_block) {
selected = ((selected / (editwinrows * piles)) * editwinrows * piles) + selected = ((selected / (usable_rows * piles)) * usable_rows * piles) +
selected % piles; selected % piles;
} else if (func == to_next_block) { } else if (func == to_next_block) {
selected = ((selected / (editwinrows * piles)) * editwinrows * piles) + selected = ((selected / (usable_rows * piles)) * usable_rows * piles) +
selected % piles + editwinrows * piles - piles; selected % piles + usable_rows * piles - piles;
if (selected >= list_length) if (selected >= list_length)
selected = (list_length / piles) * piles + selected % piles; selected = (list_length / piles) * piles + selected % piles;
if (selected >= list_length) if (selected >= list_length)
@ -572,18 +576,18 @@ char *browse(char *path)
} else if (func == do_page_up) { } else if (func == do_page_up) {
if (selected < piles) if (selected < piles)
selected = 0; selected = 0;
else if (selected < editwinrows * piles) else if (selected < usable_rows * piles)
selected = selected % piles; selected = selected % piles;
else else
selected -= editwinrows * piles; selected -= usable_rows * piles;
} else if (func == do_page_down) { } else if (func == do_page_down) {
if (selected + piles >= list_length - 1) if (selected + piles >= list_length - 1)
selected = list_length - 1; selected = list_length - 1;
else if (selected + editwinrows * piles >= list_length) else if (selected + usable_rows * piles >= list_length)
selected = (selected + editwinrows * piles - list_length) % piles + selected = (selected + usable_rows * piles - list_length) % piles +
list_length - piles; list_length - piles;
else else
selected += editwinrows * piles; selected += usable_rows * piles;
} else if (func == to_first_file) { } else if (func == to_first_file) {
selected = 0; selected = 0;
} else if (func == to_last_file) { } else if (func == to_last_file) {