Base implementation of Debian doc-base and Emacs integration.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/debian-doc.el Thu Jul 18 12:03:56 2013 +0300
@@ -0,0 +1,63 @@
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Debian doc-base.
+
+(defvar debian-doc-dir "/usr/share/doc-base")
+(defvar debian-doc-buffer-name "*debian-doc*")
+(defvar debian-doc-buffer nil)
+
+(defvar debian-doc-mode-map (make-sparse-keymap))
+
+(defconst debian-doc-font-lock-keywords
+ '(("^[^ ][^:\n]*: " . font-lock-function-name-face)
+ ("^\\(Index\\|Files\\): \\(/.*\\)" 2 font-lock-doc-face)
+ ("^Format: \\(.*\\)" 1 font-lock-type-face)
+ ("^Document: \\(.*\\)" 1 font-lock-keyword-face)))
+
+(defun debian-doc-mode ()
+ (kill-all-local-variables)
+ (setq major-mode 'debian-doc-mode
+ mode-name "Debian-Doc")
+ (use-local-map debian-doc-mode-map)
+ (setq font-lock-defaults '((debian-doc-font-lock-keywords) t nil nil nil)))
+
+(defvar debian-doc-completion-list nil)
+
+(defun debian-doc (&optional prefix)
+ (interactive "P")
+ (when prefix
+ (kill-buffer debian-doc-buffer))
+ (if (buffer-live-p debian-doc-buffer)
+ (switch-to-buffer debian-doc-buffer)
+ (setq debian-doc-completion-list nil)
+ (setq debian-doc-buffer (get-buffer-create debian-doc-buffer-name))
+ (switch-to-buffer debian-doc-buffer)
+ (let ( (coding-system-for-read 'utf-8) )
+ (mapc (lambda (file)
+ (when (file-regular-p file)
+ ;; (with-temp-buffer
+ ;; (insert-file-contents file))
+ (insert "\n-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-\n\n")
+ (insert-file-contents file)
+ (end-of-buffer)))
+ (directory-files debian-doc-dir t)))
+ (read-only-mode 1)
+ (debian-doc-mode)
+ (beginning-of-buffer)))
+
+(defun debian-doc-visit ()
+ (interactive)
+ (let (word start)
+ (debian-doc)
+ (unless debian-doc-completion-list
+ (save-excursion
+ (beginning-of-buffer)
+ (while (setq start (search-forward "Document: " nil t))
+ (end-of-line)
+ (push (buffer-substring-no-properties start (point)) debian-doc-completion-list))))
+ (when (setq word (completing-read "Package: " debian-doc-completion-list nil t))
+ (beginning-of-buffer)
+ (search-forward (concat "Document: " word) nil t)
+ (recenter-top-bottom))))
+(define-key debian-doc-mode-map (kbd "RET") 'debian-doc-visit-at-point)
+