linux-man.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Alejandro Colomar <alx.manpages@gmail.com>
To: Dirk Gouders <dirk@gouders.net>, linux-man@vger.kernel.org
Cc: help-texinfo@gnu.org
Subject: Re: Playground pager lsp(1)
Date: Wed, 5 Apr 2023 01:45:46 +0200	[thread overview]
Message-ID: <073413e2-7d35-f0d7-26eb-f66908d7af6a@gmail.com> (raw)
In-Reply-To: <ghbkkgo8x8.fsf@gouders.net>


[-- Attachment #1.1: Type: text/plain, Size: 9290 bytes --]

Hi Dirk.

On 3/25/23 21:47, Dirk Gouders wrote:
> Hi Alejandro,
> 
> first of all, chances are that you consider this post as spam, because
> this list is about linux manual pages and not pagers.

No, I don't.

>  In that case
> please accept my apologies and ignore this post.
> 
> My reasoning was that readers here have some interest in manual pages
> and therefore probably also in pagers that claim to "understand" manual
> pages.  My hope is that even if you consider this post inappropriate you
> will perhaps suggest some more appropriate place for such discussion.
> 
> Not long ago, I noticed a discussion [1] about what pagers can and
> cannot do.  That was interesting to me, because I am currently playing
> with a pager that claims to have a focus on manual pages.
> 
> I will try to not waste your time and attach the manual page and a link
> to a short (3:50) demo video.  To me it is absolutely OK should you just
> ignore this spam post, but perhaps you find lsp(1) interesting enough
> for further discussion.

If you had a Debian package, I might try it :)

Or maybe a Makefile to build from source...  What is this meson.build?

> 
> Best regards,
> 
> Dirk
> 
> [1] https://www.spinics.net/lists/linux-man/index.html#24494
> [2] https://youtu.be/syGT4POgTAw
> 
> LSP(1)                           User commands                          LSP(1)
> 
> NAME
>        lsp - list pages (or least significant pager)
> 
> SYNOPSIS
>        lsp [options] [file_name]...
> 
>        lsp -h
> 
>        lsp -v
> 
> DESCRIPTION
>        lsp is a terminal pager that assists in paging through data, usually
>        text — no more(1), no less(1).

I'd say it does quite a lot more than paging...  We could say this is some
info(1) equivalent for manual pages.

With the benefit that you don't need to implement such a system from scratch,
but just reusing the existing tools (apropos, man, whatis, ...).  It seems
something like what I would have written if I had to implement info(1) from
scratch.  I wish GNU guys had thought of this instead of developing their
own incompatible system.

> 
>        The given files are opened if file names are given as options.
>        Otherwise lsp assumes input from stdin and tries to read from there.
> 
>        In addition to it’s ability to aid in paging through text files lsp has
>        limited knowledge about manual pages and offers some help in viewing
>        them:
> 
>        •   Manual pages usually refer to other manual pages and lsp allows to
>            navigate those references and to visit them as new files with the
>            ability to also navigate through all opened manual pages or other
>            files.

Out of curiosity, is this implemented with heuristics?  Or do you rely on
semantic mdoc(7) macros?

If it's the first, how do you handle exit(1)?  Is it a reference, or is it
just code (with the meaning exit(EXIT_FAILURE))?

If it's the second, I guess it doesn't support that in man(7), right?  At
least until MR is released.

> 
>            Here, lsp tries to minimize frustration caused by unavailable
>            references and verifies their existance before offering them as
>            references that can be visited.

Do you mark these as broken references?  It is interesting to know that
there's a reference which you don't have installed.  It may prompt you to
install it and read it.  When I see a broken reference, I usually find it
with `apt-file find man3/page.3`, and then install the relevant package.

> 
>        •   In windowing environments lsp does complete resizes when windows
>            get resized. This means it also reloads the manual page to fit the
>            new window size.

Good.  This I miss it in less(1) often.  Not sure if they had any strong
reason to not support that.

> 
>        •   Search for manual pages using apropos(1); in the current most basic
>            form it lists all known manual pages ready for text search and
>            visiting referenced manual pages.

What does it bring that `apropos * | less` can't do?  If you're going the
of info(1) with full-blown system, it seems reasonable, but I never really
liked all that if it's just a new terminal and a command away from me.

> 
>        •   lsp has an experimental TOC mode.
> 
>            This is a three-level folding mode trying to list only section and
>            sub-section names for quick navigation in manual pages.

Nice, and this an important feature missing feature in info(1), as I
reported recently.  :)  Maybe they are interested in something similar.

> 
>            The TOC is created using naive heuristics which works well to some
>            extend, but it might be incomplete. Users should keep that in mind.

I guess the heuristics are just `^[^ ]` for SH and `^   [^ ]` for SS, right?
I tipically use something similar for searching for command flags, and as
you say, these just work.

Cheers,
Alex

> 
> OPTIONS
>        All options can be given on the command line or via the environment
>        variable LSP_OPTIONS. The short version of toggles can also be used as
>        commands, e.g. you can input -i while paging through a file to toggle
>        case sensitivity for searches.
> 
>        -a, --load-apropos
>            Create an apropos pseudo-file.
> 
>        -c, --chop-lines
>            Toggle chopping of lines that do not fit the current screen width.
> 
>        -h, --help
>            Output help and exit.
> 
>        -i, --no-case
>            Toggle case sensitivity in searches.
> 
>        -I, --man-case
>            Turn on case sensitivity for names of manual pages.
> 
>            This is used for example to verify references to other manual
>            pages.
> 
>        -l, --log-file
>            Specify a path to where write debugging output.
> 
>        -n, --line-numbers
>            Toggle visible line numbers.
> 
>        -s, --search-string
>            Specify an initial search string.
> 
>        -v, --version
>            Output version information of lsp and exit.
> 
>        --no-color
>            Disable colored output.
> 
>        --reload-command
>            Specify command to load manual pages. Default is man.
> 
>        --verify-command
>            Specify command to verify the existance of references. Default is
>            man -w.
> 
>        --verify-with-apropos
>            Use the entries of the apropos pseudo-file for validation of
>            references.
> 
> COMMANDS
>        Pg-Down / Pg-Up
>            Forward/backward one page, respectively.
> 
>        Key-Down / Key-Up / Mouse-Wheel down/up
>            Forward/backward one line, respectively.
> 
>        CTRL-l
>            In search mode: bring current match to top of the page.
> 
>        ESC
>            Turn off current highlighting of matches.
> 
>        TAB / S-TAB
>            Navigate to next/previous reference respectively.
> 
>        ENTER
> 
>            •   If previous command was TAB or S-TAB:
> 
>                Open reference at point, i.e. call `man <reference>'.
> 
>            •   In TOC-mode:
> 
>                Go to currently selected position in file.
> 
>        /
>            Start a forward search for regular expression.
> 
>        ?
>            Start a backward search for regular expression.
> 
>        B
>            Change buffer; choose from list.
> 
>        a
>            Create a pseudo-file with the output of `apropos .'.
> 
>            That pseudo-file contains short descriptions for all manual pages
>            known to the system; those manual pages can also be opened with TAB
>            / S-TAB and ENTER commands.
> 
>        b
>            Backward one page
> 
>        c
>            Close file currently paged.
> 
>            Exits lsp if it was the only/last file being paged.
> 
>        f
>            Forward one page
> 
>        h
>            Show online help with command summary.
> 
>        m
>            Open another manual page.
> 
>        n
>            Find next match in search.
> 
>        p
>            Find previous match in search.
> 
>        q
> 
>            •   Exit lsp.
> 
>            •   In TOC-mode: switch back to normal view.
> 
>            •   In help-mode: close help file.
> 
> ENVIRONMENT
>        LSP_OPTIONS
>            All command line options can also be specified using this variable.
> 
>        LSP_OPEN / LESSOPEN
>            Analogical to less(1), lsp supports an input preprocessor but
>            currently just the two basic forms:
> 
>            One that provides the path to a replacement file and the one that
>            writes the content to be paged to a pipe.
> 
> SEE ALSO
>        apropos(1), less(1), man(1), more(1), pg(1)
> 
> BUGS
>        Report bugs at https://github.com/dgouders/lsp
> 
> alpha-1.0e-42                     03/25/2023                            LSP(1)

-- 
<http://www.alejandro-colomar.es/>
GPG key fingerprint: A9348594CE31283A826FBDD8D57633D441E25BB5

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

  reply	other threads:[~2023-04-04 23:46 UTC|newest]

Thread overview: 73+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-25 20:37 Playground pager lsp(1) Dirk Gouders
2023-03-25 20:47 ` Dirk Gouders
2023-04-04 23:45   ` Alejandro Colomar [this message]
2023-04-05  5:35     ` Eli Zaretskii
2023-04-06  1:10       ` Alejandro Colomar
2023-04-06  8:11         ` Eli Zaretskii
2023-04-06  8:48           ` Gavin Smith
2023-04-07 22:01           ` Alejandro Colomar
2023-04-08  7:05             ` Eli Zaretskii
2023-04-08 13:02               ` Accessibility of man pages (was: Playground pager lsp(1)) Alejandro Colomar
2023-04-08 13:42                 ` Eli Zaretskii
2023-04-08 16:06                   ` Alejandro Colomar
2023-04-08 13:47                 ` Colin Watson
2023-04-08 15:42                   ` Alejandro Colomar
2023-04-08 19:48                   ` Accessibility of man pages Dirk Gouders
2023-04-08 20:02                     ` Eli Zaretskii
2023-04-08 20:46                       ` Dirk Gouders
2023-04-08 21:53                         ` Alejandro Colomar
2023-04-08 22:33                           ` Alejandro Colomar
2023-04-09 10:28                       ` Ralph Corderoy
2023-04-08 20:31                     ` Ingo Schwarze
2023-04-08 20:59                       ` Dirk Gouders
2023-04-08 22:39                         ` Ingo Schwarze
2023-04-09  9:50                           ` Dirk Gouders
2023-04-09 10:35                             ` Dirk Gouders
     [not found]                 ` <87a5zhwntt.fsf@ada>
2023-04-09 12:05                   ` Compressed man pages (was: Accessibility of man pages (was: Playground pager lsp(1))) Alejandro Colomar
2023-04-09 12:17                     ` Alejandro Colomar
2023-04-09 18:55                       ` G. Branden Robinson
2023-04-09 12:29                     ` Colin Watson
2023-04-09 13:36                       ` Alejandro Colomar
2023-04-09 13:47                         ` Compressed man pages Ralph Corderoy
2023-04-12  8:13                     ` Compressed man pages (was: Accessibility of man pages (was: Playground pager lsp(1))) Sam James
2023-04-12  8:32                       ` Compressed man pages Ralph Corderoy
2023-04-12 10:35                         ` Mingye Wang
2023-04-12 10:55                           ` Ralph Corderoy
2023-04-12 13:04                       ` Compressed man pages (was: Accessibility of man pages (was: Playground pager lsp(1))) Kerin Millar
2023-04-12 14:24                         ` Alejandro Colomar
2023-04-12 18:52                           ` Mingye Wang
2023-04-12 20:23                             ` Compressed man pages Alejandro Colomar
2023-04-13 10:09                             ` Ralph Corderoy
2023-04-07  2:18         ` Playground pager lsp(1) G. Branden Robinson
2023-04-07  6:36           ` Eli Zaretskii
2023-04-07 11:03             ` Gavin Smith
2023-04-07 14:43             ` man page rendering speed (was: Playground pager lsp(1)) G. Branden Robinson
2023-04-07 15:06               ` Eli Zaretskii
2023-04-07 15:08                 ` Larry McVoy
2023-04-07 17:07                 ` man page rendering speed Ingo Schwarze
2023-04-07 19:04                 ` man page rendering speed (was: Playground pager lsp(1)) Alejandro Colomar
2023-04-07 19:28                   ` Gavin Smith
2023-04-07 20:43                     ` Alejandro Colomar
2023-04-07 16:08               ` Colin Watson
2023-04-08 11:24               ` Ralph Corderoy
2023-04-07 21:26           ` reformatting man pages at SIGWINCH " Alejandro Colomar
2023-04-07 22:09             ` reformatting man pages at SIGWINCH Dirk Gouders
2023-04-07 22:16               ` Alejandro Colomar
2023-04-10 19:05                 ` Dirk Gouders
2023-04-10 19:57                   ` Alejandro Colomar
2023-04-10 20:24                   ` G. Branden Robinson
2023-04-11  9:20                     ` Ralph Corderoy
2023-04-11  9:39                     ` Dirk Gouders
2023-04-17  6:23                       ` G. Branden Robinson
2023-04-08 11:40               ` Ralph Corderoy
2023-04-05 10:02     ` Playground pager lsp(1) Dirk Gouders
2023-04-05 14:19       ` Arsen Arsenović
2023-04-05 18:01         ` Dirk Gouders
2023-04-05 19:07           ` Eli Zaretskii
2023-04-05 19:56             ` Dirk Gouders
2023-04-05 20:38             ` A less presumptive .info? (was: Re: Playground pager lsp(1)) Arsen Arsenović
2023-04-06  8:14               ` Eli Zaretskii
2023-04-06  8:56                 ` Gavin Smith
2023-04-07 13:14                 ` Arsen Arsenović
2023-04-06  1:31       ` Playground pager lsp(1) Alejandro Colomar
2023-04-06  6:01         ` Dirk Gouders

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=073413e2-7d35-f0d7-26eb-f66908d7af6a@gmail.com \
    --to=alx.manpages@gmail.com \
    --cc=dirk@gouders.net \
    --cc=help-texinfo@gnu.org \
    --cc=linux-man@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).