Stefan Sperling wrote:

> Ben Reser wrote:
>>  I suspect we should allow the pager to be used with all our commands, 
>> though most of them should be disabled by default.  I'd say the following 
>> should be enabled by default:
>>   blame
>>   cat
>>   diff
>>   list
>>   log
>>   mergeinfo (at least with --show-revs)
>>   proplist
>>   status
> 
> I had a similar list. [...but...]
> I would in fact be fine with having just 'help' use a pager by default.
> 
> Some commands in your list could enable the pager only when acting
> recursively, e.g. 'proplist -R', because recursive operation generally
> implies more output.
> 
> We could use a static list like the above, based on what cases
> we believe will produce a lot of output.

I do like the idea of making the output more user-friendly by using a pager.  
But keep it simple.  A pager by default just for help -- fine.  A pager for all 
commands when producing more than a screenful of output -- fine.  A static list 
of what commands we 'believe' will produce a lot of output -- no.

The pager should not be used when stdout is not connected to a terminal, of 
course.


> Or we could buffer up to one screenfull of data and decide to use the
> pager based on whether the output is going to fill the entire screen.
> This is more difficult to implement [...]

Good behaviour, but don't implement it in Subversion, implement it in the 
pager!  GNU 'less' already has this feature built in.  If Windows/BSD/whatever 
doesn't have such a pager by default, the Subversion packager should provide 
one.  In the extreme, I'd rather see us write one and ship it as a tool than 
build such functionality into 'svn' itself.

>>  A lot of these will make a lot more sense if we can reasonably default to
>>  something like the FRSX option set that git passes to less by default.  

For those without a copy of 'man less' in front of them:

       -F or --quit-if-one-screen
              Causes less to automatically exit if the entire file can be 
displayed on the first screen.

       -R or --RAW-CONTROL-CHARS
              Like -r, [Causes "raw" control characters to be displayed.  The 
default is to display control characters using the caret notation] but only 
ANSI "color" escape sequences are output in "raw" form.  Unlike -r, the screen 
appearance is maintained correctly in most cases.

       -S or --chop-long-lines
              Causes lines longer than the screen width to be chopped rather 
than folded.

       -X or --no-init
              Disables sending the termcap initialization and deinitialization  
strings to the terminal.  This is sometimes desirable if the deinitialization 
string does something unnecessary, like clearing the screen.


> less -F is causing issues for me, where I don't see any output at all if
> the output doesn't fill screen. Not sure if this is specific to OpenBSD
> or if it can also be seen on other systems.

Do you see the same problem if you pipe the output from (non-patched) 'svn' 
straight into the same pager?  Could it be related to '-X'?  Could it be 
related to the sequence in which we close things:

  close the svn_cmdline_stream_for_stdout
  close the apr_stream_from_stdout
  close the pager
  flush stdout just before returning from main()

See the 'flush' call in 'main()' -- wouldn't it make more sense to set up and 
tear down the pager there, rather than within each individual subcommand?

- Julian

Reply via email to