[Toybox] [PATCH] Fix more to a non-tty.

Rob Landley rob at landley.net
Sat Apr 23 20:41:18 PDT 2016


On 04/23/2016 04:40 PM, enh wrote:
> On Sat, Apr 23, 2016 at 12:39 PM, Rob Landley <rob at landley.net> wrote:
>> On 04/21/2016 07:42 PM, enh wrote:
>>> And add a test.
>>> ---
>>>  toys/pending/more.c | 2 +-
>>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> Applied, but I don't see the test?
> 
> d'oh. fooled by git commit -a yet again.
> 
>> Sigh: I wanted "more" and "less" to share code, but they really don't do
>> the same thing (random example: "ls --color | more" vs "ls --color | less").
> 
> there's "less -r". but i didn't know that until i read the help just now :-)

And this implementation of more has approximately the same problem that
less -r's man entry documents about keeping track of where it is on the
screen:

      putchar(ch);
      if (ch == '\t') col = (col | 0x7) + 1;
      else col++;
      if (col == cols) putchar(ch = '\n');
      if (ch == '\n') {

That treats the ansi escapes as normal printing characters for
determining when the screen wraps, in which case this inserts a
gratuitous newline (instead of allowing the screen to wrap itself)...

The posix more spec says it gets the screen height from -n or an
environment variable and if neither are set it uses an _unspecified_
number of lines. Actually querying your terminal size is nonstandard
behavior. Lovely.

> having more(1) be the simplest possible thing probably best matches
> the intentions of anyone who deliberately chooses more(1) over less(1)
> anyway.

We have two lines of colons instead of one when announcing a new file. I
can't find ANY reference to a line of colons in the posix thing, the
closest I can find is this bit of the extended description:

> For all files but the last (including standard input if no file was
> specified, and for the last file as well, if the -e option was not
> specified), when more has written the last line in the file, more
> shall prompt for a user command. This prompt shall contain the name
> of the next file as well as an indication that more has reached
> end-of-file. If the user command is f, <control>-F, <space>, j,
> <newline>, d, <control>-D, or s, more shall display the next file.
> Otherwise, if displaying the last file, more shall exit. Otherwise,
> more shall execute the user command specified.

Which says nothing about the format...

Sigh. "Simple." Right...

Rob


More information about the Toybox mailing list