> And this wouldn't necessarily be just about `M-x'.  Once in a while a
> user executes a command that's meant for a totally different mode, and
> then all the text disappears from the buffer and the user is sad.  If
> the user manages to type `M-x message-send-and-exit' without TAB
> completion, Emacs could then say "This command is for message-mode, and
> this is a text-mode buffer.  Really execute?" or something.
>

I was thinking along the same lines. package.el, for instance, is full of commands which throw errors if not in package-mode. It would be useful if this could be built-in by declaring the mode.