@c $Id$
@node Audio Desktop
@chapter The Emacspeak Audio Desktop.
@cindex Audio Desktop

This chapter describes the Emacspeak audio desktop and gives tips and
tricks for making use of many of Emacs' powerful features.

The desktop is the work area where you organize the tools of your
trade and the information objects relevant to your current activities.
In the conventional world of visual @acronym{GUI, Graphical User
Interface}-based computing, these tools and information objects
manifest themselves as a collection of icons organized in a
two-dimensional work-area @MDash{} this organization is designed to
place frequently used objects within easy reach.

Notice that organizing one's work area in terms of visual icons
arranged in a two-dimensional area where such an organization is
optimized for the available ``conversational gestures'' of pointing and
clicking is an artifact of visual interaction.

In the spirit of a truly speech-enabled application, Emacspeak does
not simply provide you spoken access to a particular presentation of
your work environment that was initially designed with the ``sign
language'' of visual interaction in mind.  Instead, Emacspeak enables
you to work with documents and other information objects in a manner
that is optimized to aural, eyes-free interaction.  A necessary
consequence of this setup is that users accustomed to the purely
visual manifestation of today's electronic desktop do not immediately
perceive the Emacspeak environment as an electronic desktop.  This
section of the manual hopes to introduce you to a work-style that
encourages a different perspective on how one interacts with the
computer in performing day-to-day computing tasks.

The end result in my case has been a marked increase in personal
productivity.

@menu
* Desktop Objects:: Desktop Objects
* Object Oriented Desktop:: Object Oriented Desktop
* Context-Sensitive Interaction:: Context-Sensitive Interaction
@end menu


@node Desktop Objects
@section Objects Making Up The Emacspeak Desktop
@cindex Desktop Objects

A ``buffer'' is the basic building block of  the
Emacspeak desktop.  Any information presented by Emacs is placed in a
``buffer''.  For example, when perusing this manual within Emacs, the
``file'' containing the documentation is presented in a ``buffer''.  All
information objects such as @acronym{WWW} pages, email messages, output from
user interaction with command-line shells etc., are presented by Emacs
in individual ``buffers''.

Buffers provide a base level of user interaction; Emacs derives its
power by allowing applications to specialize buffers to enable
specific types of user-interaction that is optimized for a specific
class of information.

@node Object Oriented Desktop
@section An Object-Oriented Desktop
@cindex Object-Oriented Desktop

The basic ``buffer object'' can be specialized by Emacs applications
to provide optimal interaction.  This kind of specialization makes the
Emacs environment an object-oriented environment; thus, the basic
conversational gesture of ``move to the next statement'' can be
assigned behavior that is appropriate to the content that the user is
currently navigating.  As an example of such specialization, Emacs
provides ``specialized modes'' for working with English text,
programming languages, markup source e.g. @acronym{HTML, Hypertext
Markup Language} or @LaTeX{} documents and so on.

@node Context-Sensitive Interaction
@section Emacspeak Specializes Aural Interaction

@cindex Context-Sensitive Interaction

The content-specific user interaction described above is a very
powerful feature of Emacs, and this is where Emacspeak derives its
power.  Traditionally, the ability to create buffers specialized for
working with specific content-types has been used by the Emacs
community to develop versatile programming environments, messaging
applications such as mail and news readers, and authoring
environments.  The clean design present in all of these Emacs
extensions in terms of separating application functionality from the
user-interface, combined with the availability of the entire source
code making up these packages under the open-source model has laid the
ground-work for developing Emacspeak as a versatile aural counterpart
to the product of years of software engineering that has been invested
by the Emacs community.  In short, Emacspeak would not exist in its
present shape or form without this prior effort.

@subsection Audio Formatted Output

@cindex Audio Formatting

Emacspeak takes advantage of the content-specific knowledge available
within specialized buffers to produce ``audio formatted'' output
designed to optimize user interaction.  A basic consequence of the
above is ``voice locking'' in specialized modes; a more interesting
consequence is the implementation of Aural Cascading Style Sheets
(@acronym{ACSS}) in conjunction with the Emacs @acronym{EWW, Emacs Web
Wowser} and @acronym{W3} Web browsers.

@subsection Structured Navigation:

@cindex Structured Navigation

Emacspeak also exploits content-specific knowledge to provide
structured navigation of different types of electronic content.  In
many cases, such structured navigation is an extension of what Emacs
provides by default; in other cases, Emacspeak implements the
necessary extensions to provide the level of structural navigation
needed to work efficiently in an eyes-free environment.

Notable among such structured navigation is Emacs' powerful outline
feature.

An example of content-sensitive navigation is provided by the @code{imenu}
package which dynamically creates a ``table of contents'' based on the
content that is being displayed in a given buffer.  Emacs
@dfn{Selective Display} lets one easily hide and expose portions of a
buffer based on indentation @MDash{} this feature can be used to
advantage when working with program source code.


@subsection Navigating The Desktop

@cindex Desktop Navigation

In addition to navigating individual information objects, the
Emacspeak environment provides speech-enabled navigation of the
various buffers that are currently open on the Emacspeak desktop via
Emacs' built-in list-buffers feature.  Emacs' dired @MDash{} directory
editor @MDash{} for browsing the file system, along with the new
speedbar package that combines features from dired and imenu round off
the suite of navigational tools.

@subsection Everything Is Searchable:

@cindex Searching
@cindex Finding

Emacs derives one final advantage from using buffers as the basic
building block for the entire desktop.  Every Emacs buffer is
searchable via a uniform and powerful search interface.  Emacs'
incremental search works efficiently and consistently to enable you
locate ``objects'' of interest either within a given document or to
locate a given object from among the various objects that are
currently open on the Emacspeak desktop.  This is @b{very powerful}
@MDash{} where a @acronym{GUI, Graphical User Interface} user is
typically limited to quickly locating an object from a relatively
small collection @MDash{} the size of the collection being a direct
function of available display real-estate @MDash{} the Emacspeak user
can typically work with a far larger collection of objects.  This is
well-suited to the eyes-free environment, where display real-estate
has no meaning; so bringing up a list of currently open buffers and
performing an incremental search to locate a specific buffer is just
as efficient independent of whether you have a few dozen or a few
hundred buffers open.

To illustrate the above, my typical working Emacs session lasts
between two and three weeks @MDash{} over that time I typically
accumulate several hundred open buffers holding a large variety of
content ranging from program source code to email messages and
@acronym{WWW} pages.

Ubiquitous search in the eyes-free environment is critical @MDash{} as
a comparison, when using a conventional, purely visual WWW browser,
users have no means of easily ``searching'' for say the ``submit''
button on a WWW page.  This inability is a minor annoyance in visual
interaction, and the typical mouse-enabled user @b{never} uses the
find dialog to find a submit button @MDash{} it is simply more
efficient to point at the submit button given the eye's ability to
quickly scan the two-dimensional display.  This luxury is absent in an
eyes-free environment; as a consequence, blind users confronted by the
combination of a visual interface and screen-reader are typically
limited to either tabbing through all the controls on a @acronym{WWW}
page, or using the sub-optimal find dialog.
