ActiveWords and namespace completion

I've been meaning to try ActiveWords , so when its inventor co-inventor (with Serge Beauregard) and chief evangelizer, Buzz Bruggeman, wrote to me about it recently, I took the plunge. ActiveWords is built around a universal keyboard filter for Windows. You use it to build up a vocabulary of words or phrases. When you type these in any input context (your word processor, a web form, the command line, an email address field, or even in no context at all -- i.e., when no foreground app expects input), and then hit the action key, something useful happens. The useful thing can be text substitution, which makes ActiveWords a universal alternative to various app-specific shortcut features. The useful thing might also be launching an app, or navigating to a folder, document, or URL. These capabilities make ActiveWords a system-wide shortcut-enabled CLI (command-line interface) that augments the Windows GUI (graphical user interface) and, for some users, could even replace much of it. The software can optionally watch for frequent launch or navigation events and prompt you to assign words to them.

A number of folks have tried and written about this software. Here are some excerpts:

Paul Holbrook:

Using ActiveWords to launch a program or open a folder is particularly useful. So is launching to a particular URL. (I've set 'baseball' to take me to the current baseball scores page at [ Paul Holbrook ]

Ernie the Attorney:

Basically, what ActiveWords gives me is a customized and personal operating system that interacts with Windows and let's me use my vocabulary to make my computer do what I want. This is a very profound and important concept. [ Ernie the Attorney ]

Rick Talcott via Ernie the Attorney:

When I’m working away at a letter, and I want to send an email to Sue, all I need to do is type, 'eSue' -- 'e' for email and 'Sue' for Sue. You can use your own vocabulary, if you don’t like mine. ActiveWords, or Alice as I think of her, only needs to be told the task, not the specific one-step-at-a-time directions. [ Ernie the Attorney ]

As Ernie points out, there is a profound and important concept at work here. It lies at the center of the long-running CLI-versus-GUI debate. We are linguistic creatures, but the CLI is too abstruse for most people to master, so we settle for the pre-linguistic point-and-grunt GUI.

Suppose I want to search Google for "ActiveWords." Had Google existed in the pre-GUI era, I might have typed 'google ActiveWords' on the command line. Some of us may in fact do just that, using a shell script powered by, say, PyGoogle . But most of us will use this procedure:

With ActiveWords I can (and now do) launch Google by typing 'g' and hitting the action key, F8. I still have to type the search phrase, of course. When I begin typing it in MSIE 6, the browser assists me with another flavor of namespace completion, one that's specific to my Google search history (as opposed to my site visitation history as remembered by the browser's URL-line).

Being afflicted with sore wrists from many years of heavy typing, I'm a big fan of keyboard shortcuts. I'll probably buy a copy of ActiveWords and use it to cut down on unnecessary mouseclicks and keystrokes. But even after just a short period of use, it's got me thinking about larger issues of naming and namespace management.

For many years, I've done all my writing in Epsilon , an emacs-like text editor. Like the original emacs, Epsilon has powerful namespace completion that works in multiple contexts. Its own command set is one of those contexts. ALT-X invokes the command input window. Typing 's' and then '?' in that context brings up commands starting with 's'; typing 'save' and then '?' narrows the field to all the 'save' commands. Similarly, CTRL-X-F invokes the Find File window. Here, typing 's' and then '?' brings up files in the current directory starting with 's'; adding more characters and typing '?' narrows the field. This is so handy that I often use Epsilon rather than the Windows File Open dialog to find files, even when Epsilon is not the tool I need to apply to those files.

Like emacs, Epsilon is also highly programmable. Years ago when working on a software team I added a new kind of namespace completion to the program. I wrote a tool that read all the project's C source files every night, parsed out the function names, and saved them in a shared file. Then, I made a completion function in Epsilon that was wired to that namespace. You could type the first few letters of a function's name, hit '?', and select from among the available matches.

A universal approach to this notion of namespace completion in multiple contexts would be really useful. A tool like ActiveWords -- strategically situated atop the keyboard buffer -- is part of what would be needed to make it happen.

Here's a table of some of the completion-aware applications I use, and the namespaces on which they can complete:

application namespace
Epsilon file/directory
Epsilon commands
Outlook contacts
QuickBooks account names
MSIE urls
MSIE per-site forms input
ActiveWords active words 1

1 Yup, ActiveWords has its own kind of completion. If I define 'g' to mean both "Invoke Google" and "Send email to Greg" then ActiveWords will pop up and ask me which action I want when I type 'g' and hit F8.

Sadly, each of these per-app completion mechanisms works in a different way, and each is available only within the context of the app. ActiveWords, in principle, could tap into these namespaces and present a consistent system-wide behavior.

Consider sending email. In ActiveWords today I can define 'eSteve' to launch an email to But of course, you won't want to duplicate your whole address book in ActiveWords. To generalize, I can use ActiveWords' scripting capability to define 'e' as <"mailto:<INPUTBOX:Who?>"> which prompts for the email address -- but there's no Outlook-style completion available in that context. There's also a <Find Outlook Contacts> verb, but again, no Outlook-style completion.

Here's my nirvana. Every app that manages one or more namespaces -- and it's hard to think of an app that doesn't -- would offer namespace completion as a service. Let's make it a web service, while we're at it, so it's available locally or remotely in the same way. Now when I type 'g' and hit F8, ActiveWords (having associated 'g' with Google) can reach into the browser's Google search history and enable me to complete directly on that namespace. Or when I type 'e' and hit F8, ActiveWords -- having associated 'e' with Outlook -- can reach into the Outlook contacts and enable me to complete directly on that namespace. Which, if you have allowed me the privilege, might in some cases be your address book not mine.

Former URL: