Mercurial > emacs
comparison lisp/emacs-lisp/ewoc.el @ 56140:f1046f262259
(ewoc-create, ewoc-map, ewoc-locate, ewoc-invalidate, ewoc-collect):
Doc fixes.
(ewoc--create-node, ewoc--delete-node-internal):
Fix typos in docstring.
author | Juanma Barranquero <lekktu@gmail.com> |
---|---|
date | Wed, 16 Jun 2004 23:49:18 +0000 |
parents | 695cf19ef79e |
children | d4230208a300 4c90ffeb71c5 |
comparison
equal
deleted
inserted
replaced
56139:63b214383e98 | 56140:f1046f262259 |
---|---|
1 ;;; ewoc.el --- utility to maintain a view of a list of objects in a buffer | 1 ;;; ewoc.el --- utility to maintain a view of a list of objects in a buffer |
2 | 2 |
3 ;; Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000 Free Software Foundation | 3 ;; Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 04 |
4 ;; Free Software Foundation | |
4 | 5 |
5 ;; Author: Per Cederqvist <ceder@lysator.liu.se> | 6 ;; Author: Per Cederqvist <ceder@lysator.liu.se> |
6 ;; Inge Wallin <inge@lysator.liu.se> | 7 ;; Inge Wallin <inge@lysator.liu.se> |
7 ;; Maintainer: monnier@gnu.org | 8 ;; Maintainer: monnier@gnu.org |
8 ;; Created: 3 Aug 1992 | 9 ;; Created: 3 Aug 1992 |
242 node)) | 243 node)) |
243 | 244 |
244 | 245 |
245 (defun ewoc--create-node (data pretty-printer pos) | 246 (defun ewoc--create-node (data pretty-printer pos) |
246 "Call PRETTY-PRINTER with point set at POS in current buffer. | 247 "Call PRETTY-PRINTER with point set at POS in current buffer. |
247 Remember the start position. Create a wrapper containing that | 248 Remember the start position. Create a wrapper containing that |
248 start position and the element DATA." | 249 start position and the element DATA." |
249 (save-excursion | 250 (save-excursion |
250 ;; Remember the position as a number so that it doesn't move | 251 ;; Remember the position as a number so that it doesn't move |
251 ;; when we insert the string. | 252 ;; when we insert the string. |
252 (when (markerp pos) (setq pos (marker-position pos))) | 253 (when (markerp pos) (setq pos (marker-position pos))) |
261 (ewoc--node-create (copy-marker pos) data)))) | 262 (ewoc--node-create (copy-marker pos) data)))) |
262 | 263 |
263 | 264 |
264 (defun ewoc--delete-node-internal (ewoc node) | 265 (defun ewoc--delete-node-internal (ewoc node) |
265 "Delete a data string from EWOC. | 266 "Delete a data string from EWOC. |
266 Can not be used on the footer. Returns the wrapper that is deleted. | 267 Can not be used on the footer. Returns the wrapper that is deleted. |
267 The start-marker in the wrapper is set to nil, so that it doesn't | 268 The start-marker in the wrapper is set to nil, so that it doesn't |
268 consume any more resources." | 269 consume any more resources." |
269 (let ((dll (ewoc--dll ewoc)) | 270 (let ((dll (ewoc--dll ewoc)) |
270 (inhibit-read-only t)) | 271 (inhibit-read-only t)) |
271 ;; If we are about to delete the node pointed at by last-node, | 272 ;; If we are about to delete the node pointed at by last-node, |
301 | 302 |
302 The ewoc will be inserted in the current buffer at the current position. | 303 The ewoc will be inserted in the current buffer at the current position. |
303 | 304 |
304 PRETTY-PRINTER should be a function that takes one argument, an | 305 PRETTY-PRINTER should be a function that takes one argument, an |
305 element, and inserts a string representing it in the buffer (at | 306 element, and inserts a string representing it in the buffer (at |
306 point). The string PRETTY-PRINTER inserts may be empty or span | 307 point). The string PRETTY-PRINTER inserts may be empty or span |
307 several linse. A trailing newline will always be inserted | 308 several lines. A trailing newline will always be inserted |
308 automatically. The PRETTY-PRINTER should use insert, and not | 309 automatically. The PRETTY-PRINTER should use `insert', and not |
309 insert-before-markers. | 310 `insert-before-markers'. |
310 | 311 |
311 Optional third argument HEADER is a string that will always be | 312 Optional second argument HEADER is a string that will always be |
312 present at the top of the ewoc. HEADER should end with a | 313 present at the top of the ewoc. HEADER should end with a |
313 newline. Optionaly fourth argument FOOTER is similar, and will | 314 newline. Optional third argument FOOTER is similar, and will |
314 be inserted at the bottom of the ewoc." | 315 be inserted at the bottom of the ewoc." |
315 (let ((new-ewoc | 316 (let ((new-ewoc |
316 (ewoc--create (current-buffer) | 317 (ewoc--create (current-buffer) |
317 pretty-printer nil nil (ewoc--dll-create))) | 318 pretty-printer nil nil (ewoc--dll-create))) |
318 (pos (point))) | 319 (pos (point))) |
392 "Apply MAP-FUNCTION to all elements in EWOC. | 393 "Apply MAP-FUNCTION to all elements in EWOC. |
393 MAP-FUNCTION is applied to the first element first. | 394 MAP-FUNCTION is applied to the first element first. |
394 If MAP-FUNCTION returns non-nil the element will be refreshed (its | 395 If MAP-FUNCTION returns non-nil the element will be refreshed (its |
395 pretty-printer will be called once again). | 396 pretty-printer will be called once again). |
396 | 397 |
397 Note that the buffer for EWOC will be current buffer when MAP-FUNCTION | 398 Note that the buffer for EWOC will be the current buffer when |
398 is called. MAP-FUNCTION must restore the current buffer to BUFFER before | 399 MAP-FUNCTION is called. MAP-FUNCTION must restore the current |
399 it returns, if it changes it. | 400 buffer before it returns, if it changes it. |
400 | 401 |
401 If more than two arguments are given, the remaining | 402 If more than two arguments are given, the remaining |
402 arguments will be passed to MAP-FUNCTION." | 403 arguments will be passed to MAP-FUNCTION." |
403 (ewoc--set-buffer-bind-dll-let* ewoc | 404 (ewoc--set-buffer-bind-dll-let* ewoc |
404 ((footer (ewoc--footer ewoc)) | 405 ((footer (ewoc--footer ewoc)) |
409 (setq node (ewoc--node-next dll node))))) | 410 (setq node (ewoc--node-next dll node))))) |
410 | 411 |
411 (defun ewoc-filter (ewoc predicate &rest args) | 412 (defun ewoc-filter (ewoc predicate &rest args) |
412 "Remove all elements in EWOC for which PREDICATE returns nil. | 413 "Remove all elements in EWOC for which PREDICATE returns nil. |
413 Note that the buffer for EWOC will be current-buffer when PREDICATE | 414 Note that the buffer for EWOC will be current-buffer when PREDICATE |
414 is called. PREDICATE must restore the current buffer before it returns | 415 is called. PREDICATE must restore the current buffer before it returns |
415 if it changes it. | 416 if it changes it. |
416 The PREDICATE is called with the element as its first argument. If any | 417 The PREDICATE is called with the element as its first argument. If any |
417 ARGS are given they will be passed to the PREDICATE." | 418 ARGS are given they will be passed to the PREDICATE." |
418 (ewoc--set-buffer-bind-dll-let* ewoc | 419 (ewoc--set-buffer-bind-dll-let* ewoc |
419 ((node (ewoc--node-nth dll 1)) | 420 ((node (ewoc--node-nth dll 1)) |
420 (footer (ewoc--footer ewoc)) | 421 (footer (ewoc--footer ewoc)) |
421 (next nil)) | 422 (next nil)) |
426 (setq node next)))) | 427 (setq node next)))) |
427 | 428 |
428 (defun ewoc-locate (ewoc &optional pos guess) | 429 (defun ewoc-locate (ewoc &optional pos guess) |
429 "Return the node that POS (a buffer position) is within. | 430 "Return the node that POS (a buffer position) is within. |
430 POS may be a marker or an integer. It defaults to point. | 431 POS may be a marker or an integer. It defaults to point. |
431 GUESS should be a node that it is likely that POS is near. | 432 GUESS should be a node that it is likely to be near POS. |
432 | 433 |
433 If POS points before the first element, the first node is returned. | 434 If POS points before the first element, the first node is returned. |
434 If POS points after the last element, the last node is returned. | 435 If POS points after the last element, the last node is returned. |
435 If the EWOC is empty, nil is returned." | 436 If the EWOC is empty, nil is returned." |
436 (unless pos (setq pos (point))) | 437 (unless pos (setq pos (point))) |
495 (setq best-guess (ewoc--node-prev dll best-guess))) | 496 (setq best-guess (ewoc--node-prev dll best-guess))) |
496 best-guess))))))) | 497 best-guess))))))) |
497 | 498 |
498 (defun ewoc-invalidate (ewoc &rest nodes) | 499 (defun ewoc-invalidate (ewoc &rest nodes) |
499 "Refresh some elements. | 500 "Refresh some elements. |
500 The pretty-printer that for EWOC will be called for all NODES." | 501 The pretty-printer set for EWOC will be called for all NODES." |
501 (ewoc--set-buffer-bind-dll ewoc | 502 (ewoc--set-buffer-bind-dll ewoc |
502 (dolist (node nodes) | 503 (dolist (node nodes) |
503 (ewoc--refresh-node (ewoc--pretty-printer ewoc) node)))) | 504 (ewoc--refresh-node (ewoc--pretty-printer ewoc) node)))) |
504 | 505 |
505 (defun ewoc-goto-prev (ewoc arg) | 506 (defun ewoc-goto-prev (ewoc arg) |
562 (set-marker (ewoc--node-start-marker footer) (point)))) | 563 (set-marker (ewoc--node-start-marker footer) (point)))) |
563 | 564 |
564 (defun ewoc-collect (ewoc predicate &rest args) | 565 (defun ewoc-collect (ewoc predicate &rest args) |
565 "Select elements from EWOC using PREDICATE. | 566 "Select elements from EWOC using PREDICATE. |
566 Return a list of all selected data elements. | 567 Return a list of all selected data elements. |
567 PREDICATE is a function that takes a data element as its first argument. | 568 PREDICATE is a function that takes a data element as its first |
568 The elements on the returned list will appear in the same order as in | 569 argument. The elements on the returned list will appear in the |
569 the buffer. You should not rely on in which order PREDICATE is | 570 same order as in the buffer. You should not rely on the order of |
570 called. | 571 calls to PREDICATE. |
571 Note that the buffer the EWOC is displayed in is current-buffer | 572 Note that the buffer the EWOC is displayed in is the current |
572 when PREDICATE is called. If PREDICATE must restore current-buffer if | 573 buffer when PREDICATE is called. PREDICATE must restore it if it |
573 it changes it. | 574 changes it. |
574 If more than two arguments are given the | 575 If more than two arguments are given the |
575 remaining arguments will be passed to PREDICATE." | 576 remaining arguments will be passed to PREDICATE." |
576 (ewoc--set-buffer-bind-dll-let* ewoc | 577 (ewoc--set-buffer-bind-dll-let* ewoc |
577 ((header (ewoc--header ewoc)) | 578 ((header (ewoc--header ewoc)) |
578 (node (ewoc--node-nth dll -2)) | 579 (node (ewoc--node-nth dll -2)) |