于 Rust 之 CLI 生态,暗藏疫疠。其状:参考文本,读之令人疑色盲;报错信息,平直如板,可塞门下;而文档之文采,逊于市井收据。然今之终端模拟器,莫不备粗体、斜体、色彩及 Unicode 绘框符。其间隔,终端 所能,与所不能,相去甚远。显之,且多数CLI工具容显之,其广度堪比大峡谷,其深则类马里亚纳海沟之漠视于用户.
Marcli此隙今合矣。取CommonMark Markdown,予饰ANSI之终端显。尔撰Markdown,尔之用户睹文采斐然。其意尽于此,足矣,非多言也.

其何为
Marcli解Markdown于comrak — 此解析器亦驱动GitHub之渲染,遍历AST,为每支持之元素生成ANSI转义序列。代码围栏内之语法高亮,则赖syntect为之。 — 语法同 Sublime Text 之理。无 Pygments 之唤,无运行时之载,无配置之繁。唯简而用 — 此理,他生态系似视之为激也。
一函数之唤:
let output = marcli::render("# Hello\n\nSome **bold** text.", &Default::default());
println!("{}", output);此乃典型之公开 API。函数 render 受 Markdown 之文,及 RenderOptions 之构,返String 蕴含 ANSI 字符序列。无「建造者」模式,无需链式调用十七次。无待预实现之特质。无潜藏于依赖树中、伺机吞噬尔之程序集之异步运行时。
支持之要素
Marcli 处理 CommonMark 全规范及数项扩展:
标题 — 一级标题呈黄色加粗,二级标题呈蓝色加粗,三级及以下呈白色加粗。三级视觉层级,无一行配置。
文本格式 — 加粗、斜体、删除线及代码格式,各具ANSI风格。
项目符号列表 — 以三角形标记(▸)代之传统ASCII连字符。细微处,可读性竟有非比寻常之提升。
编号之列 — 以圈数之符(①,②,③,…)列至二十项。逾二十则括号内记数。虽未闻有怨,然亦无人于神志清明时列二十一项之列。
括围之码块 — 依Unicode符绘之框,题语言之名。言其语,则语法之照自启。
引言 — 左列微暗之竖画,异于周遭文,无狂澜之态。
表 — 符号绘制的完整框架,列对齐正确(左对齐、右对齐、居中对齐)。标题加粗显示。
任务清单 — 带复选框的标记(☑ / ☐)。
主题分隔符 — 符号绘制的暗淡水平线。
链接 — 文以蓝字加粗,其下 URL 以淡字显示.
图像 — 文以括号内 URL 标注替代文,盖因终端,纵我辈竭力,犹非图像阅览之器.
此非贫者之Subset。此乃明智之人欲于终端显示者,亦无余事。
语法高亮,无需配置而能运作
围栏之码,标明其言,自能映光于内置语法之Syntect。Rust、Python、Elixir、JavaScript、Go、C、SQL、TOML、YAML,乃至Markdown,凡Syntect所识之语,Marcli必映其光。若不识,则绘为素文,同框而显。无陨、无警、无损经验,唯码无色。此革命之念「不陨于未知之入」,产业趋之,似若地质之变。
fn main() {
let md = "```rust\nfn greet(name: &str) {\n println!(\"Hello, {}!\", name);\n}\n```";
let output = marcli::render(md, &Default::default());
println!("{}", output);
}要旨顏色一體,行文顏色殊異,註解淡雅而斜體顯之,函名突出於背景。自TextMate範疇至ANSI序列之映射內建,涵蓋諸要旨:要旨、行文、數字、註解、運算符、名稱、存儲修飾、實體名、支援宏、常數、變量及差異標記。每類皆有合宜之默認意義,皆可更易之。
可全然熄灭语法之辉:
let mut theme = marcli::Theme::default();
theme.syntax_highlight = false;
let opts = marcli::RenderOptions { theme, ..Default::default() };色之全调,可藉TOML细调:
Marcli之显,其形其色,悉由结构所掌Theme:標題之色、列表之記、碼塊之框、表格之符、語法高亮之符式、主題之分界寬、引文之冠——皆備。其預設之值合理,然若需企業之色或高對比之題以利無礙,汝但改易所謂之項,其餘弗搖。Marcli非是之庫,變一參數,不須自頭至尾重構配置,低語「整體」之謂也。
主题自TOML文件载入:
let theme = marcli::Theme::load(".marcli.toml").unwrap_or_default();
let opts = marcli::RenderOptions { theme, ..Default::default() };
let output = marcli::render(markdown, &opts);部分TOML文件仅覆写指定字段;其余皆循默认。未知键名默然无视,故主题得与未来版本相容。
主题之制非临时权宜,非以feature-flags逆施。此乃架构。渲染器无ANSI硬编码序列——每式皆自结构中读得。Theme渲染之际。此谓可生。全然无修饰结论,将所有样式置于空行,或调整输出以适应特定终端之能,仅更易序列。设计之明,令人讶异,何以须释之。
xterm.js及网页终端之CRLF支援
若尔CLI之器亦能于网终端运作xterm.js,譬如之,换行之序亦有所据。Marcli可设行移之次序。
let opts = marcli::RenderOptions {
newline: "\r\n".into(),
..Default::default()
};
let output = marcli::render(markdown, &opts);每行内之换行——于列表元素间,于代码块内,于段落间——皆用所设序列。无任何后处理之正则。无任何「可替」。\n乃\r\n 而祷之». 构造之正,适者,令若干匠者感若文化之震.
去 ANSI 以得纯文.
间或需结构之呈,无色 — 为记事,为导于文,为工具之助,其受转义序列所困。选项 escape_sequences 解此:
let opts = marcli::RenderOptions {
escape_sequences: false,
..Default::default()
};
let output = marcli::render(markdown, &opts);
// output содержит структурированный текст
// с маркерами и отступами, но без ANSI-кодовMarcli亦导出strip_ansi为公函数,若需清除任意文本之转义序列:
let plain = marcli::strip_ansi(some_ansi_string);依赖历史
Marcli依于六库:comrak(Markdown解析),syntect(语法高亮),serde及toml(主题序列化),regex(ANSI移除)与once_cell(惰性静态文件)。诸般功能,若可,皆已禁用。无tokio。无hyper。无tower。无serde_json。无组合爆炸之feature-旗幟。无超乎serde所需之过程式宏。
。依本意,依赖树甚狭。CLI之器,增Marcli以渲染其出。--help 或诊断错误,非骤然继承HTTP客户端与TLS栈。于Rust之世,添一日期格式化之crates,常引半数网络栈随之,此诚值得特记——或,举杯香槟庆之。
何故择Marcli,而非他选?
Rust之生态,于终端之风格化输出,有多种法门,各司其职。然弊病在于,多数之法,非解汝之困也。
所谓“染色”之工具(如colored、owo-colors、ansi_term),者,笔也。可染行文之色。不损结构,不治列次,不呈表格,不亮代码。若内容已具结构,则格式之理,悉由君自为。Marcli取无结构Markdown,而生全然结构之终端显文。此乃全然不同之抽象层级。较之二者,犹若问锤与屋孰优。
TUI框架(如ratatui、tui-rs)者,乃终端界面之完备工具也。其掌管布局、组件、事件循环、替代屏幕缓冲。若尔欲构交互之应用,此乃上佳之选。若尔欲印风格之手册而退,此实钝器也。Marcli,仅如文具之钮。无求于过,谢天谢地。
termimad — 亦为近便之选。亦能于终端渲染 Markdown。然 termimad 乃用自造之解析器(与 CommonMark 不相容),具异样(且更为幽晦)之主题模型,复不供 syntect 之语法着色。Marcli 则以 comrak 为解析之基(CommonMark,与 GitHub 相合),以 syntect 为语法着色之助(Sublime Text 之文法),且以平直可序列之结构显其视域之每一参数。Theme,若尔重合规之合、可设之能——择之明矣。
mdcat,乃独行之令符,非庖丁之器也。尔不可纳诸己之合二,而唤render()。其或行若外器,或需载己之合二于用者之机。Marcli,乃庖丁之器:纳之。Cargo.toml,呼其函数,得文。无同居之责。
,易为之利也。
凡与人事交之 Rust CLI 诸库,皆遇一问:何以呈结构之文?答几不离三途:ⓐ直吐裸文,冀用户能读(此乃近乎病态之乐观),ⓑ手自施 ANSI 格式,频唤数十次调用format! 乃以硬编码之 escape 序列(技艺中杂糅自虐之趣),ⓒ 欲提携框架,其重逾应用本身(此乃 node modules 之架构妙法也)。
Marcli 提议 ⓓ:以 Markdown 格式撰写消息、参考资料、错误说明、变更日志及诊断——此格式尔等团队已熟悉,编辑器已高亮,文档流程已渲染,一呼其能化为此终端输出,供人欲之阅之。
價者—喚一函即有六遞傳之依。利者—諸 CLI 所呈於世之文,或可為重、為斜、為亮、為標、為表、為引,兼支顏色,無需手弄 ANSI 之序。
汝之終端,當得更善。println!马勒—此乃予之至善。若其不配,然尔等用户实当配之.
链接
▸ 仓库:github.com/Oeditus/marcli-rust
▸ 文档:docs.rs/marcli
▸ 之包:crates.io/crates/marcli












