Mercurial > emacs
comparison lisp/emacs-lisp/ewoc.el @ 70992:dcab6d42213c
(ewoc-delete): Compute last node once before looping.
author | Thien-Thi Nguyen <ttn@gnuvola.org> |
---|---|
date | Sat, 27 May 2006 09:36:11 +0000 |
parents | c54570f9431a |
children | d3750d5046d7 |
comparison
equal
deleted
inserted
replaced
70991:989ad5a031e2 | 70992:dcab6d42213c |
---|---|
383 (setq node (ewoc--node-next node)))))) | 383 (setq node (ewoc--node-next node)))))) |
384 | 384 |
385 (defun ewoc-delete (ewoc &rest nodes) | 385 (defun ewoc-delete (ewoc &rest nodes) |
386 "Delete NODES from EWOC." | 386 "Delete NODES from EWOC." |
387 (ewoc--set-buffer-bind-dll-let* ewoc | 387 (ewoc--set-buffer-bind-dll-let* ewoc |
388 ((L nil) (R nil)) | 388 ((L nil) (R nil) (last (ewoc--last-node ewoc))) |
389 (dolist (node nodes) | 389 (dolist (node nodes) |
390 ;; If we are about to delete the node pointed at by last-node, | 390 ;; If we are about to delete the node pointed at by last-node, |
391 ;; set last-node to nil. | 391 ;; set last-node to nil. |
392 (if (eq (ewoc--last-node ewoc) node) | 392 (when (eq last node) |
393 (setf (ewoc--last-node ewoc) nil)) | 393 (setf last nil (ewoc--last-node ewoc) nil)) |
394 (delete-region (ewoc--node-start-marker node) | 394 (delete-region (ewoc--node-start-marker node) |
395 (ewoc--node-start-marker (ewoc--node-next node))) | 395 (ewoc--node-start-marker (ewoc--node-next node))) |
396 (set-marker (ewoc--node-start-marker node) nil) | 396 (set-marker (ewoc--node-start-marker node) nil) |
397 (setf L (ewoc--node-left node) | 397 (setf L (ewoc--node-left node) |
398 R (ewoc--node-right node) | 398 R (ewoc--node-right node) |