Skip to content

fix(cli): respect preserve-new-lines flag in CLI renderer - #985

Open
syf2211 wants to merge 1 commit into
charmbracelet:mainfrom
syf2211:fix/858-preserve-new-lines-cli
Open

syf2211 wants to merge 1 commit into
charmbracelet:mainfrom
syf2211:fix/858-preserve-new-lines-cli

Conversation

@syf2211

@syf2211 syf2211 commented Jun 25, 2026

Copy link
Copy Markdown

Summary

CLI mode always passed glamour.WithPreservedNewLines(), ignoring the -n flag and config default.

Motivation

TUI mode already respects preserveNewLines in ui/pager.go, but executeCLI forced preserved newlines for every render. That made CLI output differ from TUI and contributed to glow #858 list rendering complaints.

Changes

  • Build CLI glamour options conditionally, matching TUI behavior
  • Add TestCLIPreserveNewLinesFlag to verify the default path collapses soft breaks

Tests

  • go test ./... -count=1 — pass

Notes

Full fix for list soft breaks inside list items requires the companion glamour change in charmbracelet/glamour#580 and a follow-up dependency bump once released.

Related to #858

CLI mode unconditionally applied glamour.WithPreservedNewLines(), ignoring
the -n flag and config default. Match TUI behavior by only enabling the
option when preserveNewLines is true.

Related to charmbracelet#858
@yndajas

yndajas commented Sep 4, 2026

Copy link
Copy Markdown

Encountered this issue and having to unwrap the lines with pandoc before passing to glow

yndajas added a commit to yndajas/dotfiles that referenced this pull request Sep 4, 2026
Markdown treats a newline inside a paragraph as a space, so a renderer
normally reflows the paragraph to fit the width. glamour does too, but
glow 3.0.0 hardcodes `WithPreservedNewLines()` in its CLI render path,
which turns that off and wraps each source line on its own. The
`-n`/`--preserve-new-lines` flag is meant to control this, and is
honoured in TUI mode, but the CLI path ignores it, so no setting
helps

The result is that a source line longer than the render width wraps
in place and leaves a short remainder on its own line, and a source
line with room to spare never pulls words up from the line below

An unmerged PR fixes the CLI path, and a related open issue covers
the same failure in list items, which needs a companion glamour
change too:
charmbracelet/glow#985
charmbracelet/glow#858

`pandoc --wrap=none` rejoins each paragraph into a single line before
glow sees it, so the source line breaks are gone by the time glow
wraps. Deliberate line breaks, the ones marked by two trailing
spaces, are kept

The plain `glow` alias is untouched and remains the way to browse a
directory or the TUI. `=(...)` hands glow a temp file rather than a
pipe, leaving stdin free for the pager

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants