Skip to content

crdx/docwatch

Repository files navigation

docwatch

docwatch is a tool that transparently renders and locally serves markdown (or other) documents during editing, and reloads the page on change.

Installation

Install from rubygems.org.

gem install docwatch-bin

The binary is called docwatch.

Usage

Usage:
    docwatch [options] <file-path>

Options:
    -p, --port VALUE        Listen port [default: 8888]
                            Set to 'random' for a random port
    -d, --default-styles    Use default styling
    --verbose               Be verbose
    -v, --version           Show version

Renderers:
    markdown    (.md)
    html        (.html)

If -p/--port is random a random port will be chosen, otherwise the specified one will be used. The default is 8888.

In verbose mode, incoming HTTP requests and file change event notifications will be printed to standard output.

How it works

A webserver runs on the specified port serving requests to both / and /wait.

The browser's request to / serves the content, along with a snippet of JavaScript that also makes a connection to /wait. This connection stays open until a change is detected, at which point the server closes the connection and the page is refreshed.

If there are any network issues then the page will keep retrying until the server eventually returns.

Renderers

The renderer is figured out automatically from the file extension.

Two are supported. Feel free to contribute more.

Renderer::Markdown

Renders markdown into an HTML page.

Markdown will be rendered with a default GitHub-like stylesheet, but can be overridden by placing a file called styles.css in the $XDG_CONFIG_HOME/docwatch directory (normally ~/.config/docwatch). Use -d/--default-styles to ignore the override stylesheet.

Renderer::Html

Renders HTML into an HTML page.

Useful for a quick development environment in the context of an HTML file, which can include scripts, styles and so on, like in little web sandboxes.

Extending

Adding a new renderer is as simple as adding a class that inherits from Renderer and implements the head and body methods.

See renderer/markdown.rb for an example.

Tests

Run tests with just test.

Contributions

Open an issue or send a pull request.

Licence

GPLv3.