From: Luc Teirlinck <teirllm@dms.auburn.edu>
Cc: boris@gnu.org, emacs-devel@gnu.org
Subject: Re: enriched-mode and switching major modes.
Date: Mon, 13 Sep 2004 22:46:28 -0500 (CDT) [thread overview]
Message-ID: <200409140346.i8E3kSk19152@raven.dms.auburn.edu> (raw)
In-Reply-To: <E1C6zrC-0001JZ-Ns@fencepost.gnu.org> (message from Richard Stallman on Mon, 13 Sep 2004 19:03:34 -0400)
Richard Stallman wrote:
Even if `kill-all-local-variables' does not kill these variables, the
major mode can override them. In the case of `indent-line-function',
most modes that are usually combined with Enriched mode will.
Maybe that one shouldn't be set by Enriched mode.
I think the motive for setting it was to make it easy
to preserve the left-margin indent of a paragraph.
Without this particular setting, how easy is it to do that?
It would not properly update `enriched-old-bindings'. Also, while it
is unlikely that a major mode would try to override
`buffer-display-table' or `default-text-properties', the fact remains
that if `enriched-mode' continues to grow, the danger of one of its
variables being overridden by the major mode increases.
The following improved version of my original patch avoids these two
problems. The improvements are that it is a lot simpler and no longer
relies on post-command-hook. I noticed though that fundamental-mode
needs to be treated specially, since it does not run `run-mode-hooks'.
I guess that if any other major mode does not run `run-mode-hooks',
then this is a bug that needs to be fixed.
The patch to subr.el is unchanged.
===File ~/enriched.el-new-diff==============================
*** enriched.el 02 Jul 2004 21:39:16 -0500 1.4
--- enriched.el 13 Sep 2004 21:34:52 -0500
***************
*** 1,6 ****
;;; enriched.el --- read and save files in text/enriched format
! ;; Copyright (c) 1994, 1995, 1996, 2002 Free Software Foundation, Inc.
;; Author: Boris Goldowsky <boris@gnu.org>
;; Keywords: wp, faces
--- 1,6 ----
;;; enriched.el --- read and save files in text/enriched format
! ;; Copyright (c) 1994, 1995, 1996, 2002, 2004 Free Software Foundation, Inc.
;; Author: Boris Goldowsky <boris@gnu.org>
;; Keywords: wp, faces
***************
*** 141,147 ****
;;; Internal variables
-
(defcustom enriched-mode-hook nil
"Hook run after entering/leaving Enriched mode.
If you set variables in this hook, you should arrange for them to be restored
--- 141,146 ----
***************
*** 155,160 ****
--- 154,164 ----
The value is a list of \(VAR VALUE VAR VALUE...).")
(make-variable-buffer-local 'enriched-old-bindings)
+ ;; Technical internal variable. Bound to t if `enriched-mode' is
+ ;; being rerun by a major mode to allow it to restore buffer-local
+ ;; variables and to correctly adjust `enriched-old-bindings'.
+ (defvar rerun-flag nil)
+
;;;
;;; Define the mode
;;;
***************
*** 181,203 ****
(while enriched-old-bindings
(set (pop enriched-old-bindings) (pop enriched-old-bindings))))
! ((memq 'text/enriched buffer-file-format)
;; Mode already on; do nothing.
nil)
(t ; Turn mode on
! (push 'text/enriched buffer-file-format)
;; Save old variable values before we change them.
;; These will be restored if we exit Enriched mode.
(setq enriched-old-bindings
(list 'buffer-display-table buffer-display-table
- 'indent-line-function indent-line-function
'default-text-properties default-text-properties))
- (make-local-variable 'indent-line-function)
(make-local-variable 'default-text-properties)
! (setq indent-line-function 'indent-to-left-margin ;WHY?? -sm
! buffer-display-table enriched-display-table)
! (use-hard-newlines 1 nil)
(let ((sticky (plist-get default-text-properties 'front-sticky))
(p enriched-par-props))
(dolist (x p)
--- 185,205 ----
(while enriched-old-bindings
(set (pop enriched-old-bindings) (pop enriched-old-bindings))))
! ((and (memq 'text/enriched buffer-file-format)
! (not rerun-flag))
;; Mode already on; do nothing.
nil)
(t ; Turn mode on
! (add-to-list 'buffer-file-format 'text/enriched)
;; Save old variable values before we change them.
;; These will be restored if we exit Enriched mode.
(setq enriched-old-bindings
(list 'buffer-display-table buffer-display-table
'default-text-properties default-text-properties))
(make-local-variable 'default-text-properties)
! (setq buffer-display-table enriched-display-table)
! (use-hard-newlines 1 (if rerun-flag 'never nil))
(let ((sticky (plist-get default-text-properties 'front-sticky))
(p enriched-par-props))
(dolist (x p)
***************
*** 207,212 ****
--- 209,228 ----
(plist-put default-text-properties
'front-sticky sticky)))))))
+ (defun enriched-before-change-major-mode ()
+ (when enriched-mode
+ (while enriched-old-bindings
+ (set (pop enriched-old-bindings) (pop enriched-old-bindings)))))
+
+ (add-hook 'change-major-mode-hook 'enriched-before-change-major-mode)
+
+ (defun enriched-after-change-major-mode ()
+ (when enriched-mode
+ (let ((rerun-flag t))
+ (enriched-mode 1))))
+
+ (add-hook 'after-change-major-mode-hook 'enriched-after-change-major-mode)
+
;;;
;;; Keybindings
;;;
============================================================
===File ~/simple.el-diff====================================
*** simple.el 12 Sep 2004 15:43:59 -0500 1.660
--- simple.el 13 Sep 2004 22:16:08 -0500
***************
*** 282,288 ****
"Major mode not specialized for anything in particular.
Other major modes are defined by comparison with this one."
(interactive)
! (kill-all-local-variables))
;; Making and deleting lines.
--- 282,289 ----
"Major mode not specialized for anything in particular.
Other major modes are defined by comparison with this one."
(interactive)
! (kill-all-local-variables)
! (run-hooks 'after-change-major-mode-hook))
;; Making and deleting lines.
============================================================
===File ~/subr.el-diff======================================
*** subr.el 08 Sep 2004 11:29:29 -0500 1.407
--- subr.el 10 Sep 2004 14:39:21 -0500
***************
*** 1937,1942 ****
--- 1937,1946 ----
(make-variable-buffer-local 'delayed-mode-hooks)
(put 'delay-mode-hooks 'permanent-local t)
+ (defvar after-change-major-mode-hook nil
+ "Mode independent hook run after changing major modes.
+ This is run just before the mode dependent hooks.")
+
(defun run-mode-hooks (&rest hooks)
"Run mode hooks `delayed-mode-hooks' and HOOKS, or delay HOOKS.
Execution is delayed if `delay-mode-hooks' is non-nil.
***************
*** 1948,1953 ****
--- 1952,1958 ----
;; Normal case, just run the hook as before plus any delayed hooks.
(setq hooks (nconc (nreverse delayed-mode-hooks) hooks))
(setq delayed-mode-hooks nil)
+ (run-hooks 'after-change-major-mode-hook)
(apply 'run-hooks hooks)))
(defmacro delay-mode-hooks (&rest body)
============================================================
next prev parent reply other threads:[~2004-09-14 3:46 UTC|newest]
Thread overview: 150+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-09-04 23:58 enriched-mode and switching major modes Luc Teirlinck
2004-09-05 17:25 ` Richard Stallman
2004-09-06 0:59 ` Luc Teirlinck
2004-09-06 16:42 ` Stefan
2004-09-06 16:53 ` Luc Teirlinck
2004-09-10 17:40 ` Richard Stallman
2004-09-11 2:14 ` Luc Teirlinck
2004-09-11 16:56 ` Stefan
2004-09-11 21:51 ` Luc Teirlinck
2004-09-11 22:55 ` Stefan
2004-09-12 1:46 ` Luc Teirlinck
2004-09-12 18:18 ` Stefan
2004-09-12 2:50 ` Luc Teirlinck
2004-09-13 7:00 ` Richard Stallman
2004-09-12 9:10 ` Richard Stallman
2004-09-12 16:51 ` Luc Teirlinck
2004-09-12 17:08 ` Oliver Scholz
2004-09-12 18:36 ` Kim F. Storm
2004-09-12 20:01 ` Luc Teirlinck
2004-09-13 7:32 ` Kim F. Storm
2004-09-13 23:03 ` Richard Stallman
2004-09-14 3:46 ` Luc Teirlinck [this message]
2004-09-14 12:26 ` Stefan Monnier
2004-09-14 22:12 ` Luc Teirlinck
2004-09-15 9:32 ` Richard Stallman
2004-09-17 9:36 ` Richard Stallman
2004-09-19 20:07 ` Luc Teirlinck
2004-09-06 7:36 ` Oliver Scholz
2004-09-06 19:01 ` Alex Schroeder
2004-09-10 17:40 ` Richard Stallman
2004-09-10 19:30 ` Oliver Scholz
2004-09-13 23:04 ` Richard Stallman
2004-09-14 14:41 ` Oliver Scholz
2004-09-14 16:31 ` Oliver Scholz
2004-09-15 1:39 ` Luc Teirlinck
2004-09-15 1:47 ` Luc Teirlinck
2004-09-15 8:06 ` Oliver Scholz
2004-09-15 15:42 ` Richard Stallman
2004-09-16 13:20 ` Kai Grossjohann
2004-09-17 23:22 ` Richard Stallman
2004-09-16 17:04 ` Oliver Scholz
2004-09-17 5:15 ` Eli Zaretskii
2004-09-17 14:34 ` Oliver Scholz
2004-09-17 20:43 ` Kai Grossjohann
2004-09-17 22:05 ` Kim F. Storm
2004-09-18 19:07 ` Richard Stallman
2004-09-18 15:37 ` Robert J. Chassell
2004-09-18 11:14 ` Eli Zaretskii
2004-09-18 12:04 ` David Kastrup
2004-09-18 13:32 ` Eli Zaretskii
2004-09-18 13:46 ` David Kastrup
2004-09-18 15:57 ` Eli Zaretskii
2004-09-19 17:19 ` Kai Grossjohann
2004-09-18 22:55 ` Richard Stallman
2004-09-18 17:08 ` Oliver Scholz
2004-09-18 17:48 ` Eli Zaretskii
2004-09-18 20:02 ` Oliver Scholz
2004-09-18 21:25 ` Eli Zaretskii
2004-09-18 21:54 ` Oliver Scholz
2004-09-20 0:06 ` Richard Stallman
2004-09-20 11:48 ` Oliver Scholz
2004-09-21 18:30 ` Richard Stallman
2004-09-21 19:08 ` Eli Zaretskii
2004-09-21 20:06 ` Stefan Monnier
2004-09-22 4:54 ` Eli Zaretskii
2004-09-22 18:20 ` Richard Stallman
2004-09-22 18:39 ` Eli Zaretskii
2004-09-23 16:44 ` Richard Stallman
2004-09-22 10:01 ` Oliver Scholz
2004-09-22 13:08 ` Stefan Monnier
2004-09-22 13:11 ` Stefan Monnier
2004-09-22 13:14 ` Oliver Scholz
2004-09-22 16:27 ` Stefan Monnier
2004-09-23 1:48 ` Luc Teirlinck
2004-09-23 9:29 ` Richard Stallman
2004-09-23 9:48 ` David Kastrup
2004-09-23 16:44 ` Richard Stallman
2004-09-23 11:35 ` Stefan
2004-09-23 12:46 ` David Kastrup
2004-09-23 12:59 ` Oliver Scholz
2004-09-24 12:08 ` Richard Stallman
2004-09-24 12:50 ` Stefan
2004-09-25 15:34 ` Richard Stallman
2004-09-24 10:59 ` Eli Zaretskii
2004-09-24 11:53 ` Oliver Scholz
2004-09-24 15:51 ` Oliver Scholz
2004-09-24 20:55 ` Alex Schroeder
2004-09-24 21:11 ` Oliver Scholz
2004-09-25 16:36 ` Eli Zaretskii
2004-09-22 10:35 ` Oliver Scholz
2004-09-22 18:21 ` Richard Stallman
2004-09-20 0:05 ` Richard Stallman
2004-09-18 22:11 ` Kim F. Storm
2004-09-19 3:47 ` Eli Zaretskii
2004-09-20 0:05 ` Richard Stallman
2004-09-20 11:07 ` Oliver Scholz
2004-09-20 11:55 ` Kim F. Storm
2004-09-21 18:30 ` Richard Stallman
2004-09-22 7:44 ` Kim F. Storm
2004-09-22 18:14 ` Eli Zaretskii
2004-09-22 21:53 ` Kim F. Storm
2004-09-23 4:47 ` Eli Zaretskii
2004-09-23 7:13 ` Kim F. Storm
2004-09-22 18:20 ` Richard Stallman
2004-09-22 21:58 ` Kim F. Storm
2004-09-20 12:47 ` Kai Grossjohann
2004-09-17 15:08 ` Robert J. Chassell
2004-09-18 17:34 ` Oliver Scholz
2004-09-18 23:05 ` Robert J. Chassell
2004-09-19 11:07 ` Oliver Scholz
2004-09-19 11:24 ` David Kastrup
2004-09-19 13:14 ` Robert J. Chassell
2004-09-20 5:49 ` Stefan
2004-09-20 6:17 ` David Kastrup
2004-09-20 6:26 ` Stefan
2004-09-20 11:00 ` Oliver Scholz
2004-09-20 13:24 ` Stefan Monnier
2004-09-20 14:17 ` Oliver Scholz
2004-09-20 14:55 ` Stefan Monnier
2004-09-20 19:18 ` David Kastrup
2004-09-20 19:49 ` Stefan Monnier
2004-09-20 19:37 ` Oliver Scholz
2004-09-20 20:04 ` Stefan Monnier
2004-09-21 9:07 ` Oliver Scholz
2004-09-21 14:43 ` Robert J. Chassell
2004-09-20 21:44 ` Robert J. Chassell
2004-09-17 23:22 ` Richard Stallman
2004-09-18 16:57 ` Oliver Scholz
2004-09-18 17:12 ` Oliver Scholz
2004-09-20 0:05 ` Richard Stallman
2004-09-20 11:35 ` Oliver Scholz
2004-09-20 11:47 ` Kim F. Storm
2004-09-20 13:27 ` Oliver Scholz
2004-09-20 14:23 ` Kim F. Storm
2004-09-20 19:35 ` Oliver Scholz
2004-09-20 19:35 ` Oliver Scholz
2004-09-20 20:21 ` Kim F. Storm
2004-09-21 9:07 ` Oliver Scholz
2004-09-21 11:20 ` Kim F. Storm
2004-09-22 7:11 ` Richard Stallman
2004-09-21 18:30 ` Richard Stallman
2004-09-21 20:31 ` Miles Bader
2004-09-22 3:20 ` James Clark
2004-09-23 9:30 ` Richard Stallman
2004-09-21 9:53 ` Kai Grossjohann
2004-09-21 11:32 ` Kim F. Storm
2004-09-21 18:53 ` Eli Zaretskii
2004-09-21 20:34 ` Miles Bader
2004-09-22 0:31 ` David Kastrup
2004-09-22 14:00 ` Richard Stallman
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200409140346.i8E3kSk19152@raven.dms.auburn.edu \
--to=teirllm@dms.auburn.edu \
--cc=boris@gnu.org \
--cc=emacs-devel@gnu.org \
/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 external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.