Saturday, December 21, 2024
HomeiOS DevelopmentPiping stdout and stderr to Preview — Erica Sadun

Piping stdout and stderr to Preview — Erica Sadun

[ad_1]

Some time again, I wrote about how helpful it was to redirect a person web page into Preview. This lets you maintain the person web page open, search it, and customarily have a greater person expertise than combating extra (or much less) to navigate via the knowledge offered there.

man -t apropos | open -fa Preview

Just lately, somebody requested me about extra trendy command line interplay, particularly, instructions that use --help or comparable to supply their documentation. May that data be opened in Preview as nicely.

So I placed on my pondering hat and set to work. The primary command line utility I made a decision to work with was screencapture as a result of I’ve been utilizing it pretty closely over the previous few days. Nonetheless, it seems that Apple did not construct in an precise assist system past man. It was a poor option to attempt to use to render however I made a decision to maintain plugging away at it as a result of I needed to have the ability to pipe each stdoutand stderr to Preview.

What I got here up with seemed one thing like this, multi function line in fact:

bash -c "screencapture -? &> 
    $TMPDIR/previewrendertext.txt; 
    /usr/sbin/cupsfilter -i textual content/plain 
        -D $TMPDIR/previewrendertext.txt 
        2> /dev/null | 
    open -fa Preview"

This all depends on cupsfilter, which might convert a file of textual content to a printable type, which simply occurs to be readable by Preview as a PDF.

I’m doing fairly a little bit of conglomeration, becoming a member of the stderr and stdout streams utilizing &> and saving them into my Mac’s $TMPDIR. That file is cleaned up by the -D choice from cupsfilter.

I additionally am eradicating the incessant debug messages from cupsfilter by redirecting them to /dev/null earlier than opening the print output in Preview.

Please notice that I’m nonetheless utilizing tcsh/zsh over bash on my principal system, in order that definitely impacts issues. Since I wanted just a little of the bash nuance, I made a decision to run all of it squished as a single -c command. (I’m positive if I spent sufficient time, I might do all of it in csh however I actually didn’t need to spend that point.)

As you may see within the earlier screenshot, an older utility meant for man output doesn’t actually look all that sizzling shoved into Preview through cupsfilter, particularly with line lengths. There’s additionally no good groffing and troffing to make all the pieces fairly, the way in which you get with man:

So how might would this kludge work with a contemporary command-line app, resembling these produced utilizing the Swift Argument Parser (https://github.com/apple/swift-argument-parser)? First, I constructed a utility that will let me run any command (nicely, as long as it was correctly quoted) with out having to kind all the small print out every time I ran it:

#! /bin/bash

$@ &> $TMPDIR/previewrendertext.txt ; /usr/sbin/cupsfilter -i textual content/plain -D $TMPDIR/previewrendertext.txt 2> /dev/null | open -fa Preview

This allowed me to name preview "now --help" to redirect the usual assist message from my now utility (https://github.com/erica/now)  to Preview. Yeah, initially I needed to simply pipe stuff into it however I couldn’t work out the right way to get the stderr and the stdout piped collectively right into a single stream, not to mention convert them right into a file type as a result of cupsfilter doesn’t know or do pipes.

It’s fairly readable and well-formatted as a result of automated configuration that the Swift Argument Parser supplies from my code nevertheless it simply feels, you recognize, very very plain.

So I went forward and tried to see what would occur if I groffed it up just a little by passing it via /usr/bin/groff -Tps -mandoc -c as a substitute of utilizing cupsfilter:

bash -c "now --help &> 
    $TMPDIR/previewrendertext.txt; 
    /usr/bin/groff -Tps -mandoc -c 
    $TMPDIR/previewrendertext.txt" | 
    open -fa preview

And it’s…fairly meh. I attempted mandoc, mdoc, me, mm, ms, and www codecs. All of them got here out the identical, and not one of the SAP tabs actually labored. I feel it seems to be much more “manny” than the straight printout however the indentation actually bugged:

I made a decision to cease at about this level as there’s actually a time when additional effort simply isn’t price additional funding — so I might throw it on the market and see if this was of curiosity to anybody else.

Let me know.

[ad_2]

RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments