This bug affects my Lubuntu 17.10 (64-bit) system, which has version
5.26.0-8ubuntu1 of the perl and perl-doc packages. I noticed the bug
immediately upon checking for it after Zanna (https://launchpad.net
/~rose-anna-bleasdale / https://askubuntu.com/users/527764/zanna)
reported experiencing it in Ubuntu MATE 17.10. Until this bug is fixed,
I suggest the workaround of setting the PAGER environment variable to
"less" so that the proper configuration for less is used; other full
workarounds are also effective (see below).

The problem does not appear to depend in any way on what sort of
terminal emulator is used. I tried in LXTerminal (TERM=xterm), XTerm
(TERM=xterm), a virtual console (TERM=linux), and via SSH (TERM=xterm).
Zanna tried in MATE Terminal (TERM=xterm), GNOME Terminal (TERM=xterm-
256color), Konsole (TERM=xterm-256color), Tilda (TERM=xterm-256color),
XTerm (TERM=xterm), and a virtual console (TERM=linux). See
https://chat.stackexchange.com/transcript/message/42130009#42130009 and
subsequent messages for details. It occurred for us both no matter what
terminals we used. I believe this is the same bug as reported here.

In case it is helpful, I have attached a file showing the debugging
output produced by running "perldoc -D perlsyn" on my Lubuntu 17.10
system. Note the presence of this line:

    About to call Pod::Perldoc::ToTerm->pager_configuration("/usr/bin
/sensible-pager")

I suspect that the problem is that the necessary configuration for less
to permit terminal escape sequences--specifically, that the -R option
either be passed to it or present in the LESS environment variable--is
not satisfied when the pager configuration for sensible-pager is used,
even when sensible-pager runs less, as it does by default in Ubuntu.

I further suspect that many, or perhaps all, 17.10 systems have this bug
in their default configuration (though it would only be noticed if users
install and run perldoc). This strongly resembles
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=735134. This bug may
be considered a regression, in that the problem had previously occurred
and was then prevented by the addition of this code in Perldoc.pm, which
is present in 16.04 but removed in 17.10 (see below for details):

    # fix visible escape codes in ToTerm output
    # https://bugs.debian.org/758689
    local $ENV{LESS} = defined $ENV{LESS} ? "$ENV{LESS} -R" : "-R";

The simplest workaround for this bug that I am aware of is to pass the
-t flag to perldoc. As in the workaround described in the bug report
here, the resulting formatting is readable but not as fancy as usual.

A *full* workaround is also possible, and is only slightly more
complicated. Telling perldoc explicitly that you want "less" by defining
the PAGER environment variable works:

    PAGER=less perldoc perlsyn

Otherwise, it finds sensible-pager first (see above), and appears not to
place -R in LESS (see below), because it does not know that the
sensible-pager shell script runs less.

The problem may also be avoided by ensuring that an environment variable
with the name LESS and a value that specifies the R option is present.
For example, this works:

    LESS=-R perldoc perlsyn

Or this may be preferred, because if you have a LESS environment
variable with other options, they will still be used (and if not, it has
the same effect as above):

    LESS="$LESS -R" perldoc perlsyn

Or you can pipe to less and pass -R:

    perldoc perlsyn | less -R

If these workarounds do not work for you (i.e., for the original author
of this bug report), then I might be mistaken in my belief that the bug
I am experiencing is the same as yours.

This bug does not appear to affect Ubuntu 16.04 LTS. It does not happen
on my Lubuntu 16.04 LTS (64-bit) system. Ubuntu 16.04 LTS has
"/usr/share/perl/5.22/Pod/Perldoc.pm" which uses this loop to open the
document in a pager:

    foreach my $pager (@pagers) {
        $self->aside("About to try calling $pager $output\n");
        if ($self->is_vms) {
            last if system("$pager $output") == 0;
        } else {
            # fix visible escape codes in ToTerm output
            # bugs.debian.org/758689
            local $ENV{LESS} = defined $ENV{LESS} ? "$ENV{LESS} -R" : "-R";
            last if system("$pager \"$output\"") == 0;
        }
    }

Ubuntu 17.10 has this corresponding loop, which no longer directly
attempts to modify the LESS environment variable in order to prevent
Debian Bug 758689 from occurring:

    foreach my $pager (@pagers) {
        $self->aside("About to try calling $pager $output\n");
        if ($self->is_vms) {
            last if system("$pager $output") == 0;
        } elsif($self->is_amigaos) {
            last if system($pager, $output) == 0;
        } else {
            my $formatter = $self->{'formatter_class'};
            if ( $formatter->can('pager_configuration') ) {
            $self->aside("About to call $formatter" . 
"->pager_configuration(\"$pager\")\n");
            $formatter->pager_configuration($pager, $self);
            }
            last if system("$pager \"$output\"") == 0;
        }
    }

** Bug watch added: Debian Bug tracker #735134
   https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=735134

** Bug watch added: Debian Bug tracker #758689
   https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=758689

** Attachment added: "Text displayed in the terminal when I ran "perldoc -D 
perlsyn""
   
https://bugs.launchpad.net/ubuntu/+source/perl/+bug/1734702/+attachment/5032746/+files/perldoc_-D_perlsyn.txt

-- 
You received this bug notification because you are a member of Ubuntu
Touch seeded packages, which is subscribed to perl in Ubuntu.
https://bugs.launchpad.net/bugs/1734702

Title:
  perldoc shows lots of escapes

Status in perl package in Ubuntu:
  Confirmed

Bug description:
  Fresh konsole:
  $ echo $TERM
  xterm-256color
  $ type perldoc
  perldoc is /usr/bin/perldoc
  $ dpkg -S /usr/bin/perldoc
  diversion by perl-doc from: /usr/bin/perldoc
  diversion by perl-doc to: /usr/bin/perldoc.stub
  perl, perl-doc: /usr/bin/perldoc
  $ echo $PAGER

  $ perldoc perlsyn

  (Now in pager:)

  ESC[1mNAMEESC[0m
      perlsyn - Perl syntax

  ESC[1mDESCRIPTIONESC[0m
      A Perl program consists of a sequence of declarations and statements which
  ...

  That's a lot of ESCapes.  PAGER=more gets me "2NAME2" and the like.

  $ locate perlsyn
  /usr/share/man/man1/perlsyn.1.gz
  /usr/share/man/man1/perlsynology.1.gz
  /usr/share/perl/5.26.0/pod/perlsyn.pod
  /usr/share/perl/5.26.0/pod/perlsynology.pod

  No cached files apparently.

  This works reasonably: TERM=none perldoc perlsyn | (TERM=vt100 less) -
  but looses the bolds etc.

  This works well: man perlsyn

  This also works as expected, showing bolds and stuff, but I find it 
impractical:
      perldoc perlsyn | cat

  So perldoc applies terminal appropriate escapes where it should not?

  ProblemType: Bug
  DistroRelease: Ubuntu 17.10
  Package: perl-doc 5.26.0-8ubuntu1
  ProcVersionSignature: Ubuntu 4.13.0-17.20-generic 4.13.8
  Uname: Linux 4.13.0-17-generic x86_64
  ApportVersion: 2.20.7-0ubuntu3.5
  Architecture: amd64
  CurrentDesktop: KDE
  Date: Mon Nov 27 15:23:57 2017
  EcryptfsInUse: Yes
  InstallationDate: Installed on 2017-07-18 (132 days ago)
  InstallationMedia: Kubuntu 17.04 "Zesty Zapus" - Release amd64 (20170412)
  PackageArchitecture: all
  SourcePackage: perl
  UpgradeStatus: Upgraded to artful on 2017-11-27 (0 days ago)

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/perl/+bug/1734702/+subscriptions

-- 
Mailing list: https://launchpad.net/~touch-packages
Post to     : touch-packages@lists.launchpad.net
Unsubscribe : https://launchpad.net/~touch-packages
More help   : https://help.launchpad.net/ListHelp

Reply via email to