src/nnn.c | 59 ++++++++++++++++++++++++++++++----------------------- diff --git a/src/nnn.c b/src/nnn.c index e32a0d95d132d6a6185d9b8d1ebee618c87a4e2f..3093d649a4ffac5446f18838e3058a99a1f6bf15 100644 --- a/src/nnn.c +++ b/src/nnn.c @@ -2974,33 +2974,42 @@ default: printmsg("unsupported file"); goto nochange; } - case SEL_NEXT: - if (cur < ndents - 1) - ++cur; - else if (ndents) - /* Roll over, set cursor to first entry */ + case SEL_NEXT: // fallthrough + case SEL_PREV: // fallthrough + case SEL_PGDN: // fallthrough + case SEL_PGUP: // fallthrough + case SEL_HOME: // fallthrough + case SEL_END: + switch (sel) { + case SEL_NEXT: + if (cur < ndents - 1) + ++cur; + else if (ndents) + /* Roll over, set cursor to first entry */ + cur = 0; + break; + case SEL_PREV: + if (cur > 0) + --cur; + else if (ndents) + /* Roll over, set cursor to last entry */ + cur = ndents - 1; + break; + case SEL_PGDN: + if (cur < ndents - 1) + cur += MIN((LINES - 4) / 2, ndents - 1 - cur); + break; + case SEL_PGUP: + if (cur > 0) + cur -= MIN((LINES - 4) / 2, cur); + break; + case SEL_HOME: cur = 0; - break; - case SEL_PREV: - if (cur > 0) - --cur; - else if (ndents) - /* Roll over, set cursor to last entry */ + break; + default: /* case SEL_END */ cur = ndents - 1; - break; - case SEL_PGDN: - if (cur < ndents - 1) - cur += MIN((LINES - 4) / 2, ndents - 1 - cur); - break; - case SEL_PGUP: - if (cur > 0) - cur -= MIN((LINES - 4) / 2, cur); - break; - case SEL_HOME: - cur = 0; - break; - case SEL_END: - cur = ndents - 1; + break; + } break; case SEL_CDHOME: // fallthrough case SEL_CDBEGIN: // fallthrough