Powershell: Showing markdown with new commands is harder than it should be

Created on 23 Jul 2018  路  6Comments  路  Source: PowerShell/PowerShell

When I first tried to use the new markdown commands to show a markdown file, it seemed obvious to me that I'd just run:

# Expected:
Show-Markdown .\README.md

but that doesn't work. You have to execute this instead:

# Actual:
ConvertFrom-Markdown -path .\README.md -AsVT100EncodedString | Show-Markdown

It seems to me that Show-Markdown should have a Path parameter set so that you can simply specify the path to a markdown file to be shown.

Environment data

> $PSVersionTable
Name                           Value
----                           -----
PSVersion                      6.1.0-preview.4
PSEdition                      Core
GitCommitId                    6.1.0-preview.4
OS                             Microsoft Windows 10.0.17134
Platform                       Win32NT
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
WSManStackVersion              3.0
Area-Cmdlets-Utility Issue-Enhancement Resolution-Fixed

Most helpful comment

Agreed. I think this is not intuitive and is probably a leaky abstraction. The fact that markdown ascii/utf8 gets converted to ecma48 / vt100/102/220 control sequences seems like a detail nobody should know nor care about. Note that the console isn't even strictly vt100 (it also supports colour which isn't part of vt100).

I'd suggest keeping the convertfrom-markdown cmdlet and shipping show-markdown as a wrapper function that invokes it and dumps out the VT string. Please add proper positional hints to the parameters too.

All 6 comments

In the same vein I would expect the following to work

'# My Header' | Show-Markdown

When instead this is required

'# My Header' | ConvertFrom-Markdown -AsVT100EncodedString | Show-Markdown

Agreed. I think this is not intuitive and is probably a leaky abstraction. The fact that markdown ascii/utf8 gets converted to ecma48 / vt100/102/220 control sequences seems like a detail nobody should know nor care about. Note that the console isn't even strictly vt100 (it also supports colour which isn't part of vt100).

I'd suggest keeping the convertfrom-markdown cmdlet and shipping show-markdown as a wrapper function that invokes it and dumps out the VT string. Please add proper positional hints to the parameters too.

Agreed: if ConvertFrom has a -AsAnsiEncodedString then we should not need Show

Show-Markdown also supports HTML rendered markdown

Some more comments from a blogger here about the quirks and annoyances: https://ephos.github.io/posts/2018-8-1-PowerShell-Markdown

Imo the VT encoded string should not be exposed at all. Colorising is a formatting concern, and formatting belongs into Format.ps1xml files, not into pipeline objects and properties.

Was this page helpful?
0 / 5 - 0 ratings