From da8759bb419b453a88df9f16c3d9e08d22965e90 Mon Sep 17 00:00:00 2001 From: Sergei Zimmerman Date: Sun, 17 Aug 2025 20:31:34 +0300 Subject: [PATCH 1/2] libcmd: Fix rendering of absolute URLs in markdown lowdown >= 1.4.0 supports LOWDOWN_TERM_NORELLINK to render absolute urls. This is useful, since we want to keep links to web resources and such intact. --- src/libcmd/markdown.cc | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/libcmd/markdown.cc b/src/libcmd/markdown.cc index 09cd9c1fb..c3341da73 100644 --- a/src/libcmd/markdown.cc +++ b/src/libcmd/markdown.cc @@ -37,9 +37,17 @@ static std::string doRenderMarkdownToTerminal(std::string_view markdown) .vmargin = 0, # endif .feat = LOWDOWN_COMMONMARK | LOWDOWN_FENCED | LOWDOWN_DEFLIST | LOWDOWN_TABLES, - .oflags = LOWDOWN_TERM_NOLINK, + .oflags = +# if HAVE_LOWDOWN_1_4 + LOWDOWN_TERM_NORELLINK // To render full links while skipping relative ones +# else + LOWDOWN_TERM_NOLINK +# endif }; + if (!isTTY()) + opts.oflags |= LOWDOWN_TERM_NOANSI; + auto doc = lowdown_doc_new(&opts); if (!doc) throw Error("cannot allocate Markdown document"); @@ -65,7 +73,7 @@ static std::string doRenderMarkdownToTerminal(std::string_view markdown) if (!rndr_res) throw Error("allocation error while rendering Markdown"); - return filterANSIEscapes(std::string(buf->data, buf->size), !isTTY()); + return std::string(buf->data, buf->size); } std::string renderMarkdownToTerminal(std::string_view markdown) From 3ffeed497a8401a18ea6f222afde5c7024749d15 Mon Sep 17 00:00:00 2001 From: Sergei Zimmerman Date: Sun, 17 Aug 2025 20:49:50 +0300 Subject: [PATCH 2/2] packaging: Update lowdown to 2.0.2 Nixpkgs has been updated with this version and seems like next stable nixos release will ship with lowdown 2.0. --- packaging/dependencies.nix | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/packaging/dependencies.nix b/packaging/dependencies.nix index 17ba06b4d..5f1dc55e6 100644 --- a/packaging/dependencies.nix +++ b/packaging/dependencies.nix @@ -64,6 +64,18 @@ scope: { NIX_CFLAGS_COMPILE = "-DINITIAL_MARK_STACK_SIZE=1048576"; }); + lowdown = pkgs.lowdown.overrideAttrs (prevAttrs: rec { + version = "2.0.2"; + src = pkgs.fetchurl { + url = "https://kristaps.bsd.lv/lowdown/snapshots/lowdown-${version}.tar.gz"; + hash = "sha512-cfzhuF4EnGmLJf5EGSIbWqJItY3npbRSALm+GarZ7SMU7Hr1xw0gtBFMpOdi5PBar4TgtvbnG4oRPh+COINGlA=="; + }; + nativeBuildInputs = prevAttrs.nativeBuildInputs ++ [ pkgs.bmake ]; + postInstall = + lib.replaceStrings [ "lowdown.so.1" "lowdown.1.dylib" ] [ "lowdown.so.2" "lowdown.2.dylib" ] + prevAttrs.postInstall; + }); + # TODO Hack until https://github.com/NixOS/nixpkgs/issues/45462 is fixed. boost = (pkgs.boost.override {