Vocola Information Pages   by Rick Mohr (this page updated May 19, 2003)
 
 Introduction
 Using Vocola
 Language Tutorial
    Keystroke Commands
    Quotes And Whitespace
    Using Alternatives
    Defining Variables
    Substituting Actions
    Capturing Dictation
    Optional Words
    Function Calls
    Built-in Functions
    Defining Functions
    Contextual Commands ->
    Include Statements
    Comments
    Example File
 Command Sequences
 Install Vocola
 Vocola Versions
 Converting DVC Files
 Troubleshooting
 Support
 Wish List
 My RSI Story
 Voice Resources
 

Contextual Commands

Vocola Tutorial: Enable by Context

We've discussed how to create "global" commands (which are always enabled) as well as application-specific commands (which are enabled only when a particular application is active). In addition, you can create contextual commands, which are enabled only when a particular window has the focus.

By specifying all or part of the window title in a context statement you can create commands specific to that window. For example, here are three groups of commands for Microsoft Outlook (from the application-specific command file "outlook.vcl"): 

 Microsoft Outlook:
   New Message = {Ctrl+n};
   Reply to Message = {Ctrl+r};
   Reply to All = {Ctrl+Shift+r};
   Forward Message = {Ctrl+f};

 Message (Plain Text):
   Send That = {Alt+s};
   Reply Here = "{Home}{Shift+End}{Del}{Enter 3}{Left 2}";

 Calendar:
   View Month = {Alt+m};
   View Work Week = {Alt+r};

The context statement "Microsoft Outlook:" specifies that subsequent commands should be active only when "Microsoft Outlook" is part of the title of the active window. When reading mail using Outlook the main window title is "Inbox - Microsoft Outlook", so the first group of commands above (to create, reply to, or forward a message) will be enabled.

Similarly, when editing a mail message the window title is "Message (Plain Text)", so the second group of commands above will be enabled. Finally, the third group of commands above will be enabled when the Outlook calendar is displayed.

Here is another example. The text editor application Emacs can be customized so that the window title includes the name of the currently-edited file. For example, when editing iexplore.vcl (the file of Vocola commands for Internet Explorer) the Emacs window title is "Emacs - iexplore.vcl - 01.05.02". This allows defining a set of contextual commands for editing Vocola files. The application-specific command file "emacs.vcl" would include:

 ### Editing Vocola files
 .vcl:
   Insert             <key> = {$1       Wait(0) }; 
   Insert       <mod> <key> = {$1+$2    Wait(0) }; 
   Insert <mod> <mod> <key> = {$1+$2+$3 Wait(0) }; 
 
 ### Editing Perl files
 .pl:
   New Statement = {Ctrl+e}{Ctrl+j};
   New Statement Above = {Ctrl+a}{Ctrl+b}{Ctrl+j}; 
   Insert Hash Reference = ->{}{Ctrl+b};

So for example when the Emacs window title contains ".vcl", saying "Insert Shift Tab" inserts the text "{Shift+Tab}" into the file. These commands allow speaking keystroke sequences when writing Vocola code. (The variable definitions for <mod> and <key> are omitted here, but available with the Vocola distribution.)

Similarly, the second group of commands above is active only when editing Perl files.

Global Contextual Commands and Multiple Context Choices

Contextual commands don't need to be application-specific. You can also create global contextual commands, as in this example from the global command file "_vocola.vcl":

 Open:
   Go Up = ..{Enter};
   Folder List = {Shift+Tab_2}{Down}{PgUp}; 

This defines two commands for use in a "File Open" dialog box, regardless of the current application. Whenever the window title includes the word "Open", you can say "Go Up" to move to the parent folder or "Folder List" to open the folder hierarchy drop down at the top of the dialog.

As it happens, "File Chooser" dialog boxes appear with a wide range of titles, such as "Open File", "Save As", "Browse for Folder", etc. Ideally we want the same set of context-specific commands to be available for all such dialogs. Vocola supports this by allowing the "|" character in context statements. Here is the full set of context titles and commands I use:

 Open | New | Save | File | Attachment | Browse | Directory: 
   Folder <folder> = {Ctrl+c}$1\{Enter};
   Go Up = ..{Enter};
   Go Up <n> = Repeat($1, ..\) {Enter};
   Folder List = {Shift+Tab_2}{Down}{PgUp};
   Choose <n> = {Down_$1}{Enter}{Esc};

This page (c) Copyright 2002-2005 by Rick Mohr.