Subject: Re: bug#5062: 23.1.50; image-toggle-display overwrites nxml-mode local key map

From: Stefan Monnier <[email-masked]>
Date: Sun, 29 Nov 2009 13:33:06 -0500

> Even though doc-view is a superset of image-mode, currently I see no way
> to merge them cleanly.

As mentioned, it may not be easy or even desirable to merge
them completely.  But we should strive to keep them as close as possible
and to make doc-view use image-mode.el functions and data
wherever possible.  Maybe if one cannot be a derived mode of them other,
we could make a "shared parent" mode (like an abstract class).

> But using the same handling of major/minor modes
> would be good.  The patch below leaves the role for `image-minor-mode'
> to only provide the `C-c C-c' binding, and also toggles between
> `image-mode' and `image-mode-maybe' in `image-toggle-display' .

I haven't looked in detail (partly because it doesn't apply to the
current code because of some other change I installed in the mean time),
but it looks good.

> One open question is about using `image-mode-maybe'.  With this
> patch, it's essentially a combination of a non-image major mode
> (`normal-mode' with image-mode entries removed from `auto-mode-alist')
> and `image-minor-mode'.  So when `image-mode-maybe' is present in
> `auto-mode-alist' this means "to set a non-image major mode and
> image-minor-mode".

> It would be more nice to get rid of `image-mode-maybe', and to use
> `image-minor-mode' in `auto-mode-alist'.  But I don't know how to
> specify both a non-image major mode and image-minor-mode
> at the same time using `auto-mode-alist'.

IIRC auto-mode-alist can point to minor-modes (the auto-mode-alist entry
needs to look something like ("regexp" minor-mode t)), but I don't think
it can be used here (the constraints on how it can be used are very
strict since it needs to "consume" a suffix and be called before the
major-mode).  Maybe we could extend auto-mode-alist to allow things like
("regexp" (major-mode minor-mode-1 minor-mode-2 ...)).

> The approach currently used in doc-view for PS files is more ugly than
> using `image-mode-maybe'.  It adds to ps-mode.el the line:
>   (declare-function doc-view-minor-mode "doc-view")

To the extent that postscript would always use image-minor-mode anyway,
I think the way it's done now is at least as clean if not cleaner than
relying on image-mode-maybe (image-mode-maybe is fairly hackish).

> I think this should be changed to use the solution described above
> adding e.g. `doc-view-mode-maybe' (or a better name) as a combination
> of a non-image major mode and image minor-mode.

I don't think that would be an improvement.  This is in contrast to XPM
and SVG formats where they get combined with major-modes that are also
used for non-image documents, so it wouldn't make sense for nxml-mode or
c-mode to always enable image-minor-mode.

        Stefan