cmark icon indicating copy to clipboard operation
cmark copied to clipboard

Add support for ANSI output format

Open tribals opened this issue 3 years ago • 8 comments

Currently, there is man output format (-t, --to). It can be viewed using something like

$ cmark -t man < README.md | man -l -

Unfortunately, produced output is absolutely unreadable, unless it follows closely man pages conventions, eg, declares all required sections (NAME, SYNOPSIS, etc). This is very unfortunate situation when most of README's you're reading is from public git repositories.

However, displaying nicely formatted, colored Markdown in terminal is possible, using ANSI "formatting" sequences. Here is example of such representation:

image

(Colors are a bit weird, but this is just illustration)

So, it would be nice to have ANSI as supported output format. What do you think?

tribals avatar Sep 27 '20 21:09 tribals

I implemented something like this in the commonmark executable provided by my Haskell commonmark library (jgm/commonmark-hs, see commonmark-cli).

commonmark --highlight

It would certainly be possible to add something like that to cmark, though it's not a priority for me.

jgm avatar Sep 27 '20 23:09 jgm

Am I reading that right that you all are open to a contribution from this? I would port over https://github.com/kristapsdz/lowdown/blob/master/term.c

This would allow Nix to switch to cmark entirely and drop lowdown, which i would like.

Ericson2314 avatar Jan 19 '24 13:01 Ericson2314

I'm happy with mentioned commonmark executable.

😊

tribals avatar Jan 19 '24 14:01 tribals

I need a library version, so I am hoping that the commonmark maintainers are happy with that :)

Ericson2314 avatar Jan 19 '24 15:01 Ericson2314

I'd be open to it, but I'd want to be sure that the lighter-weight option of using man output isn't sufficient.

Here's what I see when I generate and view the man output from this project's README.md:

image

That looks fine to me, except for the ()s at the top. Those could be replaced by something else by using a template that specifies a .TH macro. (And we could build this into the library in principle.)

Small note: commonmark-hs's command line utility does something different from the what is being proposed here, I think. It doesn't render the AST to the terminal, which might introduce semantically insignificant changes in the text, instead, it renders the original file, exactly as it appears, but with highlighting added.

jgm avatar Jan 19 '24 17:01 jgm

@jgm I actually don't have any issue with the the man output per-se. Our use case includes having a self-contained nix executable directly output some pretty-pretty documentation on the terminal without relying on other programs. It's the self-contained-ness that matters more than what the exact result looks like.

(That said, FWIW our current terminal rendering from lowdown does some colors and whatnot beyond what man does.)

Ericson2314 avatar Jan 20 '24 00:01 Ericson2314

Our use case includes having a self-contained nix executable directly output some pretty-pretty documentation on the terminal without relying on other programs.

Personally I want to state that such style of documentation for CLI tools is worst-case - it is neither man nor help, you're forcing user to pipe output to pager and leaving out man convetions (no one interested in following them because "help files" is written in Markdown, and typical markdown user is rarely even avare of existence of manual pages, and their conventions).

tribals avatar Jan 20 '24 08:01 tribals

@tribals I didn't event these requirements :). I'm just trying to swap up one markdown library for another one so I can (a) programmatically create docs (b) get windows support, without loosing features.

Ericson2314 avatar Jan 20 '24 15:01 Ericson2314