Mercurial > emacs
comparison lisp/textmodes/outline.el @ 23366:431ec936e2da
(hide-region-body): Bind
outline-view-change-hook to nil while making repeated calls to
outline-flag-region. Run it once at the end.
(hide-other, hide-sublevels, show-children): Likewise.
author | Dave Love <fx@gnu.org> |
---|---|
date | Fri, 02 Oct 1998 14:38:12 +0000 |
parents | f2462c6cb265 |
children | 252453d80f53 |
comparison
equal
deleted
inserted
replaced
23365:d400637428d1 | 23366:431ec936e2da |
---|---|
494 (interactive) | 494 (interactive) |
495 (hide-region-body (point-min) (point-max))) | 495 (hide-region-body (point-min) (point-max))) |
496 | 496 |
497 (defun hide-region-body (start end) | 497 (defun hide-region-body (start end) |
498 "Hide all body lines in the region, but not headings." | 498 "Hide all body lines in the region, but not headings." |
499 (save-excursion | 499 ;; Nullify the hook to avoid repeated calls to `outline-flag-region' |
500 (save-restriction | 500 ;; wasting lots of time running `lazy-lock-fontify-after-outline' |
501 (narrow-to-region start end) | 501 ;; and run the hook finally. |
502 (goto-char (point-min)) | 502 (let (outline-view-change-hook) |
503 (if (outline-on-heading-p) | 503 (save-excursion |
504 (outline-end-of-heading)) | 504 (save-restriction |
505 (while (not (eobp)) | 505 (narrow-to-region start end) |
506 (outline-flag-region (point) | 506 (goto-char (point-min)) |
507 (progn (outline-next-preface) (point)) t) | 507 (if (outline-on-heading-p) |
508 (if (not (eobp)) | 508 (outline-end-of-heading)) |
509 (progn | 509 (while (not (eobp)) |
510 (forward-char | 510 (outline-flag-region (point) |
511 (if (looking-at "\n\n") | 511 (progn (outline-next-preface) (point)) t) |
512 2 1)) | 512 (if (not (eobp)) |
513 (outline-end-of-heading))))))) | 513 (progn |
514 (forward-char | |
515 (if (looking-at "\n\n") | |
516 2 1)) | |
517 (outline-end-of-heading))))))) | |
518 (run-hooks 'outline-view-change-hook)) | |
514 | 519 |
515 (defun show-all () | 520 (defun show-all () |
516 "Show all of the text in the buffer." | 521 "Show all of the text in the buffer." |
517 (interactive) | 522 (interactive) |
518 (outline-flag-region (point-min) (point-max) nil)) | 523 (outline-flag-region (point-min) (point-max) nil)) |
538 "Hide everything but the top LEVELS levels of headers, in whole buffer." | 543 "Hide everything but the top LEVELS levels of headers, in whole buffer." |
539 (interactive "p") | 544 (interactive "p") |
540 (if (< levels 1) | 545 (if (< levels 1) |
541 (error "Must keep at least one level of headers")) | 546 (error "Must keep at least one level of headers")) |
542 (setq levels (1- levels)) | 547 (setq levels (1- levels)) |
543 (save-excursion | 548 (let (outline-view-change-hook) |
544 (goto-char (point-min)) | 549 (save-excursion |
545 ;; Keep advancing to the next top-level heading. | 550 (goto-char (point-min)) |
546 (while (or (and (bobp) (outline-on-heading-p)) | 551 ;; Keep advancing to the next top-level heading. |
547 (outline-next-heading)) | 552 (while (or (and (bobp) (outline-on-heading-p)) |
548 (let ((end (save-excursion (outline-end-of-subtree) (point)))) | 553 (outline-next-heading)) |
549 ;; Hide everything under that. | 554 (let ((end (save-excursion (outline-end-of-subtree) (point)))) |
550 (outline-flag-region (point) end t) | 555 ;; Hide everything under that. |
551 ;; Show the first LEVELS levels under that. | 556 (outline-flag-region (point) end t) |
552 (if (> levels 0) | 557 ;; Show the first LEVELS levels under that. |
553 (show-children levels)) | 558 (if (> levels 0) |
554 ;; Move to the next, since we already found it. | 559 (show-children levels)) |
555 (goto-char end))))) | 560 ;; Move to the next, since we already found it. |
561 (goto-char end))))) | |
562 (run-hooks 'outline-view-change-hook)) | |
556 | 563 |
557 (defun hide-other () | 564 (defun hide-other () |
558 "Hide everything except current body and parent and top-level headings." | 565 "Hide everything except current body and parent and top-level headings." |
559 (interactive) | 566 (interactive) |
560 (hide-sublevels 1) | 567 (hide-sublevels 1) |
561 (save-excursion | 568 (let (outline-view-change-hook) |
562 (outline-back-to-heading t) | 569 (save-excursion |
563 (show-entry) | 570 (outline-back-to-heading t) |
564 (while (condition-case nil (progn (outline-up-heading 1) t) (error nil)) | 571 (show-entry) |
565 (outline-flag-region (1- (point)) | 572 (while (condition-case nil (progn (outline-up-heading 1) t) |
566 (save-excursion (forward-line 1) (point)) | 573 (error nil)) |
567 nil)))) | 574 (outline-flag-region (1- (point)) |
575 (save-excursion (forward-line 1) (point)) | |
576 nil)))) | |
577 (run-hooks 'outline-view-change-hook)) | |
568 | 578 |
569 (defun outline-flag-subtree (flag) | 579 (defun outline-flag-subtree (flag) |
570 (save-excursion | 580 (save-excursion |
571 (outline-back-to-heading) | 581 (outline-back-to-heading) |
572 (outline-end-of-heading) | 582 (outline-end-of-heading) |
608 (let ((start-level (funcall outline-level))) | 618 (let ((start-level (funcall outline-level))) |
609 (outline-next-heading) | 619 (outline-next-heading) |
610 (if (eobp) | 620 (if (eobp) |
611 1 | 621 1 |
612 (max 1 (- (funcall outline-level) start-level))))))) | 622 (max 1 (- (funcall outline-level) start-level))))))) |
613 (save-excursion | 623 (let (outline-view-change-hook) |
614 (save-restriction | 624 (save-excursion |
615 (outline-back-to-heading) | 625 (save-restriction |
616 (setq level (+ level (funcall outline-level))) | 626 (outline-back-to-heading) |
617 (narrow-to-region (point) | 627 (setq level (+ level (funcall outline-level))) |
618 (progn (outline-end-of-subtree) | 628 (narrow-to-region (point) |
619 (if (eobp) (point-max) (1+ (point))))) | 629 (progn (outline-end-of-subtree) |
620 (goto-char (point-min)) | 630 (if (eobp) (point-max) (1+ (point))))) |
621 (while (and (not (eobp)) | 631 (goto-char (point-min)) |
622 (progn | 632 (while (and (not (eobp)) |
623 (outline-next-heading) | 633 (progn |
624 (not (eobp)))) | 634 (outline-next-heading) |
625 (if (<= (funcall outline-level) level) | 635 (not (eobp)))) |
626 (save-excursion | 636 (if (<= (funcall outline-level) level) |
627 (outline-flag-region (save-excursion | 637 (save-excursion |
628 (forward-char -1) | 638 (outline-flag-region (save-excursion |
629 (if (bolp) | 639 (forward-char -1) |
630 (forward-char -1)) | 640 (if (bolp) |
631 (point)) | 641 (forward-char -1)) |
632 (progn (outline-end-of-heading) (point)) | 642 (point)) |
633 nil))))))) | 643 (progn (outline-end-of-heading) (point)) |
644 nil))))))) | |
645 (run-hooks 'outline-view-change-hook)) | |
634 | 646 |
635 (defun outline-up-heading (arg) | 647 (defun outline-up-heading (arg) |
636 "Move to the heading line of which the present line is a subheading. | 648 "Move to the heading line of which the present line is a subheading. |
637 With argument, move up ARG levels." | 649 With argument, move up ARG levels." |
638 (interactive "p") | 650 (interactive "p") |