]> git.eshelyaron.com Git - emacs.git/commitdiff
Use `define-minor-mode' for the minor mode
authorGerd Moellmann <gerd@gnu.org>
Tue, 12 Dec 2000 10:20:52 +0000 (10:20 +0000)
committerGerd Moellmann <gerd@gnu.org>
Tue, 12 Dec 2000 10:20:52 +0000 (10:20 +0000)
definition (patch by Stefan Monnier).
(glasses-mode): Use jit-lock instead of `after-change-functions'
(patch by Stefan Monnier).

lisp/progmodes/glasses.el

index 2b4fba4dfe87ae3075e1078cffff4fa891b7866d..f1c81fe44b5e5e6a3f1cf590e46d59115ccba48e 100644 (file)
@@ -235,7 +235,7 @@ recognized according to the current value of the variable `glasses-separator'."
   nil)
 
 
-(defun glasses-change (beg end old-len)
+(defun glasses-change (beg end &optional old-len)
   "After-change function updating glass overlays."
   (let ((beg-line (save-excursion (goto-char beg) (line-beginning-position)))
        (end-line (save-excursion (goto-char end) (line-end-position))))
@@ -246,45 +246,26 @@ recognized according to the current value of the variable `glasses-separator'."
 ;;; Minor mode definition
 
 
-(defvar glasses-mode nil
-  "Mode variable for `glasses-mode'.")
-(make-variable-buffer-local 'glasses-mode)
-
-(add-to-list 'minor-mode-alist
-            (list 'glasses-mode
-                  (propertize " o^o"
-                              'local-map (make-mode-line-mouse2-map
-                                          'glasses-mode)
-                              'help-echo "mouse-2: turn off Glasses mode")))
-
 ;;;###autoload
-(defun glasses-mode (&optional arg)
+(define-minor-mode glasses-mode
   "Minor mode for making identifiers likeThis readable.
 When this mode is active, it tries to add virtual separators (like underscores)
 at places they belong to."
-  (interactive "P")
-  (let ((new-flag (if (null arg)
-                      (not glasses-mode)
-                   (> (prefix-numeric-value arg) 0))))
-    (unless (eq new-flag glasses-mode)
-      (save-excursion
-       (save-restriction
-         (widen)
-         ;; We erase the all overlays anyway, to avoid dual sight in some
-         ;; circumstances
-         (glasses-make-unreadable (point-min) (point-max))
-         (if new-flag
-             (progn
-               (glasses-make-readable (point-min) (point-max))
-               (make-local-hook 'after-change-functions)
-               (add-hook 'after-change-functions 'glasses-change nil t)
-               (add-hook 'local-write-file-hooks
-                         'glasses-convert-to-unreadable nil t))
-           (remove-hook 'after-change-functions 'glasses-change t)
-           (remove-hook 'local-write-file-hooks
-                        'glasses-convert-to-unreadable t))))
-      (setq glasses-mode new-flag)
-      (force-mode-line-update))))
+  nil " o^o" nil
+  (save-excursion
+    (save-restriction
+      (widen)
+      ;; We erase all the overlays anyway, to avoid dual sight in some
+      ;; circumstances
+      (glasses-make-unreadable (point-min) (point-max))
+      (if glasses-mode
+         (progn
+           (jit-lock-register 'glasses-change)
+           (add-hook 'local-write-file-hooks
+                     'glasses-convert-to-unreadable nil t))
+       (jit-lock-unregister 'glasses-change)
+       (remove-hook 'local-write-file-hooks
+                    'glasses-convert-to-unreadable t)))))
 
 
 ;;; Announce