unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Richard Stallman <rms@gnu.org>
Cc: Lute.Kamstra.lists@xs4all.nl, dominik@science.uva.nl,
	mmaug@yahoo.com, monnier@iro.umontreal.ca, emacs-devel@gnu.org
Subject: Re: org-mode and mode hooks.
Date: Tue, 31 May 2005 00:18:14 -0400	[thread overview]
Message-ID: <E1DcyCk-0005zE-6F@fencepost.gnu.org> (raw)
In-Reply-To: <200505292354.j4TNsTE13354@raven.dms.auburn.edu> (message from Luc Teirlinck on Sun, 29 May 2005 18:54:29 -0500 (CDT))

    Major modes should follow the conventions for
    major modes rigorously.  But, in addition, they should not enable Font
    Lock in any way, directly or indirectly (other than through the
    define-global-minor-mode machinery), and they also should not call
    font-lock-add-keywords directly or indirectly, even if this does not
    enable Font Lock.

I just looked for all the calls to font-lock-add-keywords in Emacs.
In no case does any major mode call font-lock-add-keywords directly,
or even fairly directly.  But it seems plausible to me that mode hook
functions might call functions that call font-lock-add-keywords.
Would that be a problem?

      comint-mode and interactive-sql-mode both enable
    Font Lock (the latter via sql-product-font-lock), creating problems
    for modes derived from them.

I think it would be more consistent, nowadays, to turn that off.

       Anyway, how about if we change define-minor-mode so that it generates
       the code to record which major mode enabled it?

    The very vast majority of minor modes have no reason whatsoever to do
    this.

Does that matter?

If only a few of them need to do this, perhaps it is better to do
this automatically in all the minor modes (even though it is
unnecessary in most of them) than to make users do it manually
and risk bugs.

      The only known example (and
    hopefully the only example, period) is Font Lock mode.

If these complexities apply only to Font Lock mode,
perhaps we don't need to document them in the doc string
of define-global-minor-mode.

    I will propose a new patch to easy-mmode that does _not_ use the new
    variable MODE-stored-mode.  It will say that dis- and then re-enabling
    the minor mode should correctly set up the minor mode for the current
    major mode.

Ok, but...

		 The only trouble with that is that this condition does
    not apply to Font Lock.

if the problem exists only for Font Lock mode, and your proposed
solution does not solve it for Font Lock mode, what problem is
this solution solving?

    The problem is that if you call these functions with `nil' for MODE,
    this sets up Font Lock for the current major mode, which could be an
    ancestor mode (it calls font-lock-set-defaults).

I don't understand.  How can the current major mode "be" an ancestor
mode?  Do you mean that the font-lock settings came from an ancestor
mode?

      But if font-lock-add-keywords was called with `nil' for MODE,
    my patch will undo the adding of the keyword.

Suppose we make font-lock-add-keywords with nil for MODE
record its argument in some permanent buffer-local variable.
Then changing the major mode and reenabling font-lock
would use the same keywords previously added.

It's possible this would do something wrong in certain
other cases, but would it do the right thing in these cases?

    Note that even after this patch, there is one potentially troublesome
    case left.  It concerns the case of a major mode that gets enabled by
    a timer or process for a non-file visiting buffer.

Would you please explain what problem would happen in this case?
It is hard to understand your arguments about proposed solutions
when you haven't said what the problem is.

      (Even in this case
    it is only likely to occur for major modes that do not follow the new
    conventions.)

In that case, maybe it is a fine solution to tell people to fix their
major modes.  Why go to a lot of trouble about broken major modes?

    The trouble with doing that for Font Lock, given its current code, is
    what happens if after-change-major-mode never ran Font Lock, and Font
    Lock is nevertheless enabled.  Then it was set by something else.

What kind of something else could it be?

One possibility is that the major mode itself turned on font-lock
mode.  You've said that there's a problem when a major mode turns on
font-lock mode.

Aside from that, what other case could do that?

Anyway, please explain why you think it is difficult for turning font
lock off and on again to give the right results.  Can my proposed
change to font-lock-add-keywords work?  If not, why not?

  reply	other threads:[~2005-05-31  4:18 UTC|newest]

Thread overview: 121+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-05-25 13:31 org-mode and mode hooks Lute Kamstra
2005-05-25 14:45 ` Stefan Monnier
2005-05-25 15:20   ` Carsten Dominik
2005-05-25 15:44   ` Lute Kamstra
2005-05-25 16:36     ` Luc Teirlinck
2005-05-25 17:01       ` Lute Kamstra
2005-05-25 17:12         ` Luc Teirlinck
2005-05-25 17:28           ` Lute Kamstra
2005-05-25 17:45             ` Luc Teirlinck
2005-05-25 16:24   ` Luc Teirlinck
2005-05-26  6:00     ` Richard Stallman
2005-05-26 10:31       ` Lute Kamstra
2005-05-26 17:31         ` Lute Kamstra
2005-05-27 14:18           ` Richard Stallman
2005-06-27  8:25             ` Lute Kamstra
2005-06-28  4:16               ` Richard M. Stallman
2005-05-27  3:39         ` Richard Stallman
2005-05-27  8:07           ` Juri Linkov
2005-06-27  8:28             ` Lute Kamstra
2005-05-25 17:30   ` Luc Teirlinck
2005-05-25 21:35   ` Luc Teirlinck
2005-05-25 22:15     ` Stefan Monnier
2005-05-26  3:59       ` Luc Teirlinck
2005-05-26 14:08         ` Stefan Monnier
2005-05-26 15:01           ` Luc Teirlinck
2005-05-26 17:04             ` Stefan Monnier
2005-05-27 17:17               ` Luc Teirlinck
2005-05-27 17:27                 ` Luc Teirlinck
2005-05-28 11:53                 ` Richard Stallman
2005-05-29  1:57                   ` Luc Teirlinck
2005-05-29 12:04                     ` Richard Stallman
2005-05-29 23:54                       ` Luc Teirlinck
2005-05-31  4:18                         ` Richard Stallman [this message]
2005-05-31 15:44                           ` Luc Teirlinck
2005-05-31 19:08                             ` Stefan Monnier
2005-06-01  3:50                               ` Luc Teirlinck
2005-06-01 17:22                               ` Richard Stallman
2005-06-01 19:11                                 ` Luc Teirlinck
2005-06-01 21:21                                   ` Stefan Monnier
2005-06-01 22:42                                     ` Luc Teirlinck
2005-06-01 22:55                                       ` Stefan Monnier
2005-06-01 23:26                                         ` Luc Teirlinck
2005-06-01 23:43                                           ` Stefan Monnier
2005-06-01 23:55                                             ` Luc Teirlinck
2005-06-01 23:57                                             ` Luc Teirlinck
2005-06-01 23:58                                             ` David Kastrup
2005-06-02  0:15                                             ` Luc Teirlinck
2005-06-01 23:49                                         ` Luc Teirlinck
2005-06-03  8:01                                           ` Richard Stallman
2005-06-03 14:59                                             ` Luc Teirlinck
2005-06-03 15:05                                             ` Luc Teirlinck
2005-06-04 10:16                                               ` Richard Stallman
2005-06-04 14:54                                                 ` Luc Teirlinck
2005-06-04 16:33                                                   ` Stefan Monnier
2005-06-04 17:48                                                     ` Luc Teirlinck
2005-06-05  0:36                                                       ` David Kastrup
2005-06-05  9:47                                                   ` Richard Stallman
2005-06-07  0:23                                                     ` Luc Teirlinck
2005-06-04 15:17                                                 ` Luc Teirlinck
2005-06-05  9:47                                                   ` Richard Stallman
2005-06-06 23:28                                                     ` Luc Teirlinck
2005-06-07 18:15                                                       ` Stefan Monnier
2005-06-07 19:08                                                         ` Luc Teirlinck
2005-06-07 22:10                                                           ` Stefan Monnier
2005-06-08  1:36                                                             ` Luc Teirlinck
2005-06-08 16:15                                                               ` Stefan Monnier
2005-06-09  1:06                                                                 ` Luc Teirlinck
2005-06-08 12:02                                                       ` Richard Stallman
2005-06-02  6:15                                   ` Carsten Dominik
2005-06-01 19:14                                 ` Luc Teirlinck
2005-06-01 19:19                                 ` Luc Teirlinck
2005-06-01 21:24                                 ` Stefan Monnier
2005-05-31 16:30                           ` Luc Teirlinck
2005-06-01  2:33                           ` Luc Teirlinck
2005-06-01 17:23                             ` Richard Stallman
2005-06-01 17:48                               ` Luc Teirlinck
2005-06-01  2:42                           ` Luc Teirlinck
2005-06-01 17:23                             ` Richard Stallman
2005-06-01 18:05                               ` Luc Teirlinck
2005-06-01  2:47                           ` Luc Teirlinck
2005-06-01 17:23                             ` Richard Stallman
2005-06-02  3:21                               ` Luc Teirlinck
2005-06-03 22:32                                 ` Richard Stallman
2005-06-03 23:08                                   ` Luc Teirlinck
2005-06-04 18:00                                     ` Richard Stallman
2005-06-01  3:01                           ` Luc Teirlinck
2005-05-30  1:43                       ` Luc Teirlinck
2005-05-30  2:50                       ` Luc Teirlinck
2005-05-30 15:31                         ` Luc Teirlinck
2005-05-30 16:52                           ` Luc Teirlinck
2005-05-30 17:24                             ` Luc Teirlinck
2005-05-30  3:35                       ` Luc Teirlinck
2005-05-29  2:20                   ` Luc Teirlinck
2005-05-29 12:04                     ` Richard Stallman
2005-05-30  0:42                       ` Luc Teirlinck
2005-05-30  1:58                       ` Luc Teirlinck
2005-05-28  1:58               ` Luc Teirlinck
2005-05-27 14:49             ` Michael Mauger
2005-05-27 15:35               ` Luc Teirlinck
2005-05-27 16:40               ` Luc Teirlinck
2005-05-27 17:15               ` Stefan Monnier
2005-05-27 19:13               ` Luc Teirlinck
2005-05-31 18:25                 ` Michael Mauger
2005-05-27 19:43               ` Luc Teirlinck
2005-05-28 11:53                 ` Richard Stallman
2005-05-28 18:48                   ` Luc Teirlinck
2005-06-07  1:19                   ` Luc Teirlinck
2005-06-07  1:49                     ` Miles Bader
2005-06-07  1:55                       ` Luc Teirlinck
2005-06-07  2:01                         ` Miles Bader
2005-06-07 18:23                           ` Stefan Monnier
2005-06-07 18:17                       ` Stefan Monnier
2005-06-08 12:01                       ` Richard Stallman
2005-05-26 14:53         ` Richard Stallman
2005-05-26 15:06           ` Luc Teirlinck
2005-05-26  4:16       ` Luc Teirlinck
2005-05-25 22:22     ` Lute Kamstra
     [not found] ` <17044.33688.784219.190965@sam.science.uva.nl>
2005-05-25 15:37   ` Lute Kamstra
2005-05-25 15:49     ` Carsten Dominik
2005-05-26  5:59 ` Richard Stallman
     [not found] <87sm07o3oz.fsf-monnier+emacs@gnu.org>
2005-05-29  2:00 ` Luc Teirlinck

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=E1DcyCk-0005zE-6F@fencepost.gnu.org \
    --to=rms@gnu.org \
    --cc=Lute.Kamstra.lists@xs4all.nl \
    --cc=dominik@science.uva.nl \
    --cc=emacs-devel@gnu.org \
    --cc=mmaug@yahoo.com \
    --cc=monnier@iro.umontreal.ca \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).