Paste ASCII Table

by Antonin
5
4
3
2
1
Score: 50/100

Description

Obsidian plugin that turns box-drawing / ASCII art tables into real Markdown tables the moment you paste them.

Reviews

No reviews yet.

Stats

0
stars
60
downloads
0
forks
37
days
37
days
37
days
0
total PRs
0
open PRs
0
closed PRs
0
merged PRs
0
total issues
0
open issues
0
closed issues
1
commits

Latest Version

a month ago

Changelog

First release.

Converts box-drawing and ASCII art tables into Markdown tables on paste, rejoining cells the terminal wrapped over several lines.

Install manually by copying main.js and manifest.json into <vault>/.obsidian/plugins/paste-ascii-table/.

README file from

Github

Paste ASCII Table

Obsidian plugin that turns box-drawing / ASCII art tables into real Markdown tables the moment you paste them.

Paste this (terminal output, Claude Code, mysql, psql, rich, comfy-table, tabulate, ...):

┌──────────────────────────────┬───────────────────────────────────────────────┐
│            Route             │                     Notes                     │
├──────────────────────────────┼───────────────────────────────────────────────┤
│ GET /email-deliveries        │ paginated list; search + search_scope, types, │
│                              │  statuses, engagement, export file name       │
├──────────────────────────────┼───────────────────────────────────────────────┤
│ GET /email-deliveries/types  │ types present in the caller's scope           │
└──────────────────────────────┴───────────────────────────────────────────────┘

and get this in the note:

| Route | Notes |
| --- | --- |
| GET /email-deliveries | paginated list; search + search_scope, types, statuses, engagement, export file name |
| GET /email-deliveries/types | types present in the caller's scope |

Install

No build step, the plugin is plain JavaScript.

./install.sh ~/path/to/vault

Then in Obsidian: Settings, Community plugins, Installed plugins, enable Paste ASCII Table. If it does not show up, use the reload icon next to Installed plugins, Obsidian only scans the plugins folder at startup.

What it handles

  • Unicode box drawing in light, heavy, double and rounded variants, plus +---+ ASCII borders and border-less psql output.
  • Cells the terminal wrapped over several lines are rejoined into one Markdown cell. This is the whole reason the plugin exists, a naive find-and-replace leaves you with half sentences in phantom rows.
  • Tables with a separator between every row, and tables with only a header separator.
  • Leading indentation (terminal output is often indented) is removed.
  • ANSI colour codes are stripped.
  • Prose before, between and after tables is preserved, and several tables in one paste are all converted.
  • Column alignment is inferred from the cell padding and written into the separator row.
  • A literal | inside a cell is escaped so it cannot break the table.
  • Existing Markdown tables and ordinary prose are left untouched, so normal pasting is unaffected.

Commands

Both work on text already in a note:

  • Convert ASCII table (selection or table at cursor) converts the selection, or the table block the cursor sits in.
  • Convert all ASCII tables in this note sweeps the whole note.

Settings

Setting Default What it does
Convert on paste on Turn off to use only the commands.
Wrapped cell handling Smart Smart rebuilds the original sentence, Always join with a space never glues words together, Keep the line break as <br> preserves genuinely multi-line cells.
Escape pipes on Escapes | characters found inside cells.
Detect column alignment on Writes ---: / :---: when the padding shows the column was right aligned or centred.
Pad columns off Aligns the pipes in the produced Markdown. Off keeps wide tables readable.

Known limits

All three come from the same design choice: columns are found by counting delimiters per line rather than by taking the delimiter offsets from the border line. Deriving the column geometry from the border would lift all of them.

  • A two column border-less table (a | b under a ---+--- rule) is not detected, because one | per line is counted the same as prose. Three or more columns work, as does any table with outer borders.
  • A cell containing | in a +---+ style table is mangled: | is both delimiter and content there, so the row is read as having extra columns and the table is split in two. Box-drawing tables are unaffected, a | in their cells stays content.
  • When a table has no row separators, a wrapped row is recognised by the cells that fall blank on the continuation line. A wrap where every column continues at once is read as a new row.

Tests

The converter is pure JavaScript with no Obsidian dependency, so it runs under plain node:

npm test