$Id: a07cf90837a3c4373b82d6724b97593810766af7 $
I never used Lotus Agenda, but I’m told it was a popular productivity tool for MS-DOS in the late 80s. I’ve been on a retro software rediscovery kick lately, so I’ve decided to give it a whirl and write about my experiences. There is something that appeals to me about using long-abandoned software. Perhaps it’s update fatigue, there’s certainly no need to dread a major update breaking something!
Regardless, I’ve always enjoyed finding new productivity tools to try out, and I’m not afraid of steep learning curves or getting my hands dirty. I’ll usually choose powerful and flexible software over simplicity.
At the moment I mostly use taskwarrior, but I’ve lost count of all the others I’ve tried!
Agenda is a PIM, a Personal Information Manager. That term has fallen out of fashion, I think a quick summary might be “anything that manages those small pieces of information we all deal with”. Things like contacts, todo lists, notes, and so on.
I found a 1989 episode of the TV show Computer Chronicles that discussed how people thought about PIMs at the time.
At the 21-minute mark there’s a demonstration of Lotus Agenda, but it’s not easy to follow, watch the clip and you’ll see what I mean. Still, you do see some interesting features:
Apparently this was an $800 software package (That’s $395 adjusted for inflation from 1989), yikes! You don’t have to pay that, Lotus made it available for free when development ceased.
In preparation for trying out Agenda, I found a copy of the original manuals on eBay for a few dollars. Just look at this monster, the user guide alone is over 700 pages, that’s not including the supplementary guides. The supplements I have are Working with Macros, Working with Definition Files, Setting up Agenda, and a few miscellaneous leaflets.
I guess that’s my bedtime reading taken care of for a while. I actually received the macro reference still in the original shrink wrap, it almost seems a shame to open it!
I’m using DOSEMU2 to run Agenda, which also works with WSL on Windows. The primary benefit of DOSEMU over other options is that it has a terminal mode that translates VGA text mode to terminal escape sequences. This makes old MS-DOS applications look and feel like native ncurses applications.
Terminal tools like GNU screen work, you can copy and paste between native applications, and you can use it over ssh. Naturally, it also supports filesystem and shell redirection, so you can access host directories, and execute host commands as if they were DOS commands.
Here’s how Agenda looks when it’s first installed.
You’ve probably noticed the empty screen regions, well, that’s because Agenda only supports standard VGA Text Modes. I usually use a 100x30 terminal, so that leaves some blank space. If you use GNU screen you can just put something else in there, how about ncal
!
I configured DOSEMU to map a few directories so I can save my files in the usual places, you just need to add something like lredir I: \\linux\fs\home\taviso\Documents
to autoexec.bat
.
I started making my way through the Quick Start guide, I found a scan online if you want to take a look. The guide has you use Agenda as a task planner to enter upcoming events, like “Call Sarah this Friday to give her feedback on her proposal”, and demonstrates how Agenda can extract dates and activities from text you enter.
Here is a gif to demonstrate, I enter a task and it correctly populates some of the other columns. Playing around with different ways of writing tasks, I find the metadata extraction works quite well. Time specification parsing in particular is quite polished, things like “Check data retention policy every four months starting Tuesday” just work. I’m also relieved that it appears to be Y2K compliant (haha!).
The pitch in the Quick Start Guide is that if you have a call with Tom, you can quickly generate a report for all the things you wanted to discuss. If you’re going to a specific location, you can list all the things you needed to do there, and so on.
Agenda is flexible software that can be used for more than just task management, but to keep this article brief I’m sticking to using it as a planner.
I’ve entered enough tasks now to get a feel for usage, and all the standard stuff works well. Things like notes, setting alarms, adding contacts, assigning priorities, searching and sorting, and so on. The sort of things that get tedious can be automated, like marking all the results of a search, then bulk assigning or marking done.
Agenda is pretty stable, I guess some of those $395
dollars went towards QA. I did find one crash, I was trying to make an assignment action for a pseudo category in the show view! I think I’m the first person to discover this, I can’t find any other references to it!
I had to change my workflow a bit, I’m used to organizing my tasks into subtasks, so for example I might have a to-do list like this:
- Deploy Death Star
- Choose Target
- Verify Design
- Check for weak points
- Call maintenance
- Assign Staff
- Call Mom
That isn’t really how Agenda works, instead you would create each of these tasks and assign them to the same project. This is a shift for me, but it has benefits, such as allowing a task to be assigned to multiple projects.
You can see in this clip I’ve changed the layout, you’re free to add or remove columns and change their order, width, and so on. You can also add filters, so you might want to only see Tasks due today, for example.
You can save an unlimited number layouts (Agenda calls these Views). You can switch to the view that suits your current task, preferred level of information density, and so on.
You might have a “Chores” view while at home that just shows the things you need to do at home, or a “Development” view while working on code. This can let you display your tasks in the most appropriate way.
Honestly, I think Agenda does this quite well, and getting a finely tuned view with sections and filters set up precisely was quite satisfying. There are different kinds of views as well, such as datebook view (like a calendar), expense view (for tallying expenses associated with a project), and so on.
In my main dashboard I have three sections:
Things I have due within a week | Tasks [-Done,When(<->A week from today)] |
Things that dont have a due date | Tasks [-Done,-When] |
Things I’ve completed recently | Done [Done(2 days ago<->)] |
I actually wrote the filter as “day before yesterday”, and it automatically rewrote it to 2 days ago. Neat. I have a few more views with more columns and project filters that I switch to as I need them. You can either press F8 to browse the list of views, or use Alt-N (Next) and Alt-P (Prev) to cycle between them.
Agenda does have a built-in editor for keeping notes. It’s okay. It supports a few basic editing options and has rebindable keys and macros. Luckily it supports importing external files, so you can just use Vim.
In fact, I wrote a macro to switch to vim whenever I type Ctrl-F5 in the editor. Here is a clip of me opening the Macro Manager, showing that I have an “Editor” macro bound to {CtlF5}, and then editing a note in Vim.
I wish I could say the macro language is pretty, but it is not. I think it was inspired by the macro language from 1-2-3, it’s geared towards reading whats on the screen and simulating keystrokes. It has basic control flow, string manipulation, and so on. It’s functional.
Here is that macro you just saw in the editor clip.
{Editor}
{LET;%FILE;C:\TMP\NOTE.TXT}
{WINDOWSOFF}
{F10}E{TYPE;%FILE}
{ENTER}
{ENTER}
{SELECTION;File already exists}
{IF;(#PROMPT <> File already exists:);EDITOR}
{F3}Replace{ENTER}
{LABEL;EDITOR}
{F5}
{F10}ULVIM {TYPE;%FILE}
{ENTER}
{F5}
{F10}C
{ENTER}
{F10}I{TYPE;%FILE}
{ENTER}
{ENTER}
{WINDOWSON}
I can say a few positive things about the macro language, the manual is pretty good and it comes with lots of samples. It can automate all parts of Agenda, but I’ve mostly just used it to rebind keys.
In fact, in the 1980s third party developers wrote commercial add-ons for Agenda. Apparently there was a popular package called President’s Planner. I haven’t tried it, but I suppose I have a morbid curiousity what an application written in this language can do!
You probably need to use other applications or services, and sync your data with your phone. Writing and reading files from outside DOSEMU is no problem, so if you just want to sync files this is no problem.
As it’s a terminal application you can also just SSH in and run it.
You probably also want to have your appointments sync with your calendar or something.
There are two ways to export data from Agenda. If you have a commandline tool that you can pass arguments to, then you can write a macro that will invoke it.
Otherwise, you can export your data to a file.
Agenda can export items to a format called STF, Structured Text File. The specification for that format is (mostly) documented in the manual, but it didn’t catch on.
I wrote a quick parser that can convert it to JSON, so now you can use modern tools like jq to manipulate and transform the data however you wish.
You can download it here, here are some examples.
$ ./stfjson < transfer.stf | jq '.[].items[].text'
$ ./stfjson < transfer.stf | jq '.[].items[] | select(.categories[].name=="\\When")'
And so on, there are more examples in the README. If you can exchange data with other apps, you can now use stfjson
to generate the correct format.
You can automate exports, Agenda has “Special Actions” in the category options. Alternatively, if it’s just a one off or for a macro, you can use the Transfer > Export
command.
In DOSEMU, the UNIX
command will invoke a shell command on the host.
C:\>unix uname
Linux
If there is a commandline tool that will import data, e.g. a TaskWarrior user might use task add drop off laundry at dry cleaners
, then you can create a macro in Agenda that simply launches that command.
You can use something like {F10}ULUNIX task {TYPE;%TASKTEXT}
.
Surprisingly, Agenda supports importing arbitrary text data. One of the manuals that came with agenda was Working with Definition Files, which explains how to write a configuration file that allow Agenda to parse anything.
It even has a Regular Expression tutorial, pretty impressive for a 1980s consumer product.
I quite like Agenda. It does many things well, but it’s absolutely true you could replicate most of it’s functionality with modern tools. However, I do enjoy using it, and I’m a big enough nerd that I quite like the challenge of using retro software.
I think the closest modern equivalent to Agenda would be taskwiki. It’s not a perfect match, but if you liked some of what you saw here but are not interested in retro software, try it out!
I’m still using Agenda after two weeks, and about 40% of the way through the manual 😂
Anyone trying to earnestly use 30 year old software is bound to encounter a few hiccups. Here are some of the problems I ran into. I also have an FAQ.
Alt-F3
.Ins
to create a new Macro, call it “Macro”F2
to open the editor, and enter this:{Macro}
{AltF4}
F5
to save it, then F6
to open the macro properties.F2
and enter {CtlF4}
.I made Ctrl-S Save, and Ctrl-F Find. The defaults are Alt-W (??) And Alt-F6 (???!).
SCANCODE.COM
from here, it’s a DOS TSR that can simulate keystrokes. Once you have it installed:
F10
, Select Utilities, then LaunchSCANCODE Delay 3,Alt-F3
(If SCANCODE
is not in your %PATH%
, type the full path, e.g. C:\SCANCODE\SCANCODE.COM
.EInternal Error
.$_umb_a0 = (off)
to your .dosemurc
.stty cols 80
.
Operation not supported
. A workaround is to install xtermcontrol
and type xtermcontrol --geometry=80x${LINES}
.Q. Can I see your GNU screen configuration to get me started?
A. Sure, here’s my main screenrc, and here’s my dosemu specific one.
I use alias agenda="screen -c ${HOME}/.screenrc.dosemu dosemu -term -E agenda"
in my .bashrc to start agenda.
Q. Agenda doesn’t use 100% CPU time, but it still uses more than I would like.
A. DOSEMU simulates timer interrupts using setitimer()
, and by default it requests them as quickly as possible. If the DOS application does a lot of work on every interrupt (Agenda queries the time), then it can use some CPU.
There’s a tradeoff here, you can simulate a slower interrupt timer but responsiveness will go down (i.e. how quickly the application responds to keyboard input). You can experiment with the numbers and find the optimal balance.
If you were playing a DOS game, you would probably want it high, but for an office application like Agenda you can turn responsiveness waaaaay down and it’s still totally acceptable.
To do that, set the timer
option. The default value is 18, but I find 8 to be totally acceptable, maybe even 6. You can only change the timer setting on the commandline, not in .dosemurc
.
$ dosemu -term -I "timer 8" -E "C:\AGENDA\AGENDA.EXE"
The lower you can set this value, the lower CPU time agenda will use.
path %PATH%;C:\AGENDA
to one of your initialization files, like fdppauto.bat
.Q. I’m using GNU screen, and some function keys produce garbage.
A. S-Lang tries to check if you’re using an xterm compatible terminal by doing strncmp($TERM, "xterm", 5);
. GNU screen is xterm compatible, but it sets the terminal to screen.xterm-256color
.
A workaround is to just make an alias for this termcap entry that starts with “xterm”. First, get a copy of the termcap entry, e.g.
$ TERM=screen.xterm-256color infocmp > termcap.txt
Now, add an alias at the top of the file that starts with xterm
, e.g. I made mine look like this:
screen.xterm-256color|xterm-256color.screen|GNU Screen with xterm using 256 colors,
Now recompile it, tic termcap.txt
. tic
automatically installs that entry in your $HOME/.termcap
directory, so it should be available immediately. Now add the line term xterm-256color.screen
to your .screenrc, and the problem should be solved.
Q. I’m using GNU screen, it works but the Escape
key seems slow, unreliable, or needs to be pressed twice?
A. First add the line maptimeout 50
to your screenrc, and see if that helps. If it feels better but not fixed, try tweaking the number.
If it didn’t help at all, then I think your termcap definition is wrong. Perhaps you are using a terminal that claims to be xterm compatible, but is not.
Try these steps:
$ infocmp -1 > termcap.txt
kmous=
and remove it, that’s mouse event reporting. I’ve found this unreliable in some vte-based terminals.$ tic termcap.txt
.See if that fixes the problem. tic
places compiled definitions in your $HOME/.termcap
directory, you can remove them if you want to go back.
Q. How can I print something from Agenda?
A. Add the line $_lpt1 = "dosprint"
to your .dosemurc
, then create this shell script in your $PATH called dosprint, you can adjust to your liking. The ps2pdfwr
utility is part of ghostscript.
#!/bin/bash
declare tmpfile=$(mktemp --tmpdir=${HOME}/Downloads --suffix=.pdf printjob.XXX)
if ps2pdfwr - ${tmpfile} > /dev/null; then
xdg-open "${tmpfile}"
else
rm -f ${tmpfile}
fi