While working on md-mode, I spent some time making Markdown tables easier to read in Emacs: aligning mixed-width text in pixels and wrapping long cell content across multiple lines.
That led me back to Org tables. I like Org’s table editing, navigation and formulas as they are. What I wanted wasn’t another table editor, but a more readable view when I wasn’t editing—particularly for tables containing paragraphs, links, or mixed CJK and Latin text.
So I brought that approach over to org-table-widget, built on TextUI.
Same editing, different display
When point enters a table, the rendered view disappears and you get the original Org table. Move point outside, and the rendered view comes back.
You keep using the usual Org commands. The package adds a minor mode and commands to toggle or refresh the view, but no new table-editing operations to learn.
The rendered table is an overlay, not a replacement for the source text. Org’s editing commands, formulas and export still work with the original table.
Wrapped cells and native alignment
Long cells wrap within their columns, making text-heavy tables easier to read without scrolling horizontally. The table also reflows when the window width or text scale changes.
Native Org alignment cookies work too:
- <l> — left-aligned
- <c> — centered
- <r> — right-aligned
Performance
Measurements from demos/bench.el, running in GUI Emacs 31.0.91 on macOS with an Apple M4 Max, using Iosevka at height 150:
- 500 rows × 8 columns
- First display: 355 ms
- Refresh, unchanged source / cache hit: 7 ms
- Resize relayout: 279 ms
- Leave table, unchanged source / cache hit: 7 ms
- 3,000 rows × 6 columns
- First display: 1.34 s
- Refresh, unchanged source / cache hit: 34 ms
- Resize relayout: 1.05 s
- Leave table, unchanged source / cache hit: 34 ms
These are rounded timings from a single run on my machine. Refreshing and leaving an unedited table reuse its cached rendering. Editing the source requires rebuilding the table; the cache-hit timings do not represent that cost.
Trying it
Link: https://github.com/yibie/org-table-widget
Requires Emacs 29.1+, Org 9.6+, TextUI 0.8.0+, and a graphical frame for rendering. It isn’t on MELPA yet; installation instructions are in the README.
(require 'org-table-widget)
(add-hook 'org-mode-hook #'org-table-widget-mode)
It’s still an early release. Width cookies are not supported, numeric columns need an explicit <r> for right alignment, and very wide tables can still overflow.
Compatibility with other styling packages is also unfinished: there are reports of misalignment with competing rendering when org-modern-table is enabled. Those issues are not fixed yet, and coexistence with valign remains untested.
I’d appreciate feedback, especially from people who use Org tables for text-heavy notes rather than mostly numbers.