emacs-devel
[Top][All Lists]
Advanced

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

Re: Fontless Info


From: Alan Mackenzie
Subject: Re: Fontless Info
Date: Sun, 24 Feb 2013 18:08:38 +0000
User-agent: Mutt/1.5.21 (2010-09-15)

Hello, Dmitry.

On Sat, Feb 23, 2013 at 08:58:50AM +0400, Dmitry Gutov wrote:
> Hey Alan,

> Alan Mackenzie <address@hidden> writes:

> > This might well do the trick:

> I've applied the patch, bootstrapped, and it [still] has problems with
> whitespace-mode. To reproduce:

> 1. Run emacs -Q

> 2. Eval (add-hook 'prog-mode 'whitespace-mode)

> 3. Open any .el file, for example => no syntax highligting

OK, thanks.  whitespace-mode disables then re-enables font lock mode.
The code in define-globalized-minor-mode was recording the disable, but
not the re-enable, so it thought the major mode hook had disabled font
lock mode.

I've amended it so that it now takes account of the re-enabling too.  I
think this solves the immediate problem.

Here's the patch (based off the trunk of a few days ago).  As always,
please do a complete rebuild after applying the patch.  Let me know how
it goes, please.



=== modified file 'lisp/emacs-lisp/easy-mmode.el'
*** lisp/emacs-lisp/easy-mmode.el       2013-02-15 20:01:51 +0000
--- lisp/emacs-lisp/easy-mmode.el       2013-02-24 17:53:33 +0000
***************
*** 359,366 ****
         (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")))
--- 359,366 ----
         (MODE-check-buffers
          (intern (concat global-mode-name "-check-buffers")))
         (MODE-cmhh (intern (concat global-mode-name "-cmhh")))
!        (set-disable-MODE-in-buffer
!         (intern (concat "set-disable-" global-mode-name "-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")))
***************
*** 409,431 ****
               (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)
-          (remove-hook 'change-major-mode-after-body-hook
-                       ',MODE-enable-in-buffers)
           (remove-hook 'find-file-hook ',MODE-check-buffers)
           (remove-hook 'change-major-mode-hook ',MODE-cmhh))
  
         ;; Go through existing buffers.
         (dolist (buf (buffer-list))
           (with-current-buffer buf
!            (if ,global-mode (,turn-on) (when ,mode (,mode -1))))))
  
         ;; Autoloading define-globalized-minor-mode autoloads everything
         ;; 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)
--- 409,431 ----
               (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)
           (remove-hook 'find-file-hook ',MODE-check-buffers)
           (remove-hook 'change-major-mode-hook ',MODE-cmhh))
  
         ;; Go through existing buffers.
         (dolist (buf (buffer-list))
           (with-current-buffer buf
!            (if ,global-mode
!                (,turn-on)
!              (when ,mode (let (,disable-MODE) (,mode -1)))))))
  
         ;; Autoloading define-globalized-minor-mode autoloads everything
         ;; up-to-here.
         :autoload-end
  
!        ;; A function which checks whether MODE has been left disabled
!        ;; in the major mode hook which has just been run.
!        (add-hook ',minor-MODE-hook ',set-disable-MODE-in-buffer)
  
         ;; List of buffers left to process.
         (defvar ,MODE-buffers nil)
***************
*** 439,445 ****
                   (if ,mode (,mode -1))
                 (unless (eq ,MODE-major-mode major-mode)
                   (if ,mode
!                      (progn
                         (,mode -1)
                         (,turn-on))
                     (,turn-on))))
--- 439,445 ----
                   (if ,mode (,mode -1))
                 (unless (eq ,MODE-major-mode major-mode)
                   (if ,mode
!                      (let (,disable-MODE)
                         (,mode -1)
                         (,turn-on))
                     (,turn-on))))
***************
*** 457,469 ****
         (add-to-list ',MODE-buffers (current-buffer))
         (add-hook 'post-command-hook ',MODE-check-buffers))
         (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
--- 457,468 ----
         (add-to-list ',MODE-buffers (current-buffer))
         (add-hook 'post-command-hook ',MODE-check-buffers))
         (put ',MODE-cmhh 'definition-name ',global-mode)
!        ;; disable-MODE is set/cleared in set-disable-MODE-in-buffer
!        ;; and cleared by kill-all-local-variables.
         (defvar-local ,disable-MODE nil)
!        (defun ,set-disable-MODE-in-buffer ()
!        (setq ,disable-MODE (not ,mode)))
!        (put ',set-disable-MODE-in-buffer 'definition-name ',global-mode))))
  
  ;;;
  ;;; easy-mmode-defmap



-- 
Alan Mackenzie (Nuremberg, Germany).



reply via email to

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