Paste ASCII Table

approved

by Arkounay

Turns box-drawing and ASCII art tables from terminal output into real Markdown tables when you paste them, rejoining cells the terminal wrapped over several lines. - This plugin has not been manually reviewed by Obsidian staff.

15 downloadsUpdated 6d agoMIT

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

SettingDefaultWhat it does
Convert on pasteonTurn off to use only the commands.
Wrapped cell handlingSmartSmart 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 pipesonEscapes | characters found inside cells.
Detect column alignmentonWrites ---: / :---: when the padding shows the column was right aligned or centred.
Pad columnsoffAligns 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

For plugin developers

Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.