Mercurial > emacs
comparison lisp/emacs-lisp/ewoc.el @ 89943:4c90ffeb71c5
Revision: miles@gnu.org--gnu-2004/emacs--unicode--0--patch-15
Merge from emacs--cvs-trunk--0
Patches applied:
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-218
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-220
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-221
Restore deleted tagline in etc/TUTORIAL.ru
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-222
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-228
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-229
Remove TeX output files from the archive
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-230
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-247
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-248
src/lisp.h (CYCLE_CHECK): Macro moved from xfaces.c
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-249
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-256
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-258
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-263
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-264
Update from CVS: lispref/display.texi: emacs -> Emacs.
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-265
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-274
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-275
Update from CVS: man/makefile.w32-in: Revert last change
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-276
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-295
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-296
Allow restarting an existing debugger session that's exited
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-297
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-299
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-300
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-327
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-328
Update from CVS: src/.gdbinit (xsymbol): Fix last change.
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-329
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-344
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-345
Tweak source regexps so that building in place won't cause problems
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-346
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-351
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-352
Update from CVS: lisp/flymake.el: New file.
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-353
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-361
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-362
Support " [...]" style defaults in minibuffer-electric-default-mode
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-363
(read-number): Use canonical format for default in prompt.
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-364
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-367
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-368
Improve display-supports-face-attributes-p on non-ttys
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-369
Rewrite face-differs-from-default-p
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-370
Move `display-supports-face-attributes-p' entirely into C code
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-371
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-372
Simplify face-differs-from-default-p; don't consider :stipple.
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-373
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-374
(tty_supports_face_attributes_p): Ensure attributes differ from default
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-375
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-376
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-377
(Fdisplay_supports_face_attributes_p): Work around bootstrapping problem
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-378
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-380
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-381
Face merging cleanups
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-382
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-384
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-385
src/xfaces.c (push_named_merge_point): Return 0 if a cycle is detected
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-386
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-395
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-396
Tweak arch tagging to make build/install-in-place less annoying
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-397
Work around vc-arch problems when building eshell
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-398
Tweak permissions
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-399
Tweak directory permissions
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-400
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-401
More build-in-place tweaking of arch tagging
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-402
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-403
Yet more build-in-place tweaking of arch tagging
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-404
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-409
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-410
Make sure image types are initialized for lookup too
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-411
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-416
Update from CVS
author | Miles Bader <miles@gnu.org> |
---|---|
date | Mon, 28 Jun 2004 07:56:49 +0000 |
parents | 68c22ea6027c f1046f262259 |
children | a1b34dec1104 |
comparison
equal
deleted
inserted
replaced
89942:9cb747ae49af | 89943:4c90ffeb71c5 |
---|---|
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)) |