Mercurial > emacs
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) |