comparison lisp/progmodes/glasses.el @ 34473:e859388caea4

Use `define-minor-mode' for the minor mode definition (patch by Stefan Monnier). (glasses-mode): Use jit-lock instead of `after-change-functions' (patch by Stefan Monnier).
author Gerd Moellmann <gerd@gnu.org>
date Tue, 12 Dec 2000 10:20:52 +0000
parents f377d034ed4e
children 2a85f8119924
comparison
equal deleted inserted replaced
34472:76076c5b2009 34473:e859388caea4
233 (replace-match "" t nil nil 1)))))) 233 (replace-match "" t nil nil 1))))))
234 ;; nil must be returned to allow use in write file hooks 234 ;; nil must be returned to allow use in write file hooks
235 nil) 235 nil)
236 236
237 237
238 (defun glasses-change (beg end old-len) 238 (defun glasses-change (beg end &optional old-len)
239 "After-change function updating glass overlays." 239 "After-change function updating glass overlays."
240 (let ((beg-line (save-excursion (goto-char beg) (line-beginning-position))) 240 (let ((beg-line (save-excursion (goto-char beg) (line-beginning-position)))
241 (end-line (save-excursion (goto-char end) (line-end-position)))) 241 (end-line (save-excursion (goto-char end) (line-end-position))))
242 (glasses-make-unreadable beg-line end-line) 242 (glasses-make-unreadable beg-line end-line)
243 (glasses-make-readable beg-line end-line))) 243 (glasses-make-readable beg-line end-line)))
244 244
245 245
246 ;;; Minor mode definition 246 ;;; Minor mode definition
247 247
248 248
249 (defvar glasses-mode nil
250 "Mode variable for `glasses-mode'.")
251 (make-variable-buffer-local 'glasses-mode)
252
253 (add-to-list 'minor-mode-alist
254 (list 'glasses-mode
255 (propertize " o^o"
256 'local-map (make-mode-line-mouse2-map
257 'glasses-mode)
258 'help-echo "mouse-2: turn off Glasses mode")))
259
260 ;;;###autoload 249 ;;;###autoload
261 (defun glasses-mode (&optional arg) 250 (define-minor-mode glasses-mode
262 "Minor mode for making identifiers likeThis readable. 251 "Minor mode for making identifiers likeThis readable.
263 When this mode is active, it tries to add virtual separators (like underscores) 252 When this mode is active, it tries to add virtual separators (like underscores)
264 at places they belong to." 253 at places they belong to."
265 (interactive "P") 254 nil " o^o" nil
266 (let ((new-flag (if (null arg) 255 (save-excursion
267 (not glasses-mode) 256 (save-restriction
268 (> (prefix-numeric-value arg) 0)))) 257 (widen)
269 (unless (eq new-flag glasses-mode) 258 ;; We erase all the overlays anyway, to avoid dual sight in some
270 (save-excursion 259 ;; circumstances
271 (save-restriction 260 (glasses-make-unreadable (point-min) (point-max))
272 (widen) 261 (if glasses-mode
273 ;; We erase the all overlays anyway, to avoid dual sight in some 262 (progn
274 ;; circumstances 263 (jit-lock-register 'glasses-change)
275 (glasses-make-unreadable (point-min) (point-max)) 264 (add-hook 'local-write-file-hooks
276 (if new-flag 265 'glasses-convert-to-unreadable nil t))
277 (progn 266 (jit-lock-unregister 'glasses-change)
278 (glasses-make-readable (point-min) (point-max)) 267 (remove-hook 'local-write-file-hooks
279 (make-local-hook 'after-change-functions) 268 'glasses-convert-to-unreadable t)))))
280 (add-hook 'after-change-functions 'glasses-change nil t)
281 (add-hook 'local-write-file-hooks
282 'glasses-convert-to-unreadable nil t))
283 (remove-hook 'after-change-functions 'glasses-change t)
284 (remove-hook 'local-write-file-hooks
285 'glasses-convert-to-unreadable t))))
286 (setq glasses-mode new-flag)
287 (force-mode-line-update))))
288 269
289 270
290 ;;; Announce 271 ;;; Announce
291 272
292 (provide 'glasses) 273 (provide 'glasses)