posts

Buffers, Not Tabs

Why Linewise starts from Vim's buffer model instead of a terminal skin.

Most blog themes think in pages. Linewise thinks in buffers.

That small shift changes the interface. A homepage becomes :ls, a posts list becomes :oldfiles, tags become marks, and search behaves like :find feeding a quickfix list.

Spatial model

The browser viewport is treated as an editor frame. Each region has a Vim name and a specific job:

RegionRole
command-barThe command-line area and top-level navigation
file-explorerA compact tree exposing the blog’s content structure
bufferlineThe visible set of open/recent buffers
workspaceThe active window inside the main editor column
status-lineMode, current buffer, context, and progress

The default desktop layout arranges these like a windowed editor:

Editor Frame
├─ Command Line
├─ Editor Body
│  ├─ File Explorer
│  │  ├─ posts
│  │  ├─ tags
│  │  └─ find
│  └─ Editor Main
│     ├─ Bufferline
│     └─ Active Buffer
└─ Statusline

The bufferline

The bufferline makes the workspace feel persistent. It remembers recently visited buffers in localStorage, caps them to a small number, and allows each tab to close. Navigation fetches the next buffer via the server and updates the workspace without a full page reload: a lightweight approximation of Vim’s buffer switching.

Reading comes first

Vim details live in the periphery: statusline, buffer name, optional progress. The post body stays narrow, calm, and typographically optimized for long reading. Linewise avoids forced monospace body text and fake terminal prompts inside prose unless the content itself calls for them.