# HG changeset patch # User Oleksandr Gavenko # Date 1374184538 -10800 # Node ID 40caf421b64d56241716de0579afb4d1667fafdd # Parent 899bedcbfa572213a5633b804c5d7baedf6b175b# Parent fac5c0d3af6af0520756e0ce4cd82c738b762748 merged diff -r fac5c0d3af6a -r 40caf421b64d debian-doc.el --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/debian-doc.el Fri Jul 19 00:55:38 2013 +0300 @@ -0,0 +1,75 @@ +;;; debian-doc.el --- Debian doc-base integration with Emacs. + +;;; Commentary: +;; + +;;; Code: + +(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 () + "Debian-Doc mode for viewing doc-base information." + (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) + "Build Debian-Doc buffer. + +With PREFIX force to rebuild buffer from doc-base files." + (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 () + "Prompt for Debian package which represent docs and visit its entry in Debian-oc buffer." + (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) + + +(provide 'debian-doc) + +;;; debian-doc.el ends here