• Stars
    star
    1,770
  • Rank 26,303 (Top 0.6 %)
  • Language
    Rust
  • License
    Mozilla Public Li...
  • Created almost 7 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

cat for markdown

mdcat

Fancy cat for Markdown (that is, CommonMark):

$ mdcat sample.md

mdcat showcase with different colour themes

mdcat in WezTerm, with "One Light (base16)", "Gruvbox Light", and "Darcula (base16)" (from left to right), and JetBrains Mono as font.

Features

mdcat works best with iTerm2, WezTerm, and kitty, and a good terminal font with italic characters. Then it

  • nicely renders all basic CommonMark syntax (no tables or footnotes though),
  • highlights code blocks with syntect,
  • shows links, and also images inline in supported terminals (see above, where "Rust" is a clickable link!),
  • adds jump marks for headings in iTerm2 (jump forwards and backwards with โ‡งโŒ˜โ†“ and โ‡งโŒ˜โ†‘).
Terminal Basic syntax Syntax highlighting Images Jump marks
Basic ANSIยน โœ“ โœ“
Windows ConEmu โœ“ โœ“
Windows 10 console โœ“ โœ“
Generic VTE 0.50 or newerยฒ โœ“ โœ“
Terminology โœ“ โœ“ โœ“
iTerm2 โœ“ โœ“ โœ“ยณ โœ“
kitty โœ“ โœ“ โœ“ยณ
WezTerm โœ“ โœ“ โœ“ยณ
  1. mdcat requires that the terminal supports strikethrough formatting and inline links. It will not render strikethrough text and links correctly on terminals that don't support these (e.g. the Linux text console)
  2. VTE is Gnomeโ€™s terminal emulation library used by many popular terminal emulators on Linux, including Gnome Terminal, Xfce Terminal, Tilix, etc.
  3. SVG images are rendered with resvg, see SVG support.

Not supported:

Usage

Try mdcat --help or read the mdcat(1) manpage.

Installation

  • 3rd party packages at Repology
  • You can also build mdcat manually with cargo install mdcat (see below for details).

Building

Run cargo build --release. The resulting mdcat executable links against the system's SSL library, i.e. openssl on Linux. To build a self-contained executable use cargo build --features=static; the resulting executable uses a pure Rust SSL implementation. It still uses the system's CA roots however.

The build process also generates the following additional files in $OUT_DIR:

  • Completions for Bash, Zsh, Fish, and Powershell, for both mdcat and mdless, in completions sub-directory.
  • A mdcat.1 manpage, build from mdcat.1.adoc with the asciidoctor command from AsciiDoctor. If asciidoctor is not found the build script prints a warning.

These additional artifacts are included in the release builds. If you package mdcat you may want to include these files too.

Troubleshooting

mdcat can output extensive tracing information when asked to. Run mdcat with $MDCAT_LOG=trace for complete tracing information, or with $MDCAT_LOG=mdcat::render=trace to trace only rendering.

Future plans

  • Figure out a better way to show HTML #3.
  • CommonMark extensions: Footnotes #1.
  • CommonMark extensions: Tables #2.

License

Copyright Sebastian Wiesner [email protected]

Binaries are subject to the terms of the Mozilla Public License, v. 2.0, see LICENSE.

Most of the source is subject to the terms of the Mozilla Public License, v. 2.0, see LICENSE, unless otherwise noted; some files are subject to the terms of the Apache 2.0 license, see http://www.apache.org/licenses/LICENSE-2.0

More Repositories

1

git-gone

Cleanup stale Git branches of pull requests
Rust
54
star
2

gethostname.rs

gethostname() for all systems
Rust
29
star
3

homebins

Binaries for $HOME
Rust
17
star
4

gnome-search-providers-jetbrains

Gnome shell search providers for jetbrains IDEs
Rust
13
star
5

jetbrains-search-provider

Gnome Shell search provider for Jetbrains IDEs
TypeScript
12
star
6

gnome-search-providers-vscode

Gnome search providers for recent workspaces of VSCode variants
Rust
9
star
7

systemd-journal-logger.rs

Logger implementation for the systemd journal
Rust
8
star
8

vscode-hlint

Maintainer wanted: Lint Haskell with hlint in vscode
TypeScript
6
star
9

ego-upload

Upload GNOME extensions to extensions.gnome.org from the command line
TypeScript
5
star
10

vscode-fish-ide

Fish IDE features for VSCode
TypeScript
5
star
11

xkpwgen.rs

XKCD password generator
Rust
4
star
12

dotfiles

Personal dotfiles
Shell
4
star
13

gnome-shell-extension-picture-of-the-day

Picture of the day GNOME shell extension
TypeScript
4
star
14

gnome-shell-extension-typescript-template

Personal template for typescript-based Gnome Shell extensions
TypeScript
4
star
15

gnome-shell-extension-utc-clock

A customizable UTC clock for GNOME shell
TypeScript
3
star
16

system_proxy.rs

Get system HTTP proxy in Rust
Rust
3
star
17

dracut-hook-uefi

Pacman/libalpm hook to build UKIs with dracut
Shell
2
star
18

pop-shell-launcher-vscode

Pop Shell launcher plugin for VSCode workspaces
Python
2
star
19

pop-shell-launcher-jetbrains

Jetbrains recent projects plugin for pop-shell launcher
Python
1
star
20

homebin-manifests

Manifests for homebins
1
star
21

mvg_home

Rust
1
star
22

dotbot-homebins

Dotbot plugins for homebins
Python
1
star
23

pacman-hook-reproducible-status

Pacman hook to check reproducible status of packages after installation or upgrade
Python
1
star
24

gnome-shell-extension-firmware-update

Gnome Shell Indicator for firmware updates
TypeScript
1
star
25

logcontrol.rs

Rust types and implementations for systemd's logcontrol interface.
Rust
1
star
26

gnome-shell-extension-disable-extension-updates

GNOME shell extension to disable the automatic update check for extensions
TypeScript
1
star
27

kernel-install-dracut-uki

kernel-install plugin to create UKIs with dracut
Shell
1
star