[systemd-devel] [PATCH] pager: support SYSTEMD_LESS environment variable

Lennart Poettering lennart at poettering.net
Tue Feb 11 18:22:17 PST 2014


On Wed, 12.02.14 03:10, Lennart Poettering (lennart at poettering.net) wrote:

> 
> On Wed, 12.02.14 02:58, Jason A. Donenfeld (Jason at zx2c4.com) wrote:
> 
> > This allows customization of the arguments used by less. The main
> > motivation is that some folks might not like having --no-init on every
> > invocation of less.
> > ---
> > If you'd like me to update some documentation, let me know what
> > files I should edit, and I'll send a v2.
> > 
> >  src/shared/pager.c | 17 +++++++++++++----
> >  1 file changed, 13 insertions(+), 4 deletions(-)
> > 
> > diff --git a/src/shared/pager.c b/src/shared/pager.c
> > index 72a29f2..4a7be4e 100644
> > --- a/src/shared/pager.c
> > +++ b/src/shared/pager.c
> > @@ -50,6 +50,8 @@ noreturn static void pager_fallback(void) {
> >  int pager_open(bool jump_to_end) {
> >          int fd[2];
> >          const char *pager;
> > +        char *less_opts;
> 
> Needs to be "const", otherwise assigning a literal string will generate
> casting errors....
> 
> > +        _cleanup_free_ *joined_less_opts = NULL;
> >          pid_t parent_pid;
> >          int r;
> >  
> > @@ -88,10 +90,17 @@ int pager_open(bool jump_to_end) {
> >                  dup2(fd[0], STDIN_FILENO);
> >                  close_pipe(fd);
> >  
> > -                if (jump_to_end)
> > -                        setenv("LESS", "FRSXMK+G", 1);
> > -                else
> > -                        setenv("LESS", "FRSXMK", 1);
> > +                less_opts = getenv("SYSTEMD_LESS");
> > +                if (!less_opts) {
> > +                        if (jump_to_end)
> > +                                less_opts = "FRSXMK+G";
> > +                        else
> > +                                less_opts = "FRSXMK";
> > +                } else if (jump_to_end) {
> > +                        joined_less_opts = strjoin(less_opts, " +G",
> > -                        NULL);
> 
> Needs OOM check. Also, for the special case of joining exactly 2
> strings, use strappend(), it's a bit more efficient...
> 
> > +                        less_opts = joined_less_opts;
> > +                }
> > +                setenv("LESS", less_opts, 1);
> >  
> >                  /* Make sure the pager goes away when the parent dies */
> >                  if (prctl(PR_SET_PDEATHSIG, SIGTERM) < 0)
> 
> Otherwise looks good.

Oh, and the patch needs man page updates. Probably at all places where
$SYSTEMD_PAGER is already documented...

Lennart

-- 
Lennart Poettering, Red Hat


More information about the systemd-devel mailing list