DWIM


DWIM computer systems attempt to anticipate what users intend to do, correcting trivial errors automatically rather than blindly executing users' explicit but potentially incorrect inputs.

Software

The term was coined by Warren Teitelman in his DWIM package for BBN Lisp, part of his PILOT system, some time before 1966.
Teitelman's DWIM package "correct errors automatically or with minor user intervention", similarly to a spell checker for natural language.
Teitelman and his Xerox PARC colleague Larry Masinter later described the philosophy of DWIM in the Interlisp programming environment :

Although most users think of DWIM as a single identifiable package, it embodies a pervasive philosophy of user interface design: at the user interface level, system facilities should make reasonable interpretations when
given unrecognized input....the style of interface used throughout Interlisp allows the user to omit various parameters and have these default to reasonable values...
DWIM is an embodiment of the idea that the user is interacting with an agent who attempts to interpret the
user's request from contextual information. Since we want the user to feel that he is conversing with the system,
he should not be stopped and forced to correct himself or give additional information in situations where the correction or information is obvious.

Critics of DWIM claimed that it was "tuned to the particular typing mistakes to which
Teitelman was prone, and no others" and called it "Do What Teitelman Means," "Do What Interlisp Means" or even claimed DWIM stood for "Damn Warren's Infernal Machine."
The DWIM concept has been adopted by users of the GNU Emacs text editor to describe Emacs Lisp functions or commands that "do the right thing" depending on context, and do not specifically correct the user's typing. The Emacs wiki gives the example of a file copy command that is able to deduce the destination path from a split window configuration that contains two dired windows, one of which displays the source path. DWIM functionality is often mentioned in the command's name; GNU Emacs has a comment-dwim function that comments out a selected region if uncommented, or uncomments it when already commented out, using comment characters and indentation appropriate for the environment and current context.