# HG changeset patch # User Oleksandr Gavenko # Date 1374138236 -10800 # Node ID 0ec83e102baaf0a21b98f20c82af72752c7bb9f7 # Parent 7a53ceb49885497e638807baf8881ad79e793009 Base implementation of Debian doc-base and Emacs integration. diff -r 7a53ceb49885 -r 0ec83e102baa debian-doc.el --- /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) +