Burro

Relative Units & A Design for Tab Stops

Weekly progress update since 2023-06-29 • 2023-07-08Michael Rees


Once again, this was a slow week for progress because I took a mini vacation over the long weekend. However, there are still some important updates to share.

Relative units

Burro now supports relative units. Relative units allow the user to change a parameter relative to its current value. For example, if the current point size is 12 points, then .pt_size[+8] updates the point size to 20 points.

Relative units can be used anywhere where it makes sense to use relative units :) In practice, this means that anything that accepts a numeric argument also now accepts relative units.

The one exception to this general rule is the spacing commands, .vspace and .hspace. (In some sense, these commands were already relative to the current cursor.) Using relative arguments for these has no effect: .vspace[3P] and .vspace[+3P] are equivalent.

Tab stops

There are many small features left before 0.1, but the only big one is tab stops. I haven't started implementing these but I did take some time to sketch out how they might work. Like everything in Burro, this is inspired by mom's approach but tries to add some improvements.

The user will be able to define individual tab stops in the document preamble. These tabs can have a user assigned name, or use an automatically incremented counter for their name. Once all the tabs are defined, the user can then define a "tab list," a sequence of tabs in order. Within the document, a tab list can then be loaded and cycled between, similar to .TN and .TP in mom.

An example will hopefully make this much clearer! Here's how the employee evaluation example from mom might look in Burro:

.define_tab{
    .indent[0P]
    .direction[left]
    .length[5P]
}[criterion]
.define_tab{
    .indent[8P]
    .direction[center]
    .length[9P]
}[evaluation]
.define_tab{
    .indent[19P]
    .quad[left]
    .length[17P]
}[comments]
.tab_list{
    .1[name]
    .2[criterion]
    .3[comments]
}

.start
.load_tabs[eval]
.tab[criterion] CRITERION .tab_next EVALUATION .tab_next COMMENTS

.tab[criterion] Service .tab_next Good .tab_next Many clients specifically request support from Joe by name.

; The other entries would continue here but are omitted for brevity

Again, I haven't started implementing this, so do let me know if you want to suggest any changes (see below for how to do that!).

Burro chat

I've set up a Burro chat over on Zulip. So far the chat is mostly me talking to myself, so please do join! We'll use this to coordinate development among the community. There's also a section for Q&A to help users understand how to use Burro. The chat is still in its infancy, so I expect to add more rooms and integrations in time.

I should note that we're grateful to Zulip for sponsoring Burro in its open source program. I'll add an acknowledgement to the website as well.

You can of course still email the mailing list with any questions or comments you might have.

Deep Dish Rust

Finally, I attended the first meeting of the Deep Dish Rust group here in Chicago on Friday. We talked about many things in the Rust sphere, and I took some time to show Burro to the group. Once we have member talks set up, I'll hopefully give a talk about Burro to continue introducing it to a wider audience.

Have a comment or want to start a discussion? Please email it to the Burro discussion list!