Re: copy out of lynx, replace and paste

Tim Chase <[email protected]>
Newsgroups gmane.comp.web.lynx.devel
Message-ID <[email protected]>
On 2022-03-20 02:08, [email protected] wrote:
> what is best (easiest) solution for copy text out of lynx AND

Depends on the particulars of what you want.

a) If you want a subset of what's displayed on the screen, I'd reach
for tmux which allows you to copy sections of the display to a
clipboard and then pipe that content out elsewhere to a process that
makes the transformations you want:

  $ tmux
  (tmux)$ lynx example.com
  «control+B»[    # to start scrollback copy mode

with the content in the buffer, you can output it to a transformation
command like

  (tmux)$ tmux showb | sed '…'

b) If you want the entire rendered document you can save it locally
(usually bound to "p"rint by default which lets you save it to a
file, mail it to yourself, or a few other options).  Alternatively,
if your version of lynx was built with USE_EXTERNALS which you can
check by launching lynx with

  $ lynx LYNXCOMPILEOPTS:

and searching for "USE_EXTERNALS", you might be able to tweak your
EXTERN_PAGE settings to fire off a script on the current page.

> replace (in clipboard ?) all NL/CR followed by 3 spaces with 1
> space, bevor pasting it somewhere?

Once you have the rendered content that you want, either as a file or
as stdin, you can use any number of tools to transform it.  Here's an
awk one-liner that looks for all newlines followed by 3 spaces

 awk 'function p(){for (i=0;i<length(a);i++)printf("%s%s",i?"
 ":"",a[i]);print ""; delete a; a[0]=$0} {if (/   /)
 a[length(a)]=substr($0, 4); else p()}END{p()}'

which formats more neatly as the following script:

  #!/usr/bin/awk -f
   function p(){
    for (i=0; i<length(a); i++) {
      # join them together with a single space
      printf("%s%s", i?" ":"", a[i])
    }
    # emit a newline
    print ""
    delete a
    a[0] = $0
  }
  {
    # accrue subsequent lines that begin with 3 spaces
    if (/   /) a[length(a)]=substr($0, 4)
    else p()
  }
  END{
    p()
  }

You didn't mention what you want to happen if a line starts with
*more* than three spaces, so the implementation above strips the 3
spaces and leaves any additional leading-spaces.

You can then pipe the printed file or the `tmux showb` output to this
script to reformat it as you describe.

-tim
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.