emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] /srv/bzr/emacs/trunk r111794: emacs-lisp/easy-mmode.el (de


From: Alan Mackenzie
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r111794: emacs-lisp/easy-mmode.el (define-globalized-minor-mode): When a global
Date: Fri, 15 Feb 2013 20:01:51 +0000
User-agent: Bazaar (2.5.0)

------------------------------------------------------------
revno: 111794
committer: Alan Mackenzie <address@hidden>
branch nick: trunk
timestamp: Fri 2013-02-15 20:01:51 +0000
message:
  emacs-lisp/easy-mmode.el (define-globalized-minor-mode): When a global
  minor mode has been enabled, call the minor mode function for a new
  buffer once only, after the major mode hook, whilst allowing that hook
  explicitly to disable the minor mode.
  (MODE-disable-in-buffer): new (generated) function.
  (disable-MODE): new (generated) buffer local variable.
modified:
  lisp/ChangeLog
  lisp/emacs-lisp/easy-mmode.el
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2013-02-15 19:19:29 +0000
+++ b/lisp/ChangeLog    2013-02-15 20:01:51 +0000
@@ -1,3 +1,12 @@
+2013-02-15  Alan Mackenzie  <address@hidden>
+
+       * emacs-lisp/easy-mmode.el (define-globalized-minor-mode): When a
+       global minor mode has been enabled, call the minor mode function
+       for a new buffer once only, after the major mode hook, whilst
+       allowing that hook explicitly to disable the minor mode.
+       (MODE-disable-in-buffer): new (generated) function.
+       (disable-MODE): new (generated) buffer local variable.
+
 2013-02-15  Jambunathan K  <address@hidden>
 
        * iswitchb.el (iswitchb-read-buffer): Bind `C-.' and `C-,' to

=== modified file 'lisp/emacs-lisp/easy-mmode.el'
--- a/lisp/emacs-lisp/easy-mmode.el     2013-02-14 17:16:47 +0000
+++ b/lisp/emacs-lisp/easy-mmode.el     2013-02-15 20:01:51 +0000
@@ -341,9 +341,14 @@
 enabled, then disabling and reenabling MODE should make MODE work
 correctly with the current major mode.  This is important to
 prevent problems with derived modes, that is, major modes that
-call another major mode in their body."
+call another major mode in their body.
+
+When a major mode is initialized, MODE is actually turned on just
+after running the major mode's hook.  However, MODE is not turned
+on if the hook has explicitly disabled it."
   (declare (doc-string 2))
   (let* ((global-mode-name (symbol-name global-mode))
+        (mode-name (symbol-name mode))
         (pretty-name (easy-mmode-pretty-mode-name mode))
         (pretty-global-name (easy-mmode-pretty-mode-name global-mode))
         (group nil)
@@ -354,6 +359,10 @@
         (MODE-check-buffers
          (intern (concat global-mode-name "-check-buffers")))
         (MODE-cmhh (intern (concat global-mode-name "-cmhh")))
+        (MODE-disable-in-buffer
+         (intern (concat global-mode-name "-disable-in-buffer")))
+        (minor-MODE-hook (intern (concat mode-name "-hook")))
+        (disable-MODE (intern (concat "disable-" mode-name)))
         (MODE-major-mode (intern (concat (symbol-name mode) "-major-mode")))
         keyw)
 
@@ -397,8 +406,6 @@
             (progn
               (add-hook 'after-change-major-mode-hook
                         ',MODE-enable-in-buffers)
-              (add-hook 'change-major-mode-after-body-hook
-                        ',MODE-enable-in-buffers)
               (add-hook 'find-file-hook ',MODE-check-buffers)
               (add-hook 'change-major-mode-hook ',MODE-cmhh))
           (remove-hook 'after-change-major-mode-hook ',MODE-enable-in-buffers)
@@ -416,6 +423,10 @@
        ;; up-to-here.
        :autoload-end
 
+       ;; A function which checks whether MODE has been disabled in the major
+       ;; mode hook which has just been run.
+       (add-hook ',minor-MODE-hook ',MODE-disable-in-buffer)
+
        ;; List of buffers left to process.
        (defvar ,MODE-buffers nil)
 
@@ -424,14 +435,15 @@
         (dolist (buf ,MODE-buffers)
           (when (buffer-live-p buf)
             (with-current-buffer buf
-               (unless (eq ,MODE-major-mode major-mode)
-                 (if ,mode
-                     (progn
-                       (,mode -1)
-                       (,turn-on)
-                       (setq ,MODE-major-mode major-mode))
-                   (,turn-on)
-                   (setq ,MODE-major-mode major-mode)))))))
+               (if ,disable-MODE
+                  (if ,mode (,mode -1))
+                (unless (eq ,MODE-major-mode major-mode)
+                  (if ,mode
+                      (progn
+                        (,mode -1)
+                        (,turn-on))
+                    (,turn-on))))
+              (setq ,MODE-major-mode major-mode)))))
        (put ',MODE-enable-in-buffers 'definition-name ',global-mode)
 
        (defun ,MODE-check-buffers ()
@@ -444,7 +456,14 @@
        (defun ,MODE-cmhh ()
         (add-to-list ',MODE-buffers (current-buffer))
         (add-hook 'post-command-hook ',MODE-check-buffers))
-       (put ',MODE-cmhh 'definition-name ',global-mode))))
+       (put ',MODE-cmhh 'definition-name ',global-mode)
+       ;; disable-MODE is set in MODE-disable-in-buffer and cleared by
+       ;; kill-all-local-variables.
+       (defvar-local ,disable-MODE nil)
+       (defun ,MODE-disable-in-buffer ()
+        (unless ,mode
+          (setq ,disable-MODE t)))
+       (put ',MODE-disable-in-buffer 'definition-name ',global-mode))))
 
 ;;;
 ;;; easy-mmode-defmap


reply via email to

[Prev in Thread] Current Thread [Next in Thread]