merged
authorOleksandr Gavenko <gavenkoa@gmail.com>
Fri, 19 Jul 2013 00:55:38 +0300
changeset 1059 40caf421b64d
parent 1057 899bedcbfa57 (diff)
parent 1058 fac5c0d3af6a (current diff)
child 1060 53526ea61f74
merged
--- /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