diff options
| author | Stefan Monnier | 2013-02-25 20:50:45 -0500 |
|---|---|---|
| committer | Stefan Monnier | 2013-02-25 20:50:45 -0500 |
| commit | 9f70f91e94a4c855d7ff8a98cf948f24e0f3eb31 (patch) | |
| tree | 440afbe847002d2b395b16f15678d5f8e8c26673 /lisp | |
| parent | 4c514b0f67f78de332c318fb4029b2bb4e4bff0a (diff) | |
| download | emacs-9f70f91e94a4c855d7ff8a98cf948f24e0f3eb31.tar.gz emacs-9f70f91e94a4c855d7ff8a98cf948f24e0f3eb31.zip | |
* lisp/emacs-lisp/easy-mmode.el (define-globalized-minor-mode): Tweak logic.
(easy-mmode-set-keymap-parents): Use make-composed-keymap.
Diffstat (limited to 'lisp')
| -rw-r--r-- | lisp/ChangeLog | 5 | ||||
| -rw-r--r-- | lisp/emacs-lisp/easy-mmode.el | 37 |
2 files changed, 16 insertions, 26 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index f01ef60c35a..72a7d11eaa2 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog | |||
| @@ -1,3 +1,8 @@ | |||
| 1 | 2013-02-26 Stefan Monnier <monnier@iro.umontreal.ca> | ||
| 2 | |||
| 3 | * emacs-lisp/easy-mmode.el (define-globalized-minor-mode): Tweak logic. | ||
| 4 | (easy-mmode-set-keymap-parents): Use make-composed-keymap. | ||
| 5 | |||
| 1 | 2013-02-25 Stefan Monnier <monnier@iro.umontreal.ca> | 6 | 2013-02-25 Stefan Monnier <monnier@iro.umontreal.ca> |
| 2 | 7 | ||
| 3 | * emacs-lisp/bytecomp.el (byte-compile-file): Use let. | 8 | * emacs-lisp/bytecomp.el (byte-compile-file): Use let. |
diff --git a/lisp/emacs-lisp/easy-mmode.el b/lisp/emacs-lisp/easy-mmode.el index 2088e690228..abe7b1ea741 100644 --- a/lisp/emacs-lisp/easy-mmode.el +++ b/lisp/emacs-lisp/easy-mmode.el | |||
| @@ -359,10 +359,8 @@ on if the hook has explicitly disabled it." | |||
| 359 | (MODE-check-buffers | 359 | (MODE-check-buffers |
| 360 | (intern (concat global-mode-name "-check-buffers"))) | 360 | (intern (concat global-mode-name "-check-buffers"))) |
| 361 | (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"))) | 362 | (minor-MODE-hook (intern (concat mode-name "-hook"))) |
| 365 | (disable-MODE (intern (concat "disable-" mode-name))) | 363 | (MODE-set-explicitly (intern (concat mode-name "-set-explicitly"))) |
| 366 | (MODE-major-mode (intern (concat (symbol-name mode) "-major-mode"))) | 364 | (MODE-major-mode (intern (concat (symbol-name mode) "-major-mode"))) |
| 367 | keyw) | 365 | keyw) |
| 368 | 366 | ||
| @@ -409,8 +407,6 @@ See `%s' for more information on %s." | |||
| 409 | (add-hook 'find-file-hook ',MODE-check-buffers) | 407 | (add-hook 'find-file-hook ',MODE-check-buffers) |
| 410 | (add-hook 'change-major-mode-hook ',MODE-cmhh)) | 408 | (add-hook 'change-major-mode-hook ',MODE-cmhh)) |
| 411 | (remove-hook 'after-change-major-mode-hook ',MODE-enable-in-buffers) | 409 | (remove-hook 'after-change-major-mode-hook ',MODE-enable-in-buffers) |
| 412 | (remove-hook 'change-major-mode-after-body-hook | ||
| 413 | ',MODE-enable-in-buffers) | ||
| 414 | (remove-hook 'find-file-hook ',MODE-check-buffers) | 410 | (remove-hook 'find-file-hook ',MODE-check-buffers) |
| 415 | (remove-hook 'change-major-mode-hook ',MODE-cmhh)) | 411 | (remove-hook 'change-major-mode-hook ',MODE-cmhh)) |
| 416 | 412 | ||
| @@ -425,7 +421,7 @@ See `%s' for more information on %s." | |||
| 425 | 421 | ||
| 426 | ;; A function which checks whether MODE has been disabled in the major | 422 | ;; A function which checks whether MODE has been disabled in the major |
| 427 | ;; mode hook which has just been run. | 423 | ;; mode hook which has just been run. |
| 428 | (add-hook ',minor-MODE-hook ',MODE-disable-in-buffer) | 424 | (add-hook ',minor-MODE-hook ',MODE-set-explicitly) |
| 429 | 425 | ||
| 430 | ;; List of buffers left to process. | 426 | ;; List of buffers left to process. |
| 431 | (defvar ,MODE-buffers nil) | 427 | (defvar ,MODE-buffers nil) |
| @@ -435,8 +431,7 @@ See `%s' for more information on %s." | |||
| 435 | (dolist (buf ,MODE-buffers) | 431 | (dolist (buf ,MODE-buffers) |
| 436 | (when (buffer-live-p buf) | 432 | (when (buffer-live-p buf) |
| 437 | (with-current-buffer buf | 433 | (with-current-buffer buf |
| 438 | (if ,disable-MODE | 434 | (unless ,MODE-set-explicitly |
| 439 | (if ,mode (,mode -1)) | ||
| 440 | (unless (eq ,MODE-major-mode major-mode) | 435 | (unless (eq ,MODE-major-mode major-mode) |
| 441 | (if ,mode | 436 | (if ,mode |
| 442 | (progn | 437 | (progn |
| @@ -457,30 +452,20 @@ See `%s' for more information on %s." | |||
| 457 | (add-to-list ',MODE-buffers (current-buffer)) | 452 | (add-to-list ',MODE-buffers (current-buffer)) |
| 458 | (add-hook 'post-command-hook ',MODE-check-buffers)) | 453 | (add-hook 'post-command-hook ',MODE-check-buffers)) |
| 459 | (put ',MODE-cmhh 'definition-name ',global-mode) | 454 | (put ',MODE-cmhh 'definition-name ',global-mode) |
| 460 | ;; disable-MODE is set in MODE-disable-in-buffer and cleared by | 455 | ;; MODE-set-explicitly is set in MODE-set-explicitly and cleared by |
| 461 | ;; kill-all-local-variables. | 456 | ;; kill-all-local-variables. |
| 462 | (defvar-local ,disable-MODE nil) | 457 | (defvar-local ,MODE-set-explicitly nil) |
| 463 | (defun ,MODE-disable-in-buffer () | 458 | (defun ,MODE-set-explicitly () |
| 464 | (unless ,mode | 459 | (setq ,MODE-set-explicitly t)) |
| 465 | (setq ,disable-MODE t))) | 460 | (put ',MODE-set-explicitly 'definition-name ',global-mode)))) |
| 466 | (put ',MODE-disable-in-buffer 'definition-name ',global-mode)))) | ||
| 467 | 461 | ||
| 468 | ;;; | 462 | ;;; |
| 469 | ;;; easy-mmode-defmap | 463 | ;;; easy-mmode-defmap |
| 470 | ;;; | 464 | ;;; |
| 471 | 465 | ||
| 472 | (eval-and-compile | 466 | (defun easy-mmode-set-keymap-parents (m parents) |
| 473 | (if (fboundp 'set-keymap-parents) | 467 | (set-keymap-parent |
| 474 | (defalias 'easy-mmode-set-keymap-parents 'set-keymap-parents) | 468 | m (if (cdr parents) (make-composed-keymap parents) (car parents)))) |
| 475 | (defun easy-mmode-set-keymap-parents (m parents) | ||
| 476 | (set-keymap-parent | ||
| 477 | m | ||
| 478 | (cond | ||
| 479 | ((not (consp parents)) parents) | ||
| 480 | ((not (cdr parents)) (car parents)) | ||
| 481 | (t (let ((m (copy-keymap (pop parents)))) | ||
| 482 | (easy-mmode-set-keymap-parents m parents) | ||
| 483 | m))))))) | ||
| 484 | 469 | ||
| 485 | ;;;###autoload | 470 | ;;;###autoload |
| 486 | (defun easy-mmode-define-keymap (bs &optional name m args) | 471 | (defun easy-mmode-define-keymap (bs &optional name m args) |