]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
more: fix command 'f' (screen forward) behaviour
authorHannes Müller <>
Wed, 17 Mar 2021 19:37:47 +0000 (20:37 +0100)
committerHannes Müller <>
Wed, 17 Mar 2021 19:39:31 +0000 (20:39 +0100)
Currently 'f' behaves like 's', which is not correct according to
man page.
Bug was introduced with 1f861935a7292acbecc4d1618657e740e46175d9

text-utils/more.c

index b7b081b284bface1583c6794a997c07e760a70fd..bc3d526e048413126426283680a22897ed87267f 100644 (file)
@@ -136,7 +136,8 @@ typedef enum {
        more_kc_set_lines_per_screen,
        more_kc_set_scroll_len,
        more_kc_quit,
-       more_kc_skip_forward,
+       more_kc_skip_forward_screen,
+       more_kc_skip_forward_line,
        more_kc_next_line,
        more_kc_clear_screen,
        more_kc_previous_search_match,
@@ -814,13 +815,13 @@ static struct number_command read_command(struct more_control *ctl)
                        cmd.key = more_kc_backwards;
                        return cmd;
                } else if (!memcmp(input, ARROW_DOWN, sizeof(ARROW_DOWN))) {
-                       cmd.key = more_kc_skip_forward;
+                       cmd.key = more_kc_skip_forward_line;
                        return cmd;
                } else if (!memcmp(input, PAGE_UP, sizeof(PAGE_UP))) {
                        cmd.key = more_kc_backwards;
                        return cmd;
                } else if (!memcmp(input, PAGE_DOWN, sizeof(PAGE_DOWN))) {
-                       cmd.key = more_kc_skip_forward;
+                       cmd.key = more_kc_skip_forward_line;
                        return cmd;
                }
        }
@@ -881,9 +882,11 @@ static struct number_command read_command(struct more_control *ctl)
                        cmd.key = more_kc_quit;
                        break;
                case 'f':
-               case 's':
                case CTRL('F'):
-                       cmd.key = more_kc_skip_forward;
+                       cmd.key = more_kc_skip_forward_screen;
+                       break;
+               case 's':
+                       cmd.key = more_kc_skip_forward_line;
                        break;
                case '\n':
                        cmd.key = more_kc_next_line;
@@ -1643,8 +1646,13 @@ static int more_key_command(struct more_control *ctl, char *filename)
                        break;
                case more_kc_quit:
                        more_exit(ctl);
-               case more_kc_skip_forward:
-                       if (skip_forwards(ctl, cmd.number, cmd.number))
+               case more_kc_skip_forward_screen:
+                       if (skip_forwards(ctl, cmd.number, 'f'))
+                               retval = ctl->lines_per_screen;
+                       done = 1;
+                       break;
+               case more_kc_skip_forward_line:
+                       if (skip_forwards(ctl, cmd.number, 's'))
                                retval = ctl->lines_per_screen;
                        done = 1;
                        break;