unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Emacs for new users
@ 2009-11-23 16:37 Per Starbäck
  2009-11-23 16:59 ` Giuseppe Scrivano
                   ` (2 more replies)
  0 siblings, 3 replies; 58+ messages in thread
From: Per Starbäck @ 2009-11-23 16:37 UTC (permalink / raw)
  To: emacs-devel

I wrote:
> But I prefer if they don't have to, since they have lots of other stuff to learn as
> well. Every good step is a good step, even the small ones.

I should add that I love all the care that has been taken in making
Emacs 23 even more accessible for new users
than Emacs 22 was. I'm teaching an intro course where we use Emacs
among other things, and I think if was a big
change to do this with Emacs 23 this year. Kudos to all involved!

Maybe I should ask my students about what they have found particularly
confusing. Some things I've noticed
off the top of my head:

* beeping is often disturbing and unexpected, in particular for
scrolling past the beginning or end of the
  buffer with the scroll wheel. (I agree. That's hardly an error.)
* the frame/window terminology (of course)
* I have a hard time getting them to use *one* emacs instead of
starting several when they are editing several files.
  One reason is they want them in different frames. Probably
find-file-other-frame should be in the menus.
* "M-" (for a short while)
* They are interrupting things by doing stuff with the mouse. Like
clicking somewhere in the middle of a query-replace.

I want Emacs to be seen as the best choice for anyone wanting to use
an editor, not just knowledgeable hackers.
I would have loved it if the effort in writing gedit had been spent in
improving Emacs for new users instead for
example, so that Emacs would be the default Gnome editor, and it
disturbs me that many GNU/Linux distributions
don't include Emacs by default. I think most agree with me in this,
but that some instead see Emacs as "not for
everyone"?




^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Emacs for new users
  2009-11-23 16:37 Emacs for new users Per Starbäck
@ 2009-11-23 16:59 ` Giuseppe Scrivano
  2009-11-23 18:47   ` Chong Yidong
  2009-11-23 17:05 ` Emacs for new users Stephen Eilert
  2009-11-23 18:56 ` Lennart Borgman
  2 siblings, 1 reply; 58+ messages in thread
From: Giuseppe Scrivano @ 2009-11-23 16:59 UTC (permalink / raw)
  To: Per Starbäck; +Cc: emacs-devel

Per Starbäck <per@starback.se> writes:

> I wrote:
>> But I prefer if they don't have to, since they have lots of other stuff to learn as
>> well. Every good step is a good step, even the small ones.
>
> I should add that I love all the care that has been taken in making
> Emacs 23 even more accessible for new users
> than Emacs 22 was. I'm teaching an intro course where we use Emacs
> among other things, and I think if was a big
> change to do this with Emacs 23 this year. Kudos to all involved!
>
> Maybe I should ask my students about what they have found particularly
> confusing. Some things I've noticed
> off the top of my head:
>
> * beeping is often disturbing and unexpected, in particular for
> scrolling past the beginning or end of the
>   buffer with the scroll wheel. (I agree. That's hardly an error.)

yes, I agree with you, beeping is often disturbing.  You can disable it,
changing the value of visible-bell to t:

  (setq visible-bell t)

Cheers,
Giuseppe




^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Emacs for new users
  2009-11-23 16:37 Emacs for new users Per Starbäck
  2009-11-23 16:59 ` Giuseppe Scrivano
@ 2009-11-23 17:05 ` Stephen Eilert
  2009-11-24 14:10   ` Richard Stallman
  2009-11-23 18:56 ` Lennart Borgman
  2 siblings, 1 reply; 58+ messages in thread
From: Stephen Eilert @ 2009-11-23 17:05 UTC (permalink / raw)
  To: Per Starbäck; +Cc: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 2369 bytes --]

On Mon, Nov 23, 2009 at 1:37 PM, Per Starbäck <per@starback.se> wrote:

> I wrote:
> > But I prefer if they don't have to, since they have lots of other stuff
> to learn as
> > well. Every good step is a good step, even the small ones.
>
> I should add that I love all the care that has been taken in making
> Emacs 23 even more accessible for new users
> than Emacs 22 was. I'm teaching an intro course where we use Emacs
> among other things, and I think if was a big
> change to do this with Emacs 23 this year. Kudos to all involved!
>
> Maybe I should ask my students about what they have found particularly
> confusing. Some things I've noticed
> off the top of my head:
>
> * beeping is often disturbing and unexpected, in particular for
> scrolling past the beginning or end of the
>  buffer with the scroll wheel. (I agree. That's hardly an error.)
>

True. That's why the very first thing I do with any emacs installation is to
silence it. I wouldn't be as bad if the standard desktop sounds were used.

I think this scroll wheel error thing should be removed entirely.


> * the frame/window terminology (of course)
>

Also true.


> * I have a hard time getting them to use *one* emacs instead of
> starting several when they are editing several files.
>

That's probably because their .emacs files are small(if they exist at all).
It takes several seconds for my emacs to start, and that's just not
acceptable to me.

You could try teaching them about emacsclient (and making it the default
associated editor for whatever they are editing).


>  One reason is they want them in different frames. Probably
> find-file-other-frame should be in the menus.
>

This is... suprising. That might be due to the lack of tabs. Even then, I'd
think they'd want different windows, instead of frames.

You might consider providing an standard .emacs file with this.


> * They are interrupting things by doing stuff with the mouse. Like
> clicking somewhere in the middle of a query-replace.
>

That takes time getting used to. Perhaps they don't even understand that the
minibuffer is actually a buffer, and that their movement commands work just
fine. This is not immediately apparent.


--Stephen

programmer, n:
       A red eyed, mumbling mammal capable of conversing with inanimate
monsters.

[-- Attachment #2: Type: text/html, Size: 3393 bytes --]

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Emacs for new users
  2009-11-23 16:59 ` Giuseppe Scrivano
@ 2009-11-23 18:47   ` Chong Yidong
  2009-11-23 20:49     ` Chong Yidong
  0 siblings, 1 reply; 58+ messages in thread
From: Chong Yidong @ 2009-11-23 18:47 UTC (permalink / raw)
  To: Giuseppe Scrivano; +Cc: Per Starbäck, emacs-devel

Giuseppe Scrivano <gscrivano@gnu.org> writes:

>> * beeping is often disturbing and unexpected, in particular for
>> scrolling past the beginning or end of the
>>   buffer with the scroll wheel. (I agree. That's hardly an error.)
>
> yes, I agree with you, beeping is often disturbing.  You can disable it,
> changing the value of visible-bell to t:
>
>   (setq visible-bell t)

This is bug#1305.  That discussion never came to a conclusion.

Some people mentioned that they find the visible bell distracting, and I
have to say I agree; personally I have ring-bell-function as 'ignore.
(Actually, my main computer doesn't even have PC-speaker support in the
kernel...)

I guess we should add an Options menu entry to turn off the beeper,
under "Blinking Cursor".




^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Emacs for new users
  2009-11-23 16:37 Emacs for new users Per Starbäck
  2009-11-23 16:59 ` Giuseppe Scrivano
  2009-11-23 17:05 ` Emacs for new users Stephen Eilert
@ 2009-11-23 18:56 ` Lennart Borgman
  2009-11-23 19:35   ` Les Harris
  2 siblings, 1 reply; 58+ messages in thread
From: Lennart Borgman @ 2009-11-23 18:56 UTC (permalink / raw)
  To: Per Starbäck; +Cc: emacs-devel

On Mon, Nov 23, 2009 at 5:37 PM, Per Starbäck <per@starback.se> wrote:
>
> Maybe I should ask my students about what they have found particularly
> confusing. Some things I've noticed
> off the top of my head:
>
> * beeping is often disturbing and unexpected, in particular for
> scrolling past the beginning or end of the
>  buffer with the scroll wheel. (I agree. That's hardly an error.)
> * the frame/window terminology (of course)
> * I have a hard time getting them to use *one* emacs instead of
> starting several when they are editing several files.


Emacs manual and tutorial is not very good to point out emacs client.
I think that should be changed.


>  One reason is they want them in different frames. Probably
> find-file-other-frame should be in the menus.
> * "M-" (for a short while)
> * They are interrupting things by doing stuff with the mouse. Like
> clicking somewhere in the middle of a query-replace.


Maybe that is one of those things that should be turned off by default
in Emacs? (Ie the possibility to leave minibuffer by just clicking
somewhere.)


> I want Emacs to be seen as the best choice for anyone wanting to use
> an editor, not just knowledgeable hackers.
> I would have loved it if the effort in writing gedit had been spent in
> improving Emacs for new users instead for
> example, so that Emacs would be the default Gnome editor, and it
> disturbs me that many GNU/Linux distributions
> don't include Emacs by default. I think most agree with me in this,
> but that some instead see Emacs as "not for
> everyone"?


It is quite strange to not include Emacs. On the other hand it points
to how important it is too make it easy to start using Emacs. I think
we should have to move to adhere better to existing GUI standards (CUA
for example, but that is a hot potato).




^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Emacs for new users
  2009-11-23 18:56 ` Lennart Borgman
@ 2009-11-23 19:35   ` Les Harris
  2009-11-23 20:28     ` Lennart Borgman
  2009-11-23 21:16     ` Emacs for new users Stephen Eilert
  0 siblings, 2 replies; 58+ messages in thread
From: Les Harris @ 2009-11-23 19:35 UTC (permalink / raw)
  To: emacs-devel

Lennart Borgman <lennart.borgman@gmail.com> writes:

> It is quite strange to not include Emacs. On the other hand it points
> to how important it is too make it easy to start using Emacs. I think
> we should have to move to adhere better to existing GUI standards (CUA
> for example, but that is a hot potato).

First let's get the tautologies out of the way: Emacs is a complex
system with many features and extreme extensibility.

With that axiom in mind I would argue that any attempt to add a veneer
of simplicity over the top is doing a disservice to would-be emacs
users.

With that said, I think a solution to the learning-emacs-in-classroom and
emacs-for-new-users problems is the same: include a .emacs which turns
on things like CUA mode to make operation more familiar.

The instructor of an emacs class is in an ideal position to do this.
For others this is something that could be easily distributed with emacs
perhaps with adding a blurb about it on the emacs splash screen.

-- 
Do they only stand
By ignorance, is that their happy state,
The proof of their obedience and their faith?





^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Emacs for new users
  2009-11-23 19:35   ` Les Harris
@ 2009-11-23 20:28     ` Lennart Borgman
  2009-11-23 21:04       ` Chong Yidong
  2009-11-23 21:16     ` Emacs for new users Stephen Eilert
  1 sibling, 1 reply; 58+ messages in thread
From: Lennart Borgman @ 2009-11-23 20:28 UTC (permalink / raw)
  To: Les Harris; +Cc: emacs-devel

On Mon, Nov 23, 2009 at 8:35 PM, Les Harris <lharris@gnome.org> wrote:
> Lennart Borgman <lennart.borgman@gmail.com> writes:
>
>> It is quite strange to not include Emacs. On the other hand it points
>> to how important it is too make it easy to start using Emacs. I think
>> we should have to move to adhere better to existing GUI standards (CUA
>> for example, but that is a hot potato).
>
> First let's get the tautologies out of the way: Emacs is a complex
> system with many features and extreme extensibility.
>
> With that axiom in mind I would argue that any attempt to add a veneer
> of simplicity over the top is doing a disservice to would-be emacs
> users.
>
> With that said, I think a solution to the learning-emacs-in-classroom and
> emacs-for-new-users problems is the same: include a .emacs which turns
> on things like CUA mode to make operation more familiar.


The problem is that it does not work as good as it could in all
situations. Since CUA is not the default not so much effort in getting
rid of all ruogh things. Not that you can't work around them, but it
is not so easy for a newcomer.


> The instructor of an emacs class is in an ideal position to do this.
> For others this is something that could be easily distributed with emacs
> perhaps with adding a blurb about it on the emacs splash screen.


There has been much talk about this, but no real attempt to finish
something for it. The best approach is possibly to use Emacs themes
for this and distribute them.

However I am not sure if themes are sufficiently modular for this. Can
you use two themes at the same time for example?




^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Emacs for new users
  2009-11-23 18:47   ` Chong Yidong
@ 2009-11-23 20:49     ` Chong Yidong
  2009-11-26 22:35       ` Beeping (was: Emacs for new users) Juri Linkov
  0 siblings, 1 reply; 58+ messages in thread
From: Chong Yidong @ 2009-11-23 20:49 UTC (permalink / raw)
  To: Giuseppe Scrivano; +Cc: Per Starbäck, 1305, emacs-devel

Chong Yidong <cyd@stupidchicken.com> writes:

>>> * beeping is often disturbing and unexpected, in particular for
>>> scrolling past the beginning or end of the
>>>   buffer with the scroll wheel. (I agree. That's hardly an error.)
>>
>> yes, I agree with you, beeping is often disturbing.  You can disable it,
>> changing the value of visible-bell to t:

> This is bug#1305.  That discussion never came to a conclusion.

One complication, now that I recall, is that we really do want to signal
an error for beginning-of-buffer and end-of-buffer, so that keyboard
macros will terminate.

The problem is that we have no mechanism for telling Emacs not to ring
the bell for certain classes of errors.

But I'm not sure Emacs should even be in the bell-ringing business,
anyway; it's a barbaric practice, and an echo-area message IMHO
suffices.




^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Emacs for new users
  2009-11-23 20:28     ` Lennart Borgman
@ 2009-11-23 21:04       ` Chong Yidong
  2009-11-23 21:16         ` Lennart Borgman
  2009-11-30 22:55         ` Giorgos Keramidas
  0 siblings, 2 replies; 58+ messages in thread
From: Chong Yidong @ 2009-11-23 21:04 UTC (permalink / raw)
  To: Lennart Borgman; +Cc: Les Harris, emacs-devel

Lennart Borgman <lennart.borgman@gmail.com> writes:

>> With that said, I think a solution to the learning-emacs-in-classroom and
>> emacs-for-new-users problems is the same: include a .emacs which turns
>> on things like CUA mode to make operation more familiar.
>
> The problem is that it does not work as good as it could in all
> situations. Since CUA is not the default not so much effort in getting
> rid of all ruogh things. Not that you can't work around them, but it
> is not so easy for a newcomer.

The primary barrier to CUA is that it destroys the long-established
standard that C-c LETTER is free for binding to Emacs user commands.

So we won't be moving to CUA any time soon.  For those that want it,
it's just a click away on the Options menu.




^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Emacs for new users
  2009-11-23 19:35   ` Les Harris
  2009-11-23 20:28     ` Lennart Borgman
@ 2009-11-23 21:16     ` Stephen Eilert
  2009-11-23 22:06       ` Per Starbäck
  1 sibling, 1 reply; 58+ messages in thread
From: Stephen Eilert @ 2009-11-23 21:16 UTC (permalink / raw)
  To: Les Harris; +Cc: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 1179 bytes --]

On Mon, Nov 23, 2009 at 4:35 PM, Les Harris <lharris@gnome.org> wrote:

> Lennart Borgman <lennart.borgman@gmail.com> writes:
>
> > It is quite strange to not include Emacs. On the other hand it points
> > to how important it is too make it easy to start using Emacs. I think
> > we should have to move to adhere better to existing GUI standards (CUA
> > for example, but that is a hot potato).
>
> First let's get the tautologies out of the way: Emacs is a complex
> system with many features and extreme extensibility.
>
> With that axiom in mind I would argue that any attempt to add a veneer
> of simplicity over the top is doing a disservice to would-be emacs
> users.
>

The extensibility part comes with need. As users become more familiar with
Emacs, they might want to extend it to improve their workflow.

However, to reach that point, it is necessary that they become familiar with
it to begin with. I don't think anyone is suggesting that Emacs is "dumbed
down". Rather, the idea should be to make it easier for new users to
transfer their existing skills.


--Stephen

programmer, n:
       A red eyed, mumbling mammal capable of conversing with inanimate
monsters.

[-- Attachment #2: Type: text/html, Size: 1645 bytes --]

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Emacs for new users
  2009-11-23 21:04       ` Chong Yidong
@ 2009-11-23 21:16         ` Lennart Borgman
  2009-11-23 21:56           ` Stefan Monnier
  2009-11-30 22:55         ` Giorgos Keramidas
  1 sibling, 1 reply; 58+ messages in thread
From: Lennart Borgman @ 2009-11-23 21:16 UTC (permalink / raw)
  To: Chong Yidong; +Cc: Les Harris, emacs-devel

On Mon, Nov 23, 2009 at 10:04 PM, Chong Yidong <cyd@stupidchicken.com> wrote:
> Lennart Borgman <lennart.borgman@gmail.com> writes:
>
>>> With that said, I think a solution to the learning-emacs-in-classroom and
>>> emacs-for-new-users problems is the same: include a .emacs which turns
>>> on things like CUA mode to make operation more familiar.
>>
>> The problem is that it does not work as good as it could in all
>> situations. Since CUA is not the default not so much effort in getting
>> rid of all ruogh things. Not that you can't work around them, but it
>> is not so easy for a newcomer.
>
> The primary barrier to CUA is that it destroys the long-established
> standard that C-c LETTER is free for binding to Emacs user commands.
>
> So we won't be moving to CUA any time soon.  For those that want it,
> it's just a click away on the Options menu.


Yes, I am aware of the situation. It is still just as unfortunate however.

Putting cua-mode on the menus was a good step towards making it easier
for newcommers. Could we perhaps also apply my patches that shows C-c,
C-x etc on the edit menu when cua-mode is on?




^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Emacs for new users
  2009-11-23 21:16         ` Lennart Borgman
@ 2009-11-23 21:56           ` Stefan Monnier
  2009-11-23 22:05             ` Lennart Borgman
  0 siblings, 1 reply; 58+ messages in thread
From: Stefan Monnier @ 2009-11-23 21:56 UTC (permalink / raw)
  To: Lennart Borgman; +Cc: Les Harris, Chong Yidong, emacs-devel

> Putting cua-mode on the menus was a good step towards making it easier
> for newcommers. Could we perhaps also apply my patches that shows C-c,
> C-x etc on the edit menu when cua-mode is on?

FWIW I doubt it'd be very useful: the whole point of using CUA is so
that users can use the bindings they already know.  The key here being
"they already know", so placing those bindings in the menu is
not necessary.


        Stefan


PS: I could even construe the current behavior as a feature to "teach
them the real bindings instead", although I think it's more of an
accident than anything.




^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Emacs for new users
  2009-11-23 21:56           ` Stefan Monnier
@ 2009-11-23 22:05             ` Lennart Borgman
  0 siblings, 0 replies; 58+ messages in thread
From: Lennart Borgman @ 2009-11-23 22:05 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Les Harris, Chong Yidong, emacs-devel

On Mon, Nov 23, 2009 at 10:56 PM, Stefan Monnier
<monnier@iro.umontreal.ca> wrote:
>> Putting cua-mode on the menus was a good step towards making it easier
>> for newcommers. Could we perhaps also apply my patches that shows C-c,
>> C-x etc on the edit menu when cua-mode is on?
>
> FWIW I doubt it'd be very useful: the whole point of using CUA is so
> that users can use the bindings they already know.  The key here being
> "they already know", so placing those bindings in the menu is
> not necessary.


Perhaps it will instead teach them that Emacs is a bit unreliable - if
you do not do as told. For all other keybindings there use to be
relevant keybinding hints in the menus, but if you use cua-mode...
then help yourself.

Excuse the joke. But it is a little bit funny that I just said that
cua-mode is not supported that much because it is not default and that
makes it more difficult for newbees.

It is a small thing, of course, but it is kind of a "welcome, we try
to support those that prefer CUA key bindings too".

In this sense I think it is useful.




^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Emacs for new users
  2009-11-23 21:16     ` Emacs for new users Stephen Eilert
@ 2009-11-23 22:06       ` Per Starbäck
  2009-11-23 22:43         ` Per Starbäck
  0 siblings, 1 reply; 58+ messages in thread
From: Per Starbäck @ 2009-11-23 22:06 UTC (permalink / raw)
  To: Stephen Eilert; +Cc: Les Harris, emacs-devel

2009/11/23 Stephen Eilert <spedrosa@gmail.com>:
>
> On Mon, Nov 23, 2009 at 4:35 PM, Les Harris <lharris@gnome.org> wrote:
>>
>> Lennart Borgman <lennart.borgman@gmail.com> writes:
>>
>> > I think
>> > we should have to move to adhere better to existing GUI standards (CUA
>> > for example, but that is a hot potato).
>>
>> First let's get the tautologies out of the way: Emacs is a complex
>> system with many features and extreme extensibility.
>>
>> With that axiom in mind I would argue that any attempt to add a veneer
>> of simplicity over the top is doing a disservice to would-be emacs
>> users.
>
> The extensibility part comes with need. As users become more familiar with
> Emacs, they might want to extend it to improve their workflow.
>
> However, to reach that point, it is necessary that they become familiar with
> it to begin with. I don't think anyone is suggesting that Emacs is "dumbed
> down". Rather, the idea should be to make it easier for new users to
> transfer their existing skills.

Exactly. I don't think any of the suggestions I've had (or anyone
else) is about dumbing down.
It's changes I think are good anyway, but that might be especially
good for beginners. And also I think
it's worthwhile to think about beginners when deciding what the
default should be for things
that are easy to change. Beginners shouldn't need a special beginner
friendly .emacs, but should
be OK without one.

As for CUA I just thought of something. What do you think about having
s-x, s-c, s-v, s-z do the CUA
thing in Emacs? Many people have keyboards with C-, s- and M- modifier
keys. Maybe it would be acceptable
for those used to these bindings that in Emacs you have to use another
modifier key with "the normal stuff"
since the usual "Alt key" is used by "special emacs commands"?




^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Emacs for new users
  2009-11-23 22:06       ` Per Starbäck
@ 2009-11-23 22:43         ` Per Starbäck
  2009-11-23 22:46           ` Lennart Borgman
                             ` (2 more replies)
  0 siblings, 3 replies; 58+ messages in thread
From: Per Starbäck @ 2009-11-23 22:43 UTC (permalink / raw)
  To: Stephen Eilert; +Cc: Les Harris, emacs-devel

I wrote
> As for CUA I just thought of something. What do you think about having
> s-x, s-c, s-v, s-z do the CUA
> thing in Emacs? Many people have keyboards with C-, s- and M- modifier
> keys. Maybe it would be acceptable
> for those used to these bindings that in Emacs you have to use another
> modifier key with "the normal stuff"
> since the usual "Alt key" is used by "special emacs commands"?

I should have written "the usual Control key" in the last line of course!

I've read up on what the "Windows key" is used for in MS Windows a
little now, and realize
this probably wouldn't be possible under MS Windows, but maybe in GNU
where that extra modifier
key often is "super" and not used for much.




^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Emacs for new users
  2009-11-23 22:43         ` Per Starbäck
@ 2009-11-23 22:46           ` Lennart Borgman
  2009-11-23 23:55           ` Sebastian Rose
  2009-11-24  6:43           ` tomas
  2 siblings, 0 replies; 58+ messages in thread
From: Lennart Borgman @ 2009-11-23 22:46 UTC (permalink / raw)
  To: Per Starbäck; +Cc: Les Harris, Stephen Eilert, emacs-devel

On Mon, Nov 23, 2009 at 11:43 PM, Per Starbäck <per@starback.se> wrote:
> I wrote
>> As for CUA I just thought of something. What do you think about having
>> s-x, s-c, s-v, s-z do the CUA
>> thing in Emacs? Many people have keyboards with C-, s- and M- modifier
>> keys. Maybe it would be acceptable
>> for those used to these bindings that in Emacs you have to use another
>> modifier key with "the normal stuff"
>> since the usual "Alt key" is used by "special emacs commands"?
>
> I should have written "the usual Control key" in the last line of course!
>
> I've read up on what the "Windows key" is used for in MS Windows a
> little now, and realize
> this probably wouldn't be possible under MS Windows, but maybe in GNU
> where that extra modifier
> key often is "super" and not used for much.


It is possible to use the Windows left and right keys in Emacs on MS
Window. You need currently a patched version of Emacs for it to work
correctly though. Those patches are in the Emacs+EmacsW32
distribution.




^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Emacs for new users
  2009-11-23 22:43         ` Per Starbäck
  2009-11-23 22:46           ` Lennart Borgman
@ 2009-11-23 23:55           ` Sebastian Rose
  2009-11-24  6:43           ` tomas
  2 siblings, 0 replies; 58+ messages in thread
From: Sebastian Rose @ 2009-11-23 23:55 UTC (permalink / raw)
  To: Per Starbäck; +Cc: Les Harris, Stephen Eilert, emacs-devel

Per Starbäck <per@starback.se> writes:
> I wrote
>> As for CUA I just thought of something. What do you think about having
>> s-x, s-c, s-v, s-z do the CUA
>> thing in Emacs? Many people have keyboards with C-, s- and M- modifier
>> keys. Maybe it would be acceptable
>> for those used to these bindings that in Emacs you have to use another
>> modifier key with "the normal stuff"
>> since the usual "Alt key" is used by "special emacs commands"?
>
> I should have written "the usual Control key" in the last line of course!
>
> I've read up on what the "Windows key" is used for in MS Windows a
> little now, and realize
> this probably wouldn't be possible under MS Windows, but maybe in GNU
> where that extra modifier
> key often is "super" and not used for much.


Well, since this the case since I use Emacs (10 years now), I use that
modifier key.

It's the one key binding that never broke. I'd suggest to _not_ bind
anything to it by default.

Also, keep in mind that lots of keyboards don't have that key (e.g. some
IBM keyboards).





  Sebastian




^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Emacs for new users
  2009-11-23 22:43         ` Per Starbäck
  2009-11-23 22:46           ` Lennart Borgman
  2009-11-23 23:55           ` Sebastian Rose
@ 2009-11-24  6:43           ` tomas
  2 siblings, 0 replies; 58+ messages in thread
From: tomas @ 2009-11-24  6:43 UTC (permalink / raw)
  To: Per Starbäck; +Cc: Les Harris, Stephen Eilert, emacs-devel

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On Mon, Nov 23, 2009 at 11:43:27PM +0100, Per Starbäck wrote:

[...]

> key often is "super" and not used for much.

Oh, no!

Please leave something for the window manager. Otherwise we aren't
allowed to complain that it takes away important things :-)

Regards
- -- tomás
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)

iD8DBQFLC4B8Bcgs9XrR2kYRAl5WAJ4lGnaTclR02oO1fjj6TSihlYMAegCeK61C
+YEAFWAg1OPvdigi4nRz+74=
=J/oD
-----END PGP SIGNATURE-----




^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Emacs for new users
  2009-11-23 17:05 ` Emacs for new users Stephen Eilert
@ 2009-11-24 14:10   ` Richard Stallman
  2009-11-24 14:43     ` Renaud Casenave-Péré
  2009-11-24 15:51     ` Lennart Borgman
  0 siblings, 2 replies; 58+ messages in thread
From: Richard Stallman @ 2009-11-24 14:10 UTC (permalink / raw)
  To: Stephen Eilert; +Cc: per, emacs-devel

Maybe we should have an "Emacs command immersion mode"
which disables all mouse clicks.




^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Emacs for new users
  2009-11-24 14:10   ` Richard Stallman
@ 2009-11-24 14:43     ` Renaud Casenave-Péré
  2009-11-24 16:10       ` Andreas Schwab
                         ` (2 more replies)
  2009-11-24 15:51     ` Lennart Borgman
  1 sibling, 3 replies; 58+ messages in thread
From: Renaud Casenave-Péré @ 2009-11-24 14:43 UTC (permalink / raw)
  To: rms; +Cc: per, spedrosa, emacs-devel

From: Richard Stallman <rms@gnu.org>
Subject: Re: Emacs for new users
Date: Tue, 24 Nov 2009 09:10:53 -0500

> Maybe we should have an "Emacs command immersion mode"
> which disables all mouse clicks.

`emacs -nw' ?

-- 
Renaud Casenave-Péré

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Emacs for new users
  2009-11-24 14:10   ` Richard Stallman
  2009-11-24 14:43     ` Renaud Casenave-Péré
@ 2009-11-24 15:51     ` Lennart Borgman
  2009-11-24 16:41       ` Drew Adams
  1 sibling, 1 reply; 58+ messages in thread
From: Lennart Borgman @ 2009-11-24 15:51 UTC (permalink / raw)
  To: rms; +Cc: per, Stephen Eilert, emacs-devel

On Tue, Nov 24, 2009 at 3:10 PM, Richard Stallman <rms@gnu.org> wrote:
> Maybe we should have an "Emacs command immersion mode"
> which disables all mouse clicks.


For beginners I think it would be good if when minibuffer is active
clicking in other windows did not work. Or moving to another window in
any other way.




^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Emacs for new users
  2009-11-24 14:43     ` Renaud Casenave-Péré
@ 2009-11-24 16:10       ` Andreas Schwab
  2009-11-25 21:01       ` Richard Stallman
  2009-11-30 23:02       ` Giorgos Keramidas
  2 siblings, 0 replies; 58+ messages in thread
From: Andreas Schwab @ 2009-11-24 16:10 UTC (permalink / raw)
  To: Renaud Casenave-Péré; +Cc: per, rms, spedrosa, emacs-devel

Renaud Casenave-Péré <renaud@casenave-pere.fr> writes:

> From: Richard Stallman <rms@gnu.org>
> Subject: Re: Emacs for new users
> Date: Tue, 24 Nov 2009 09:10:53 -0500
>
>> Maybe we should have an "Emacs command immersion mode"
>> which disables all mouse clicks.
>
> `emacs -nw' ?

M-x xterm-mouse-mode :-)

Andreas.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."




^ permalink raw reply	[flat|nested] 58+ messages in thread

* RE: Emacs for new users
  2009-11-24 15:51     ` Lennart Borgman
@ 2009-11-24 16:41       ` Drew Adams
  2009-11-24 17:15         ` Lennart Borgman
  0 siblings, 1 reply; 58+ messages in thread
From: Drew Adams @ 2009-11-24 16:41 UTC (permalink / raw)
  To: 'Lennart Borgman', rms; +Cc: per, 'Stephen Eilert', emacs-devel

> For beginners I think it would be good if when minibuffer is active
> clicking in other windows did not work. Or moving to another window in
> any other way.

Hi Lennart,

Why? What possible reason could you have for such a suggestion?

That would totally prevent using the mouse to interact with other buffers during
minibuffer input. You wouldn't even be able to choose a completion from
*Completions* using the mouse.

FWIW, Icicles lets you use the mouse (if you want) in several ways to interact
with other buffers. This would work against that. I imagine that other libraries
might offer similar features.

Even providing such a protective sandbox for beginners would be a big step
backwards. There is no reason that beginners shouldn't be able to use the mouse
during minibuffer interaction.

The OP mentioned beginner confusion in several areas while learning. (That's
what learning is about, BTW.) The relevant item here was the _query-replace_
dialog: using the mouse during query-replace. It was not about the interaction
between the mouse and minibuffer input in general.

*IF* we thought this was a big problem for query-replace (and I do not), then
the solution would be to fix the _query-replace_ dialog appropriately: either
block the mouse there (ignore it) or let you use it to interact elsewhere and
then resume query-replace seamlessly. There are so many things to learn about
query-replace, including the (normal) stop-and-resume possibilities, that this
is certainly not a biggee.

It's fine to look for and listen to newbie difficulties, and that can help us
improve Emacs - definitely. But there is a tendency here sometimes to want to go
off immediately, half-cocked, and redesign stuff willy nilly at the first report
of someone not having understood something or expecting something different.

Sheesh. For the most part, these are simply reports of how people learn Emacs.
They are interesting, and we can learn from them, but they are not necessarily
alarms or calls to action.

--

Learning Emacs is like learning to ride a bike. Maybe you were _used to_ a
tricycle and loved it, so maybe adding training wheels to your new big bike will
temporarily help you a bit to adapt to it. But plenty of bike newbies never used
training wheels - it can be done.  And even if you do use them, sooner or later
you need to get your balance and find out that riding a bike is _not_ the same
as riding a trike.

Or not. Imagine seeing veteran bike riders still using training wheels, because
they got so used to it and came to think of four wheels as naturally superior to
two. (That's the way I look at things like CUA mode, BTW... Oops; no flames
please.)

When you're learning to ride a bike, yes, it does seem like a big deal ("I'll
never get this"). But hey, it can be done; it's not that big a deal; and riding
without training wheels is what bike riding is really about. As long as you are
on 4 wheels, you are not bike-riding - you might think you are, but you're not.

No, I'm not saying that "real Emac users" do this or that. But if we want to
help newbies, we should concentrate on helping them learn Emacs, not only on
giving them what they expect or are already used to.





^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Emacs for new users
  2009-11-24 16:41       ` Drew Adams
@ 2009-11-24 17:15         ` Lennart Borgman
  2009-11-24 17:27           ` Chong Yidong
                             ` (2 more replies)
  0 siblings, 3 replies; 58+ messages in thread
From: Lennart Borgman @ 2009-11-24 17:15 UTC (permalink / raw)
  To: Drew Adams; +Cc: per, rms, Stephen Eilert, emacs-devel

On Tue, Nov 24, 2009 at 5:41 PM, Drew Adams <drew.adams@oracle.com> wrote:
>> For beginners I think it would be good if when minibuffer is active
>> clicking in other windows did not work. Or moving to another window in
>> any other way.
>
> Hi Lennart,
>
> Why? What possible reason could you have for such a suggestion?
>
> That would totally prevent using the mouse to interact with other buffers during
> minibuffer input. You wouldn't even be able to choose a completion from
> *Completions* using the mouse.


Sorry, you are right. I did not think of that kind of use.

What I meant was that they should not be allowed to leave the
minibuffer and go to another window. This is similar to how many GUI
programs work.

In some cases there are clever uses of other windows, for example the
one you mentioned. Such use should of course be allowed. (It is more
difficult to make that kind of use easy in Emacs since we can't for
example mark visually which window to interact with and which to not.
This is otherwise what many GUI applications do.)


> Sheesh. For the most part, these are simply reports of how people learn Emacs.
> They are interesting, and we can learn from them, but they are not necessarily
> alarms or calls to action.


They are useful.




^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Emacs for new users
  2009-11-24 17:15         ` Lennart Borgman
@ 2009-11-24 17:27           ` Chong Yidong
  2009-11-24 17:35             ` Lennart Borgman
  2009-11-24 17:51             ` Deniz Dogan
  2009-11-24 18:03           ` Drew Adams
  2009-11-25 21:02           ` Richard Stallman
  2 siblings, 2 replies; 58+ messages in thread
From: Chong Yidong @ 2009-11-24 17:27 UTC (permalink / raw)
  To: Lennart Borgman; +Cc: per, emacs-devel, rms, Drew Adams, Stephen Eilert

Lennart Borgman <lennart.borgman@gmail.com> writes:

> What I meant was that they should not be allowed to leave the
> minibuffer and go to another window. This is similar to how many GUI
> programs work.

This is a limitation of other programs.




^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Emacs for new users
  2009-11-24 17:27           ` Chong Yidong
@ 2009-11-24 17:35             ` Lennart Borgman
  2009-11-24 17:51             ` Deniz Dogan
  1 sibling, 0 replies; 58+ messages in thread
From: Lennart Borgman @ 2009-11-24 17:35 UTC (permalink / raw)
  To: Chong Yidong; +Cc: per, emacs-devel, rms, Drew Adams, Stephen Eilert

On Tue, Nov 24, 2009 at 6:27 PM, Chong Yidong <cyd@stupidchicken.com> wrote:
> Lennart Borgman <lennart.borgman@gmail.com> writes:
>
>> What I meant was that they should not be allowed to leave the
>> minibuffer and go to another window. This is similar to how many GUI
>> programs work.
>
> This is a limitation of other programs.

:-)

Or an inability of Emacs to guide users this way.

Actually this restriction is imposed when using y-or-n-p.




^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Emacs for new users
  2009-11-24 17:27           ` Chong Yidong
  2009-11-24 17:35             ` Lennart Borgman
@ 2009-11-24 17:51             ` Deniz Dogan
  2009-11-24 18:37               ` Chong Yidong
  1 sibling, 1 reply; 58+ messages in thread
From: Deniz Dogan @ 2009-11-24 17:51 UTC (permalink / raw)
  To: Chong Yidong
  Cc: rms, Lennart Borgman, Stephen Eilert, emacs-devel, per,
	Drew Adams

2009/11/24 Chong Yidong <cyd@stupidchicken.com>:
> Lennart Borgman <lennart.borgman@gmail.com> writes:
>
>> What I meant was that they should not be allowed to leave the
>> minibuffer and go to another window. This is similar to how many GUI
>> programs work.
>
> This is a limitation of other programs.
>
>
>

It is nevertheless possibly confusing to newcomers when they
accidentally exit the minibuffer. I remember getting bit by that a lot
myself when I was new to Emacs (which is not that long ago).

-- 
Deniz Dogan




^ permalink raw reply	[flat|nested] 58+ messages in thread

* RE: Emacs for new users
  2009-11-24 17:15         ` Lennart Borgman
  2009-11-24 17:27           ` Chong Yidong
@ 2009-11-24 18:03           ` Drew Adams
  2009-11-24 18:06             ` Lennart Borgman
  2009-11-25 21:02           ` Richard Stallman
  2 siblings, 1 reply; 58+ messages in thread
From: Drew Adams @ 2009-11-24 18:03 UTC (permalink / raw)
  To: 'Lennart Borgman'; +Cc: per, rms, 'Stephen Eilert', emacs-devel

> >> For beginners I think it would be good if when minibuffer is active
> >> clicking in other windows did not work. Or moving to 
> >> another window in any other way.
> >
> > Why? What possible reason could you have for such a suggestion?
> >
> > That would totally prevent using the mouse to interact with 
> > other buffers during minibuffer input. You wouldn't even be
> > able to choose a completion from *Completions* using the mouse.
> 
> Sorry, you are right. I did not think of that kind of use.
> 
> What I meant was that they should not be allowed to leave the
> minibuffer and go to another window. This is similar to how many GUI
> programs work.

I understand and understood. You didn't mean *Completions* (which is another
window, BTW). I didn't either.

It's important (to me) that users be able to interact normally with Emacs while
the minibuffer is active, that is, as normally as possible except for whatever
the minibuffer must modify wrt behavior.

I do not want to see minibuffer inputting become something strictly modal that
locks you into some restricted dialog. Users should be able to go anywhere and
do pretty much anything while the minibuffer is active.

> In some cases there are clever uses of other windows, for example the
> one you mentioned. Such use should of course be allowed. (It is more
> difficult to make that kind of use easy in Emacs since we can't for
> example mark visually which window to interact with and which to not.
> This is otherwise what many GUI applications do.)

I do not want to in any way restrict "which window to interact with" during
minibuffer input. Pretty much the only thing the minibuffer being active should
change is the set of keybindings that are current in the minibuffer itself.

The minibuffer can be active without the minibuffer being the current buffer.
Think of the minibuffer being active as you would think of the debugger being
active. When you are in the debugger buffer or the minibuffer buffer, certain
key bindings and behavior are in effect. But nothing prevents you from doing
things (pretty much anything) elsewhere. And you can have recursive minibuffers
and recursive debuggers.

It seems like you are thinking of the minibuffer in a very restricted way, akin
to modal dialog box. It is not modal in that way and should not be.





^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Emacs for new users
  2009-11-24 18:03           ` Drew Adams
@ 2009-11-24 18:06             ` Lennart Borgman
  2009-11-24 18:22               ` Drew Adams
  0 siblings, 1 reply; 58+ messages in thread
From: Lennart Borgman @ 2009-11-24 18:06 UTC (permalink / raw)
  To: Drew Adams; +Cc: per, rms, Stephen Eilert, emacs-devel

On Tue, Nov 24, 2009 at 7:03 PM, Drew Adams <drew.adams@oracle.com> wrote:
>
> I do not want to see minibuffer inputting become something strictly modal that
> locks you into some restricted dialog. Users should be able to go anywhere and
> do pretty much anything while the minibuffer is active.


I said for new users.


> It seems like you are thinking of the minibuffer in a very restricted way, akin
> to modal dialog box. It is not modal in that way and should not be.


Maybe it seems like that but I don't.

However I am not at all sure what states you can get into when you
leave minibuffer. What is allowed and what is not? Are you sure?




^ permalink raw reply	[flat|nested] 58+ messages in thread

* RE: Emacs for new users
  2009-11-24 18:06             ` Lennart Borgman
@ 2009-11-24 18:22               ` Drew Adams
  2009-11-24 18:30                 ` Lennart Borgman
  0 siblings, 1 reply; 58+ messages in thread
From: Drew Adams @ 2009-11-24 18:22 UTC (permalink / raw)
  To: 'Lennart Borgman'; +Cc: per, rms, 'Stephen Eilert', emacs-devel

> > I do not want to see minibuffer inputting become something 
> > strictly modal that locks you into some restricted dialog.
> > Users should be able to go anywhere and
> > do pretty much anything while the minibuffer is active.
> 
> I said for new users.

I know you did.

I do not want to see the minibuffer becoming like that for new users either.
 
> However I am not at all sure what states you can get into when you
> leave minibuffer. What is allowed and what is not? Are you sure?

Am I sure of what? Just try it. You can do whatever you like outside the
minibuffer. Just move to another buffer (e.g. use `C-x o' or click `mouse-1' in
another window) without exiting the minibuffer with `RET' or `C-g'.

If you `enable-recursive-minibuffers', then you can even activate the minibuffer
again (another level) - e.g. you can use `M-x' to invoke a command, then return
to the previous state (previous minibuffer level).





^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Emacs for new users
  2009-11-24 18:22               ` Drew Adams
@ 2009-11-24 18:30                 ` Lennart Borgman
  2009-11-24 19:35                   ` Drew Adams
  0 siblings, 1 reply; 58+ messages in thread
From: Lennart Borgman @ 2009-11-24 18:30 UTC (permalink / raw)
  To: Drew Adams; +Cc: per, rms, Stephen Eilert, emacs-devel

On Tue, Nov 24, 2009 at 7:22 PM, Drew Adams <drew.adams@oracle.com> wrote:
>> > I do not want to see minibuffer inputting become something
>> > strictly modal that locks you into some restricted dialog.
>> > Users should be able to go anywhere and
>> > do pretty much anything while the minibuffer is active.
>>
>> I said for new users.
>
> I do not want to see the minibuffer becoming like that for new users either.


Maybe they would want it though.


>> However I am not at all sure what states you can get into when you
>> leave minibuffer. What is allowed and what is not? Are you sure?
>
> Am I sure of what? Just try it. You can do whatever you like outside the
> minibuffer. Just move to another buffer (e.g. use `C-x o' or click `mouse-1' in
> another window) without exiting the minibuffer with `RET' or `C-g'.
>
> If you `enable-recursive-minibuffers', then you can even activate the minibuffer
> again (another level) - e.g. you can use `M-x' to invoke a command, then return
> to the previous state (previous minibuffer level).


So I set enable-recursive-minibuffer, press M-x, switch to a new
frame, press M-x ...




^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Emacs for new users
  2009-11-24 17:51             ` Deniz Dogan
@ 2009-11-24 18:37               ` Chong Yidong
  0 siblings, 0 replies; 58+ messages in thread
From: Chong Yidong @ 2009-11-24 18:37 UTC (permalink / raw)
  To: Deniz Dogan
  Cc: rms, Lennart Borgman, Stephen Eilert, emacs-devel, per,
	Drew Adams

Deniz Dogan <deniz.a.m.dogan@gmail.com> writes:

> 2009/11/24 Chong Yidong <cyd@stupidchicken.com>:
>> Lennart Borgman <lennart.borgman@gmail.com> writes:
>>
>>> What I meant was that they should not be allowed to leave the
>>> minibuffer and go to another window. This is similar to how many GUI
>>> programs work.
>>
>> This is a limitation of other programs.
>
> It is nevertheless possibly confusing to newcomers when they
> accidentally exit the minibuffer. I remember getting bit by that a lot
> myself when I was new to Emacs (which is not that long ago).

There are plenty of people that consider modal dialogs a usability
problem, and are trying to reduce their use in other applications.  (And
these are applications typically aren't anywhere nearly as text-centric
as Emacs, where it's a real benefit to be able to switch windows and
manipulate text without destroying your minibuffer contents.)  I think
the disadvantages of increased modality quite clearly outweigh any
advantage.




^ permalink raw reply	[flat|nested] 58+ messages in thread

* RE: Emacs for new users
  2009-11-24 18:30                 ` Lennart Borgman
@ 2009-11-24 19:35                   ` Drew Adams
  2009-11-24 19:40                     ` Lennart Borgman
  0 siblings, 1 reply; 58+ messages in thread
From: Drew Adams @ 2009-11-24 19:35 UTC (permalink / raw)
  To: 'Lennart Borgman'; +Cc: per, rms, 'Stephen Eilert', emacs-devel

> >> > I do not want to see minibuffer inputting become something
> >> > strictly modal that locks you into some restricted dialog.
> >> > Users should be able to go anywhere and
> >> > do pretty much anything while the minibuffer is active.
> >>
> >> I said for new users.
> >
> > I do not want to see the minibuffer becoming like that for 
> > new users either.
> 
> Maybe they would want it though.

Maybe. (How do they know what they want or need wrt _learning Emacs_?)

But is that what we want for them? Who is in a better position to design Emacs
to help new users, new users themselves or people familiar with Emacs (and with
new-user reports)?

Someone with no experience of Emacs might have certain expectations and a
certain idea of text editing. But those expectations and that idea do not
necessarily correspond to what Emacs is or to how best to use Emacs.

Being a newbie is not _only_ about carrying the baggage of your previous
experience. It is also about learning something new. Often it is about
(sometimes even _mainly_ about) shedding preconceptions and changing one's
mental model.

Sure, we need to be aware of baggage newbies might be carrying, but they are for
the most part ignorant of the new things that they will be learning. It is up to
us to design Emacs not only to welcome them but to help them learn about this
new world.

> So I set enable-recursive-minibuffer, press M-x, switch to a new
> frame, press M-x ...

Your question (or comment?) is what, exactly?





^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Emacs for new users
  2009-11-24 19:35                   ` Drew Adams
@ 2009-11-24 19:40                     ` Lennart Borgman
  0 siblings, 0 replies; 58+ messages in thread
From: Lennart Borgman @ 2009-11-24 19:40 UTC (permalink / raw)
  To: Drew Adams; +Cc: per, rms, Stephen Eilert, emacs-devel

On Tue, Nov 24, 2009 at 8:35 PM, Drew Adams <drew.adams@oracle.com> wrote:
>
> Maybe. (How do they know what they want or need wrt _learning Emacs_?)
>
> But is that what we want for them? Who is in a better position to design Emacs
> to help new users, new users themselves or people familiar with Emacs (and with
> new-user reports)?
>
> Someone with no experience of Emacs might have certain expectations and a
> certain idea of text editing. But those expectations and that idea do not
> necessarily correspond to what Emacs is or to how best to use Emacs.


We discussed this at length some years ago. My point is that it is
much easier to learn something if the complexity is not to high at the
moment. (It should not be too low either.)

Compare games like Brain Workshop for example. You actually seem to
train your brain into a better mode with it. Some people get
incredible results (at least to my standards) and I believe that comes
from that the complexity is just a little bit more than they can do.
Not more. Not less.

Is not Emacs after all meant to be a brain exercise? ;-)




^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Emacs for new users
  2009-11-24 14:43     ` Renaud Casenave-Péré
  2009-11-24 16:10       ` Andreas Schwab
@ 2009-11-25 21:01       ` Richard Stallman
  2009-11-30 23:02       ` Giorgos Keramidas
  2 siblings, 0 replies; 58+ messages in thread
From: Richard Stallman @ 2009-11-25 21:01 UTC (permalink / raw)
  To: Renaud Casenave-Péré; +Cc: per, spedrosa, emacs-devel

    > Maybe we should have an "Emacs command immersion mode"
    > which disables all mouse clicks.

    `emacs -nw' ?

No good for the purpose -- it has many other effects too.




^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Emacs for new users
  2009-11-24 17:15         ` Lennart Borgman
  2009-11-24 17:27           ` Chong Yidong
  2009-11-24 18:03           ` Drew Adams
@ 2009-11-25 21:02           ` Richard Stallman
  2009-11-25 21:04             ` Lennart Borgman
  2009-11-25 21:57             ` Fernando C.V.
  2 siblings, 2 replies; 58+ messages in thread
From: Richard Stallman @ 2009-11-25 21:02 UTC (permalink / raw)
  To: Lennart Borgman; +Cc: per, spedrosa, drew.adams, emacs-devel

You seem to be discussing a way to avoid certain confusing situations.
That might be a good idea, but my idea of a "keyboard immersion mode"
(in which mouse clicks don't do anything) has a different purpose.

This is not meant to be more convenient or more foolproof.  It is
meant to push the user to use and learn the key bindings.





^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Emacs for new users
  2009-11-25 21:02           ` Richard Stallman
@ 2009-11-25 21:04             ` Lennart Borgman
  2009-11-25 21:57             ` Fernando C.V.
  1 sibling, 0 replies; 58+ messages in thread
From: Lennart Borgman @ 2009-11-25 21:04 UTC (permalink / raw)
  To: rms; +Cc: per, spedrosa, drew.adams, emacs-devel

On Wed, Nov 25, 2009 at 10:02 PM, Richard Stallman <rms@gnu.org> wrote:
> You seem to be discussing a way to avoid certain confusing situations.
> That might be a good idea, but my idea of a "keyboard immersion mode"
> (in which mouse clicks don't do anything) has a different purpose.

Yes.

> This is not meant to be more convenient or more foolproof.  It is
> meant to push the user to use and learn the key bindings.

That would be doable with emulation-mode-map-alists.




^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Emacs for new users
  2009-11-25 21:02           ` Richard Stallman
  2009-11-25 21:04             ` Lennart Borgman
@ 2009-11-25 21:57             ` Fernando C.V.
  2009-11-25 22:05               ` Drew Adams
  2009-11-26  6:23               ` Richard Stallman
  1 sibling, 2 replies; 58+ messages in thread
From: Fernando C.V. @ 2009-11-25 21:57 UTC (permalink / raw)
  To: rms; +Cc: per, Lennart Borgman, drew.adams, spedrosa, emacs-devel

> This is not meant to be more convenient or more foolproof.  It is
> meant to push the user to use and learn the key bindings.

Maybe it could also be useful if it was possible to disable the use of
the arrow keys and the next/prev page, home, end, etc, for the people
who want to learn the Control and Meta keybindings.

Maybe display a message with the right keybinding to press.




^ permalink raw reply	[flat|nested] 58+ messages in thread

* RE: Emacs for new users
  2009-11-25 21:57             ` Fernando C.V.
@ 2009-11-25 22:05               ` Drew Adams
  2009-11-25 22:27                 ` Fernando C.V.
  2009-11-26  6:23               ` Richard Stallman
  1 sibling, 1 reply; 58+ messages in thread
From: Drew Adams @ 2009-11-25 22:05 UTC (permalink / raw)
  To: ferkiwi+a, rms; +Cc: per, 'Lennart Borgman', spedrosa, emacs-devel

> > This is not meant to be more convenient or more foolproof.  It is
> > meant to push the user to use and learn the key bindings.
> 
> Maybe it could also be useful if it was possible to disable the use of
> the arrow keys and the next/prev page, home, end, etc, for the people
> who want to learn the Control and Meta keybindings.

We could disable the keyboard and the mouse, and teach the Zen way.

We could sell hair shirts and nail beds at www.gnu.org, to help new users get in
the groove.





^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Emacs for new users
  2009-11-25 22:05               ` Drew Adams
@ 2009-11-25 22:27                 ` Fernando C.V.
  2009-11-25 22:34                   ` Drew Adams
  0 siblings, 1 reply; 58+ messages in thread
From: Fernando C.V. @ 2009-11-25 22:27 UTC (permalink / raw)
  To: Drew Adams; +Cc: per, Lennart Borgman, rms, spedrosa, emacs-devel

> We could disable the keyboard and the mouse, and teach the Zen way.
>
> We could sell hair shirts and nail beds at www.gnu.org, to help new users get in
> the groove.

I didn't mean to suggest it enabled by default, just as an optional
mode to help the people who want to unlearn the use of the arrow keys
(I read some posts in reddit about this and some people showed some
lisp for disabling the arrow keys).

Anyway, it was just a suggestion.




^ permalink raw reply	[flat|nested] 58+ messages in thread

* RE: Emacs for new users
  2009-11-25 22:27                 ` Fernando C.V.
@ 2009-11-25 22:34                   ` Drew Adams
  0 siblings, 0 replies; 58+ messages in thread
From: Drew Adams @ 2009-11-25 22:34 UTC (permalink / raw)
  To: ferkiwi+a; +Cc: per, 'Lennart Borgman', rms, spedrosa, emacs-devel

> > We could disable the keyboard and the mouse, and teach the Zen way.
> > We could sell hair shirts and nail beds at www.gnu.org, to 
> > help new users get in the groove.
> 
> I didn't mean to suggest it enabled by default, just as an optional
> mode to help the people who want to unlearn the use of the arrow keys
> (I read some posts in reddit about this and some people showed some
> lisp for disabling the arrow keys). Anyway, it was just a suggestion.

Sorry; I was just kidding.





^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Emacs for new users
  2009-11-25 21:57             ` Fernando C.V.
  2009-11-25 22:05               ` Drew Adams
@ 2009-11-26  6:23               ` Richard Stallman
  1 sibling, 0 replies; 58+ messages in thread
From: Richard Stallman @ 2009-11-26  6:23 UTC (permalink / raw)
  To: ferkiwi+a; +Cc: per, lennart.borgman, drew.adams, spedrosa, emacs-devel

    Maybe it could also be useful if it was possible to disable the use of
    the arrow keys and the next/prev page, home, end, etc, for the people
    who want to learn the Control and Meta keybindings.

Indeed, that would also be a good idea for the key bindings immersion
mode.




^ permalink raw reply	[flat|nested] 58+ messages in thread

* Beeping (was: Emacs for new users)
  2009-11-23 20:49     ` Chong Yidong
@ 2009-11-26 22:35       ` Juri Linkov
  2009-11-26 23:12         ` Lennart Borgman
  0 siblings, 1 reply; 58+ messages in thread
From: Juri Linkov @ 2009-11-26 22:35 UTC (permalink / raw)
  To: Chong Yidong; +Cc: Per Starbäck, emacs-devel, Giuseppe Scrivano, 1305

>>>> * beeping is often disturbing and unexpected, in particular for
>>>> scrolling past the beginning or end of the
>>>>   buffer with the scroll wheel. (I agree. That's hardly an error.)
>>>
>>> yes, I agree with you, beeping is often disturbing.  You can disable it,
>>> changing the value of visible-bell to t:
>
>> This is bug#1305.  That discussion never came to a conclusion.
>
> One complication, now that I recall, is that we really do want to signal
> an error for beginning-of-buffer and end-of-buffer, so that keyboard
> macros will terminate.
>
> The problem is that we have no mechanism for telling Emacs not to ring
> the bell for certain classes of errors.

I suggest to implement this mechanism by adding a new symbol property,
e.g. `error-bell' by analogy with properties `error-message' and
`error-conditions', with possible values t, nil and `visible'.

And to put this property with the value nil on `beginning-of-buffer',
`end-of-buffer' and `keyboard-quit' - most annoying beeping commands.

> But I'm not sure Emacs should even be in the bell-ringing business,
> anyway; it's a barbaric practice, and an echo-area message IMHO
> suffices.

Yes, this practice comes from ancient times of beeping keyboards :-)

-- 
Juri Linkov
http://www.jurta.org/emacs/




^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Beeping (was: Emacs for new users)
  2009-11-26 22:35       ` Beeping (was: Emacs for new users) Juri Linkov
@ 2009-11-26 23:12         ` Lennart Borgman
  2009-11-27  4:12           ` Beeping Stefan Monnier
  0 siblings, 1 reply; 58+ messages in thread
From: Lennart Borgman @ 2009-11-26 23:12 UTC (permalink / raw)
  To: Juri Linkov
  Cc: Chong Yidong, Per Starbäck, 1305, Giuseppe Scrivano,
	emacs-devel

On Thu, Nov 26, 2009 at 11:35 PM, Juri Linkov <juri@jurta.org> wrote:
>>
>> The problem is that we have no mechanism for telling Emacs not to ring
>> the bell for certain classes of errors.
>
> I suggest to implement this mechanism by adding a new symbol property,
> e.g. `error-bell' by analogy with properties `error-message' and
> `error-conditions', with possible values t, nil and `visible'.
>
> And to put this property with the value nil on `beginning-of-buffer',
> `end-of-buffer' and `keyboard-quit' - most annoying beeping commands.


Maybe the problem is a bit different. There is currently no dedicated
mechanism in Emacs to go to command level. Instead a lot of functions
throws an error when they want to go to command level.

Could we not implement something like (command-level) akin to (top-level)?




^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Beeping
  2009-11-26 23:12         ` Lennart Borgman
@ 2009-11-27  4:12           ` Stefan Monnier
  2009-11-27  6:48             ` Beeping Lennart Borgman
  0 siblings, 1 reply; 58+ messages in thread
From: Stefan Monnier @ 2009-11-27  4:12 UTC (permalink / raw)
  To: Lennart Borgman
  Cc: Chong Yidong, Giuseppe Scrivano, emacs-devel, Juri Linkov,
	Per Starbäck, 1305

> Maybe the problem is a bit different. There is currently no dedicated
> mechanism in Emacs to go to command level. Instead a lot of functions
> throws an error when they want to go to command level.

> Could we not implement something like (command-level) akin to (top-level)?

I think there's a misunderstanding here.  Emacs usually tries to make
sure commands do *something*, because it' good to return feedback.
So when they don't, they often like to beep to indicate that they
couldn't do what they were asked to do.

I dislike the beep, so I always use the visual-bell instead.  I don't
think turning the bell into nothing at all is a good option.  I'd rather
try and address the reasons that prevent the visual-bell from being
the default.


        Stefan




^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Beeping
  2009-11-27  4:12           ` Beeping Stefan Monnier
@ 2009-11-27  6:48             ` Lennart Borgman
  2009-11-27 19:25               ` Beeping Stefan Monnier
  0 siblings, 1 reply; 58+ messages in thread
From: Lennart Borgman @ 2009-11-27  6:48 UTC (permalink / raw)
  To: Stefan Monnier
  Cc: Chong Yidong, Giuseppe Scrivano, emacs-devel, Juri Linkov,
	Per Starbäck, 1305

2009/11/27 Stefan Monnier <monnier@iro.umontreal.ca>:
>> Maybe the problem is a bit different. There is currently no dedicated
>> mechanism in Emacs to go to command level. Instead a lot of functions
>> throws an error when they want to go to command level.
>
>> Could we not implement something like (command-level) akin to (top-level)?
>
> I think there's a misunderstanding here.  Emacs usually tries to make
> sure commands do *something*, because it' good to return feedback.
> So when they don't, they often like to beep to indicate that they
> couldn't do what they were asked to do.


As an example of what I mean look at what windmove-left does when
there is no window to the left. It then raises an error.

If debug-on-error is true I then get a chance to debug my behaviour. I
am not sure that makes sense.

The behaviour is different, but I think it should be similar to what
scroll-down/up does when it reaches the border. I think there should
be a unified behaviour. Making the visual bell default seems good, but
why not implement it as `command-level'?


> I dislike the beep, so I always use the visual-bell instead.  I don't
> think turning the bell into nothing at all is a good option.  I'd rather
> try and address the reasons that prevent the visual-bell from being
> the default.
>
>
>        Stefan
>




^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Beeping
  2009-11-27  6:48             ` Beeping Lennart Borgman
@ 2009-11-27 19:25               ` Stefan Monnier
  2009-11-27 20:25                 ` Beeping Lennart Borgman
  0 siblings, 1 reply; 58+ messages in thread
From: Stefan Monnier @ 2009-11-27 19:25 UTC (permalink / raw)
  To: Lennart Borgman
  Cc: Chong Yidong, Giuseppe Scrivano, emacs-devel, Juri Linkov,
	Per Starbäck, 1305

> As an example of what I mean look at what windmove-left does when
> there is no window to the left. It then raises an error.
> If debug-on-error is true I then get a chance to debug my behaviour. I
> am not sure that makes sense.

That's a problem between windmove and debug-ignored-errors.
BTW, I'd welcome a patch that introduces a new error `user-error' and
then changes calls to `error' where the error message is in
debug-ignored-errors to signal `user-error' instead.

> The behaviour is different, but I think it should be similar to what
> scroll-down/up does when it reaches the border. I think there should
> be a unified behaviour. Making the visual bell default seems good, but
> why not implement it as `command-level'?

That's already what "an error that's in debug-ignored-errors" does.


        Stefan




^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Beeping
  2009-11-27 19:25               ` Beeping Stefan Monnier
@ 2009-11-27 20:25                 ` Lennart Borgman
  2009-11-27 23:12                   ` Beeping Stefan Monnier
  0 siblings, 1 reply; 58+ messages in thread
From: Lennart Borgman @ 2009-11-27 20:25 UTC (permalink / raw)
  To: Stefan Monnier
  Cc: Chong Yidong, Giuseppe Scrivano, emacs-devel, Juri Linkov,
	Per Starbäck, 1305

2009/11/27 Stefan Monnier <monnier@iro.umontreal.ca>:
>> As an example of what I mean look at what windmove-left does when
>> there is no window to the left. It then raises an error.
>> If debug-on-error is true I then get a chance to debug my behaviour. I
>> am not sure that makes sense.
>
> That's a problem between windmove and debug-ignored-errors.
> BTW, I'd welcome a patch that introduces a new error `user-error' and
> then changes calls to `error' where the error message is in
> debug-ignored-errors to signal `user-error' instead.


You mean that debug-ignored-errors should just be '(user-error)?

Isn't there still a problem with condition-case then? Or perhaps it
could be tamed to pass on user-error?


>> The behaviour is different, but I think it should be similar to what
>> scroll-down/up does when it reaches the border. I think there should
>> be a unified behaviour. Making the visual bell default seems good, but
>> why not implement it as `command-level'?
>
> That's already what "an error that's in debug-ignored-errors" does.
>
>
>        Stefan
>




^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Beeping
  2009-11-27 20:25                 ` Beeping Lennart Borgman
@ 2009-11-27 23:12                   ` Stefan Monnier
  2009-11-27 23:15                     ` Beeping Lennart Borgman
  0 siblings, 1 reply; 58+ messages in thread
From: Stefan Monnier @ 2009-11-27 23:12 UTC (permalink / raw)
  To: Lennart Borgman
  Cc: Juri Linkov, Chong Yidong, Per Starbäck, Giuseppe Scrivano,
	emacs-devel

>> That's a problem between windmove and debug-ignored-errors.
>> BTW, I'd welcome a patch that introduces a new error `user-error' and
>> then changes calls to `error' where the error message is in
>> debug-ignored-errors to signal `user-error' instead.
> You mean that debug-ignored-errors should just be '(user-error)?

Pretty much, yes.

> Isn't there still a problem with condition-case then? Or perhaps it
> could be tamed to pass on user-error?

I don't know what problem you're thinking of.


        Stefan




^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Beeping
  2009-11-27 23:12                   ` Beeping Stefan Monnier
@ 2009-11-27 23:15                     ` Lennart Borgman
  2009-11-28  1:49                       ` Beeping Stefan Monnier
  0 siblings, 1 reply; 58+ messages in thread
From: Lennart Borgman @ 2009-11-27 23:15 UTC (permalink / raw)
  To: Stefan Monnier
  Cc: Juri Linkov, Chong Yidong, Per Starbäck, Giuseppe Scrivano,
	emacs-devel

On Sat, Nov 28, 2009 at 12:12 AM, Stefan Monnier
<monnier@iro.umontreal.ca> wrote:
>>> That's a problem between windmove and debug-ignored-errors.
>>> BTW, I'd welcome a patch that introduces a new error `user-error' and
>>> then changes calls to `error' where the error message is in
>>> debug-ignored-errors to signal `user-error' instead.
>> You mean that debug-ignored-errors should just be '(user-error)?
>
> Pretty much, yes.

Ok.

>> Isn't there still a problem with condition-case then? Or perhaps it
>> could be tamed to pass on user-error?
>
> I don't know what problem you're thinking of.

That the intention is going to top-level and condition-case might stop
it. But I do not know what is best to do. user-error will really fit
best in command functions. It those are called by other functions the
semantics is a bit hard to define (or at least use).




^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Beeping
  2009-11-27 23:15                     ` Beeping Lennart Borgman
@ 2009-11-28  1:49                       ` Stefan Monnier
  2009-11-28  2:47                         ` Beeping Lennart Borgman
  0 siblings, 1 reply; 58+ messages in thread
From: Stefan Monnier @ 2009-11-28  1:49 UTC (permalink / raw)
  To: Lennart Borgman
  Cc: Juri Linkov, Chong Yidong, Per Starbäck, Giuseppe Scrivano,
	emacs-devel

>>> Isn't there still a problem with condition-case then? Or perhaps it
>>> could be tamed to pass on user-error?
>> I don't know what problem you're thinking of.
> That the intention is going to top-level and condition-case might stop
> it.  But I do not know what is best to do.  user-error will really fit
> best in command functions.  It those are called by other functions the
> semantics is a bit hard to define (or at least use).

Usually the `user-error' situations are situations which are expected to
be pilot errors rather than bugs, but you can never be sure since
commands can also be called as functions, so the "pilot" may be another
piece of Lisp code.  So condition-case needs to be able to catch them.


        Stefan




^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Beeping
  2009-11-28  1:49                       ` Beeping Stefan Monnier
@ 2009-11-28  2:47                         ` Lennart Borgman
  0 siblings, 0 replies; 58+ messages in thread
From: Lennart Borgman @ 2009-11-28  2:47 UTC (permalink / raw)
  To: Stefan Monnier
  Cc: Juri Linkov, Chong Yidong, Per Starbäck, Giuseppe Scrivano,
	emacs-devel

[-- Attachment #1: Type: text/plain, Size: 976 bytes --]

On Sat, Nov 28, 2009 at 2:49 AM, Stefan Monnier
<monnier@iro.umontreal.ca> wrote:
>>>> Isn't there still a problem with condition-case then? Or perhaps it
>>>> could be tamed to pass on user-error?
>>> I don't know what problem you're thinking of.
>> That the intention is going to top-level and condition-case might stop
>> it.  But I do not know what is best to do.  user-error will really fit
>> best in command functions.  It those are called by other functions the
>> semantics is a bit hard to define (or at least use).
>
> Usually the `user-error' situations are situations which are expected to
> be pilot errors rather than bugs, but you can never be sure since
> commands can also be called as functions, so the "pilot" may be another
> piece of Lisp code.  So condition-case needs to be able to catch them.


So here is the patch. There are some "fix-me":s.

I tried to convert some (error ...) to (user-error ...) where it
seemed to apply.

[-- Attachment #2: patch-CvsU091127.diff --]
[-- Type: text/x-patch, Size: 107748 bytes --]

? lib-src/cl-ec-new.cmd
? site-lisp/subdirs.el
Index: lisp/autorevert.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/autorevert.el,v
retrieving revision 1.69
diff -b -u -r1.69 autorevert.el
--- lisp/autorevert.el	2 Aug 2009 17:20:39 -0000	1.69
+++ lisp/autorevert.el	28 Nov 2009 01:41:23 -0000
@@ -334,7 +334,7 @@
   (when auto-revert-tail-mode
     (unless buffer-file-name
       (auto-revert-tail-mode 0)
-      (error "This buffer is not visiting a file"))
+      (user-error "This buffer is not visiting a file"))
     (if (and (buffer-modified-p)
 	     (zerop auto-revert-tail-pos) ; library was loaded only after finding file
 	     (not (y-or-n-p "Buffer is modified, so tail offset may be wrong.  Proceed? ")))
Index: lisp/bindings.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/bindings.el,v
retrieving revision 1.234
diff -b -u -r1.234 bindings.el
--- lisp/bindings.el	15 Nov 2009 20:25:58 -0000	1.234
+++ lisp/bindings.el	28 Nov 2009 01:18:40 -0000
@@ -643,21 +643,21 @@
       `(beginning-of-line beginning-of-buffer end-of-line
 	end-of-buffer end-of-file buffer-read-only
 	file-supersession
-      	,(purecopy "^Previous command was not a yank$")
-	,(purecopy "^Minibuffer window is not active$")
-	,(purecopy "^No previous history search regexp$")
-	,(purecopy "^No later matching history item$")
-	,(purecopy "^No earlier matching history item$")
-	,(purecopy "^End of history; no default available$")
-	,(purecopy "^End of defaults; no next item$")
-	,(purecopy "^Beginning of history; no preceding item$")
-	,(purecopy "^No recursive edit is in progress$")
-	,(purecopy "^Changes to be undone are outside visible portion of buffer$")
-	,(purecopy "^No undo information in this buffer$")
-	,(purecopy "^No further undo information")
-	,(purecopy "^Save not confirmed$")
-	,(purecopy "^Recover-file cancelled\\.$")
-	,(purecopy "^Cannot switch buffers in a dedicated window$")
+      	;;,(purecopy "^Previous command was not a yank$")
+	;;,(purecopy "^Minibuffer window is not active$")
+	;;,(purecopy "^No previous history search regexp$")
+	;;,(purecopy "^No later matching history item$")
+	;;,(purecopy "^No earlier matching history item$")
+	;;,(purecopy "^End of history; no default available$")
+	;;,(purecopy "^End of defaults; no next item$")
+	;;,(purecopy "^Beginning of history; no preceding item$")
+	;;,(purecopy "^No recursive edit is in progress$")
+	;;,(purecopy "^Changes to be undone are outside visible portion of buffer$")
+	;;,(purecopy "^No undo information in this buffer$")
+	;;,(purecopy "^No further undo information")
+	;;,(purecopy "^Save not confirmed$")
+	;;,(purecopy "^Recover-file cancelled\\.$")
+	;;,(purecopy "^Cannot switch buffers in a dedicated window$")
         ))
 
 
Index: lisp/chistory.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/chistory.el,v
retrieving revision 1.30
diff -b -u -r1.30 chistory.el
--- lisp/chistory.el	13 Nov 2009 22:19:50 -0000	1.30
+++ lisp/chistory.el	28 Nov 2009 01:47:12 -0000
@@ -57,7 +57,7 @@
 	  (setq what (car history))
 	(setq history (cdr history))))
     (if (not what)
-	(error "Command history exhausted")
+	(user-error "Command history exhausted")
       ;; Try to remove any useless command history element for this command.
       (if (eq (car (car command-history)) 'repeat-matching-complex-command)
 	  (setq command-history (cdr command-history)))
Index: lisp/comint.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/comint.el,v
retrieving revision 1.400
diff -b -u -r1.400 comint.el
--- lisp/comint.el	23 Nov 2009 20:31:11 -0000	1.400
+++ lisp/comint.el	27 Nov 2009 23:01:03 -0000
@@ -1041,10 +1041,10 @@
 (defun comint-search-arg (arg)
   ;; First make sure there is a ring and that we are after the process mark
   (cond ((not (comint-after-pmark-p))
-	 (error "Not at command line"))
+	 (user-error "Not at command line"))
 	((or (null comint-input-ring)
 	     (ring-empty-p comint-input-ring))
-	 (error "Empty input ring"))
+	 (user-error "Empty input ring"))
 	((zerop arg)
 	 ;; arg of zero resets search from beginning, and uses arg of 1
 	 (setq comint-input-ring-index nil)
@@ -1111,7 +1111,7 @@
 Moves relative to START, or `comint-input-ring-index'."
   (if (or (not (ring-p comint-input-ring))
 	  (ring-empty-p comint-input-ring))
-      (error "No history"))
+      (user-error "No history"))
   (let* ((len (ring-length comint-input-ring))
 	 (motion (if (> arg 0) 1 -1))
 	 (n (mod (- (or start (comint-search-start arg)) motion) len))
@@ -1151,7 +1151,7 @@
   (let ((pos (comint-previous-matching-input-string-position regexp n)))
     ;; Has a match been found?
     (if (null pos)
-	(error "Not found")
+	(user-error "Not found")
       ;; If leaving the edit line, save partial input
       (if (null comint-input-ring-index)	;not yet on ring
 	  (setq comint-stored-incomplete-input
@@ -1316,7 +1316,7 @@
 		 (goto-char (match-beginning 0))
 		 (if (not (search-forward old pos t))
 		     (or silent
-			 (error "Not found"))
+			 (user-error "Not found"))
 		   (replace-match new t t)
 		   (message "History item: substituted"))))
 	      (t
@@ -1715,7 +1715,7 @@
   (interactive)
   ;; Note that the input string does not include its terminal newline.
   (let ((proc (get-buffer-process (current-buffer))))
-    (if (not proc) (error "Current buffer has no process")
+    (if (not proc) (user-error "Current buffer has no process")
       (widen)
       (let* ((pmark (process-mark proc))
              (intxt (if (>= (point) (marker-position pmark))
@@ -2130,7 +2130,7 @@
   (let ((input (funcall comint-get-old-input))
 	(process (get-buffer-process (current-buffer))))
     (if (not process)
-	(error "Current buffer has no process")
+	(user-error "Current buffer has no process")
       (goto-char (process-mark process))
       (insert input))))
 
@@ -2439,7 +2439,7 @@
 	    (save-excursion
 	      (while (/= n 0)
 		(unless (re-search-backward regexp nil t dir)
-		  (error "Not found"))
+		  (user-error "Not found"))
 		(when (eq (get-char-property (point) 'field) 'input)
 		  (setq n (- n dir))))
 	      (field-beginning))))
@@ -3261,7 +3261,7 @@
 from input that has not yet been sent."
   (interactive)
   (let ((proc (or (get-buffer-process (current-buffer))
-		  (error "Current buffer has no process"))))
+		  (user-error "Current buffer has no process"))))
     (goto-char (process-mark proc))
     (when (called-interactively-p 'interactive)
       (message "Point is now at the process mark"))))
@@ -3286,7 +3286,7 @@
   "Set the process mark at point."
   (interactive)
   (let ((proc (or (get-buffer-process (current-buffer))
-		  (error "Current buffer has no process"))))
+		  (user-error "Current buffer has no process"))))
     (set-marker (process-mark proc) (point))
     (message "Process mark set")))
 
@@ -3639,11 +3639,12 @@
               results))
       results)))
 
-(dolist (x '("^Not at command line$"
-             "^Empty input ring$"
-             "^No history$"
-             "^Not found$"			; Too common?
-             "^Current buffer has no process$"))
+(dolist (x '(;;"^Not at command line$"
+             ;;"^Empty input ring$"
+             ;;"^No history$"
+             ;;"^Not found$"			; Too common?
+             ;;"^Current buffer has no process$"
+             ))
   (add-to-list 'debug-ignored-errors x))
 
 \f
Index: lisp/completion.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/completion.el,v
retrieving revision 1.70
diff -b -u -r1.70 completion.el
--- lisp/completion.el	2 Oct 2009 03:48:39 -0000	1.70
+++ lisp/completion.el	27 Nov 2009 23:03:17 -0000
@@ -1301,7 +1301,7 @@
 
 (defun check-completion-length (string)
   (if (< (length string) completion-min-length)
-      (error "The string `%s' is too short to be saved as a completion"
+      (user-error "The string `%s' is too short to be saved as a completion"
 	     string)
       (list string)))
 
@@ -2464,8 +2464,9 @@
 (defvaralias 'cmpl-syntax-table 'completion-syntax-table)
 (defalias 'initialize-completions 'completion-initialize)
 
-(dolist (x '("^To complete, the point must be after a symbol at least [0-9]* character long\\.$"
-	"^The string \".*\" is too short to be saved as a completion\\.$"))
+(dolist (x '(;;"^To complete, the point must be after a symbol at least [0-9]* character long\\.$"
+             ;;"^The string \".*\" is too short to be saved as a completion\\.$"
+             ))
   (add-to-list 'debug-ignored-errors x))
 
 (provide 'completion)
Index: lisp/cus-edit.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/cus-edit.el,v
retrieving revision 1.369
diff -b -u -r1.369 cus-edit.el
--- lisp/cus-edit.el	14 Nov 2009 19:08:45 -0000	1.369
+++ lisp/cus-edit.el	27 Nov 2009 23:49:17 -0000
@@ -1111,7 +1111,7 @@
   "Customize SYMBOL, which must be a user option variable."
   (interactive (custom-variable-prompt))
   (unless symbol
-    (error "No variable specified"))
+    (user-error "No variable specified"))
   (let ((basevar (indirect-variable symbol)))
     (custom-buffer-create (list (list basevar 'custom-variable))
 			  (format "*Customize Option: %s*"
@@ -1128,7 +1128,7 @@
 Show the buffer in another window, but don't select it."
   (interactive (custom-variable-prompt))
   (unless symbol
-    (error "No variable specified"))
+    (user-error "No variable specified"))
   (let ((basevar (indirect-variable symbol)))
     (custom-buffer-create-other-window
      (list (list basevar 'custom-variable))
@@ -1230,7 +1230,7 @@
     (if found
 	(custom-buffer-create (custom-sort-items found t 'first)
 			      "*Customize Changed Options*")
-      (error "No user option defaults have been changed since Emacs %s"
+      (user-error "No user option defaults have been changed since Emacs %s"
 	     since-version))))
 
 (defun customize-package-emacs-version (symbol package-version)
@@ -1304,7 +1304,7 @@
     (if (get face 'face-alias)
         (setq face (get face 'face-alias)))
     (unless (facep face)
-      (error "Invalid face %S" face))
+      (user-error "Invalid face %S" face))
     (custom-buffer-create
      (list (list face 'custom-face))
      (format "*Customize Face: %s*"
@@ -1340,7 +1340,7 @@
 		     (boundp symbol)
 		     (push (list symbol 'custom-variable) found))))
     (if (not found)
-	(error "No user options are set but unsaved")
+	(user-error "No user options are set but unsaved")
       (custom-buffer-create (custom-sort-items found t nil)
 			    "*Customize Unsaved*"))))
 
@@ -1360,7 +1360,7 @@
 					 (default-value symbol))))
 		    (push (list symbol 'custom-variable) found)))))
     (if (not found)
-	(error "No rogue user options")
+	(user-error "No rogue user options")
       (custom-buffer-create (custom-sort-items found t nil)
 			    "*Customize Rogue*"))))
 ;;;###autoload
@@ -1378,7 +1378,7 @@
 		     (boundp symbol)
 		     (push (list symbol 'custom-variable) found))))
     (if (not found )
-	(error "No saved user options")
+	(user-error "No saved user options")
       (custom-buffer-create (custom-sort-items found t nil)
 			    "*Customize Saved*"))))
 
@@ -1410,7 +1410,7 @@
 				      (get symbol 'variable-documentation))))
 		    (push (list symbol 'custom-variable) found)))))
     (if (not found)
-	(error "No %s matching %s"
+	(user-error "No %s matching %s"
                (if (eq all t)
                    "items"
                  (format "customizable %s"
@@ -2244,7 +2244,7 @@
   (custom-load-widget widget)
   (let ((state (widget-get widget :custom-state)))
     (cond ((memq state '(invalid modified set))
-	   (error "There are unsaved changes"))
+	   (user-error "There are unsaved changes"))
 	  ((eq state 'hidden)
 	   (widget-put widget :custom-state 'unknown))
 	  (t
@@ -2807,7 +2807,7 @@
 	 (comment (widget-value comment-widget))
 	 val)
     (cond ((eq state 'hidden)
-	   (error "Cannot set hidden variable"))
+	   (user-error "Cannot set hidden variable"))
 	  ((setq val (widget-apply child :validate))
 	   (goto-char (widget-get val :from))
 	   (error "%s" (widget-get val :error)))
@@ -2849,7 +2849,7 @@
 	 (comment (widget-value comment-widget))
 	 val)
     (cond ((eq state 'hidden)
-	   (error "Cannot set hidden variable"))
+	   (user-error "Cannot set hidden variable"))
 	  ((setq val (widget-apply child :validate))
 	   (goto-char (widget-get val :from))
 	   (error "Saving %s: %s" symbol (widget-get val :error)))
@@ -2907,7 +2907,7 @@
 	       (funcall set symbol (eval (car value)))
 	     (error nil)))
 	  (t
-	   (error "No saved value for %s" symbol)))
+	   (user-error "No saved value for %s" symbol)))
     (put symbol 'customized-value nil)
     (put symbol 'customized-variable-comment nil)
     (widget-put widget :custom-state 'unknown)
@@ -2921,7 +2921,7 @@
   (let* ((symbol (widget-value widget)))
     (if (get symbol 'standard-value)
 	(custom-variable-backup-value widget)
-      (error "No standard setting known for %S" symbol))
+      (user-error "No standard setting known for %S" symbol))
     (put symbol 'variable-comment nil)
     (put symbol 'customized-value nil)
     (put symbol 'customized-variable-comment nil)
@@ -2983,7 +2983,7 @@
 	  (condition-case nil
 	      (funcall set symbol (car value))
 	     (error nil)))
-      (error "No backup value for %s" symbol))
+      (user-error "No backup value for %s" symbol))
     (put symbol 'customized-value (list (car value)))
     (put symbol 'variable-comment comment)
     (put symbol 'customized-variable-comment comment)
@@ -3615,7 +3615,7 @@
 	 (comment (get symbol 'saved-face-comment))
 	 (comment-widget (widget-get widget :comment-widget)))
     (unless (or value comment)
-      (error "No saved value for this face"))
+      (user-error "No saved value for this face"))
     (put symbol 'customized-face nil)
     (put symbol 'customized-face-comment nil)
     (custom-push-theme 'theme-face symbol 'user 'set value)
@@ -3639,7 +3639,7 @@
 	 (value (get symbol 'face-defface-spec))
 	 (comment-widget (widget-get widget :comment-widget)))
     (unless value
-      (error "No standard setting for this face"))
+      (user-error "No standard setting for this face"))
     (put symbol 'customized-face nil)
     (put symbol 'customized-face-comment nil)
     (custom-push-theme 'theme-face symbol 'user 'reset)
@@ -3698,6 +3698,7 @@
   :validate (lambda (widget)
 	      (unless (facep (widget-value widget))
 		(widget-put widget
+                            ;; Fix-me: How turn this to user-error?
 			    :error (format "Invalid face: %S"
 					   (widget-value widget)))
 		widget)))
@@ -4245,7 +4246,7 @@
 	       ;; Started with -q, i.e. the file containing
 	       ;; Custom settings hasn't been read.  Saving
 	       ;; settings there would overwrite other settings.
-	       (error "Saving settings from \"emacs -q\" would overwrite existing customizations"))
+	       (user-error "Saving settings from \"emacs -q\" would overwrite existing customizations"))
 	   (setq user-init-file default-init-file))
 	 user-init-file))))
 
@@ -4598,7 +4599,7 @@
 (defun Custom-no-edit (pos &optional event)
   "Invoke button at POS, or refuse to allow editing of Custom buffer."
   (interactive "@d")
-  (error "You can't edit this part of the Custom buffer"))
+  (user-error "You can't edit this part of the Custom buffer"))
 
 (defun Custom-newline (pos &optional event)
   "Invoke button at POS, or refuse to allow editing of Custom buffer."
@@ -4606,7 +4607,7 @@
   (let ((button (get-char-property pos 'button)))
     (if button
 	(widget-apply-action button event)
-      (error "You can't edit this part of the Custom buffer"))))
+      (user-error "You can't edit this part of the Custom buffer"))))
 
 (defun Custom-goto-parent ()
   "Go to the parent group listed at the top of this buffer.
@@ -4699,16 +4700,17 @@
 (define-obsolete-variable-alias 'custom-mode-hook 'Custom-mode-hook "23.1")
 
 (dolist (regexp
-	 '("^No user option defaults have been changed since Emacs "
-	   "^Invalid face:? "
-	   "^No \\(?:customized\\|rogue\\|saved\\) user options"
-	   "^No customizable items matching "
-	   "^There are unset changes"
-	   "^Cannot set hidden variable"
-	   "^No \\(?:saved\\|backup\\) value for "
-	   "^No standard setting known for "
-	   "^No standard setting for this face"
-	   "^Saving settings from \"emacs -q\" would overwrite existing customizations"))
+	 '(;;"^No user option defaults have been changed since Emacs "
+	   "^Invalid face:? " ;; Problems with widget
+	   ;;"^No \\(?:customized\\|rogue\\|saved\\) user options"
+	   "^No customizable items matching " ;; Can't find it
+	   ;;"^There are unset changes" ;; Can't find it
+	   ;;"^Cannot set hidden variable"
+	   ;;"^No \\(?:saved\\|backup\\) value for "
+	   ;;"^No standard setting known for "
+	   ;;"^No standard setting for this face"
+	   ;;"^Saving settings from \"emacs -q\" would overwrite existing customizations"
+           ))
   (add-to-list 'debug-ignored-errors regexp))
 
 ;;; The End.
Index: lisp/cus-theme.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/cus-theme.el,v
retrieving revision 1.31
diff -b -u -r1.31 cus-theme.el
--- lisp/cus-theme.el	5 Jan 2009 03:18:50 -0000	1.31
+++ lisp/cus-theme.el	28 Nov 2009 01:48:00 -0000
@@ -320,13 +320,13 @@
     (cond ((or (string-equal name "")
 	      (string-equal name "user")
 	      (string-equal name "changed"))
-	   (error "Custom themes cannot be named `%s'" name))
+	   (user-error "Custom themes cannot be named `%s'" name))
 	  ((string-match " " name)
-	   (error "Custom theme names should not contain spaces"))
+	   (user-error "Custom theme names should not contain spaces"))
 	  ((if (file-exists-p filename)
 	       (not (y-or-n-p
 		     (format "File %s exists.  Overwrite? " filename))))
-	   (error "Aborted")))
+	   (user-error "Aborted")))
     (with-temp-buffer
       (emacs-lisp-mode)
       (unless (file-exists-p custom-theme-directory)
Index: lisp/dabbrev.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/dabbrev.el,v
retrieving revision 1.97
diff -b -u -r1.97 dabbrev.el
--- lisp/dabbrev.el	25 Nov 2009 05:31:08 -0000	1.97
+++ lisp/dabbrev.el	27 Nov 2009 23:12:18 -0000
@@ -406,7 +406,7 @@
 	;; Make an obarray with all expansions
 	(setq my-obarray (make-vector (length completion-list) 0))
 	(or (> (length my-obarray) 0)
-	    (error "No dynamic expansion for \"%s\" found%s"
+	    (user-error "No dynamic expansion for \"%s\" found%s"
 		   abbrev
 		   (if dabbrev--check-other-buffers "" " in this-buffer")))
 	(cond
@@ -596,7 +596,7 @@
   "Extract the symbol at point to serve as abbreviation."
   ;; Check for error
   (if (bobp)
-      (error "No possible abbreviation preceding point"))
+      (user-error "No possible abbreviation preceding point"))
   ;; Return abbrev at point
   (save-excursion
     ;; Record the end of the abbreviation.
@@ -614,7 +614,7 @@
 				      "\\sw\\|\\s_")
 				  nil t)
 	      (forward-char 1)
-	    (error "No possible abbreviation preceding point"))))
+	    (user-error "No possible abbreviation preceding point"))))
     ;; Now find the beginning of that one.
     (dabbrev--goto-start-of-abbrev)
     (buffer-substring-no-properties
@@ -988,9 +988,10 @@
 		(cons found-string dabbrev--last-table))
 	  result)))))
 
-(dolist (mess '("^No dynamic expansion for .* found"
-		"^No further dynamic expansion for .* found$"
-		"^No possible abbreviation preceding point$"))
+(dolist (mess '(;;"^No dynamic expansion for .* found"
+		;;"^No further dynamic expansion for .* found$"
+		;;"^No possible abbreviation preceding point$"
+                ))
   (add-to-list 'debug-ignored-errors mess))
 
 (provide 'dabbrev)
Index: lisp/diff-mode.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/diff-mode.el,v
retrieving revision 1.163
diff -b -u -r1.163 diff-mode.el
--- lisp/diff-mode.el	28 Oct 2009 19:30:25 -0000	1.163
+++ lisp/diff-mode.el	28 Nov 2009 01:50:52 -0000
@@ -1355,7 +1355,7 @@
          ((< lines 0)
           (error "End of hunk ambiguously marked"))
          ((not (y-or-n-p "Try to auto-fix whitespace loss and word-wrap damage? "))
-          (error "Abort!"))
+          (user-error "Abort!"))
          ((eolp) (insert "  ") (forward-line -1) t)
          (t (insert " ") (delete-region (- (point) 2) (- (point) 1)) t))
       (forward-line))))
@@ -1422,7 +1422,7 @@
                                 "End of hunk ambiguously marked"
                               "Hunk seriously messed up")))
                     ((not (y-or-n-p (concat "Try to auto-fix " (if (eolp) "whitespace loss" "word-wrap damage") "? ")))
-                     (error "Abort!"))
+                     (user-error "Abort!"))
                     ((eolp) (insert " ") (forward-line -1) t)
                     (t (insert " ")
                        (delete-region (- (point) 2) (- (point) 1)) t))))
Index: lisp/dired-aux.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/dired-aux.el,v
retrieving revision 1.199
diff -b -u -r1.199 dired-aux.el
--- lisp/dired-aux.el	25 Nov 2009 17:15:24 -0000	1.199
+++ lisp/dired-aux.el	28 Nov 2009 01:51:13 -0000
@@ -580,7 +580,7 @@
     ;; Get confirmation for wildcards that may have been meant
     ;; to control substitution of a file name or the file name list.
     (if (cond ((not (or on-each subst))
-	       (error "You can not combine `*' and `?' substitution marks"))
+	       (user-error "You can not combine `*' and `?' substitution marks"))
 	      ((and star (not on-each))
 	       (y-or-n-p "Confirm--do you mean to use `*' as a wildcard? "))
 	      ((and qmark (not subst))
Index: lisp/dired-x.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/dired-x.el,v
retrieving revision 1.103
diff -b -u -r1.103 dired-x.el
--- lisp/dired-x.el	23 Nov 2009 00:32:40 -0000	1.103
+++ lisp/dired-x.el	28 Nov 2009 01:52:00 -0000
@@ -790,7 +790,7 @@
 (defun dired-virtual-revert (&optional arg noconfirm)
   (if (not
        (y-or-n-p "Cannot revert a Virtual Dired buffer - switch to Real Dired mode? "))
-      (error "Cannot revert a Virtual Dired buffer")
+      (user-error "Cannot revert a Virtual Dired buffer")
     (setq mode-name "Dired"
           revert-buffer-function 'dired-revert)
     (revert-buffer)))
Index: lisp/ediff-help.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/ediff-help.el,v
retrieving revision 1.27
diff -b -u -r1.27 ediff-help.el
--- lisp/ediff-help.el	5 Jan 2009 03:18:58 -0000	1.27
+++ lisp/ediff-help.el	27 Nov 2009 23:50:45 -0000
@@ -236,7 +236,7 @@
 	    ((string= cmd "s") (re-search-forward "^`s'"))
 	    ((string= cmd "+") (re-search-forward "^`\\+'"))
 	    ((string= cmd "=") (re-search-forward "^`='"))
-	    (t (error "Undocumented command! Type `G' in Ediff Control Panel to drop a note to the Ediff maintainer")))
+	    (t (user-error "Undocumented command! Type `G' in Ediff Control Panel to drop a note to the Ediff maintainer")))
       ) ; let case-fold-search
     ))
 
Index: lisp/ediff-init.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/ediff-init.el,v
retrieving revision 1.98
diff -b -u -r1.98 ediff-init.el
--- lisp/ediff-init.el	22 Nov 2009 03:14:14 -0000	1.98
+++ lisp/ediff-init.el	27 Nov 2009 23:52:03 -0000
@@ -366,7 +366,7 @@
 
 (defsubst ediff-barf-if-not-control-buffer (&optional meta-buf-p)
   (or (ediff-in-control-buffer-p meta-buf-p)
-      (error "%S: This command runs in Ediff Control Buffer only!"
+      (user-error "%S: This command runs in Ediff Control Buffer only!"
 	     this-command)))
 
 (defgroup ediff-highlighting nil
@@ -765,7 +765,7 @@
 		       (funcall op emacs-minor-version minor)
 		     t)))
 	     (t
-	      (error "%S: Invalid op in ediff-check-version" op)))))
+	      (user-error "%S: Invalid op in ediff-check-version" op)))))
 
 ;; ediff-check-version seems to be totally unused anyway.
 (make-obsolete 'ediff-check-version 'version< "23.1")
Index: lisp/ediff-merg.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/ediff-merg.el,v
retrieving revision 1.45
diff -b -u -r1.45 ediff-merg.el
--- lisp/ediff-merg.el	13 Sep 2009 02:14:28 -0000	1.45
+++ lisp/ediff-merg.el	27 Nov 2009 23:52:43 -0000
@@ -282,7 +282,7 @@
 Used only for merging jobs."
   (interactive "P")
   (if (not ediff-merge-job)
-      (error "ediff-shrink-window-C can be used only for merging jobs"))
+      (user-error "ediff-shrink-window-C can be used only for merging jobs"))
   (cond ((eq arg '-) (setq arg -1))
 	((not (numberp arg)) (setq arg nil)))
   (cond ((null arg)
Index: lisp/ediff-mult.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/ediff-mult.el,v
retrieving revision 1.68
diff -b -u -r1.68 ediff-mult.el
--- lisp/ediff-mult.el	22 Nov 2009 03:14:15 -0000	1.68
+++ lisp/ediff-mult.el	28 Nov 2009 01:52:51 -0000
@@ -1170,7 +1170,7 @@
     (insert "\n")))
 
 (defun ediff-draw-dir-diffs (diff-list &optional buf-name)
-  (if (null diff-list) (error "Lost difference info on these directories"))
+  (if (null diff-list) (user-error "Lost difference info on these directories"))
   (setq buf-name
 	(or buf-name
 	    (ediff-unique-buffer-name "*Ediff File Group Differences" "*")))
@@ -1288,7 +1288,7 @@
   "Display differences among the directories involved in session group."
   (interactive)
   (if (ediff-one-filegroup-metajob)
-      (error "This command is inapplicable in the present context"))
+      (user-error "This command is inapplicable in the present context"))
   (or (ediff-buffer-live-p ediff-dir-diffs-buffer)
       (ediff-draw-dir-diffs ediff-dir-difference-list))
   (let ((buf ediff-dir-diffs-buffer))
@@ -1369,7 +1369,7 @@
   (if (ediff-buffer-live-p ediff-parent-meta-buffer)
       (ediff-show-meta-buffer
        ediff-parent-meta-buffer ediff-meta-session-number)
-    (error "This session group has no parent")))
+    (user-error "This session group has no parent")))
 
 
 ;; argument is ignored
@@ -1519,7 +1519,7 @@
     (cond (ignore)
 	  (unmark (ediff-set-session-status info nil))
 ;;;   (if (ediff-buffer-live-p session-buf)
-;;;	  (error "Can't hide active session, %s" (buffer-name session-buf)))
+;;;	  (user-error "Can't hide active session, %s" (buffer-name session-buf)))
 	  (t (ediff-set-session-status info ?H))))
   unmark)
 
@@ -1719,7 +1719,7 @@
 	    (goto-char (point-min))
 	    (display-buffer ediff-tmp-buffer 'not-this-window)
 	    ))
-      (error "The patch buffer wasn't found"))))
+      (user-error "The patch buffer wasn't found"))))
 
 
 ;; This function executes in meta buffer.  It knows where event happened.
@@ -1748,7 +1748,7 @@
 	      (progn
 		(ediff-set-session-status info nil)
 		(ediff-update-meta-buffer meta-buf nil session-number))
-	    (error "Aborted"))))
+	    (user-error "Aborted"))))
 
     (ediff-with-current-buffer meta-buf
       (setq merge-autostore-dir
@@ -1846,7 +1846,7 @@
 			     ;; level; see below
 			     (setcar
 			      (quote ,info) ediff-control-buffer))))
-	       (error "Aborted")))
+	       (user-error "Aborted")))
 	    ((ediff-one-filegroup-metajob) 	; needs 1 file arg
 	     (funcall ediff-session-action-function
 		      file1
@@ -1976,7 +1976,7 @@
 
     (setq meta-buf (or meta-buf ediff-meta-buffer))
     (cond ((not (bufferp meta-buf))
-	   (error "This Ediff session is not part of a session group"))
+	   (user-error "This Ediff session is not part of a session group"))
 	  ((not (ediff-buffer-live-p meta-buf))
 	   (error
 	    "Can't find this session's group panel -- session itself is ok")))
@@ -2046,7 +2046,7 @@
   (interactive)
   (ediff-update-registry)
   (if (not (ediff-buffer-live-p ediff-registry-buffer))
-      (error "No active Ediff sessions or corrupted session registry"))
+      (user-error "No active Ediff sessions or corrupted session registry"))
   (let (wind frame)
     ;; for some reason, point moves in ediff-registry-buffer, so we preserve it
     ;; explicitly
@@ -2174,7 +2174,7 @@
 	    ((ediff-safe-to-quit buf)
 	     (bury-buffer))
 	    (t
-	     (error
+	     (user-error
 	      "This session group has active sessions---cannot exit")))
       (ediff-update-meta-buffer parent-buf nil session-number)
       (ediff-kill-buffer-carefully dir-diffs-buffer)
@@ -2218,7 +2218,7 @@
     (or result
 	(unless noerror
 	  (ediff-update-registry)
-	  (error "No session info in this line")))))
+	  (user-error "No session info in this line")))))
 
 
 (defun ediff-get-meta-overlay-at-pos (point)
@@ -2297,7 +2297,7 @@
 	 session-buf beg-marker end-marker)
 
     (if (or (file-directory-p file) (string-match "/dev/null" file))
-	(error "`%s' is not an ordinary file" (file-name-as-directory file)))
+	(user-error "`%s' is not an ordinary file" (file-name-as-directory file)))
     (setq session-buf (ediff-get-session-buffer info)
 	  beg-marker (ediff-get-session-objB-name info)
 	  end-marker (ediff-get-session-objC-name info))
Index: lisp/ediff-ptch.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/ediff-ptch.el,v
retrieving revision 1.47
diff -b -u -r1.47 ediff-ptch.el
--- lisp/ediff-ptch.el	31 Jan 2009 22:10:29 -0000	1.47
+++ lisp/ediff-ptch.el	28 Nov 2009 00:02:57 -0000
@@ -750,7 +750,7 @@
 		(select-window aux-wind)
 		(goto-char (point-max))))
 	  (switch-to-buffer-other-window patch-diagnostics)
-	  (error "Patch appears to have failed")))
+	  (user-error "Patch appears to have failed")))
 
     ;; If black magic is involved, apply patch to a temp copy of the
     ;; file.  Otherwise, apply patch to the orig copy.  If patch is applied
Index: lisp/ediff-util.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/ediff-util.el,v
retrieving revision 1.101
diff -b -u -r1.101 ediff-util.el
--- lisp/ediff-util.el	25 Nov 2009 17:15:24 -0000	1.101
+++ lisp/ediff-util.el	28 Nov 2009 01:53:11 -0000
@@ -605,7 +605,7 @@
 	   (not
 	    (y-or-n-p
 	     "Ancestor buffer will not be used.  Recompute diffs anyway? ")))
-      (error "Recomputation of differences canceled"))
+      (user-error "Recomputation of differences canceled"))
 
   (let ((point-A (ediff-with-current-buffer ediff-buffer-A (point)))
 	;;(point-B (ediff-with-current-buffer ediff-buffer-B (point)))
@@ -945,7 +945,7 @@
   (interactive)
   (ediff-barf-if-not-control-buffer)
   (if ediff-word-mode
-      (error "No fine differences in this mode"))
+      (user-error "No fine differences in this mode"))
   (cond ((eq ediff-auto-refine 'nix)
 	 (setq ediff-auto-refine 'on)
 	 (ediff-make-fine-diffs ediff-current-difference 'noforce)
@@ -965,8 +965,8 @@
   (ediff-recenter)
   (or (ediff-buffer-live-p ediff-ancestor-buffer)
       (if ediff-merge-with-ancestor-job
-	  (error "Lost connection to ancestor buffer...sorry")
-	(error "Not merging with ancestor")))
+	  (user-error "Lost connection to ancestor buffer...sorry")
+	(user-error "Not merging with ancestor")))
   (let (wind)
     (cond ((setq wind (ediff-get-visible-buffer-window ediff-ancestor-buffer))
 	   (raise-frame (window-frame wind)))
@@ -1061,7 +1061,7 @@
 	      (save-window-excursion
 		(select-window (ediff-get-visible-buffer-window buf))
 		(command-execute toggle-ro-cmd)))
-	  (error "Don't know how to toggle read-only in buffer %S" buf))
+	  (user-error "Don't know how to toggle read-only in buffer %S" buf))
 
 	;; Check if we made the current buffer updatable, but its file is RO.
 	;; Signal a warning in this case.
@@ -1254,7 +1254,7 @@
   (interactive)
   (ediff-barf-if-not-control-buffer)
   (or (ediff-window-display-p)
-      (error "%sEmacs is not running as a window application"
+      (user-error "%sEmacs is not running as a window application"
 	     (if (featurep 'emacs) "" "X")))
   (ediff-recenter 'no-rehighlight) ; make sure buffs are displayed in windows
   (let ((ctl-buf ediff-control-buffer))
@@ -1284,7 +1284,7 @@
   (interactive)
   (let (window-setup-func)
     (or (ediff-window-display-p)
-	(error "%sEmacs is not running as a window application"
+	(user-error "%sEmacs is not running as a window application"
 	       (if (featurep 'emacs) "" "X")))
 
   (cond ((eq ediff-window-setup-function 'ediff-setup-windows-multiframe)
@@ -1328,7 +1328,7 @@
   (if (featurep 'ediff-tbar)
       (progn
 	(or (ediff-window-display-p)
-	    (error "%sEmacs is not running as a window application"
+	    (user-error "%sEmacs is not running as a window application"
 		   (if (featurep 'emacs) "" "X")))
 	(if (ediff-use-toolbar-p)
 	    (ediff-kill-bottom-toolbar))
@@ -1383,7 +1383,7 @@
   (interactive)
   (ediff-barf-if-not-control-buffer)
   (if (not ediff-merge-with-ancestor-job)
-      (error "This command makes sense only when merging with an ancestor"))
+      (user-error "This command makes sense only when merging with an ancestor"))
   (setq ediff-show-clashes-only (not ediff-show-clashes-only))
   (if ediff-show-clashes-only
       (message "Focus on regions where both buffers differ from the ancestor")
@@ -1745,7 +1745,7 @@
 	(ediff-unselect-and-select-difference n)
 	) ; let
     (ediff-visible-region)
-    (error "At end of the difference list")))
+    (user-error "At end of the difference list")))
 
 (defun ediff-previous-difference (&optional arg)
   "Go to the previous difference.
@@ -1794,7 +1794,7 @@
 	(ediff-unselect-and-select-difference n)
 	) ; let
     (ediff-visible-region)
-    (error "At beginning of the difference list")))
+    (user-error "At beginning of the difference list")))
 
 ;; The diff number is as perceived by the user (i.e., 1+ the internal
 ;; representation)
@@ -2113,7 +2113,7 @@
     (if (cdr saved-rec)
 	(setq saved-diff (cdr saved-rec))
       (if (> ediff-number-of-differences 0)
-	  (error "Nothing saved for diff %d in buffer %S" (1+ n) buf-type)
+	  (user-error "Nothing saved for diff %d in buffer %S" (1+ n) buf-type)
 	(error ediff-NO-DIFFERENCES)))
 
     (setq reg-beg (ediff-get-diff-posn buf-type 'beg n ediff-control-buffer))
@@ -3249,7 +3249,7 @@
 		(error
 		 (beep)
 		 (message "Couldn't save %s" buffer-file-name)))
-	    (error "Buffer is out of sync for file %s" buffer-file-name))
+	    (user-error "Buffer is out of sync for file %s" buffer-file-name))
 	;; If buffer is not obsolete and is not modified, do nothing
 	nil)
     ;; If buffer is obsolete, offer to revert
@@ -3262,7 +3262,7 @@
 	  (if file-magic
 	      (erase-buffer))
 	  (revert-buffer t t))
-      (error "Buffer out of sync for file %s" buffer-file-name))))
+      (user-error "Buffer out of sync for file %s" buffer-file-name))))
 
 ;; if there is another buffer visiting the file of the merge buffer, offer to
 ;; save and delete the buffer; else bark
@@ -3317,7 +3317,7 @@
 		    ediff-custom-diff-buffer)
 		   ((ediff-buffer-live-p ediff-diff-buffer)
 		    ediff-diff-buffer)
-		   (t (error "Output from `diff' not found"))))
+		   (t (user-error "Output from `diff' not found"))))
 	    )
     (let ((window-min-height 2))
       (save-buffer))))
Index: lisp/ediff-wind.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/ediff-wind.el,v
retrieving revision 1.67
diff -b -u -r1.67 ediff-wind.el
--- lisp/ediff-wind.el	16 Apr 2009 03:50:33 -0000	1.67
+++ lisp/ediff-wind.el	28 Nov 2009 01:29:42 -0000
@@ -1113,7 +1113,7 @@
 This function modifies only the left margin and the width of the display.
 It assumes that it is called from within the control buffer."
   (if (not (fboundp 'ediff-display-pixel-width))
-      (error "Can't determine display width"))
+      (user-error "Can't determine display width"))
   (let* ((frame-A (window-frame ediff-window-A))
 	 (frame-A-params (frame-parameters frame-A))
 	 (cw (ediff-frame-char-width frame-A))
Index: lisp/ediff.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/ediff.el,v
retrieving revision 1.111
diff -b -u -r1.111 ediff.el
--- lisp/ediff.el	22 Nov 2009 03:14:15 -0000	1.111
+++ lisp/ediff.el	28 Nov 2009 01:54:20 -0000
@@ -288,9 +288,9 @@
 	 (file-magic (ediff-filename-magic-p file))
 	 (temp-file-name-prefix (file-name-nondirectory file)))
     (cond ((not (file-readable-p file))
-	   (error "File `%s' does not exist or is not readable" file))
+	   (user-error "File `%s' does not exist or is not readable" file))
 	  ((file-directory-p file)
-	   (error "File `%s' is a directory" file)))
+	   (user-error "File `%s' is a directory" file)))
 
     ;; some of the commands, below, require full file name
     (setq file (expand-file-name file))
@@ -372,7 +372,7 @@
                    (or (buffer-modified-p)
                        (not (verify-visited-file-modtime
                              (current-buffer))))))
-    (error "Nothing to revert"))
+    (user-error "Nothing to revert"))
   (let* ((auto-save-p (and (recent-auto-save-p)
                            buffer-auto-save-file-name
                            (file-readable-p buffer-auto-save-file-name)
@@ -476,13 +476,13 @@
 			      (buffer-file-name (get-buffer buf-B))))
 	 file-A file-B file-C)
     (if (not (ediff-buffer-live-p buf-A))
-	(error "Buffer %S doesn't exist" buf-A))
+	(user-error "Buffer %S doesn't exist" buf-A))
     (if (not (ediff-buffer-live-p buf-B))
-	(error "Buffer %S doesn't exist" buf-B))
+	(user-error "Buffer %S doesn't exist" buf-B))
     (let ((ediff-job-name job-name))
       (if (and ediff-3way-comparison-job
 	       (not buf-C-is-alive))
-	  (error "Buffer %S doesn't exist" buf-C)))
+	  (user-error "Buffer %S doesn't exist" buf-C)))
     (if (stringp buf-A-file-name)
 	(setq buf-A-file-name (file-name-nondirectory buf-A-file-name)))
     (if (stringp buf-B-file-name)
@@ -773,13 +773,13 @@
       (setq dir3 (if (file-directory-p dir3) dir3 (file-name-directory dir3))))
 
   (cond ((string= dir1 dir2)
-	 (error "Directories A and B are the same: %s" dir1))
+	 (user-error "Directories A and B are the same: %s" dir1))
 	((and (eq jobname 'ediff-directories3)
 	      (string= dir1 dir3))
-	 (error "Directories A and C are the same: %s" dir1))
+	 (user-error "Directories A and C are the same: %s" dir1))
 	((and (eq jobname 'ediff-directories3)
 	      (string= dir2 dir3))
-	 (error "Directories B and C are the same: %s" dir1)))
+	 (user-error "Directories B and C are the same: %s" dir1)))
 
   (if merge-autostore-dir
       (or (stringp merge-autostore-dir)
@@ -805,15 +805,15 @@
 	(cond ((and (stringp dir1) (string= merge-autostore-dir dir1))
 	       (or (y-or-n-p
 		    "Directory for saving merged files = Directory A.  Sure? ")
-		   (error "Directory merge aborted")))
+		   (user-error "Directory merge aborted")))
 	      ((and (stringp dir2) (string= merge-autostore-dir dir2))
 	       (or (y-or-n-p
 		    "Directory for saving merged files = Directory B.  Sure? ")
-		   (error "Directory merge aborted")))
+		   (user-error "Directory merge aborted")))
 	      ((and (stringp dir3) (string= merge-autostore-dir dir3))
 	       (or (y-or-n-p
 		    "Directory for saving merged files = Ancestor Directory.  Sure? ")
-		   (error "Directory merge aborted")))))
+		   (user-error "Directory merge aborted")))))
 
     (setq dir-diff-struct (ediff-intersect-directories
 			   jobname
@@ -866,7 +866,7 @@
 	     (string= merge-autostore-dir dir1))
 	(or (y-or-n-p
 	     "Directory for saving merged file = directory A.  Sure? ")
-	    (error "Merge of directory revisions aborted")))
+	    (user-error "Merge of directory revisions aborted")))
 
     (setq file-list
 	  (ediff-get-directory-files-under-revision
@@ -967,9 +967,9 @@
 			  (ediff-other-buffer bf))
 			t))))
   (if (not (ediff-buffer-live-p buffer-A))
-      (error "Buffer %S doesn't exist" buffer-A))
+      (user-error "Buffer %S doesn't exist" buffer-A))
   (if (not (ediff-buffer-live-p buffer-B))
-      (error "Buffer %S doesn't exist" buffer-B))
+      (user-error "Buffer %S doesn't exist" buffer-B))
 
 
   (let ((buffer-A
@@ -1008,9 +1008,9 @@
 			  (ediff-other-buffer bf))
 			t))))
   (if (not (ediff-buffer-live-p buffer-A))
-      (error "Buffer %S doesn't exist" buffer-A))
+      (user-error "Buffer %S doesn't exist" buffer-A))
   (if (not (ediff-buffer-live-p buffer-B))
-      (error "Buffer %S doesn't exist" buffer-B))
+      (user-error "Buffer %S doesn't exist" buffer-B))
 
   (let ((buffer-A
          (ediff-clone-buffer-for-region-comparison buffer-A "-Region.A-"))
@@ -1442,7 +1442,7 @@
 	    (message "") ; kill the message from `locate-library'
 	    (require ediff-version-control-package))
 	(or silent
-	    (error "Version control package %S.el not found.  Use vc.el instead"
+	    (user-error "Version control package %S.el not found.  Use vc.el instead"
 		   ediff-version-control-package)))))
 
 
@@ -1488,52 +1488,52 @@
 		   (set-window-buffer ctl-window ctl-buf)))))))
 
 
-(dolist (mess '("^Errors in diff output. Diff output is in "
-                "^Hmm... I don't see an Ediff command around here...$"
-                "^Undocumented command! Type `G' in Ediff Control Panel to drop a note to the Ediff maintainer$"
-                ": This command runs in Ediff Control Buffer only!$"
-                ": Invalid op in ediff-check-version$"
-                "^ediff-shrink-window-C can be used only for merging jobs$"
-                "^Lost difference info on these directories$"
-                "^This command is inapplicable in the present context$"
-                "^This session group has no parent$"
-                "^Can't hide active session, $"
-                "^Ediff: something wrong--no multiple diffs buffer$"
-                "^Can't make context diff for Session $"
-                "^The patch buffer wasn't found$"
-                "^Aborted$"
-                "^This Ediff session is not part of a session group$"
-                "^No active Ediff sessions or corrupted session registry$"
-                "^No session info in this line$"
-                "^`.*' is not an ordinary file$"
-                "^Patch appears to have failed$"
-                "^Recomputation of differences cancelled$"
-                "^No fine differences in this mode$"
-                "^Lost connection to ancestor buffer...sorry$"
-                "^Not merging with ancestor$"
-                "^Don't know how to toggle read-only in buffer "
-                "Emacs is not running as a window application$"
-                "^This command makes sense only when merging with an ancestor$"
-                "^At end of the difference list$"
-                "^At beginning of the difference list$"
-                "^Nothing saved for diff .* in buffer "
-                "^Buffer is out of sync for file "
-                "^Buffer out of sync for file "
-                "^Output from `diff' not found$"
-                "^You forgot to specify a region in buffer "
-                "^All right. Make up your mind and come back...$"
-                "^Current buffer is not visiting any file$"
-                "^Failed to retrieve revision: $"
-                "^Can't determine display width.$"
-                "^File `.*' does not exist or is not readable$"
-                "^File `.*' is a directory$"
-                "^Buffer .* doesn't exist$"
-                "^Directories . and . are the same: "
-                "^Directory merge aborted$"
-                "^Merge of directory revisions aborted$"
-                "^Buffer .* doesn't exist$"
-                "^There is no file to merge$"
-                "^Version control package .*.el not found. Use vc.el instead$"))
+(dolist (mess '(;;"^Errors in diff output. Diff output is in "
+                ;;"^Hmm... I don't see an Ediff command around here...$"
+                ;;"^Undocumented command! Type `G' in Ediff Control Panel to drop a note to the Ediff maintainer$"
+                ;;": This command runs in Ediff Control Buffer only!$"
+                ;;": Invalid op in ediff-check-version$"
+                ;;"^ediff-shrink-window-C can be used only for merging jobs$"
+                ;;"^Lost difference info on these directories$"
+                ;;"^This command is inapplicable in the present context$"
+                ;;"^This session group has no parent$"
+                ;;"^Can't hide active session, $"
+                ;;"^Ediff: something wrong--no multiple diffs buffer$"
+                ;;"^Can't make context diff for Session $"
+                ;;"^The patch buffer wasn't found$"
+                ;;"^Aborted$"
+                ;;"^This Ediff session is not part of a session group$"
+                ;;"^No active Ediff sessions or corrupted session registry$"
+                ;;"^No session info in this line$"
+                ;;"^`.*' is not an ordinary file$"
+                ;;"^Patch appears to have failed$"
+                ;;"^Recomputation of differences cancelled$"
+                ;;"^No fine differences in this mode$"
+                ;;"^Lost connection to ancestor buffer...sorry$"
+                ;;"^Not merging with ancestor$"
+                ;;"^Don't know how to toggle read-only in buffer "
+                ;;"Emacs is not running as a window application$"
+                ;;"^This command makes sense only when merging with an ancestor$"
+                ;;"^At end of the difference list$"
+                ;;"^At beginning of the difference list$"
+                ;;"^Nothing saved for diff .* in buffer "
+                ;;"^Buffer is out of sync for file "
+                ;;"^Buffer out of sync for file "
+                ;;"^Output from `diff' not found$"
+                ;;"^You forgot to specify a region in buffer "
+                ;;"^All right. Make up your mind and come back...$"
+                ;;"^Current buffer is not visiting any file$"
+                ;;"^Failed to retrieve revision: $"
+                ;;"^Can't determine display width.$"
+                ;;"^File `.*' does not exist or is not readable$"
+                ;;"^File `.*' is a directory$"
+                ;;"^Buffer .* doesn't exist$"
+                ;;"^Directories . and . are the same: "
+                ;;"^Directory merge aborted$"
+                ;;"^Merge of directory revisions aborted$"
+                ;;"^Buffer .* doesn't exist$"
+                ;;"^There is no file to merge$"
+                ;;"^Version control package .*.el not found. Use vc.el instead$"))
   (add-to-list 'debug-ignored-errors mess))
 
 
Index: lisp/edmacro.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/edmacro.el,v
retrieving revision 1.54
diff -b -u -r1.54 edmacro.el
--- lisp/edmacro.el	26 May 2009 20:19:34 -0000	1.54
+++ lisp/edmacro.el	28 Nov 2009 01:56:28 -0000
@@ -119,7 +119,7 @@
 	    ((eq cmd 'execute-extended-command)
 	     (setq cmd (read-command "Name of keyboard macro to edit: "))
 	     (if (string-equal cmd "")
-		 (error "No command name given"))
+		 (user-error "No command name given"))
 	     (setq keys nil)
 	     (setq mac (symbol-function cmd)))
 	    ((memq cmd '(view-lossage electric-view-lossage))
@@ -127,7 +127,7 @@
 	     (setq keys nil)
 	     (setq cmd 'last-kbd-macro))
 	    ((null cmd)
-	     (error "Key sequence %s is not defined" (key-description keys)))
+	     (user-error "Key sequence %s is not defined" (key-description keys)))
 	    ((symbolp cmd)
 	     (setq mac (symbol-function cmd)))
 	    (t
@@ -138,7 +138,7 @@
 	      mac-counter (nth 1 kmacro)
 	      mac-format (nth 2 kmacro)))
       (unless (arrayp mac)
-	(error "Key sequence %s is not a keyboard macro"
+	(user-error "Key sequence %s is not a keyboard macro"
 	       (key-description keys)))
       (message "Formatting keyboard macro...")
       (let* ((oldbuf (current-buffer))
@@ -226,7 +226,7 @@
 (defun edmacro-finish-edit ()
   (interactive)
   (unless (eq major-mode 'edmacro-mode)
-    (error
+    (user-error
      "This command is valid only in buffers created by `edit-kbd-macro'"))
   (run-hooks 'edmacro-finish-hook)
   (let ((cmd nil) (keys nil) (no-keys nil)
@@ -238,7 +238,7 @@
 		    t)
 		   ((looking-at "Command:[ \t]*\\([^ \t\n]*\\)[ \t]*$")
 		    (when edmacro-store-hook
-		      (error "\"Command\" line not allowed in this context"))
+		      (user-error "\"Command\" line not allowed in this context"))
 		    (let ((str (buffer-substring (match-beginning 1)
 						 (match-end 1))))
 		      (unless (equal str "")
@@ -253,7 +253,7 @@
 		    t)
 		   ((looking-at "Key:\\(.*\\)$")
 		    (when edmacro-store-hook
-		      (error "\"Key\" line not allowed in this context"))
+		      (user-error "\"Key\" line not allowed in this context"))
 		    (let ((key (edmacro-parse-keys
 				(buffer-substring (match-beginning 1)
 						  (match-end 1)))))
@@ -275,7 +275,7 @@
 		    t)
 		   ((looking-at "Counter:[ \t]*\\([^ \t\n]*\\)[ \t]*$")
 		    (when edmacro-store-hook
-		      (error "\"Counter\" line not allowed in this context"))
+		      (user-error "\"Counter\" line not allowed in this context"))
 		    (let ((str (buffer-substring (match-beginning 1)
 						 (match-end 1))))
 		      (unless (equal str "")
@@ -283,7 +283,7 @@
 		    t)
 		   ((looking-at "Format:[ \t]*\"\\([^\n]*\\)\"[ \t]*$")
 		    (when edmacro-store-hook
-		      (error "\"Format\" line not allowed in this context"))
+		      (user-error "\"Format\" line not allowed in this context"))
 		    (let ((str (buffer-substring (match-beginning 1)
 						 (match-end 1))))
 		      (unless (equal str "")
@@ -303,7 +303,7 @@
 	   (store-hook edmacro-store-hook)
 	   (finish-hook edmacro-finish-hook))
       (unless (or cmd keys store-hook (equal str ""))
-	(error "No command name or keys specified"))
+	(user-error "No command name or keys specified"))
       (when modp
 	(when (buffer-name obuf)
 	  (set-buffer obuf))
Index: lisp/epa-mail.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/epa-mail.el,v
retrieving revision 1.6
diff -b -u -r1.6 epa-mail.el
--- lisp/epa-mail.el	5 Jan 2009 03:19:05 -0000	1.6
+++ lisp/epa-mail.el	28 Nov 2009 02:02:28 -0000
@@ -154,7 +154,7 @@
 				   (format
 				    "No public key for %s; skip it? "
 				    recipient)))
-			(error "No public key for %s" recipient))
+			(user-error "No public key for %s" recipient))
 		      recipient-key)
 		    recipients)))
 	     (setq sign (if verbose (y-or-n-p "Sign? ")))
Index: lisp/ffap.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/ffap.el,v
retrieving revision 1.88
diff -b -u -r1.88 ffap.el
--- lisp/ffap.el	25 Nov 2009 17:11:35 -0000	1.88
+++ lisp/ffap.el	28 Nov 2009 02:03:39 -0000
@@ -1821,7 +1821,7 @@
            (y-or-n-p "Directory does not exist, create it? "))
       (make-directory filename)
       (funcall ffap-directory-finder filename))
-     ((error "No such file or directory `%s'" filename)))))
+     ((user-error "No such file or directory `%s'" filename)))))
 
 (defun dired-at-point-prompter (&optional guess)
   ;; Does guess and prompt step for find-file-at-point.
Index: lisp/files.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/files.el,v
retrieving revision 1.1102
diff -b -u -r1.1102 files.el
--- lisp/files.el	25 Nov 2009 17:11:35 -0000	1.1102
+++ lisp/files.el	28 Nov 2009 02:04:58 -0000
@@ -1705,7 +1705,7 @@
 		 (format "File %s is large (%dMB), really %s? "
 			 (file-name-nondirectory filename)
 			 (/ size 1048576) op-type))))
-	  (error "Aborted")))
+	  (user-error "Aborted")))
 
 (defun find-file-noselect (filename &optional nowarn rawfile wildcards)
   "Read file FILENAME into a buffer and return the buffer.
@@ -1853,7 +1853,7 @@
 Do you want to discard your changes, and visit the file normally now? ")))
 			    (find-file-noselect-1 buf filename nowarn
 						  rawfile truename number)
-			  (error (if rawfile "File already visited non-literally"
+			  (user-error (if rawfile "File already visited non-literally"
 				   "File already visited literally"))))
 		    (if (y-or-n-p
 			 (format
@@ -3480,7 +3480,7 @@
 	   (not no-query)
 	   (not (y-or-n-p (format "A buffer is visiting %s; proceed? "
                                   filename)))
-	   (error "Aborted")))
+	   (user-error "Aborted")))
     (or (equal filename buffer-file-name)
 	(progn
 	  (and filename (lock-buffer filename))
@@ -3591,7 +3591,7 @@
 	(and confirm
 	     (file-exists-p filename)
 	     (or (y-or-n-p (format "File `%s' exists; overwrite? " filename))
-		 (error "Canceled")))
+		 (user-error "Canceled")))
 	(set-visited-file-name filename (not confirm))))
   (set-buffer-modified-p t)
   ;; Make buffer writable if file is writable.
@@ -4193,7 +4193,7 @@
 			(error "%s is a directory" filename)
 		      (unless (y-or-n-p (format "File `%s' exists; overwrite? "
 						filename))
-			(error "Canceled")))
+			(user-error "Canceled")))
 		  ;; Signal an error if the specified name refers to a
 		  ;; non-existing directory.
 		  (let ((dir (file-name-directory filename)))
@@ -4207,7 +4207,7 @@
 	      (yes-or-no-p
 	       (format "%s has changed since visited or saved.  Save anyway? "
 		       (file-name-nondirectory buffer-file-name)))
-	      (error "Save not confirmed"))
+	      (user-error "Save not confirmed"))
 	  (save-restriction
 	    (widen)
 	    (save-excursion
@@ -4970,7 +4970,7 @@
 	     (insert-file-contents file-name nil)
 	     (set-buffer-file-coding-system coding-system))
 	   (after-find-file nil nil t))
-	  (t (error "Recover-file cancelled")))))
+	  (t (user-error "Recover-file cancelled")))))
 
 (defun recover-session ()
   "Recover auto save files from a previous Emacs session.
Index: lisp/frame.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/frame.el,v
retrieving revision 1.302
diff -b -u -r1.302 frame.el
--- lisp/frame.el	10 Oct 2009 23:50:14 -0000	1.302
+++ lisp/frame.el	28 Nov 2009 02:06:54 -0000
@@ -687,7 +687,7 @@
              (not (y-or-n-p (if (cdr frames)
                                 (format "Delete %s frames? " (length frames))
                               (format "Delete %s ? " (car frames))))))
-        (error "Abort!")
+        (user-error "Abort!")
       (mapc 'delete-frame frames)
       (x-close-connection display))))
 
Index: lisp/imenu.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/imenu.el,v
retrieving revision 1.132
diff -b -u -r1.132 imenu.el
--- lisp/imenu.el	26 Aug 2009 03:07:26 -0000	1.132
+++ lisp/imenu.el	27 Nov 2009 23:27:43 -0000
@@ -587,7 +587,7 @@
 		  (funcall imenu-create-index-function))))
 	(imenu--truncate-items imenu--index-alist)))
   (or imenu--index-alist noerror
-      (error "No items suitable for an index found in this buffer"))
+      (user-error "No items suitable for an index found in this buffer"))
   (or imenu--index-alist
       (setq imenu--index-alist (list nil)))
   ;; Add a rescan option to the index.
@@ -703,7 +703,7 @@
 	((and imenu-generic-expression)
 	 (imenu--generic-function imenu-generic-expression))
 	(t
-	 (error "This buffer cannot use `imenu-default-create-index-function'"))))
+	 (user-error "This buffer cannot use `imenu-default-create-index-function'"))))
 
 ;;;
 ;;; Generic index gathering function.
@@ -968,7 +968,7 @@
 	  `(menu-item ,name ,(make-sparse-keymap "Imenu")))
 	(use-local-map newmap)
 	(add-hook 'menu-bar-update-hook 'imenu-update-menubar))
-    (error "The mode `%s' does not support Imenu"
+    (user-error "The mode `%s' does not support Imenu"
            (format-mode-line mode-name))))
 
 ;;;###autoload
@@ -1056,9 +1056,10 @@
     (run-hooks 'imenu-after-jump-hook)))
 
 (dolist (mess
-	 '("^No items suitable for an index found in this buffer$"
-	   "^This buffer cannot use `imenu-default-create-index-function'$"
-	   "^The mode `.*' does not support Imenu$"))
+	 '(;;"^No items suitable for an index found in this buffer$"
+	   ;;"^This buffer cannot use `imenu-default-create-index-function'$"
+	   ;;"^The mode `.*' does not support Imenu$"
+           ))
   (add-to-list 'debug-ignored-errors mess))
 
 (provide 'imenu)
Index: lisp/info.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/info.el,v
retrieving revision 1.570
diff -b -u -r1.570 info.el
--- lisp/info.el	11 Nov 2009 05:49:13 -0000	1.570
+++ lisp/info.el	27 Nov 2009 22:55:44 -0000
@@ -1043,7 +1043,7 @@
                 (throw 'foo t))
 
               ;; No such anchor in tag table or node in tag table or file
-              (error "No such node or anchor: %s" nodename))
+              (user-error "No such node or anchor: %s" nodename))
 
 	    (Info-select-node)
 	    (goto-char (point-min))
@@ -1949,7 +1949,7 @@
 		(concat name ":" (Info-following-node-name-re)) bound t)
 	       (match-string-no-properties 1))
 	      ((not (eq errorname t))
-	       (error "Node has no %s"
+	       (user-error "Node has no %s"
 		      (capitalize (or errorname name)))))))))
 
 (defun Info-following-node-name-re (&optional allowedchars)
@@ -2019,7 +2019,7 @@
   "Go back in the history to the last node visited."
   (interactive)
   (or Info-history
-      (error "This is the first Info node you looked at"))
+      (user-error "This is the first Info node you looked at"))
   (let ((history-forward
 	 (cons (list Info-current-file Info-current-node (point))
 	       Info-history-forward))
@@ -2039,7 +2039,7 @@
   "Go forward in the history of visited nodes."
   (interactive)
   (or Info-history-forward
-      (error "This is the last Info node you looked at"))
+      (user-error "This is the last Info node you looked at"))
   (let ((history-forward (cdr Info-history-forward))
 	filename nodename opoint)
     (setq filename (car (car Info-history-forward)))
@@ -2328,7 +2328,7 @@
 				       completions nil t)))
 	   (list (if (equal input "")
 		     default input) current-prefix-arg))
-       (error "No cross-references in this node"))))
+       (user-error "No cross-references in this node"))))
 
   (unless footnotename
     (error "No reference was specified"))
@@ -2359,7 +2359,7 @@
                                  (abs (- prev-ref (point))))
                               next-ref prev-ref))
                          ((or next-ref prev-ref))
-                         ((error "No cross-reference named %s" footnotename))))
+                         ((user-error "No cross-reference named %s" footnotename))))
         (setq target (Info-extract-menu-node-name t))))
     (while (setq i (string-match "[ \t\n]+" target i))
       (setq target (concat (substring target 0 i) " "
@@ -2503,7 +2503,7 @@
      (save-excursion
        (goto-char (point-min))
        (if (not (search-forward "\n* menu:" nil t))
-	   (error "No menu in this node"))
+	   (user-error "No menu in this node"))
        (setq beg (point))
        (and (< (point) p)
 	    (save-excursion
@@ -2542,10 +2542,10 @@
       (let ((case-fold-search t))
 	(goto-char (point-min))
 	(or (search-forward "\n* menu:" nil t)
-	    (error "No menu in this node"))
+	    (user-error "No menu in this node"))
 	(or (re-search-forward (concat "\n\\* +" menu-item ":") nil t)
 	    (re-search-forward (concat "\n\\* +" menu-item) nil t)
-	    (error "No such item in menu"))
+	    (user-error "No such item in menu"))
 	(beginning-of-line)
 	(forward-char 2)
 	(Info-extract-menu-node-name nil (Info-index-node))))))
@@ -2561,7 +2561,7 @@
 		     (match-beginning 0))))
 	(goto-char (point-min))
 	(or (search-forward "\n* menu:" bound t)
-	    (error "No menu in this node"))
+	    (user-error "No menu in this node"))
 	(if count
 	    (or (search-forward "\n* " bound t count)
 		(error "Too few items in menu"))
@@ -2630,7 +2630,7 @@
 		   (setq success (Info-forward-node t nil no-error))
 		 (or success (Info-goto-node old-node))))))
 	  (no-error nil)
-	  (t (error "No pointer forward from this node")))))
+	  (t (user-error "No pointer forward from this node")))))
 
 (defun Info-backward-node ()
   "Go backward one node, considering all nodes as forming one sequence."
@@ -2639,7 +2639,7 @@
 	(upnode (Info-extract-pointer "up" t))
 	(case-fold-search t))
     (cond ((and upnode (string-match "(" upnode))
-	   (error "First node in file"))
+	   (user-error "First node in file"))
 	  ((and upnode (or (null prevnode)
 			   ;; Use string-equal, not equal,
 			   ;; to ignore text properties.
@@ -2655,7 +2655,7 @@
 			 (save-excursion (search-forward "\n* Menu:" nil t)))
 	       (Info-goto-node (Info-extract-menu-counting nil)))))
 	  (t
-	   (error "No pointer backward from this node")))))
+	   (user-error "No pointer backward from this node")))))
 
 (defun Info-exit ()
   "Exit Info by selecting some other buffer."
@@ -2676,7 +2676,7 @@
 	    (and (search-forward "\n* " nil t)
 		 (Info-extract-menu-node-name)))))
     (if node (Info-goto-node node)
-      (error "No more items in menu"))))
+      (user-error "No more items in menu"))))
 
 (defun Info-last-menu-item ()
   "Go to the node of the previous menu item."
@@ -2689,7 +2689,7 @@
 		  (and (search-backward "\n* menu:" nil t)
 		       (point)))))
       (or (and beg (search-backward "\n* " beg t))
-	  (error "No previous items in menu")))
+	  (user-error "No previous items in menu")))
     (Info-goto-node (save-excursion
 		      (goto-char (match-end 0))
 		      (Info-extract-menu-node-name)))))
@@ -2712,7 +2712,7 @@
 	 (let (Info-history)
 	   (Info-next-preorder)))
 	(t
-	 (error "No more nodes"))))
+	 (user-error "No more nodes"))))
 
 (defun Info-last-preorder ()
   "Go to the last node, popping up a level if there is none."
@@ -2745,7 +2745,7 @@
 	 (let ((case-fold-search t))
 	   (or (search-forward "\n* Menu:" nil t)
 	       (goto-char (point-max)))))
-	(t (error "No previous nodes"))))
+	(t (user-error "No previous nodes"))))
 
 (defun Info-scroll-up ()
   "Scroll one screenful forward in Info, considering all nodes as one sequence.
@@ -2837,11 +2837,11 @@
 	  (or (re-search-forward pat nil t)
 	      (progn
 		(goto-char old-pt)
-		(error "No cross references in this node")))))
+		(user-error "No cross references in this node")))))
     (goto-char (or (match-beginning 1) (match-beginning 0)))
     (if (looking-at "\\* Menu:")
 	(if recur
-	    (error "No cross references in this node")
+	    (user-error "No cross references in this node")
 	  (Info-next-reference t))
       (if (looking-at "^\\* ")
 	  (forward-char 2)))))
@@ -2858,11 +2858,11 @@
 	  (or (re-search-backward pat nil t)
 	      (progn
 		(goto-char old-pt)
-		(error "No cross references in this node")))))
+		(user-error "No cross references in this node")))))
     (goto-char (or (match-beginning 1) (match-beginning 0)))
     (if (looking-at "\\* Menu:")
 	(if recur
-	    (error "No cross references in this node")
+	    (user-error "No cross references in this node")
 	  (Info-prev-reference t))
       (if (looking-at "^\\* ")
 	  (forward-char 2)))))
@@ -3033,7 +3033,7 @@
 	  (or matches
 	      (progn
 		(Info-goto-node orignode)
-		(error "No `%s' in index" topic)))
+		(user-error "No `%s' in index" topic)))
 	  ;; Here it is a feature that assoc is case-sensitive.
 	  (while (setq found (assoc topic matches))
 	    (setq exact (cons found exact)
@@ -3046,7 +3046,7 @@
   "Go to the next matching index item from the last \\<Info-mode-map>\\[Info-index] command."
   (interactive "p")
   (or Info-index-alternatives
-      (error "No previous `i' command"))
+      (user-error "No previous `i' command"))
   (while (< num 0)
     (setq num (+ num (length Info-index-alternatives))))
   (while (> num 0)
@@ -3510,7 +3510,7 @@
 	   ;; Don't raise an error when mouse-1 is bound to this - it's
 	   ;; often used to simply select the window or frame.
 	   (eq 'mouse-1 (event-basic-type last-input-event)))
-      (error "Point neither on reference nor in menu item description")))
+      (user-error "Point neither on reference nor in menu item description")))
 
 ;; Common subroutine.
 (defun Info-try-follow-nearest-node (&optional fork)
@@ -3750,7 +3750,7 @@
 With a zero prefix arg, put the name inside a function call to `info'."
   (interactive "P")
   (unless Info-current-node
-    (error "No current Info node"))
+    (user-error "No current Info node"))
   (let ((node (if (stringp Info-current-file)
 		  (concat "(" (file-name-nondirectory Info-current-file) ") "
 			  Info-current-node))))
@@ -4719,23 +4719,23 @@
       (erase-buffer))
   (Info-speedbar-hierarchy-buttons nil 0))
 
-(dolist (mess '("^First node in file$"
-		"^No `.*' in index$"
-		"^No cross-reference named"
-		"^No cross.references in this node$"
-		"^No current Info node$"
-		"^No menu in this node$"
-		"^No more items in menu$"
-		"^No more nodes$"
-		"^No pointer \\(?:forward\\|backward\\) from this node$"
-		"^No previous `i' command$"
-		"^No previous items in menu$"
-		"^No previous nodes$"
-		"^No such item in menu$"
-		"^No such node or anchor"
-		"^Node has no"
-		"^Point neither on reference nor in menu item description$"
-		"^This is the \\(?:first\\|last\\) Info node you looked at$"
+(dolist (mess '(;;"^First node in file$"
+		;;"^No `.*' in index$"
+		;;"^No cross-reference named"
+		;;"^No cross.references in this node$"
+		;;"^No current Info node$"
+		;;"^No menu in this node$"
+		;;"^No more items in menu$"
+		;;"^No more nodes$"
+		;;"^No pointer \\(?:forward\\|backward\\) from this node$"
+		;;"^No previous `i' command$"
+		;;"^No previous items in menu$"
+		;;"^No previous nodes$"
+		;;"^No such item in menu$"
+		;;"^No such node or anchor"
+		;;"^Node has no"
+		;;"^Point neither on reference nor in menu item description$"
+		;;"^This is the \\(?:first\\|last\\) Info node you looked at$"
 		search-failed))
   (add-to-list 'debug-ignored-errors mess))
 
Index: lisp/man.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/man.el,v
retrieving revision 1.192
diff -b -u -r1.192 man.el
--- lisp/man.el	27 Nov 2009 04:08:07 -0000	1.192
+++ lisp/man.el	27 Nov 2009 23:28:37 -0000
@@ -1195,7 +1195,7 @@
 	  (if (not Man-page-list)
 	      (let ((args Man-arguments))
 		(kill-buffer (current-buffer))
-		(error "Can't find the %s manpage" args)))
+		(user-error "Can't find the %s manpage" args)))
 
           (set-buffer-modified-p nil)
           ))
@@ -1552,7 +1552,7 @@
   (when Man-page-list
     (if (or (< page 1)
 	    (> page (length Man-page-list)))
-	(error "No manpage %d found" page))
+	(user-error "No manpage %d found" page))
     (let* ((page-range (nth (1- page) Man-page-list))
 	   (page-start (car page-range))
 	   (page-end (car (cdr page-range))))
@@ -1605,8 +1605,8 @@
 ;; Init the man package variables, if not already done.
 (Man-init-defvars)
 
-(add-to-list 'debug-ignored-errors "^No manpage [0-9]* found$")
-(add-to-list 'debug-ignored-errors "^Can't find the .* manpage$")
+;;(add-to-list 'debug-ignored-errors "^No manpage [0-9]* found$")
+;;(add-to-list 'debug-ignored-errors "^Can't find the .* manpage$")
 
 (provide 'man)
 
Index: lisp/mouse.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/mouse.el,v
retrieving revision 1.363
diff -b -u -r1.363 mouse.el
--- lisp/mouse.el	13 Nov 2009 22:19:53 -0000	1.363
+++ lisp/mouse.el	28 Nov 2009 00:58:30 -0000
@@ -294,7 +294,7 @@
   (let ((w (posn-window (event-start event))))
     (and (window-minibuffer-p w)
 	 (not (minibuffer-window-active-p w))
-	 (error "Minibuffer window is not active")))
+	 (user-error "Minibuffer window is not active")))
   ;; Give temporary modes such as isearch a chance to turn off.
   (run-hooks 'mouse-leave-buffer-hook))
 
Index: lisp/ses.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/ses.el,v
retrieving revision 1.41
diff -b -u -r1.41 ses.el
--- lisp/ses.el	28 Aug 2009 17:02:56 -0000	1.41
+++ lisp/ses.el	28 Nov 2009 00:32:55 -0000
@@ -2468,7 +2468,7 @@
   (or (eq last-command 'yank)
       ;;Use noreturn here just to avoid a "poor-coverage" warning in its
       ;;macro definition.
-      (noreturn (error "Previous command was not a yank")))
+      (noreturn (user-error "Previous command was not a yank")))
   (undo)
   (ses-set-curcell)
   (yank (1+ (or arg 1)))
Index: lisp/simple.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/simple.el,v
retrieving revision 1.1033
diff -b -u -r1.1033 simple.el
--- lisp/simple.el	19 Nov 2009 20:58:45 -0000	1.1033
+++ lisp/simple.el	28 Nov 2009 01:07:11 -0000
@@ -1271,7 +1271,7 @@
      (list (if (string= regexp "")
 	       (if minibuffer-history-search-history
 		   (car minibuffer-history-search-history)
-		 (error "No previous history search regexp"))
+		 (user-error "No previous history search regexp"))
 	     regexp)
 	   (prefix-numeric-value current-prefix-arg))))
   (unless (zerop n)
@@ -1297,7 +1297,7 @@
 	(setq prevpos pos)
 	(setq pos (min (max 1 (+ pos (if (< n 0) -1 1))) (length history)))
 	(when (= pos prevpos)
-	  (error (if (= pos 1)
+	  (user-error (if (= pos 1)
 		     "No later matching history item"
 		   "No earlier matching history item")))
 	(setq match-string
@@ -1342,7 +1342,7 @@
      (list (if (string= regexp "")
 	       (if minibuffer-history-search-history
 		   (car minibuffer-history-search-history)
-		 (error "No previous history search regexp"))
+		 (user-error "No previous history search regexp"))
 	     regexp)
 	   (prefix-numeric-value current-prefix-arg))))
   (previous-matching-history-element regexp (- n)))
@@ -1402,10 +1402,10 @@
 	      (minibuffer-contents-no-properties)))
     (if (< nabs minimum)
 	(if minibuffer-default
-	    (error "End of defaults; no next item")
-	  (error "End of history; no default available")))
+	    (user-error "End of defaults; no next item")
+	  (user-error "End of history; no default available")))
     (if (> nabs (length (symbol-value minibuffer-history-variable)))
-	(error "Beginning of history; no preceding item"))
+	(user-error "Beginning of history; no preceding item"))
     (unless (memq last-command '(next-history-element
 				 previous-history-element))
       (let ((prompt-end (minibuffer-prompt-end)))
@@ -1751,7 +1751,7 @@
 Call `undo-start' to get ready to undo recent changes,
 then call `undo-more' one or more times to undo them."
   (or (listp pending-undo-list)
-      (error (concat "No further undo information"
+      (user-error (concat "No further undo information"
 		     (and undo-in-region " for region"))))
   (let ((undo-in-progress t))
     ;; Note: The following, while pulling elements off
@@ -1778,7 +1778,7 @@
 that apply to text between BEG and END are used; other undo elements
 are ignored.  If BEG and END are nil, all undo elements are used."
   (if (eq buffer-undo-list t)
-      (error "No undo information in this buffer"))
+      (user-error "No undo information in this buffer"))
   (setq pending-undo-list
 	(if (and beg end (not (= beg end)))
 	    (undo-make-selective-list (min beg end) (max beg end))
@@ -3115,7 +3115,7 @@
 doc string for `insert-for-yank-1', which see."
   (interactive "*p")
   (if (not (eq last-command 'yank))
-      (error "Previous command was not a yank"))
+      (user-error "Previous command was not a yank"))
   (setq this-command 'yank)
   (unless arg (setq arg 1))
   (let ((inhibit-read-only t)
Index: lisp/smerge-mode.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/smerge-mode.el,v
retrieving revision 1.79
diff -b -u -r1.79 smerge-mode.el
--- lisp/smerge-mode.el	4 Oct 2009 02:11:58 -0000	1.79
+++ lisp/smerge-mode.el	27 Nov 2009 23:38:05 -0000
@@ -343,12 +343,12 @@
         ))))
 
 (defvar smerge-resolve-function
-  (lambda () (error "Don't know how to resolve"))
+  (lambda () (user-error "Don't know how to resolve"))
   "Mode-specific merge function.
 The function is called with zero or one argument (non-nil if the resolution
 function should only apply safe heuristics) and with the match data set
 according to `smerge-match-conflict'.")
-(add-to-list 'debug-ignored-errors "Don't know how to resolve")
+;;(add-to-list 'debug-ignored-errors "Don't know how to resolve")
 
 (defvar smerge-text-properties
   `(help-echo "merge conflict: mouse-3 shows a menu"
@@ -742,9 +742,9 @@
 				  (when base-start (1- base-start)) base-start
 				  (1- other-start) other-start))
 	  t)
-      (search-failed (error "Point not in conflict region")))))
+      (search-failed (user-error "Point not in conflict region")))))
 
-(add-to-list 'debug-ignored-errors "Point not in conflict region")
+;;(add-to-list 'debug-ignored-errors "Point not in conflict region")
 
 (defun smerge-conflict-overlay (pos)
   "Return the conflict overlay at POS if any."
Index: lisp/subr.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/subr.el,v
retrieving revision 1.667
diff -b -u -r1.667 subr.el
--- lisp/subr.el	25 Nov 2009 03:59:23 -0000	1.667
+++ lisp/subr.el	28 Nov 2009 00:55:12 -0000
@@ -239,6 +239,19 @@
     (signal 'error (list (apply 'format args)))))
 (set-advertised-calling-convention 'error '(string &rest args))
 
+(defun user-error (&rest args)
+  "Signal an error that normally do not call the debugger.
+Like the function `error' but signals 'user-error instead of
+'error.  By default this skips the debugger.
+See `debug-ignored-errors' for more information."
+  (while t
+    (signal 'user-error (list (apply 'format args)))))
+(set-advertised-calling-convention 'error '(string &rest args))
+
+(put 'user-error 'error-message "Warning")
+(put 'user-error 'error-conditions '(user-error))
+(setq debug-ignored-errors (cons 'user-error debug-ignored-errors))
+
 ;; We put this here instead of in frame.el so that it's defined even on
 ;; systems where frame.el isn't loaded.
 (defun frame-configuration-p (object)
Index: lisp/terminal.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/terminal.el,v
retrieving revision 1.70
diff -b -u -r1.70 terminal.el
--- lisp/terminal.el	13 Nov 2009 22:19:55 -0000	1.70
+++ lisp/terminal.el	28 Nov 2009 02:14:34 -0000
@@ -1126,7 +1126,7 @@
     (while (setq process (get-buffer-process (current-buffer)))
       (if (y-or-n-p (format "Kill process %s? " (process-name process)))
 	  (delete-process process)
-	(error "Process %s not killed" (process-name process)))))
+	(user-error "Process %s not killed" (process-name process)))))
   (condition-case err
       (let ((process-environment
 	     (cons (concat "TERM=" te-terminal-name)
Index: lisp/calc/calc-undo.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/calc/calc-undo.el,v
retrieving revision 1.19
diff -b -u -r1.19 calc-undo.el
--- lisp/calc/calc-undo.el	5 Jan 2009 03:20:27 -0000	1.19
+++ lisp/calc/calc-undo.el	28 Nov 2009 01:04:57 -0000
@@ -35,14 +35,14 @@
 (defun calc-undo (n)
   (interactive "p")
   (when calc-executing-macro
-    (error "Use C-x e, not X, to run a keyboard macro that uses Undo"))
+    (user-error "Use C-x e, not X, to run a keyboard macro that uses Undo"))
   (if (<= n 0)
       (if (< n 0)
 	  (calc-redo (- n))
 	(calc-last-args 1))
     (calc-wrapper
      (when (null (nthcdr (1- n) calc-undo-list))
-       (error "No further undo information available"))
+       (user-error "No further undo information available"))
      (setq calc-undo-list
 	   (prog1
 	       (nthcdr n calc-undo-list)
Index: lisp/calendar/calendar.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/calendar/calendar.el,v
retrieving revision 1.292
diff -b -u -r1.292 calendar.el
--- lisp/calendar/calendar.el	10 Nov 2009 08:11:51 -0000	1.292
+++ lisp/calendar/calendar.el	27 Nov 2009 22:58:16 -0000
@@ -1882,7 +1882,7 @@
         ;; or on or before the digit of a 1-digit date.
         (if (not (and (looking-at "[ 0-9]?[0-9][^0-9]")
                       (get-text-property (point) 'date)))
-            (if error (error "Not on a date!"))
+            (if error (user-error "Not on a date!"))
           ;; Convert segment to real month and year.
           (if (zerop month) (setq month 12))
           ;; Go back to before the first date digit.
@@ -1897,7 +1897,7 @@
                  ((and (= 1 month) (= segment 2)) (1+ displayed-year))
                  (t displayed-year))))))))
 
-(add-to-list 'debug-ignored-errors "Not on a date!")
+;;(add-to-list 'debug-ignored-errors "Not on a date!")
 
 ;; The following version of calendar-gregorian-from-absolute is preferred for
 ;; reasons of clarity, BUT it's much slower than the version that follows it.
Index: lisp/cedet/ede/autoconf-edit.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/cedet/ede/autoconf-edit.el,v
retrieving revision 1.4
diff -b -u -r1.4 autoconf-edit.el
--- lisp/cedet/ede/autoconf-edit.el	2 Oct 2009 10:53:34 -0000	1.4
+++ lisp/cedet/ede/autoconf-edit.el	28 Nov 2009 01:42:47 -0000
@@ -58,7 +58,7 @@
 				      (if (file-exists-p cf1)
 					  cf1 cf2)
 				      ))))
-	  (error "Quit"))
+	  (user-error "Quit"))
       (find-file cf2)))
   ;; Note, we only ask about overwrite if a string/path is specified.
   (erase-buffer)
Index: lisp/cedet/ede/pconf.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/cedet/ede/pconf.el,v
retrieving revision 1.6
diff -b -u -r1.6 pconf.el
--- lisp/cedet/ede/pconf.el	30 Oct 2009 02:16:42 -0000	1.6
+++ lisp/cedet/ede/pconf.el	28 Nov 2009 01:43:02 -0000
@@ -57,7 +57,7 @@
 		 (not (eq ede-pconf-create-file-query 'never))
 		 (not (y-or-n-p
 		       (format "I had to create the %s file for you.  Ok? " file)))
-		 (error "Quit")))))))
+		 (user-error "Quit")))))))
 
 
 (defmethod ede-proj-configure-synchronize ((this ede-proj-project))
Index: lisp/cedet/ede/pmake.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/cedet/ede/pmake.el,v
retrieving revision 1.6
diff -b -u -r1.6 pmake.el
--- lisp/cedet/ede/pmake.el	17 Oct 2009 04:18:34 -0000	1.6
+++ lisp/cedet/ede/pmake.el	28 Nov 2009 01:43:25 -0000
@@ -85,7 +85,7 @@
 	   (not (eobp))
 	   (not (looking-at "# Automatically Generated \\w+ by EDE.")))
 	  (if (not (y-or-n-p (format "Really replace %s? " mfilename)))
-	      (error "Not replacing Makefile"))
+	      (user-error "Not replacing Makefile"))
 	(message "Replace EDE Makefile"))
       (erase-buffer)
       (ede-srecode-setup)
Index: lisp/cedet/ede/proj.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/cedet/ede/proj.el,v
retrieving revision 1.9
diff -b -u -r1.9 proj.el
--- lisp/cedet/ede/proj.el	30 Oct 2009 02:16:42 -0000	1.9
+++ lisp/cedet/ede/proj.el	28 Nov 2009 01:43:45 -0000
@@ -453,7 +453,7 @@
 	(df (project-dist-files this)))
     (if (and (file-exists-p (car df))
 	     (not (y-or-n-p "Dist file already exists.  Rebuild? ")))
-	(error "Try `ede-update-version' before making a distribution"))
+	(user-error "Try `ede-update-version' before making a distribution"))
     (ede-proj-setup-buildenvironment this)
     (if (string= (file-name-nondirectory pm) "Makefile.am")
 	(setq pm (expand-file-name "Makefile"
Index: lisp/cedet/ede/simple.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/cedet/ede/simple.el,v
retrieving revision 1.3
diff -b -u -r1.3 simple.el
--- lisp/cedet/ede/simple.el	2 Oct 2009 10:53:35 -0000	1.3
+++ lisp/cedet/ede/simple.el	28 Nov 2009 01:44:02 -0000
@@ -95,7 +95,7 @@
     (if (y-or-n-p (concat ede-simple-save-directory
 			  " doesn't exist.  Create? "))
 	(make-directory ede-simple-save-directory)
-      (error "No save directory for new project")))
+      (user-error "No save directory for new project")))
   (eieio-persistent-save proj))
 
 (defmethod ede-find-subproject-for-directory ((proj ede-simple-project)
Index: lisp/cedet/semantic/symref/list.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/cedet/semantic/symref/list.el,v
retrieving revision 1.7
diff -b -u -r1.7 list.el
--- lisp/cedet/semantic/symref/list.el	3 Nov 2009 21:45:32 -0000	1.7
+++ lisp/cedet/semantic/symref/list.el	28 Nov 2009 01:44:57 -0000
@@ -54,7 +54,7 @@
     (when (not ct) (error "Place cursor inside tag to be searched for"))
     ;; Check w/ user.
     (when (not (y-or-n-p (format "Find references for %s? " (semantic-tag-name ct))))
-      (error "Quit"))
+      (user-error "Quit"))
     ;; Gather results and tags
     (message "Gathering References...")
     (setq res (semantic-symref-find-references-by-name (semantic-tag-name ct)))
Index: lisp/cedet/srecode/document.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/cedet/srecode/document.el,v
retrieving revision 1.5
diff -b -u -r1.5 document.el
--- lisp/cedet/srecode/document.el	3 Nov 2009 21:45:32 -0000	1.5
+++ lisp/cedet/srecode/document.el	28 Nov 2009 01:45:29 -0000
@@ -514,7 +514,7 @@
 	  (pulse-momentary-highlight-region s e)
 
 	  (when (not (y-or-n-p "A comment already exists.  Replace? "))
-	    (error "Quit"))
+	    (user-error "Quit"))
 
 	  ;; Extract text from the existing comment.
 	  (srecode-extract temp s e)
Index: lisp/cedet/srecode/getset.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/cedet/srecode/getset.el,v
retrieving revision 1.5
diff -b -u -r1.5 getset.el
--- lisp/cedet/srecode/getset.el	3 Nov 2009 21:45:31 -0000	1.5
+++ lisp/cedet/srecode/getset.el	28 Nov 2009 01:45:45 -0000
@@ -268,7 +268,7 @@
   (if (or srecode-insert-getset-fully-automatic-flag
 	  (y-or-n-p "Insert new field here? "))
       nil
-    (error "You must position the cursor where to insert the new field first"))
+    (user-error "You must position the cursor where to insert the new field first"))
   )
 
 
Index: lisp/cedet/srecode/map.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/cedet/srecode/map.el,v
retrieving revision 1.10
diff -b -u -r1.10 map.el
--- lisp/cedet/srecode/map.el	22 Nov 2009 23:49:20 -0000	1.10
+++ lisp/cedet/srecode/map.el	28 Nov 2009 01:46:15 -0000
@@ -287,7 +287,7 @@
 	      (make-directory (file-name-directory srecode-map-save-file))
 	    ;; No make, change save file
 	    (customize-variable 'srecode-map-save-file)
-	    (error "Change your SRecode map file"))))
+	    (user-error "Change your SRecode map file"))))
       ;; Have a dir.  Make the object.
       (setq srecode-current-map
 	    (srecode-map "SRecode Map"
Index: lisp/cedet/srecode/texi.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/cedet/srecode/texi.el,v
retrieving revision 1.4
diff -b -u -r1.4 texi.el
--- lisp/cedet/srecode/texi.el	3 Nov 2009 21:45:31 -0000	1.4
+++ lisp/cedet/srecode/texi.el	28 Nov 2009 01:46:34 -0000
@@ -61,7 +61,7 @@
 	  (progn
 	    (goto-char (car (cdr nodebounds)))
 	    (if (not (y-or-n-p "Add menu here? "))
-		(error "Abort"))
+		(user-error "Abort"))
 	    (srecode-insert "declaration:menu"))
 	;; Else, find the end
 	(re-search-forward "@end menu")
Index: lisp/emacs-lisp/authors.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/emacs-lisp/authors.el,v
retrieving revision 1.65
diff -b -u -r1.65 authors.el
--- lisp/emacs-lisp/authors.el	31 Oct 2009 02:38:37 -0000	1.65
+++ lisp/emacs-lisp/authors.el	28 Nov 2009 01:57:56 -0000
@@ -865,7 +865,7 @@
     (unless (file-exists-p (expand-file-name "src/emacs.c" root))
       (unless (y-or-n-p
 	       (format "Not the root directory of Emacs: %s, continue? " root))
-	(error "Not the root directory")))
+	(user-error "Not the root directory")))
     (dolist (log logs)
       (when (string-match "ChangeLog\\(.[0-9]+\\)?$" log)
 	(message "Scanning %s..." log)
Index: lisp/emacs-lisp/checkdoc.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/emacs-lisp/checkdoc.el,v
retrieving revision 1.81
diff -b -u -r1.81 checkdoc.el
--- lisp/emacs-lisp/checkdoc.el	24 Nov 2009 23:13:09 -0000	1.81
+++ lisp/emacs-lisp/checkdoc.el	28 Nov 2009 01:35:57 -0000
@@ -922,7 +922,7 @@
 	(progn
 	  (goto-char wrong)
 	  (if (not take-notes)
-	      (error "%s" (checkdoc-error-text msg)))))
+	      (user-error "%s" (checkdoc-error-text msg)))))
     (checkdoc-show-diagnostics)
     (if (called-interactively-p 'interactive)
 	(message "No style warnings."))))
@@ -955,7 +955,7 @@
 	 (e (checkdoc-file-comments-engine))
 	(checkdoc-generate-compile-warnings-flag
 	 (or take-notes checkdoc-generate-compile-warnings-flag)))
-    (if e (error "%s" (checkdoc-error-text e)))
+    (if e (user-error "%s" (checkdoc-error-text e)))
     (checkdoc-show-diagnostics)
     e))
 
@@ -993,7 +993,7 @@
     (if (not (called-interactively-p 'interactive))
 	e
       (if e
-	  (error "%s" (checkdoc-error-text e))
+	  (user-error "%s" (checkdoc-error-text e))
 	(checkdoc-show-diagnostics)))
     (goto-char p))
   (if (called-interactively-p 'interactive)
@@ -1037,15 +1037,15 @@
 	     (msg (checkdoc-this-string-valid)))
 	(if msg (if no-error
 		    (message "%s" (checkdoc-error-text msg))
-		  (error "%s" (checkdoc-error-text msg)))
+		  (user-error "%s" (checkdoc-error-text msg)))
 	  (setq msg (checkdoc-message-text-search beg end))
 	  (if msg (if no-error
 		      (message "%s" (checkdoc-error-text msg))
-		    (error "%s" (checkdoc-error-text msg)))
+		    (user-error "%s" (checkdoc-error-text msg)))
 	    (setq msg (checkdoc-rogue-space-check-engine beg end))
 	    (if msg (if no-error
 			(message "%s" (checkdoc-error-text msg))
-		      (error "%s" (checkdoc-error-text msg))))))
+		      (user-error "%s" (checkdoc-error-text msg))))))
 	(if (called-interactively-p 'interactive)
 	    (message "Checkdoc: done."))))))
 
@@ -2671,6 +2671,8 @@
 (custom-add-option 'emacs-lisp-mode-hook
 		   (lambda () (checkdoc-minor-mode 1)))
 
+;; Fix-me: Assumed that (checkdoc-error-text e) are for user
+;; errors. Perhaps this catches the strings below too?
 (add-to-list 'debug-ignored-errors
 	     "Argument `.*' should appear (as .*) in the doc string")
 (add-to-list 'debug-ignored-errors
Index: lisp/emacs-lisp/easy-mmode.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/emacs-lisp/easy-mmode.el,v
retrieving revision 1.99
diff -b -u -r1.99 easy-mmode.el
--- lisp/emacs-lisp/easy-mmode.el	11 Nov 2009 06:17:10 -0000	1.99
+++ lisp/emacs-lisp/easy-mmode.el	28 Nov 2009 01:36:31 -0000
@@ -518,8 +518,8 @@
                  (when was-narrowed (,narrowfun)))))))
     (unless name (setq name base-name))
     `(progn
-       (add-to-list 'debug-ignored-errors
-		    ,(concat "^No \\(previous\\|next\\) " (regexp-quote name)))
+       ;; (add-to-list 'debug-ignored-errors
+       ;;  	    ,(concat "^No \\(previous\\|next\\) " (regexp-quote name)))
        (defun ,next-sym (&optional count)
 	 ,(format "Go to the next COUNT'th %s." name)
 	 (interactive "p")
@@ -530,7 +530,7 @@
              `(if (not (re-search-forward ,re nil t count))
                   (if (looking-at ,re)
                       (goto-char (or ,(if endfun `(,endfun)) (point-max)))
-                    (error "No next %s" ,name))
+                    (user-error "No next %s" ,name))
                 (goto-char (match-beginning 0))
                 (when (and (eq (current-buffer) (window-buffer (selected-window)))
                            (called-interactively-p 'interactive))
@@ -549,7 +549,7 @@
 	 (if (< count 0) (,next-sym (- count))
            ,(funcall when-narrowed
              `(unless (re-search-backward ,re nil t count)
-                (error "No previous %s" ,name)))
+                (user-error "No previous %s" ,name)))
            ,@body))
        (put ',prev-sym 'definition-name ',base))))
 
Index: lisp/emulation/edt.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/emulation/edt.el,v
retrieving revision 1.70
diff -b -u -r1.70 edt.el
--- lisp/emulation/edt.el	3 Nov 2009 02:04:34 -0000	1.70
+++ lisp/emulation/edt.el	28 Nov 2009 01:59:56 -0000
@@ -2085,11 +2085,11 @@
 			   "Ah yes, there it is, in \n\n       %s \n\n" path))
 		  (if (edt-y-or-n-p "Do you want to run it now? ")
 		      (load-file path)
-		    (error "EDT Emulation not configured")))
+		    (user-error "EDT Emulation not configured")))
 		 (t
 		  (insert "Nope, I can't seem to find it.  :-(\n\n")
 		  (sit-for 20)
-		  (error "EDT Emulation not configured")))))))
+		  (user-error "EDT Emulation not configured")))))))
 
 ;;;
 ;;;  Turning the EDT Emulation on and off.
Index: lisp/emulation/viper-cmd.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/emulation/viper-cmd.el,v
retrieving revision 1.87
diff -b -u -r1.87 viper-cmd.el
--- lisp/emulation/viper-cmd.el	22 Nov 2009 03:14:15 -0000	1.87
+++ lisp/emulation/viper-cmd.el	28 Nov 2009 02:01:00 -0000
@@ -4077,7 +4077,7 @@
 	      "Buffer `%s' is modified, are you sure you want to kill it? "
 	      buffer-name)))
 	(kill-buffer buffer)
-      (error "Buffer not killed"))))
+      (user-error "Buffer not killed"))))
 
 
 \f
@@ -5077,7 +5077,7 @@
 	    (if (y-or-n-p "Mail anyway? ")
 		()
 	      (set-window-configuration window-config)
-	      (error "Bug report aborted")))
+	      (user-error "Bug report aborted")))
 
 	  (require 'reporter)
 	  (set-window-configuration window-config)
Index: lisp/emulation/viper-macs.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/emulation/viper-macs.el,v
retrieving revision 1.47
diff -b -u -r1.47 viper-macs.el
--- lisp/emulation/viper-macs.el	5 Jan 2009 03:21:21 -0000	1.47
+++ lisp/emulation/viper-macs.el	28 Nov 2009 02:01:58 -0000
@@ -888,7 +888,7 @@
   (if (get-register reg)
       (if (y-or-n-p "Register contains data.  Overwrite? ")
 	  ()
-	(error
+	(user-error
 	 "Macro not saved in register.  Can still be invoked via `C-x e'")))
   (set-register reg last-kbd-macro))
 
Index: lisp/gnus/gnus-art.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/gnus/gnus-art.el,v
retrieving revision 1.188
diff -b -u -r1.188 gnus-art.el
--- lisp/gnus/gnus-art.el	24 Oct 2009 03:42:19 -0000	1.188
+++ lisp/gnus/gnus-art.el	28 Nov 2009 02:07:33 -0000
@@ -8318,7 +8318,7 @@
   (when (and gnus-article-encrypt-protocol
 	     gnus-novice-user)
     (unless (gnus-y-or-n-p "Really encrypt article(s)? ")
-      (error "Encrypt aborted")))
+      (user-error "Encrypt aborted")))
   (let ((func (cdr (assoc protocol gnus-article-encrypt-protocol-alist))))
     (unless func
       (error "Can't find the encrypt protocol %s" protocol))
Index: lisp/gnus/gnus-draft.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/gnus/gnus-draft.el,v
retrieving revision 1.25
diff -b -u -r1.25 gnus-draft.el
--- lisp/gnus/gnus-draft.el	3 Mar 2009 10:18:45 -0000	1.25
+++ lisp/gnus/gnus-draft.el	28 Nov 2009 02:08:25 -0000
@@ -240,7 +240,7 @@
 	    (if (and active (>= (cdr active) (car active)))
 		(if (y-or-n-p "There are unsent drafts.  Confirm to exit? ")
 		    (throw 'continue t)
-		  (error "Stop!"))))))))
+		  (user-error "Stop!"))))))))
 
 (defcustom gnus-draft-setup-hook nil
   "Hook run after setting up a draft buffer."
Index: lisp/gnus/gnus-score.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/gnus/gnus-score.el,v
retrieving revision 1.40
diff -b -u -r1.40 gnus-score.el
--- lisp/gnus/gnus-score.el	5 Jan 2009 03:22:03 -0000	1.40
+++ lisp/gnus/gnus-score.el	28 Nov 2009 02:09:02 -0000
@@ -925,7 +925,7 @@
 		     (string-to-number (read-string "Score: "))))
   (save-excursion
     (unless (and (stringp match) (> (length match) 0))
-      (error "No match"))
+      (user-error "No match"))
     (goto-char (point-min))
     (let ((regexp (cond ((eq type 'f)
 			 (gnus-simplify-subject-fuzzy match))
Index: lisp/gnus/message.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/gnus/message.el,v
retrieving revision 1.176
diff -b -u -r1.176 message.el
--- lisp/gnus/message.el	24 Nov 2009 09:19:09 -0000	1.176
+++ lisp/gnus/message.el	28 Nov 2009 02:12:13 -0000
@@ -4285,7 +4285,7 @@
 		 (not (y-or-n-p
 		       (format
 			"Address `%s' might be bogus.  Continue? " bog)))
-		 (error "Bogus address"))))))))
+		 (user-error "Bogus address"))))))))
 
 (custom-add-option 'message-setup-hook 'message-check-recipients)
 
@@ -4431,7 +4431,7 @@
 	      (insert " ")
 	    (forward-line 1)
 	    (unless (y-or-n-p "Send anyway? ")
-	      (error "Failed to send the message")))))
+	      (user-error "Failed to send the message")))))
       ;; Let the user do all of the above.
       (run-hooks 'message-header-hook))
     (unwind-protect
@@ -6189,7 +6189,7 @@
 			      (y-or-n-p
 			       "Message already being composed; erase? ")
 			    (message nil))))
-	    (error "Message being composed")))
+	    (user-error "Message being composed")))
       (funcall (or switch-function 'pop-to-buffer) name)
       (set-buffer name))
     (erase-buffer)
Index: lisp/mh-e/mh-utils.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/mh-e/mh-utils.el,v
retrieving revision 1.76
diff -b -u -r1.76 mh-utils.el
--- lisp/mh-e/mh-utils.el	4 Oct 2009 02:11:59 -0000	1.76
+++ lisp/mh-e/mh-utils.el	27 Nov 2009 23:29:08 -0000
@@ -350,10 +350,10 @@
            (string-to-number (buffer-substring (match-beginning 1)
                                                (match-end 1))))
           (error-if-no-message
-           (error "Cursor not pointing to message"))
+           (user-error "Cursor not pointing to message"))
           (t nil))))
 
-(add-to-list 'debug-ignored-errors "^Cursor not pointing to message$")
+;;(add-to-list 'debug-ignored-errors "^Cursor not pointing to message$")
 
 \f
 
Index: lisp/org/org-agenda.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/org/org-agenda.el,v
retrieving revision 1.39
diff -b -u -r1.39 org-agenda.el
--- lisp/org/org-agenda.el	20 Nov 2009 20:50:32 -0000	1.39
+++ lisp/org/org-agenda.el	28 Nov 2009 01:05:39 -0000
@@ -1689,12 +1689,12 @@
 that have been changed along."
   (interactive)
   (or org-agenda-allow-remote-undo
-      (error "Check the variable `org-agenda-allow-remote-undo' to activate remote undo"))
+      (user-error "Check the variable `org-agenda-allow-remote-undo' to activate remote undo"))
   (if (not (eq this-command last-command))
       (setq org-agenda-undo-has-started-in nil
 	    org-agenda-pending-undo-list org-agenda-undo-list))
   (if (not org-agenda-pending-undo-list)
-      (error "No further undo information"))
+      (user-error "No further undo information"))
   (let* ((entry (pop org-agenda-pending-undo-list))
 	 buf line cmd rembuf)
     (setq cmd (pop entry) line (pop entry))
Index: lisp/play/decipher.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/play/decipher.el,v
retrieving revision 1.38
diff -b -u -r1.38 decipher.el
--- lisp/play/decipher.el	3 Nov 2009 02:04:35 -0000	1.38
+++ lisp/play/decipher.el	28 Nov 2009 01:06:01 -0000
@@ -389,11 +389,11 @@
   ;; for the following command.
   (setq this-command t)
   (or (eq major-mode 'decipher-mode)
-      (error "This buffer is not in Decipher mode"))
+      (user-error "This buffer is not in Decipher mode"))
   (or (eq last-command 'decipher-undo)
       (setq decipher-pending-undo-list decipher-undo-list))
   (or decipher-pending-undo-list
-      (error "No further undo information"))
+      (user-error "No further undo information"))
   (let ((undo-rec (pop decipher-pending-undo-list))
         buffer-read-only                ;Make buffer writable
         redo-map redo-rec undo-map)
Index: lisp/progmodes/compile.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/progmodes/compile.el,v
retrieving revision 1.504
diff -b -u -r1.504 compile.el
--- lisp/progmodes/compile.el	12 Nov 2009 06:55:43 -0000	1.504
+++ lisp/progmodes/compile.el	27 Nov 2009 23:30:42 -0000
@@ -2277,6 +2277,7 @@
 			      compilation-locs))
 		 compilation-locs))))
 
+;; Fix-me: How should this be handled?
 (add-to-list 'debug-ignored-errors "^No more [-a-z ]+s yet$")
 
 ;;; Compatibility with the old compile.el.
Index: lisp/progmodes/etags.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/progmodes/etags.el,v
retrieving revision 1.217
diff -b -u -r1.217 etags.el
--- lisp/progmodes/etags.el	25 Nov 2009 06:08:45 -0000	1.217
+++ lisp/progmodes/etags.el	27 Nov 2009 23:36:25 -0000
@@ -552,7 +552,7 @@
   (cond ((eq cont 'same)
 	 ;; Use the ambient value of tags-file-name.
 	 (or tags-file-name
-	     (error "%s"
+	     (user-error "%s"
 		    (substitute-command-keys
 		     (concat "No tags table in use; "
 			     "use \\[visit-tags-table] to select one")))))
@@ -704,7 +704,7 @@
 	(kill-local-variable 'tags-file-name)
 	(if (eq local-tags-file-name tags-file-name)
 	    (setq tags-file-name nil))
-	(error "File %s is not a valid tags table" local-tags-file-name)))))
+	(user-error "File %s is not a valid tags table" local-tags-file-name)))))
 
 (defun tags-reset-tags-tables ()
   "Reset tags state to cancel effect of any previous \\[visit-tags-table] or \\[find-tag]."
@@ -804,7 +804,7 @@
 				(tags-lazy-completion-table)
 				nil nil nil nil default)))
     (if (equal spec "")
-	(or default (error "There is no default tag"))
+	(or default (user-error "There is no default tag"))
       spec)))
 
 (defvar last-tag nil
@@ -858,7 +858,7 @@
     (if (eq '- next-p)
 	;; Pop back to a previous location.
 	(if (ring-empty-p tags-location-ring)
-	    (error "No previous tag locations")
+	    (user-error "No previous tag locations")
 	  (let ((marker (ring-remove tags-location-ring 0)))
 	    (prog1
 		;; Move to the saved location.
@@ -1367,7 +1367,7 @@
 	      offset (* 3 offset)))	; expand search window
       (or found
 	  (re-search-forward pat nil t)
-	  (error "Rerun etags: `%s' not found in %s"
+	  (user-error "Rerun etags: `%s' not found in %s"
 		 pat buffer-file-name)))
     ;; Position point at the right place
     ;; if the search string matched an extra Ctrl-m at the beginning.
@@ -1713,7 +1713,7 @@
     (and novisit
 	 (get-buffer " *next-file*")
 	 (kill-buffer " *next-file*"))
-    (error "All files processed"))
+    (user-error "All files processed"))
   (let* ((next (car next-file-list))
 	 (buffer (get-file-buffer next))
 	 (new (not buffer)))
@@ -1746,7 +1746,7 @@
   "Form for `tags-loop-continue' to eval to change one file.")
 
 (defvar tags-loop-scan
-  '(error "%s"
+  '(user-error "%s"
 	  (substitute-command-keys
 	   "No \\[tags-search] or \\[tags-query-replace] in progress"))
   "Form for `tags-loop-continue' to eval to scan one file.
@@ -1904,7 +1904,7 @@
 	  (if (funcall list-tags-function file)
 	      (setq gotany t)))
 	(or gotany
-	    (error "File %s not in current tags tables" file)))))
+	    (user-error "File %s not in current tags tables" file)))))
   (with-current-buffer "*Tags List*"
     (require 'apropos)
     (with-no-warnings
@@ -2037,7 +2037,7 @@
   (interactive)
   (or tags-table-list
       tags-file-name
-      (error "%s"
+      (user-error "%s"
 	     (substitute-command-keys
 	      "No tags table loaded; try \\[visit-tags-table]")))
   (let ((completion-ignore-case (if (memq tags-case-fold-search '(t nil))
@@ -2049,23 +2049,23 @@
         (comp-table (tags-lazy-completion-table))
 	beg)
     (or pattern
-	(error "Nothing to complete"))
+	(user-error "Nothing to complete"))
     (search-backward pattern)
     (setq beg (point))
     (forward-char (length pattern))
     (completion-in-region beg (point) comp-table)))
 
-(dolist (x '("^No tags table in use; use .* to select one$"
-	     "^There is no default tag$"
-	     "^No previous tag locations$"
-	     "^File .* is not a valid tags table$"
-	     "^No \\(more \\|\\)tags \\(matching\\|containing\\) "
-	     "^Rerun etags: `.*' not found in "
-	     "^All files processed$"
-	     "^No .* or .* in progress$"
-	     "^File .* not in current tags tables$"
-	     "^No tags table loaded"
-	     "^Nothing to complete$"))
+(dolist (x '(;;"^No tags table in use; use .* to select one$"
+	     ;;"^There is no default tag$"
+	     ;;"^No previous tag locations$"
+	     ;;"^File .* is not a valid tags table$"
+	     "^No \\(more \\|\\)tags \\(matching\\|containing\\) " ;; Can't find it
+	     ;;"^Rerun etags: `.*' not found in "
+	     ;;"^All files processed$"
+	     ;;"^No .* or .* in progress$"
+	     ;;"^File .* not in current tags tables$"
+	     ;;"^No tags table loaded"
+	     ;;"^Nothing to complete$"))
 	(add-to-list 'debug-ignored-errors x))
 \f
 (provide 'etags)
Index: lisp/progmodes/python.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/progmodes/python.el,v
retrieving revision 1.101
diff -b -u -r1.101 python.el
--- lisp/progmodes/python.el	6 Nov 2009 05:16:30 -0000	1.101
+++ lisp/progmodes/python.el	27 Nov 2009 23:37:34 -0000
@@ -1773,7 +1773,7 @@
 			    (format "Describe symbol (default %s): " symbol)
 			  "Describe symbol: ")
 			nil nil symbol))))
-  (if (equal symbol "") (error "No symbol"))
+  (if (equal symbol "") (user-error "No symbol"))
   ;; Ensure we have a suitable help buffer.
   ;; Fixme: Maybe process `Related help topics' a la help xrefs and
   ;; allow C-c C-f in help buffer.
@@ -1793,7 +1793,7 @@
 						   symbol python-imports)
    "*Help*" (python-proc) nil nil))
 
-(add-to-list 'debug-ignored-errors "^No symbol")
+;;(add-to-list 'debug-ignored-errors "^No symbol")
 
 (defun python-send-receive (string)
   "Send STRING to inferior Python (if any) and return result.
@@ -2022,11 +2022,11 @@
       (while (< (point) end)
 	(if (and (< (current-indentation) count)
 		 (not (looking-at "[ \t]*$")))
-	    (error "Can't shift all lines enough"))
+	    (user-error "Can't shift all lines enough"))
 	(forward-line))
       (indent-rigidly start end (- count)))))
 
-(add-to-list 'debug-ignored-errors "^Can't shift all lines enough")
+;;(add-to-list 'debug-ignored-errors "^Can't shift all lines enough")
 
 (defun python-shift-right (start end &optional count)
   "Shift lines in region COUNT (the prefix arg) columns to the right.
Index: lisp/term/ns-win.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/term/ns-win.el,v
retrieving revision 1.57
diff -b -u -r1.57 ns-win.el
--- lisp/term/ns-win.el	3 Nov 2009 02:04:35 -0000	1.57
+++ lisp/term/ns-win.el	28 Nov 2009 02:14:46 -0000
@@ -898,7 +898,7 @@
                                   `(mouse-1 POSITION 1))))
         (if (y-or-n-p (format "Print buffer %s? " (buffer-name)))
             (print-buffer)
-	  (error "Cancelled")))
+	  (user-error "Cancelled")))
     (print-buffer)))
 
 
Index: lisp/textmodes/ispell.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/textmodes/ispell.el,v
retrieving revision 1.264
diff -b -u -r1.264 ispell.el
--- lisp/textmodes/ispell.el	12 Nov 2009 06:55:44 -0000	1.264
+++ lisp/textmodes/ispell.el	27 Nov 2009 23:38:33 -0000
@@ -1820,7 +1820,7 @@
 	(if ispell-check-only
 	    ;; return dummy word when just flagging misspellings
 	    (list "" (point) (point))
-	  (error "No word found to check!"))
+	  (user-error "No word found to check!"))
       (setq start (copy-marker (match-beginning 0))
 	    end (point-marker)
 	    word (buffer-substring-no-properties start end))
@@ -3879,7 +3879,7 @@
 			  (insert comment-end)))))
 	      (insert (concat " " word))))))))
 
-(add-to-list 'debug-ignored-errors "^No word found to check!$")
+;;(add-to-list 'debug-ignored-errors "^No word found to check!$")
 
 (provide 'ispell)
 

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Emacs for new users
  2009-11-23 21:04       ` Chong Yidong
  2009-11-23 21:16         ` Lennart Borgman
@ 2009-11-30 22:55         ` Giorgos Keramidas
  2009-11-30 23:01           ` Lennart Borgman
  2009-12-01  9:13           ` Deniz Dogan
  1 sibling, 2 replies; 58+ messages in thread
From: Giorgos Keramidas @ 2009-11-30 22:55 UTC (permalink / raw)
  To: Chong Yidong; +Cc: Lennart Borgman, emacs-devel

On Mon, 23 Nov 2009 16:04:47 -0500, Chong Yidong <cyd@stupidchicken.com> wrote:
>Lennart Borgman <lennart.borgman@gmail.com> writes:
>>> With that said, I think a solution to the learning-emacs-in-classroom and
>>> emacs-for-new-users problems is the same: include a .emacs which turns
>>> on things like CUA mode to make operation more familiar.
>>
>> The problem is that it does not work as good as it could in all
>> situations. Since CUA is not the default not so much effort in
>> getting rid of all ruogh things. Not that you can't work around them,
>> but it is not so easy for a newcomer.
>
> The primary barrier to CUA is that it destroys the long-established
> standard that C-c LETTER is free for binding to Emacs user commands.
>
> So we won't be moving to CUA any time soon.  For those that want it,
> it's just a click away on the Options menu.

CUA also interferes in a non-trivial manner with `C-x', which is used
far more often than `C-c'.  I am always annoyed a bit when I start
typing `C-x C-f' but pause half-way through to think of a good name for
a new buffer, only to notice that a region has just been killed.  Oops!

Having said that I like CUA mode a lot (especially the rectangular
selection mode and region highlighting).  It is useful even when Emacs
runs inside xterm windows, so it is enabled more often than not in my
Emacs sessions of late.





^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Emacs for new users
  2009-11-30 22:55         ` Giorgos Keramidas
@ 2009-11-30 23:01           ` Lennart Borgman
  2009-12-01  9:13           ` Deniz Dogan
  1 sibling, 0 replies; 58+ messages in thread
From: Lennart Borgman @ 2009-11-30 23:01 UTC (permalink / raw)
  To: Giorgos Keramidas; +Cc: Chong Yidong, emacs-devel

On Mon, Nov 30, 2009 at 11:55 PM, Giorgos Keramidas
<keramida@ceid.upatras.gr> wrote:
> On Mon, 23 Nov 2009 16:04:47 -0500, Chong Yidong <cyd@stupidchicken.com> wrote:
>>Lennart Borgman <lennart.borgman@gmail.com> writes:
>>>> With that said, I think a solution to the learning-emacs-in-classroom and
>>>> emacs-for-new-users problems is the same: include a .emacs which turns
>>>> on things like CUA mode to make operation more familiar.
>>>
>>> The problem is that it does not work as good as it could in all
>>> situations. Since CUA is not the default not so much effort in
>>> getting rid of all ruogh things. Not that you can't work around them,
>>> but it is not so easy for a newcomer.
>>
>> The primary barrier to CUA is that it destroys the long-established
>> standard that C-c LETTER is free for binding to Emacs user commands.
>>
>> So we won't be moving to CUA any time soon.  For those that want it,
>> it's just a click away on the Options menu.
>
> CUA also interferes in a non-trivial manner with `C-x', which is used
> far more often than `C-c'.  I am always annoyed a bit when I start
> typing `C-x C-f' but pause half-way through to think of a good name for
> a new buffer, only to notice that a region has just been killed.  Oops!


Yes, this is a problem. However you can start the key sequence C-S-x
and C-S-c (instead of C-x and C-s) when the region is highlighted to
avoid cutting/copying.




^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Emacs for new users
  2009-11-24 14:43     ` Renaud Casenave-Péré
  2009-11-24 16:10       ` Andreas Schwab
  2009-11-25 21:01       ` Richard Stallman
@ 2009-11-30 23:02       ` Giorgos Keramidas
  2 siblings, 0 replies; 58+ messages in thread
From: Giorgos Keramidas @ 2009-11-30 23:02 UTC (permalink / raw)
  To: Renaud Casenave-Péré; +Cc: emacs-devel

On Tue, 24 Nov 2009 23:43:00 +0900 (JST), Renaud Casenave-Péré <renaud@casenave-pere.fr> wrote:
> From: Richard Stallman <rms@gnu.org>
> Subject: Re: Emacs for new users
> Date: Tue, 24 Nov 2009 09:10:53 -0500
>
>> Maybe we should have an "Emacs command immersion mode"
>> which disables all mouse clicks.
>
> `emacs -nw' ?

That's a very good point!  At least it worked for me.  I learned a far
greater number of key bindings *after* I started using text frames.  The
lasting effects of using "emacs -nw" were especially manifest after a
couple of years of Gnus usage inside xterm + screen windows.

I don't necessarily recommend "emacs -nw" sessions for _new_ users, but
it really did help me learn many of the standard key bindings during my
own intermediate period between "newbie Emacs user" and "using Emacs to
do almost everything, including IRC, email, programming and what not".





^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Emacs for new users
  2009-11-30 22:55         ` Giorgos Keramidas
  2009-11-30 23:01           ` Lennart Borgman
@ 2009-12-01  9:13           ` Deniz Dogan
  2009-12-01 10:13             ` Miles Bader
  1 sibling, 1 reply; 58+ messages in thread
From: Deniz Dogan @ 2009-12-01  9:13 UTC (permalink / raw)
  To: Giorgos Keramidas; +Cc: Chong Yidong, Lennart Borgman, emacs-devel

2009/11/30 Giorgos Keramidas <keramida@ceid.upatras.gr>:
> On Mon, 23 Nov 2009 16:04:47 -0500, Chong Yidong <cyd@stupidchicken.com> wrote:
>>Lennart Borgman <lennart.borgman@gmail.com> writes:
>>>> With that said, I think a solution to the learning-emacs-in-classroom and
>>>> emacs-for-new-users problems is the same: include a .emacs which turns
>>>> on things like CUA mode to make operation more familiar.
>>>
>>> The problem is that it does not work as good as it could in all
>>> situations. Since CUA is not the default not so much effort in
>>> getting rid of all ruogh things. Not that you can't work around them,
>>> but it is not so easy for a newcomer.
>>
>> The primary barrier to CUA is that it destroys the long-established
>> standard that C-c LETTER is free for binding to Emacs user commands.
>>
>> So we won't be moving to CUA any time soon.  For those that want it,
>> it's just a click away on the Options menu.
>
> CUA also interferes in a non-trivial manner with `C-x', which is used
> far more often than `C-c'.  I am always annoyed a bit when I start
> typing `C-x C-f' but pause half-way through to think of a good name for
> a new buffer, only to notice that a region has just been killed.  Oops!
>
> Having said that I like CUA mode a lot (especially the rectangular
> selection mode and region highlighting).  It is useful even when Emacs
> runs inside xterm windows, so it is enabled more often than not in my
> Emacs sessions of late.
>
>

I only use the rectangle part of CUA selection mode. I don't see why
the recangle part is in that mode in the first place, as I'm sure many
non-CUA enthusiasts would like to use it. I wasn't even aware that it
existed and was for too long somewhat dissatisfied with the standard
rectangles of Emacs.

So this is off-topic, but why is the "new" rectangle functionality part of CUA?

-- 
Deniz Dogan




^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: Emacs for new users
  2009-12-01  9:13           ` Deniz Dogan
@ 2009-12-01 10:13             ` Miles Bader
  2010-11-13 19:14               ` separating CUA rectangles from CUA selection mode [was: Emacs for new users] Drew Adams
  0 siblings, 1 reply; 58+ messages in thread
From: Miles Bader @ 2009-12-01 10:13 UTC (permalink / raw)
  To: Deniz Dogan; +Cc: Giorgos Keramidas, Chong Yidong, Lennart Borgman, emacs-devel

Deniz Dogan <deniz.a.m.dogan@gmail.com> writes:
> I only use the rectangle part of CUA selection mode. I don't see why
> the recangle part is in that mode in the first place, as I'm sure many
> non-CUA enthusiasts would like to use it. I wasn't even aware that it
> existed and was for too long somewhat dissatisfied with the standard
> rectangles of Emacs.
>
> So this is off-topic, but why is the "new" rectangle functionality part of CUA?

Historical silliness.

It should be separate, but sadly nobody has done the work to split it
out.

-Miles

-- 
97% of everything is grunge




^ permalink raw reply	[flat|nested] 58+ messages in thread

* separating CUA rectangles from CUA selection mode [was: Emacs for new users]
  2009-12-01 10:13             ` Miles Bader
@ 2010-11-13 19:14               ` Drew Adams
  0 siblings, 0 replies; 58+ messages in thread
From: Drew Adams @ 2010-11-13 19:14 UTC (permalink / raw)
  To: emacs-devel; +Cc: 'Deniz Dogan', 'Miles Bader'

Is this change in the TO-DO list at least?

Seems like separating out the rectangle stuff, which has nothing to do with CUA,
would be a good idea.

> From: Miles Bader Sent: Tuesday, December 01, 2009 2:13 AM
> Deniz Dogan writes:
> > I only use the rectangle part of CUA selection mode. I don't see
> > why the recangle part is in that mode in the first place, as 
> > I'm sure many non-CUA enthusiasts would like to use it. I wasn't
> > even aware that it existed and was for too long somewhat
> > dissatisfied with the standard rectangles of Emacs.
> >
> > So this is off-topic, but why is the "new" rectangle 
> > functionality part of CUA?
> 
> Historical silliness.  It should be separate, but sadly
> nobody has done the work to split it out.




^ permalink raw reply	[flat|nested] 58+ messages in thread

end of thread, other threads:[~2010-11-13 19:14 UTC | newest]

Thread overview: 58+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-11-23 16:37 Emacs for new users Per Starbäck
2009-11-23 16:59 ` Giuseppe Scrivano
2009-11-23 18:47   ` Chong Yidong
2009-11-23 20:49     ` Chong Yidong
2009-11-26 22:35       ` Beeping (was: Emacs for new users) Juri Linkov
2009-11-26 23:12         ` Lennart Borgman
2009-11-27  4:12           ` Beeping Stefan Monnier
2009-11-27  6:48             ` Beeping Lennart Borgman
2009-11-27 19:25               ` Beeping Stefan Monnier
2009-11-27 20:25                 ` Beeping Lennart Borgman
2009-11-27 23:12                   ` Beeping Stefan Monnier
2009-11-27 23:15                     ` Beeping Lennart Borgman
2009-11-28  1:49                       ` Beeping Stefan Monnier
2009-11-28  2:47                         ` Beeping Lennart Borgman
2009-11-23 17:05 ` Emacs for new users Stephen Eilert
2009-11-24 14:10   ` Richard Stallman
2009-11-24 14:43     ` Renaud Casenave-Péré
2009-11-24 16:10       ` Andreas Schwab
2009-11-25 21:01       ` Richard Stallman
2009-11-30 23:02       ` Giorgos Keramidas
2009-11-24 15:51     ` Lennart Borgman
2009-11-24 16:41       ` Drew Adams
2009-11-24 17:15         ` Lennart Borgman
2009-11-24 17:27           ` Chong Yidong
2009-11-24 17:35             ` Lennart Borgman
2009-11-24 17:51             ` Deniz Dogan
2009-11-24 18:37               ` Chong Yidong
2009-11-24 18:03           ` Drew Adams
2009-11-24 18:06             ` Lennart Borgman
2009-11-24 18:22               ` Drew Adams
2009-11-24 18:30                 ` Lennart Borgman
2009-11-24 19:35                   ` Drew Adams
2009-11-24 19:40                     ` Lennart Borgman
2009-11-25 21:02           ` Richard Stallman
2009-11-25 21:04             ` Lennart Borgman
2009-11-25 21:57             ` Fernando C.V.
2009-11-25 22:05               ` Drew Adams
2009-11-25 22:27                 ` Fernando C.V.
2009-11-25 22:34                   ` Drew Adams
2009-11-26  6:23               ` Richard Stallman
2009-11-23 18:56 ` Lennart Borgman
2009-11-23 19:35   ` Les Harris
2009-11-23 20:28     ` Lennart Borgman
2009-11-23 21:04       ` Chong Yidong
2009-11-23 21:16         ` Lennart Borgman
2009-11-23 21:56           ` Stefan Monnier
2009-11-23 22:05             ` Lennart Borgman
2009-11-30 22:55         ` Giorgos Keramidas
2009-11-30 23:01           ` Lennart Borgman
2009-12-01  9:13           ` Deniz Dogan
2009-12-01 10:13             ` Miles Bader
2010-11-13 19:14               ` separating CUA rectangles from CUA selection mode [was: Emacs for new users] Drew Adams
2009-11-23 21:16     ` Emacs for new users Stephen Eilert
2009-11-23 22:06       ` Per Starbäck
2009-11-23 22:43         ` Per Starbäck
2009-11-23 22:46           ` Lennart Borgman
2009-11-23 23:55           ` Sebastian Rose
2009-11-24  6:43           ` tomas

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).