]> code.delx.au - gnu-emacs/blobdiff - lisp/emacs-lisp/ewoc.el
Merge from trunk.
[gnu-emacs] / lisp / emacs-lisp / ewoc.el
index 3649757f782f4867bdd28cf11462994a32a78740..a71f3c7244c31bb00446444af6ccfa22ce35f417 100644 (file)
@@ -1,7 +1,6 @@
 ;;; ewoc.el --- utility to maintain a view of a list of objects in a buffer
 
-;; Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-;;   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+;; Copyright (C) 1991-2011 Free Software Foundation, Inc.
 
 ;; Author: Per Cederqvist <ceder@lysator.liu.se>
 ;;     Inge Wallin <inge@lysator.liu.se>
 
 ;; This file is part of GNU Emacs.
 
-;; GNU Emacs is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
-;; any later version.
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
 
 ;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -22,9 +21,7 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-;; Boston, MA 02110-1301, USA.
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 
@@ -54,7 +51,7 @@
 ;; dll (a doubly linked list) and the contents of a buffer.
 ;; Possible uses are dired (have all files in a list, and show them),
 ;; buffer-list, kom-prioritize (in the LysKOM elisp client) and
-;; others.  pcl-cvs.el uses ewoc.el.
+;; others.  pcl-cvs.el and vc.el use ewoc.el.
 ;;
 ;; Ewoc can be considered as the `view' part of a model-view-controller.
 ;;
@@ -191,8 +188,9 @@ BUT if it is the header or the footer in EWOC return nil instead."
                     (not (eq dll node))))
         (setq node (ewoc--node-right node))))))
 
-(defun ewoc--insert-new-node (node data pretty-printer)
+(defun ewoc--insert-new-node (node data pretty-printer dll)
   "Insert before NODE a new node for DATA, displayed by PRETTY-PRINTER.
+Fourth arg DLL -- from `(ewoc--dll EWOC)' -- is for internal purposes.
 Call PRETTY-PRINTER with point at NODE's start, thus pushing back
 NODE and leaving the new node's start there.  Return the new node."
   (save-excursion
@@ -262,8 +260,8 @@ fourth arg NOSEP non-nil inhibits this."
       (unless header (setq header ""))
       (unless footer (setq footer ""))
       (setf (ewoc--node-start-marker dll) (copy-marker pos)
-            foot (ewoc--insert-new-node  dll footer hf-pp)
-            head (ewoc--insert-new-node foot header hf-pp)
+            foot (ewoc--insert-new-node  dll footer hf-pp dll)
+            head (ewoc--insert-new-node foot header hf-pp dll)
             (ewoc--hf-pp new-ewoc) hf-pp
             (ewoc--footer new-ewoc) foot
             (ewoc--header new-ewoc) head))
@@ -301,7 +299,7 @@ Return the new node."
   "Enter a new element DATA before NODE in EWOC.
 Return the new node."
   (ewoc--set-buffer-bind-dll ewoc
-    (ewoc--insert-new-node node data (ewoc--pretty-printer ewoc))))
+    (ewoc--insert-new-node node data (ewoc--pretty-printer ewoc) dll)))
 
 (defun ewoc-next (ewoc node)
   "Return the node in EWOC that follows NODE.
@@ -497,6 +495,8 @@ Return the node (or nil if we just passed the last node)."
     ;; Never step below the first element.
     ;; (unless (ewoc--filter-hf-nodes ewoc node)
     ;;   (setq node (ewoc--node-nth dll -2)))
+    (unless node
+      (error "No next"))
     (ewoc-goto-node ewoc node)))
 
 (defun ewoc-goto-node (ewoc node)
@@ -546,7 +546,7 @@ remaining arguments will be passed to PREDICATE."
       (if (apply predicate (ewoc--node-data node) args)
          (push (ewoc--node-data node) result))
       (setq node (ewoc--node-prev dll node)))
-    (nreverse result)))
+    result))
 
 (defun ewoc-buffer (ewoc)
   "Return the buffer that is associated with EWOC.
@@ -579,5 +579,4 @@ Return nil if the buffer has been deleted."
 ;; eval: (put 'ewoc--set-buffer-bind-dll-let* 'lisp-indent-hook 2)
 ;; End:
 
-;; arch-tag: d78915b9-9a07-44bf-aac6-04a1fc1bd6d4
 ;;; ewoc.el ends here