/runeblog

A blogging system in Ruby based on Livetext

Primary LanguageRuby

runeblog

Runeblog is a blogging tool written in Ruby. It has these basic characteristics:
  • It is usable entirely in text mode from the terminal
  • It publishes web pages as static HTML
  • So far, yes, like Jekyll
  • It's based on Livetext (highly extensible Ruby-based markup)
  • It has the concept of multiple "views" for a blog
  • The multiple views are in effect multiple blogs managed with the same backend.

What is Livetext?

Livetext is a markup format that is a throwback to the old, old days of text formatters such as roff It's very flexible, and it is extensible in Ruby.

It is far from mature or full-featured, but it is usable. Runeblog uses Livetext, along with some custom definitions, to try to ease the formatting of a blog entry.

What are "views"?

Think of them as multiple separate blogs with the same backend. Why would you want to do this? Maybe you wouldn't, but I do.

The purpose is to present different "faces" to different audiences. In my case, my computing-related stuff would go into one view, and my hometown-related things would go into another. There might be a view that only old friends or close friends can see. There might be a view purely for reviews of music, books, and movies.

But the important points are these:

  • All the views will be managed the same way in the same place, and they will all share common data.
  • Any post can easily be included in a single view, in more than one, or in all of them.
  • Each view can have its own look and feel, and it can be linked/published separately from the others.
  • Each view can be hosted in a different location and/or a different server and domain
  • Any post can be in more than one view

The blog environment

There is a command-line tool called blog which is a REPL (read-eval-print loop). Note that this tool is a curses-based environment (mainly so it can display menus and such to the user).

The help message looks like this:

  Basics:                                         Views:
  -------------------------------------------     -------------------------------------------
  h, help           This message                  change view VIEW  Change current view
  q, quit           Exit the program              cv VIEW           Change current view
  v, version        Print version information     new view          Create a new view
  clear             Clear screen                  list views        List all views available
                                                         lsv               Same as: list views

Posts: Advanced: ------------------------------------------- ------------------------------------------- p, post Create a new post config Edit various system files new post Same as p, post customize (BUGGY) Change set of tags, extra views lsp, list posts List posts in current view preview Look at current (local) view in browser lsd, list drafts List all drafts (all views) browse Look at current (published) view in browser delete ID [ID...] Remove multiple posts rebuild Regenerate all posts and relink undelete ID Undelete a post publish Publish (current view) edit ID Edit a post ssh Login to remote server import ASSETS Import assets (images, etc.) manage WIDGET Manage content/layout of a widget

Getting started

But when you first run the REPL, it checks for an existing blog repository under the .blogs directory. If it doesn't find one, it asks whether you want to create a new blog repo. Enter y for yes.

You'll then enter the editor (vim for now) to add configuration info to the global.lt3 file.

The next thing you should do is to create at least one view of your own. Use the new view command for this. Note that the current view is displayed as part of the prompt.

[no view] new view mystuff
[mystuff]

To create a new post, use the new post command (also abbreviated post or simply p). You will be prompted for a title:

[mystuff] new post
Title: This is my first post

Then you'll be sent into the editor (currently vim but can be others):

FIXME wizard?
(publishing one-time setup - server, ssh keys, etc.)
preview...
publish...
browse...
(and so on)

To be continued

Customizing the default templates and configuration

You can use the config command to choose a file to edit.

The meaning and interaction of these files will be explained later. FIXME

When you make changes, rebuild will detect these and regenerate whatever files are needed.

The directory structure for a view

Subject to change TBD: Add details

    .blogs/views/mystuff/
    ├── assets
    ├── posts
    ├── remote
    │   ├── assets
    │   ├── banner
    │   ├── etc
    │   ├── permalink
    │   └── widgets
    │       ├── ad
    │       ├── links
    │       ├── news
    │       ├── pages
    │       └── pinned
    └── themes
        └── standard
            ├── banner
            ├── blog
            ├── etc
            ├── post
            └── widgets
                ├── ad
                ├── bydates
                ├── links
                ├── news
                ├── pages
                ├── pinned
                ├── search
                ├── sitemap
                └── tag-cloud

FIXME add details here

Basics of Livetext

TBD

Bold, italics, etc. single, double, bracketed

Common dot commands)

  .debug
  .say
  .nopara
  .quit
  indented dot-commands

Using external files

  .mixin
  .include
  .copy
  .seek

Predefined functions and variables

  $File
  
  etc.

Runeblog-specific features (Liveblog)

TBD

Dot commands - the basics

  .mixin liveblog
  .post
  .title
  .views
  .tags
  .teaser

Dot commands - more advanced

  .image
  .inset
  .dropcap
  .pin

Variables and functions

  $view, etc.
  $\[date is undefined], $\[link is undefined], etc.

Defining your own features

Dot commands, variables, functions

  .def/.end
  .set
  .variables
  .heredoc
  .func

Defining these in Ruby

More topics

Meta tags, etc. CSS

Widgets

  pages
  links 
  pinned
  faq
  sitemap
  news
  etc.

Banner and navbar

Creating your own widgets

Special tags/functions coming "soon"

  github, gitlab, gist
  wikipedia
  youtube, vimeo
  twitter, instagram
  etc.

TBD

More later...

TBD