hide-lines.el
author Luke Hoersten <Luke@Hoersten.org>
Tue, 28 Sep 2010 23:27:10 -0500
changeset 22 a7906973ceb5
permissions -rw-r--r--
Added some old files.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
     1
;;; hide-lines.el --- Commands for hiding lines based on a regexp
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
     2
;; 
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
     3
;;; Author: Mark Hulme-Jones <ture at plig cucumber dot net>
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
     4
;; 
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
     5
;;; History
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
     6
;; 
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
     7
;; 24/03/2004 - Incorporate fix for infinite loop bug from David
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
     8
;; Hansen
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
     9
;; 
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    10
;;; Commentary
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    11
;; 
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    12
;; The simplest way to make hide-lines work is to add the following
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    13
;; lines to your .emacs file:
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    14
;; 
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    15
;; (autoload 'hide-lines "hide-lines" "Hide lines based on a regexp" t)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    16
;; (global-set-key "\C-ch" 'hide-lines)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    17
;; 
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    18
;; Now, when you type C-c h, you will be prompted for a regexp
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    19
;; (regular expression).  All lines matching this regexp will be
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    20
;; hidden in the buffer.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    21
;; 
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    22
;; Alternatively, you can type C-u C-c h (ie. provide a prefix
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    23
;; argument to the hide-lines command) to hide all lines that *do not*
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    24
;; match the specified regexp.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    25
;; 
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    26
;; If you want to make all of the hidden areas re-appear again, type:
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    27
;; M-x show-all-invisible
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    28
;; Or you can bind show-all-invisible to a key and use that to show
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    29
;; all the hidden areas again.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    30
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    31
(defvar invisible-areas-list ()
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    32
 "List of invisible overlays used by hidelines")
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    33
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    34
(add-to-invisibility-spec 'hl)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    35
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    36
(defun hide-lines (&optional arg)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    37
  "Hide lines matching the specified regexp.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    38
With prefix arg: Hide lines that do not match the specified regexp"
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    39
  (interactive "p")
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    40
  (if (> arg 1)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    41
      (call-interactively 'hide-non-matching-lines)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    42
      (call-interactively 'hide-matching-lines)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    43
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    44
(defun add-invisible-overlay (start end)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    45
  "Add an overlay from `start' to `end' in the current buffer.  Push the
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    46
overlay onto the invisible-areas-list list"
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    47
  (let ((overlay (make-overlay start end)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    48
    (setq invisible-areas-list (cons overlay invisible-areas-list))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    49
    (overlay-put overlay 'invisible 'hl)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    50
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    51
(defun hide-non-matching-lines (search-text)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    52
  "Hide lines that don't match the specified regexp."
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    53
  (interactive "MHide lines not matched by regexp: ")
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    54
  (make-variable-buffer-local 'line-move-ignore-invisible)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    55
  (setq line-move-ignore-invisible t)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    56
  (save-excursion 
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    57
    (goto-char (point-min))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    58
    (let ((start-position (point-min))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    59
          (pos (re-search-forward search-text nil t)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    60
      (while pos
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    61
        (beginning-of-line)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    62
        (add-invisible-overlay start-position (point))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    63
        (forward-line 1)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    64
        (setq start-position (point))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    65
        (if (eq (point) (point-max))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    66
            (setq pos nil)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    67
          (setq pos (re-search-forward search-text nil t))))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    68
      (add-invisible-overlay start-position (point-max)))))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    69
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    70
(defun hide-matching-lines  (search-text)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    71
  "Hide lines matching the specified regexp."
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    72
  (interactive "MHide lines matching regexp: ")
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    73
  (make-variable-buffer-local 'line-move-ignore-invisible)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    74
  (setq line-move-ignore-invisible t)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    75
  (save-excursion
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    76
    (goto-char (point-min))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    77
    (let ((pos (re-search-forward search-text nil t))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    78
          start-position)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    79
      (while pos
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    80
        (beginning-of-line)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    81
        (setq start-position (point))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    82
        (end-of-line)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    83
        (add-invisible-overlay start-position (+ 1 (point)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    84
        (forward-line 1)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    85
        (if (eq (point) (point-max))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    86
            (setq pos nil)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    87
          (setq pos (re-search-forward search-text nil t)))))))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    88
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    89
(defun show-all-invisible ()
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    90
  "Show all areas hidden by the filter-buffer command"
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    91
  (interactive)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    92
  (mapcar (lambda (overlay) (delete-overlay overlay)) 
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    93
          invisible-areas-list)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    94
  (setq invisible-areas-list ()))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    95
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    96
(provide 'hide-lines)