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)