@c $Id$ @node Audio Desktop @chapter The Emacspeak 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 GUI-based computing, these tools and information objects manifest themselves as a collection of icons organized in a two-dimensional work-area --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 A "buffer" is the basic building block of the Emacs and hence 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 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 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. HTML or LaTeX documents and so on. @node Context-Sensitive Interaction @section Emacspeak Specializes Aural 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 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 (ACSS) in conjunction with the Emacs W3 browser. @subsection 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. Notice for example, that the Emacspeak FAQ (reached via command @code{emacspeak-view-emacspeak-faq} bound to @kbd{C-e F}) takes advantage of Emacs' outline mode to allow you to easily move through the various sections. An example of content-sensitive navigation is provided by the imenu package which dynamically creates a "table of contents" based on the content that is being displayed in a given buffer. @subsection Navigating The Desktop 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 --directory editor-- 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: 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} --where a GUI user is typically limited to quickly locating an object from a relatively small collection --the size of the collection being a direct function of available display real-estate-- 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-- 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 WWW pages. Ubiquitous search in the eyes-free environment is critical-- 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-- 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 WWW page, or using the sub-optimal find dialog.