debian-doc.el
changeset 1056 0ec83e102baa
child 1057 899bedcbfa57
equal deleted inserted replaced
1055:7a53ceb49885 1056:0ec83e102baa
       
     1 
       
     2 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
       
     3 ;; Debian doc-base.
       
     4 
       
     5 (defvar debian-doc-dir "/usr/share/doc-base")
       
     6 (defvar debian-doc-buffer-name "*debian-doc*")
       
     7 (defvar debian-doc-buffer nil)
       
     8 
       
     9 (defvar debian-doc-mode-map (make-sparse-keymap))
       
    10 
       
    11 (defconst debian-doc-font-lock-keywords
       
    12   '(("^[^ ][^:\n]*: " . font-lock-function-name-face)
       
    13     ("^\\(Index\\|Files\\): \\(/.*\\)" 2 font-lock-doc-face)
       
    14     ("^Format: \\(.*\\)" 1 font-lock-type-face)
       
    15     ("^Document: \\(.*\\)" 1 font-lock-keyword-face)))
       
    16 
       
    17 (defun debian-doc-mode ()
       
    18   (kill-all-local-variables)
       
    19   (setq major-mode 'debian-doc-mode
       
    20         mode-name "Debian-Doc")
       
    21   (use-local-map debian-doc-mode-map)
       
    22   (setq font-lock-defaults '((debian-doc-font-lock-keywords) t nil nil nil)))
       
    23 
       
    24 (defvar debian-doc-completion-list nil)
       
    25 
       
    26 (defun debian-doc (&optional prefix)
       
    27   (interactive "P")
       
    28   (when prefix
       
    29     (kill-buffer debian-doc-buffer))
       
    30   (if (buffer-live-p debian-doc-buffer)
       
    31       (switch-to-buffer debian-doc-buffer)
       
    32     (setq debian-doc-completion-list nil)
       
    33     (setq debian-doc-buffer (get-buffer-create debian-doc-buffer-name))
       
    34     (switch-to-buffer debian-doc-buffer)
       
    35     (let ( (coding-system-for-read 'utf-8) )
       
    36       (mapc (lambda (file)
       
    37               (when (file-regular-p file)
       
    38                 ;; (with-temp-buffer
       
    39                 ;;   (insert-file-contents file))
       
    40                 (insert "\n-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-\n\n")
       
    41                 (insert-file-contents file)
       
    42                 (end-of-buffer)))
       
    43             (directory-files debian-doc-dir t)))
       
    44     (read-only-mode 1)
       
    45     (debian-doc-mode)
       
    46     (beginning-of-buffer)))
       
    47 
       
    48 (defun debian-doc-visit ()
       
    49   (interactive)
       
    50   (let (word start)
       
    51     (debian-doc)
       
    52     (unless debian-doc-completion-list
       
    53       (save-excursion
       
    54         (beginning-of-buffer)
       
    55         (while (setq start (search-forward "Document: " nil t))
       
    56           (end-of-line)
       
    57           (push (buffer-substring-no-properties start (point)) debian-doc-completion-list))))
       
    58     (when (setq word (completing-read "Package: " debian-doc-completion-list nil t))
       
    59       (beginning-of-buffer)
       
    60       (search-forward (concat "Document: " word) nil t)
       
    61       (recenter-top-bottom))))
       
    62 (define-key debian-doc-mode-map (kbd "RET") 'debian-doc-visit-at-point)
       
    63