diff options
| author | Alan Mackenzie | 2013-02-15 20:01:51 +0000 |
|---|---|---|
| committer | Alan Mackenzie | 2013-02-15 20:01:51 +0000 |
| commit | f852f6d8c0db494ccb21b6020a5ebbeaa685a948 (patch) | |
| tree | 1bdab6d0b27be22c0732adbb8119b6f872fdde70 | |
| parent | 8d9f189f40bc121dc95968df1170a1967f3f676d (diff) | |
| download | emacs-f852f6d8c0db494ccb21b6020a5ebbeaa685a948.tar.gz emacs-f852f6d8c0db494ccb21b6020a5ebbeaa685a948.zip | |
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.
| -rw-r--r-- | lisp/ChangeLog | 9 | ||||
| -rw-r--r-- | lisp/emacs-lisp/easy-mmode.el | 43 |
2 files changed, 40 insertions, 12 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 920c953abce..99704a0b532 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog | |||
| @@ -1,3 +1,12 @@ | |||
| 1 | 2013-02-15 Alan Mackenzie <acm@muc.de> | ||
| 2 | |||
| 3 | * emacs-lisp/easy-mmode.el (define-globalized-minor-mode): When a | ||
| 4 | global minor mode has been enabled, call the minor mode function | ||
| 5 | for a new buffer once only, after the major mode hook, whilst | ||
| 6 | allowing that hook explicitly to disable the minor mode. | ||
| 7 | (MODE-disable-in-buffer): new (generated) function. | ||
| 8 | (disable-MODE): new (generated) buffer local variable. | ||
| 9 | |||
| 1 | 2013-02-15 Jambunathan K <kjambunathan@gmail.com> | 10 | 2013-02-15 Jambunathan K <kjambunathan@gmail.com> |
| 2 | 11 | ||
| 3 | * iswitchb.el (iswitchb-read-buffer): Bind `C-.' and `C-,' to | 12 | * iswitchb.el (iswitchb-read-buffer): Bind `C-.' and `C-,' to |
diff --git a/lisp/emacs-lisp/easy-mmode.el b/lisp/emacs-lisp/easy-mmode.el index 166c093f37b..2088e690228 100644 --- a/lisp/emacs-lisp/easy-mmode.el +++ b/lisp/emacs-lisp/easy-mmode.el | |||
| @@ -341,9 +341,14 @@ If MODE's set-up depends on the major mode in effect when it was | |||
| 341 | enabled, then disabling and reenabling MODE should make MODE work | 341 | enabled, then disabling and reenabling MODE should make MODE work |
| 342 | correctly with the current major mode. This is important to | 342 | correctly with the current major mode. This is important to |
| 343 | prevent problems with derived modes, that is, major modes that | 343 | prevent problems with derived modes, that is, major modes that |
| 344 | call another major mode in their body." | 344 | call another major mode in their body. |
| 345 | |||
| 346 | When a major mode is initialized, MODE is actually turned on just | ||
| 347 | after running the major mode's hook. However, MODE is not turned | ||
| 348 | on if the hook has explicitly disabled it." | ||
| 345 | (declare (doc-string 2)) | 349 | (declare (doc-string 2)) |
| 346 | (let* ((global-mode-name (symbol-name global-mode)) | 350 | (let* ((global-mode-name (symbol-name global-mode)) |
| 351 | (mode-name (symbol-name mode)) | ||
| 347 | (pretty-name (easy-mmode-pretty-mode-name mode)) | 352 | (pretty-name (easy-mmode-pretty-mode-name mode)) |
| 348 | (pretty-global-name (easy-mmode-pretty-mode-name global-mode)) | 353 | (pretty-global-name (easy-mmode-pretty-mode-name global-mode)) |
| 349 | (group nil) | 354 | (group nil) |
| @@ -354,6 +359,10 @@ call another major mode in their body." | |||
| 354 | (MODE-check-buffers | 359 | (MODE-check-buffers |
| 355 | (intern (concat global-mode-name "-check-buffers"))) | 360 | (intern (concat global-mode-name "-check-buffers"))) |
| 356 | (MODE-cmhh (intern (concat global-mode-name "-cmhh"))) | 361 | (MODE-cmhh (intern (concat global-mode-name "-cmhh"))) |
| 362 | (MODE-disable-in-buffer | ||
| 363 | (intern (concat global-mode-name "-disable-in-buffer"))) | ||
| 364 | (minor-MODE-hook (intern (concat mode-name "-hook"))) | ||
| 365 | (disable-MODE (intern (concat "disable-" mode-name))) | ||
| 357 | (MODE-major-mode (intern (concat (symbol-name mode) "-major-mode"))) | 366 | (MODE-major-mode (intern (concat (symbol-name mode) "-major-mode"))) |
| 358 | keyw) | 367 | keyw) |
| 359 | 368 | ||
| @@ -397,8 +406,6 @@ See `%s' for more information on %s." | |||
| 397 | (progn | 406 | (progn |
| 398 | (add-hook 'after-change-major-mode-hook | 407 | (add-hook 'after-change-major-mode-hook |
| 399 | ',MODE-enable-in-buffers) | 408 | ',MODE-enable-in-buffers) |
| 400 | (add-hook 'change-major-mode-after-body-hook | ||
| 401 | ',MODE-enable-in-buffers) | ||
| 402 | (add-hook 'find-file-hook ',MODE-check-buffers) | 409 | (add-hook 'find-file-hook ',MODE-check-buffers) |
| 403 | (add-hook 'change-major-mode-hook ',MODE-cmhh)) | 410 | (add-hook 'change-major-mode-hook ',MODE-cmhh)) |
| 404 | (remove-hook 'after-change-major-mode-hook ',MODE-enable-in-buffers) | 411 | (remove-hook 'after-change-major-mode-hook ',MODE-enable-in-buffers) |
| @@ -416,6 +423,10 @@ See `%s' for more information on %s." | |||
| 416 | ;; up-to-here. | 423 | ;; up-to-here. |
| 417 | :autoload-end | 424 | :autoload-end |
| 418 | 425 | ||
| 426 | ;; A function which checks whether MODE has been disabled in the major | ||
| 427 | ;; mode hook which has just been run. | ||
| 428 | (add-hook ',minor-MODE-hook ',MODE-disable-in-buffer) | ||
| 429 | |||
| 419 | ;; List of buffers left to process. | 430 | ;; List of buffers left to process. |
| 420 | (defvar ,MODE-buffers nil) | 431 | (defvar ,MODE-buffers nil) |
| 421 | 432 | ||
| @@ -424,14 +435,15 @@ See `%s' for more information on %s." | |||
| 424 | (dolist (buf ,MODE-buffers) | 435 | (dolist (buf ,MODE-buffers) |
| 425 | (when (buffer-live-p buf) | 436 | (when (buffer-live-p buf) |
| 426 | (with-current-buffer buf | 437 | (with-current-buffer buf |
| 427 | (unless (eq ,MODE-major-mode major-mode) | 438 | (if ,disable-MODE |
| 428 | (if ,mode | 439 | (if ,mode (,mode -1)) |
| 429 | (progn | 440 | (unless (eq ,MODE-major-mode major-mode) |
| 430 | (,mode -1) | 441 | (if ,mode |
| 431 | (,turn-on) | 442 | (progn |
| 432 | (setq ,MODE-major-mode major-mode)) | 443 | (,mode -1) |
| 433 | (,turn-on) | 444 | (,turn-on)) |
| 434 | (setq ,MODE-major-mode major-mode))))))) | 445 | (,turn-on)))) |
| 446 | (setq ,MODE-major-mode major-mode))))) | ||
| 435 | (put ',MODE-enable-in-buffers 'definition-name ',global-mode) | 447 | (put ',MODE-enable-in-buffers 'definition-name ',global-mode) |
| 436 | 448 | ||
| 437 | (defun ,MODE-check-buffers () | 449 | (defun ,MODE-check-buffers () |
| @@ -444,7 +456,14 @@ See `%s' for more information on %s." | |||
| 444 | (defun ,MODE-cmhh () | 456 | (defun ,MODE-cmhh () |
| 445 | (add-to-list ',MODE-buffers (current-buffer)) | 457 | (add-to-list ',MODE-buffers (current-buffer)) |
| 446 | (add-hook 'post-command-hook ',MODE-check-buffers)) | 458 | (add-hook 'post-command-hook ',MODE-check-buffers)) |
| 447 | (put ',MODE-cmhh 'definition-name ',global-mode)))) | 459 | (put ',MODE-cmhh 'definition-name ',global-mode) |
| 460 | ;; disable-MODE is set in MODE-disable-in-buffer and cleared by | ||
| 461 | ;; kill-all-local-variables. | ||
| 462 | (defvar-local ,disable-MODE nil) | ||
| 463 | (defun ,MODE-disable-in-buffer () | ||
| 464 | (unless ,mode | ||
| 465 | (setq ,disable-MODE t))) | ||
| 466 | (put ',MODE-disable-in-buffer 'definition-name ',global-mode)))) | ||
| 448 | 467 | ||
| 449 | ;;; | 468 | ;;; |
| 450 | ;;; easy-mmode-defmap | 469 | ;;; easy-mmode-defmap |