Recent Posts

Some documentation in Geminispace

1 min read; 8 GFI

Given that Rogallo is coming on pretty well, I feel it's about time to get some sort of documentation for it going in Geminispace. With this in mind, I've created an account over on tilde.team so I can make use of their support for the Gemini protocol.

While I don't imagine I'll be writing documentation as comprehensive as the main site for Rogallo, I do aim to provide some basic information.

The other thing I'm going to maintain there is a version of the change log. Rather than edit it by hand each time, I've added a tool to the Rogallo repository that converts the Markdown version of the ChangeLog into Gemtext.

It looks pretty good in Rogallo.

The Rogallo ChangeLog in Rogallo

Initially, I set all of this up so that I was editing the files via Tramp. This worked fine and got me going, but pretty quickly I decided that it would make more sense to create a repository, edit stuff locally, and then just rsync it when I'm good to go.

Not editing in production... I know... How boring.

Rogallo v0.11.0

1 min read; 11 GFI

A quick update to Rogallo, with changes concentrating on giving the user more control over the content of a rendered page.

Despite the fact that the Gemini Protocol and gemtext are all about things being minimal, some capsules can deliver pretty busy content. Personally, I rather like it, and I'm generally impressed at how creative some people are with these tools. On the other hand, I've noticed that some people don't always appreciate the use of emojis or ANSI escape sequences to provide colour. So, with this in mind, I've added a couple of features to help control the content.

The first is a command to toggle emoji removal. If you're finding the emojis in a page too distracting, use the command to toggle them off and on (bound to F6 by default).

AstroBotany without emojis

The setting is sticky too, so if you're so inclined, you can turn emojis off and they'll stay off.

There's a similar command related to the handling of ANSI escape sequences. While some applications let you toggle this at the capsule level (AstroBotany is one example where it's part of the game's settings), not all do. So I've added a command to toggle this (bound to Shift+F6 by default).

ANSI colour off

With both these commands, if this sort of view isn't to your taste:

AstroBotany and its rich display

You can quickly and easily turn it into this:

Colour and emojis off

I think I prefer the richer view, but I can see the utility of the more austere view.

Somewhat related to the above, I've also added the ability to configure the main "icons" that get used inside the rendered content. So if you don't like the choice of for links within a capsule, for links outwith a capsule, or for a list item bullet, you can change them in the configuration file.

Recently I found - 4

1 min read; 7 GFI

Introduction

An occasional collection of things I've recently found on the Internet and added to my bookmarks.

This blog is written in English

Yeah, it's okay to write in your own voice, and for yourself. Weird, huh?

GitFut

Got to love a stupid GitHub-based profile rating tool.

Lisp hax

Lots of really useful Lisp code. Hours of great reading.

Very Average Prototypes

Interesting article about some of the downsides of working with AI to create code. Says a few things I've also been saying about my journey with BlogMore.

GTA2js

GTA2. On the web.

Half-Life 2 on the web

Half-Life 2. With follow-ups. On the web.

The AI Hype Reckoning Is Upon Us

Good article about the gulf that does seem to exist between the hype around AI in business, and the actual benefits.

Mastodon, The Only Good Choice

Good article about what Mastodon delivers if you enjoy social media.

Please delete your repository

If you had never opened this repository, there is a 21% chance that we would have already cured cancer. Let that sink in.

I don't care if it's totally made up, it made me chuckle.

CSS-DOS

An entire PC built in CSS.

Human Emacs

I feel like this project is jumping the gun quite a bit, but I also appreciate that it exists. I did also see someone say the other day that it was worth running with anyway to "get away from RMS". Which is fair I guess.

Mastodon Most Followed

Because it's all about being popular...

Web Flight

A flight simulator, on the web. What's not to like?

Perfect to mess with during those boring Teams calls...

A Road to Lisp: Which Lisp

Good review of all the Lisp options you have available to you today.

A24 got embroiled in copyright strikes against online creations related to the Backrooms. People, unsurprisingly, got very angry. The issue seems solved, for the moment, but it says a lot about capitalist appropriation of mass-created popular culture.

ZeroVer

Fantastic list of well-known and popular applications that seem too afraid to ever evolve beyond v0.x.

AI Mania Is Eviscerating Global Decision-Making

I feel this so much. I wish the people who need to read this would read this.

Rogallo v0.10.0

4 min read; 11 GFI

Rogallo v0.10.0 is now available. This release has a number of changes, including some new features, some changes to the user interface, and a couple of quality-of-life improvements.

Maximum document width

Amongst some feedback someone left on a slightly unrelated post over on station there was mention of how a document "should" wrap at around 72 characters. While no rationale was given for the "should" part, I was happy enough to accept that this could be a preference for some people. With this in mind, I've added a configuration option to set a maximum width for documents.

While, personally, I prefer Rogallo's default behaviour (I work in an environment where I can resize a window, and I'm capable of doing it), I can appreciate that someone might want to cap it. So for folk who prefer this, they can now make Rogallo look like this (with maximum_document_width set to 80):

Max document width in action

For the moment this can only be set via the configuration file. At some point I might make this more of a dynamic thing. I can imagine this being something handy, or at least fun, to change up as you're viewing different content.

The same feedback "suggested" that the link jumping facility that Rogallo has should have a timeout that clears the buildup of the number being looked for. This seemed like a reasonable thing to ask for. So, before, if you typed 1, a link with a label of 1 would be selected. If you did nothing for a while, and then typed 2, a link with the label of 12 would be highlighted. With the new timeout (set to 1 second by default, configurable in the configuration file), if you type 1 and then 2 more than a second later, first link 1 will be selected, then link 2 will be selected. On the other hand, if you type 1 then 2 within a second, 12 will be selected.

Setting the timeout to 0 disables this and Rogallo's link jumping facility will work as it did before.

Failed input recovery

With this new feature, if you send input text to a capsule and it rejects it for some reason, the input will be held on to. If you then visit the same URI again, the input dialog will be pre-populated with what you attempted to send a moment ago. This gives you the opportunity to edit anything wrong with the submission and try again.

Added all application commands to the command line

If you prefer to use Rogallo's command line more than the command palette, I've now ensured that all bindable application commands can be accessed via the command line. There's a difference in their form, to stay in keeping with the command line. So whereas in the command palette you'd run GoHome by typing go home, in the command line it becomes a !-prefixed snake-case command: !go_home.

All possible commands are listed in the help screen if it's brought up while the command line has focus.

Help showing commands

Capsule navigation commands

Rogallo now has two new commands for quickly navigating within the current capsule path. GoToParent will navigate up a level in the path of the current URI, and GoToRoot will go to the root of the capsule.

The icon for links is now used to show if a link is already in the location history (and so has been visited before), or not:

Visited and non-visited links

Here you can see that Account settings isn't in the visit history, but the other two links are. I was going to do the whole link, but I've never been a fan of how web browsers do this, so I've gone with just the icon. I've also made it subtle but still noticeable. So far, I'm much preferring this; I don't need it blasting out the difference, I just need it to be enough for me to notice1.

Swapped around history and bookmark tools

Until now the "history" and "bookmarks" shortcut keys advertised in the footer brought up the sidebar-based management widgets. This made sense when that's all I had in Rogallo. For a while now though I've had palette-based search tools for both history and bookmarks. Normally I want to search for and select a bookmark or history item way more than I want to manage those lists. So I've relegated the sidebar-based tools to a secondary position and placed the palette-based search tools up front.

This also means that the default bindings have changed a bit. As always, you can discover the bindings with rogallo bindings.

Conclusion

I know I've nodded towards this before, but I think I'm getting close to making a v1.0.0 release. I want to daily-drive for a few more days, and I'd also like to expand the website. I'd also like to build a Gemini/Gemtext-based site for Rogallo -- it'd be pretty weird if I only documented it in http(s)space. I won't let those wishes become blockers for moving to calling Rogallo "stable", but it would be nice to have.


  1. I do recognise that there's an a11y issue here with the subtle difference; there's some work to be done at some point to allow for a high-contrast theme that will resolve this sort of issue. 

Wasat v0.8.0

1 min read; 7 GFI

Wasat v0.8.0 is now available. This provides a small update to the GeminiURI class, adding three utility properties for extra URI manipulation.

  • without_query - gives the URI minus any attached query
  • parent - gives the parent path of the current URI (also minus the query)
  • root - gives the root path for the current URI (also minus the query)

In each case, the result is a fresh GeminiURI instance.

These are added because I'm aiming to add "go to parent" and "go to root" commands to Rogallo.

Terminal bean soup

3 min read; 10 GFI

I'm sure most people reading this will be familiar with the concept of "bean soup theory". In case anyone isn't, here's how Wikipedia describes it:

A specific phenomenon described as a 'What about me' effect. An individual watches a video that doesn't pertain to them, but finds a way to make it about them anyway. Stems from a 2023 TikTok recipe for bean soup, with commenters saying "What if I don't like beans?"

I feel there's a very specific set of folk who love to "bean soup" anything relating to terminals, and it's common to have them turn up in your mentions if you happen to do anything in the terminal, or for the terminal, that isn't about their purist opinions and how everything must be a Vim clone, or worse.

I first encountered this when I started working at Textualize. Unsurprisingly, given the point, purpose and focus of Textual, some folk would turn up in the Discord server, in the issues, in the discussions, in the mentions of posts in various places, and post their very important opinions about how TUI software must work. Not... discuss their preferences, or offer suggestions (there were plenty of people who were pleasant like that, they were lovely to converse with), no: their engagement was written as if every word that was mashed into their keyboard was a well-crafted, handed-from-on-high RFC-like holy document that MUST and SHOULD be followed1.

If I was being very charitable I could cut them some slack. If you're building a framework for building applications for the terminal, there's a good reason to make it at least possible for the application authors to follow recognised best practice and to stick with hard-won conventions. Indeed, Textual has some design choices that I think are deeply questionable and misguided and I objected to them on more than one occasion. So, yeah, if I was being charitable, I could cut them some slack.

I could... if they weren't such arseholes about it.

This gets worse though if you're building an application for the terminal, especially if it's built as Free Software and the motivation is to build something for yourself and be kind enough to share. It irks the hell out of me when I build some application for myself, as a TUI, and then someone turns up and starts complaining about my choice of default key bindings, that work in my choice of terminal emulator and my configuration for that emulator.

It's even worse when they do it in a way where they have to show their very deep knowledge of terminals, and how they're very proud of just how lacking in features and progress their own choice of terminal emulator is.

Dude...2 I know. I've used physical terminals. I've written COBOL on a minicomputer using a line editor on some honking great dumb all-green all-in-one box. I've even written code on a terminal using fan-fold paper. I've used all sorts of terminal emulators. I spent well over a decade doing shit inside rxvt which was running on my GNU/Linux server while displaying on my Windows desktop machine.

I've installed and tested plenty of terminal emulators.

I'm well aware of the conventions and expectations. If Ctrl+C doesn't quit... that is my choice. It's not ignorance, it's not a lack of history with this stuff, it's a choice. For my software.

So when you turn up and feel the need to tell me that some function keys might not work in some terminal on some GNU/Linux box... I get it, you don't like beans. If that's the case, how about you either don't make my hobby all about your tastes and how I should build my application to suit you, or how about you RTFM and configure my application so it works in your choice of terminal?

I mean... we know you won't. We know you don't even care about the application I'm having tons of fun building, that I'm spending time in a joyous flow-state creating and tinkering with. You just care about making the post all about you and your purity. We know you just care about showing how smart you are.

We know you just can't resist the urge to reply-guy3.

We get it: you don't like bean soup. Nobody cares. Nobody asked.


  1. That reminds me: one day I should write a rant about the folk who obsess about the "Zen of Python"

  2. Let's be honest: it's always a dude. 

  3. Let's be honest: it's always a guy. 

Rogallo v0.9.0

1 min read; 9 GFI

I've released v0.9.0 of Rogallo. The first big change in this release is the addition of syntax highlighting to pre-formatted text.

Much like in Markdown, Gemtext also supports pre-formatted text bounded by code fences. Gemtext supports the concept of "alt-text" for such text, like this:

```python
def hello(name: str = "World") -> str:
    return f"Hello, {name}!"
```

Until now Rogallo would simply show the text as-is (with some styling to make it stand out from normal paragraphs). From this release, if there is alt-text for the pre-formatted block, and if it's the name of a supported language, the content will have syntax highlighting applied.

Pre-text with syntax highlighting

If you're curious which languages are supported, it should be anything that Pygments supports.

Another significant change is to the user input dialog. As mentioned in an earlier post, the Gemini protocol imposes limits on how much text can be submitted to a capsule. As documented, the limit is for a resulting URI of 1024 bytes1. To save someone typing out a long entry, only to have it lost2, I've added a count of how much input is left available (calculated from the size of the URI that would result):

The input count

To help ensure that the user doesn't submit too much, I've also added an error display if you go over the limit, which also refuses to submit the input.

Too much input

With these in place it should be a lot harder to run into an unexpected loss of input.

One final tweak is a small change to the optional link stripe system I recently added. While playing around with some other themes, I noticed that the styling didn't show up well, or at all, in many of them. So I've changed it a little so it now shows in all available themes. I'm still not convinced it's quite right -- I'll play some more. But at least now it's visible in all cases.


  1. Although I've already encountered one capsule that limits to 1022, from what I can tell

  2. Right away I'm now thinking it might be a good idea to re-populate the input dialog in such a situation. I'll have to remember to make that a TODO issue. 

Wasat v0.7.0

1 min read; 6 GFI

The Gemini Protocol makes it clear that the maximum length of a URI, when making a request, is 1024 bytes. This has implications for how large a user's input can be when responding to a 1x response. Because of this, I'd like to update Rogallo so that it lets the user know how much space they have left as they type in their input.

With this in mind I've released v0.7.0 of Wasat. This adds the following to GeminiURI:

  • GeminiURI.MAXIMUM_LENGTH -- a constant for the maximum length of a Gemini URI (as mentioned above: 1024).
  • len() support -- if you ask for the len of an instance of GeminiURI it will return the length of the full URI.
  • GeminiURI.bytes_left is a property that tells you how many bytes are left until the limit, given the current URI.
  • GeminiURI.too_long is a boolean property that flags if the current URI is too long to send to a Gemini capsule.

This should give me all I need to add some guardrails to the user input dialog in Rogallo.

Gemtext v1.0.0

1 min read; 7 GFI

I've bumped Gemtext to v1.0.0. I've gone from "this is test code" to "this is stable code" mostly because the library is so simple and I'm unlikely to add any radically new features to it1.

This bump also has one small addition: I've added an alt_text property to the PreFormatted class. This exists to capture and make available any text that comes after the pre-formatted text marker. For example, this text:

```python
print("Hello, World!")
```

will now result in:

PreFormatted(content='print("Hello, World!")', alt_text='python')

If/when I add syntax highlighting of pre-formatted text blocks to Rogallo, this new property will make that possible.


  1. I was thinking about adding a Gemtext builder class at some point, but I can't see a use for it any time soon. Perhaps v2.0.0.