unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
* Troubles with abbrev-mode
@ 2006-09-26 18:56 Tassilo Horn
  2006-09-26 20:14 ` Reiner Steib
  0 siblings, 1 reply; 8+ messages in thread
From: Tassilo Horn @ 2006-09-26 18:56 UTC (permalink / raw)


Hi all,

I want to start using abbrev-mode but I don't get it right. I use emacs
from the current CVS head, which I updated today.

Those are my abbrevs (`list-abbrevs'):

--8<---------------cut here---------------start------------->8---
(message-mode-abbrev-table)

"lg"           0    "Liebe Grüße"
"mw"           0    "meines Wissens"
"vg"           0    "Viele Grüße,"


(text-mode-abbrev-table)

"vg"           3    "Viele Grüße,"


(lisp-mode-abbrev-table)

"da"           0    "defalias"
"dl"           0    "dolist ("
"dm"           0    "defmacro"
"ia"           0    "interactive"
"se"           0    "save-excursion"
"swe"          0    "save-window-excursion"
--8<---------------cut here---------------end--------------->8---

And those are my problems:

a) The abbrevs for `message-mode' I defined with `edit-abbrevs'. Then I
   started writing a message (in `message-mode') and wondered why my
   abbrevs don't expand. I inserted a new abbrev with
   `add-mode-abbrev'. But that abbrev was added to
   `text-mode-abbrev-table' instead of message-mode's one. And in
   `message-mode' only abbrev defined in `text-mode-abbrev-table'
   expand. Why? Is it a bug?

b) All the abbrevs below `lisp-mode-abbrev-table' were defined when I
   was in `emacs-lisp-mode'. But they also expand in SLIME's common lisp
   mode, where `save-excursion' and `interactive' are totally
   useless. Isn't it possible to save abbrevs strictly mode-specific?

Best regards,
Tassilo
-- 
A child of five could understand this! Fetch me a child of five!

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

* Re: Troubles with abbrev-mode
  2006-09-26 18:56 Troubles with abbrev-mode Tassilo Horn
@ 2006-09-26 20:14 ` Reiner Steib
  2006-09-26 21:33   ` Tassilo Horn
  0 siblings, 1 reply; 8+ messages in thread
From: Reiner Steib @ 2006-09-26 20:14 UTC (permalink / raw)


On Tue, Sep 26 2006, Tassilo Horn wrote:

> a) The abbrevs for `message-mode' I defined with `edit-abbrevs'. Then I
>    started writing a message (in `message-mode') and wondered why my
>    abbrevs don't expand. I inserted a new abbrev with
>    `add-mode-abbrev'. But that abbrev was added to
>    `text-mode-abbrev-table' instead of message-mode's one. And in
>    `message-mode' only abbrev defined in `text-mode-abbrev-table'
>    expand. Why? Is it a bug?

FWIW, `message.el' sets `local-abbrev-table' to
`text-mode-abbrev-table':

(define-derived-mode message-mode text-mode "Message"
  "Major mode for editing mail and news to be sent.
Like Text Mode but with these additional commands:\\<message-mode-map>
[...]
M-RET    `message-newline-and-reformat' (break the line and reformat)."
  (setq local-abbrev-table text-mode-abbrev-table)
[...]

I don't know if this is good or not, but it has been there since ages:

| 6.202 (zsh 07-Feb-02): (setq local-abbrev-table text-mode-abbrev-table)

Bye, Reiner.
-- 
       ,,,
      (o o)
---ooO-(_)-Ooo---  |  PGP key available  |  http://rsteib.home.pages.de/

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

* Re: Troubles with abbrev-mode
  2006-09-26 20:14 ` Reiner Steib
@ 2006-09-26 21:33   ` Tassilo Horn
  2006-09-27  7:56     ` Reiner Steib
  0 siblings, 1 reply; 8+ messages in thread
From: Tassilo Horn @ 2006-09-26 21:33 UTC (permalink / raw)


Reiner Steib <reinersteib+gmane@imap.cc> writes:

> FWIW, `message.el' sets `local-abbrev-table' to
> `text-mode-abbrev-table':
>
> [...]
>
> I don't know if this is good or not, but it has been there since ages:
>
> | 6.202 (zsh 07-Feb-02): (setq local-abbrev-table text-mode-abbrev-table)

Hm, in my opinion that's a really bad behavior, because...

  a) if the user wants that behavior, he can set in `message-mode-hook'.

  b) adding abbrevs in message mode (with `add-mode-abbrev' or
     `inverse-add-mode-abbrev') adds it to
     `message-mode-abbrev-table'. So you effectively cannot add abbrevs
     interactively.

So I see two possible fixes:

  1) Delete the setq. (To me that seems right and proper.)
  
  2) Fix `add-mode-abbrev' and `inverse-add-mode-abbrev', so that they
     insert into `local-abbrev-table'.

To me the second point should be done, too, because that's what a user
would expect. Only then he has the possibility to use a abbrev-table for
multiple modes, e.g. text-mode-abbrev-table for
message-mode-abbrev-table. 

What do you mean?

Bye,
Tassilo
-- 
A morning without coffee is like something without something else.

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

* Re: Troubles with abbrev-mode
  2006-09-26 21:33   ` Tassilo Horn
@ 2006-09-27  7:56     ` Reiner Steib
  2006-09-27  9:36       ` Tassilo Horn
  0 siblings, 1 reply; 8+ messages in thread
From: Reiner Steib @ 2006-09-27  7:56 UTC (permalink / raw)


On Tue, Sep 26 2006, Tassilo Horn wrote:

> Reiner Steib <reinersteib+gmane@imap.cc> writes:
>> | 6.202 (zsh 07-Feb-02): (setq local-abbrev-table text-mode-abbrev-table)
>
> Hm, in my opinion that's a really bad behavior, because...
>
>   a) if the user wants that behavior, he can set in `message-mode-hook'.

And if he doesn't want the current behavior, he can probably also do
it in `message-mode-hook' now? [1]

>   b) adding abbrevs in message mode (with `add-mode-abbrev' or
>      `inverse-add-mode-abbrev') adds it to
>      `message-mode-abbrev-table'. So you effectively cannot add abbrevs
>      interactively.
>
> So I see two possible fixes:
>
>   1) Delete the setq. (To me that seems right and proper.)

This will break existing configurations, wouldn't it?  `message-mode'
derived from `text-mode': Do we have guidelines / conventions / best
practice in Emacs on how to deal with abbrevs in derived modes?

>   2) Fix `add-mode-abbrev' and `inverse-add-mode-abbrev', so that they
>      insert into `local-abbrev-table'.
>
> To me the second point should be done, too, because that's what a user
> would expect. Only then he has the possibility to use a abbrev-table for
> multiple modes, e.g. text-mode-abbrev-table for
> message-mode-abbrev-table. 
>
> What do you mean?

I don't have a strong opinion here (as I don't know what the docs
suggest here).

[1] BTW, in my init files I find...
(add-hook
 'gnus-message-setup-hook
 '(lambda ()
    (when (boundp 'rs-message-mode-abbrev-table)
      (setq local-abbrev-table rs-message-mode-abbrev-table))
    [...]

... but I don't exactly recall it's purpose.  At least, I have some
abbrevs in message-mode that are not present in text-mode.

Bye, Reiner.
-- 
       ,,,
      (o o)
---ooO-(_)-Ooo---  |  PGP key available  |  http://rsteib.home.pages.de/

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

* Re: Troubles with abbrev-mode
  2006-09-27  7:56     ` Reiner Steib
@ 2006-09-27  9:36       ` Tassilo Horn
  2006-09-29 20:52         ` Reiner Steib
  0 siblings, 1 reply; 8+ messages in thread
From: Tassilo Horn @ 2006-09-27  9:36 UTC (permalink / raw)


Reiner Steib <reinersteib+gmane@imap.cc> writes:

Hi Reiner,

>> Hm, in my opinion that's a really bad behavior, because...
>>
>>   a) if the user wants that behavior, he can set in `message-mode-hook'.
>
> And if he doesn't want the current behavior, he can probably also do
> it in `message-mode-hook' now? [1]

Yes, he can. But I think the current behavior patronizes the user too
much. It's not logical to use a abbrev-table from a different mode, even
if the current mode is derived from it, when newly added abbrevs go into
the current mode's abbrev-table, thus have no effect at all.

If you know what's going on, you can handle it, but for a normal user
without any knowledge about how abbrev-mode works it's simply wrong
accoring to the docs.

,----[ (info "(emacs)Defining Abbrevs") ]
| `C-x a g'
|      Define an abbrev, using one or more words before point as its
|      expansion (`add-global-abbrev').
| 
| `C-x a l'
|      Similar, but define an abbrev specific to the current major mode
|      (`add-mode-abbrev').          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| 
| `C-x a i g'
|      Define a word in the buffer as an abbrev
|      (`inverse-add-global-abbrev').
| 
| `C-x a i l'
|      Define a word in the buffer as a mode-specific abbrev
|      (`inverse-add-mode-abbrev').     ^^^^^^^^^^^^^^^^^^^^
`----

>>   b) adding abbrevs in message mode (with `add-mode-abbrev' or
>>      `inverse-add-mode-abbrev') adds it to
>>      `message-mode-abbrev-table'. So you effectively cannot add abbrevs
>>      interactively.
>>
>> So I see two possible fixes:
>>
>>   1) Delete the setq. (To me that seems right and proper.)
>
> This will break existing configurations, wouldn't it?

Yep, but it would be easy to fix. The user could copy his abbrevs to
`message-mode-abbrev-table' or setq `local-abbrev-table' back to
`text-mode-abbrev-table' in `message-mode-hook' (or
`gnus-message-setup-hook'). Ok, the second solution still suffers from
this adding-abbrevs-problem...

> `message-mode' derived from `text-mode': Do we have guidelines /
> conventions / best practice in Emacs on how to deal with abbrevs in
> derived modes?

As I'm not really involved in emacs development I don't know. Should I
start a new thread about point 2 in gmane.emacs.devel?

>>   2) Fix `add-mode-abbrev' and `inverse-add-mode-abbrev', so that they
>>      insert into `local-abbrev-table'.
>>
>> To me the second point should be done, too, because that's what a
>> user would expect. Only then he has the possibility to use a
>> abbrev-table for multiple modes, e.g. text-mode-abbrev-table for
>> message-mode-abbrev-table.
>>
>> What do you mean?
>
> I don't have a strong opinion here (as I don't know what the docs
> suggest here).

At least you have to admit that it's inconvenient for the user if he
adds abbrevs interactively, but they don't work.

> [1] BTW, in my init files I find...
> (add-hook
>  'gnus-message-setup-hook
>  '(lambda ()
>     (when (boundp 'rs-message-mode-abbrev-table)
>       (setq local-abbrev-table rs-message-mode-abbrev-table))
>     [...]
>
> ... but I don't exactly recall it's purpose. At least, I have some
> abbrevs in message-mode that are not present in text-mode.

But you alway added them with `edit-abbrevs', not interactively with
`add-mode-abbrev' or `inverse-add-mode-abbrev', right?

Bye,
Tassilo
-- 
A morning without coffee is like something without something else.

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

* Re: Troubles with abbrev-mode
  2006-09-27  9:36       ` Tassilo Horn
@ 2006-09-29 20:52         ` Reiner Steib
  2006-09-29 22:17           ` Tassilo Horn
  0 siblings, 1 reply; 8+ messages in thread
From: Reiner Steib @ 2006-09-29 20:52 UTC (permalink / raw)


On Wed, Sep 27 2006, Tassilo Horn wrote:

> Reiner Steib <reinersteib+gmane@imap.cc> writes:
[...]
> If you know what's going on, you can handle it, but for a normal user
> without any knowledge about how abbrev-mode works it's simply wrong
> accoring to the docs.
>
> ,----[ (info "(emacs)Defining Abbrevs") ]

[...]
>> `message-mode' derived from `text-mode': Do we have guidelines /
>> conventions / best practice in Emacs on how to deal with abbrevs in
>> derived modes?
>
> As I'm not really involved in emacs development I don't know. Should I
> start a new thread about point 2 in gmane.emacs.devel?

Maybe a good idea.

[...]
>> I don't have a strong opinion here (as I don't know what the docs
>> suggest here).
>
> At least you have to admit that it's inconvenient for the user if he
> adds abbrevs interactively, but they don't work.

Sure.

[...]
>>       (setq local-abbrev-table rs-message-mode-abbrev-table))
>>     [...]
>> ... but I don't exactly recall it's purpose. At least, I have some
>> abbrevs in message-mode that are not present in text-mode.
>
> But you alway added them with `edit-abbrevs', not interactively with
> `add-mode-abbrev' or `inverse-add-mode-abbrev', right?

Probably I've edited ~/.abbrev_defs manually (I don't change my
abbrevs often: the time stamp says 2005-11-30).

Bye, Reiner.
-- 
       ,,,
      (o o)
---ooO-(_)-Ooo---  |  PGP key available  |  http://rsteib.home.pages.de/

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

* Re: Troubles with abbrev-mode
  2006-09-29 20:52         ` Reiner Steib
@ 2006-09-29 22:17           ` Tassilo Horn
  2006-09-30  8:02             ` Reiner Steib
  0 siblings, 1 reply; 8+ messages in thread
From: Tassilo Horn @ 2006-09-29 22:17 UTC (permalink / raw)


Reiner Steib <reinersteib+gmane@imap.cc> writes:

>>> `message-mode' derived from `text-mode': Do we have guidelines /
>>> conventions / best practice in Emacs on how to deal with abbrevs in
>>> derived modes?
>>
>> As I'm not really involved in emacs development I don't know. Should
>> I start a new thread about point 2 in gmane.emacs.devel?
>
> Maybe a good idea.

Gnmpf, I cannot reproduce the problem anymore. I don't even know if the
problem existed sometime at all or if I was confused, which is more
likely.

,----[ ~/uni/repos/heimdall-uni/programs/elisp/th-abbrev.el ]
| [...]
| (define-abbrev-table 'th-emacs-lisp-mode-abbrev-table
|   '(("da" "(defalias °)" (lambda ()
|                            (th-abbrev-set-point)))
|     [...] ))))
| 
| (add-hook 'emacs-lisp-mode-hook
|           (lambda ()
|             (setq local-abbrev-table th-emacs-lisp-mode-abbrev-table)
|             (th-abbrev-mode-initialize)))
| 
| (define-abbrev-table 'th-message-mode-abbrev-table
|   '([...]
|     ("vg" "Viele Grüße,\n°" (lambda ()
|                               (th-abbrev-set-point)))))
| 
| (add-hook 'message-mode-hook
|           (lambda ()
|             (setq local-abbrev-table th-message-mode-abbrev-table)
|             (th-abbrev-mode-initialize)))
`----

Whenever I add an abbrev interactively it goes into the local
abbrev-table (one of the th-<mode>-abbrev-tables), which is correct.

So the only question is why gnus uses text-mode-abbrev-table (where
interactively added abbrevs go, too) when there's a
message-mode-abbrev-table in `edit-abbrevs' by default.

Regards,
Tassilo
-- 
A morning without coffee is like something without something else.

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

* Re: Troubles with abbrev-mode
  2006-09-29 22:17           ` Tassilo Horn
@ 2006-09-30  8:02             ` Reiner Steib
  0 siblings, 0 replies; 8+ messages in thread
From: Reiner Steib @ 2006-09-30  8:02 UTC (permalink / raw)


On Sat, Sep 30 2006, Tassilo Horn wrote:

> So the only question is why gnus uses text-mode-abbrev-table (where
> interactively added abbrevs go, too) when there's a
> message-mode-abbrev-table in `edit-abbrevs' by default.

`define-derived-mode' does this by default:

,----[ (info "(elisp)Derived Modes") | Emacs 22 ]
|         * The new mode has its own abbrev table, kept in the variable
|           `VARIANT-abbrev-table', unless you override this using the
|           `:abbrev-table' keyword (see below).
|
| [...]
|
|     `:abbrev-table'
|           You can use this to explicitly specify an abbrev table for
|           the new mode.  If you specify a `nil' value, the new mode
|           uses the same abbrev table as PARENT, or
|           `fundamental-mode-abbrev-table' if PARENT is `nil'.  (Again,
|           a `nil' value is _not_ equivalent to not specifying this
|           keyword.)
`----

Maybe `message-mode' could use ":abbrev-table nil" instead of "(setq
local-abbrev-table text-mode-abbrev-table)".  (Probably we need it for
compatibility with Emacs 21 and/or XEmacs.)

Bye, Reiner.
-- 
       ,,,
      (o o)
---ooO-(_)-Ooo---  |  PGP key available  |  http://rsteib.home.pages.de/

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

end of thread, other threads:[~2006-09-30  8:02 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-09-26 18:56 Troubles with abbrev-mode Tassilo Horn
2006-09-26 20:14 ` Reiner Steib
2006-09-26 21:33   ` Tassilo Horn
2006-09-27  7:56     ` Reiner Steib
2006-09-27  9:36       ` Tassilo Horn
2006-09-29 20:52         ` Reiner Steib
2006-09-29 22:17           ` Tassilo Horn
2006-09-30  8:02             ` Reiner Steib

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).