mylisp/debian-doc.el
author Oleksandr Gavenko <gavenkoa@gmail.com>
Wed, 16 Jun 2021 12:50:08 +0300
changeset 1734 ae2c6a001464
parent 1666 06937ff1ec5f
permissions -rw-r--r--
Add some standard places to PATH if they are not set by login script. Rearrange the order of paths so system's are first, user's are last. For Cygwin this helps with Cygwin's paths to be situated before "C:/Windows" (Emacs is not started from a login shell on Windows!).
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1057
899bedcbfa57 Add docs to fix "M-x checkdoc" errors.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1056
diff changeset
     1
;;; debian-doc.el --- Debian doc-base integration with Emacs.
1056
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     2
1057
899bedcbfa57 Add docs to fix "M-x checkdoc" errors.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1056
diff changeset
     3
;;; Commentary:
899bedcbfa57 Add docs to fix "M-x checkdoc" errors.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1056
diff changeset
     4
;;
899bedcbfa57 Add docs to fix "M-x checkdoc" errors.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1056
diff changeset
     5
899bedcbfa57 Add docs to fix "M-x checkdoc" errors.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1056
diff changeset
     6
;;; Code:
1056
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     7
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     8
(defvar debian-doc-dir "/usr/share/doc-base")
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     9
(defvar debian-doc-buffer-name "*debian-doc*")
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    10
(defvar debian-doc-buffer nil)
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    11
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    12
(defvar debian-doc-mode-map (make-sparse-keymap))
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    13
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    14
(defconst debian-doc-font-lock-keywords
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    15
  '(("^[^ ][^:\n]*: " . font-lock-function-name-face)
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    16
    ("^\\(Index\\|Files\\): \\(/.*\\)" 2 font-lock-doc-face)
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    17
    ("^Format: \\(.*\\)" 1 font-lock-type-face)
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    18
    ("^Document: \\(.*\\)" 1 font-lock-keyword-face)))
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    19
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    20
(defun debian-doc-mode ()
1057
899bedcbfa57 Add docs to fix "M-x checkdoc" errors.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1056
diff changeset
    21
  "Debian-Doc mode for viewing doc-base information."
1056
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    22
  (kill-all-local-variables)
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    23
  (setq major-mode 'debian-doc-mode
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    24
        mode-name "Debian-Doc")
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    25
  (use-local-map debian-doc-mode-map)
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    26
  (setq font-lock-defaults '((debian-doc-font-lock-keywords) t nil nil nil)))
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    27
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    28
(defvar debian-doc-completion-list nil)
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    29
1060
53526ea61f74 Add autoloads to debian-doc.el.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1057
diff changeset
    30
;;;###autoload
1056
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    31
(defun debian-doc (&optional prefix)
1057
899bedcbfa57 Add docs to fix "M-x checkdoc" errors.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1056
diff changeset
    32
  "Build Debian-Doc buffer.
899bedcbfa57 Add docs to fix "M-x checkdoc" errors.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1056
diff changeset
    33
899bedcbfa57 Add docs to fix "M-x checkdoc" errors.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1056
diff changeset
    34
With PREFIX force to rebuild buffer from doc-base files."
1056
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    35
  (interactive "P")
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    36
  (when prefix
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    37
    (kill-buffer debian-doc-buffer))
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    38
  (if (buffer-live-p debian-doc-buffer)
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    39
      (switch-to-buffer debian-doc-buffer)
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    40
    (setq debian-doc-completion-list nil)
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    41
    (setq debian-doc-buffer (get-buffer-create debian-doc-buffer-name))
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    42
    (switch-to-buffer debian-doc-buffer)
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    43
    (let ( (coding-system-for-read 'utf-8) )
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    44
      (mapc (lambda (file)
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    45
              (when (file-regular-p file)
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    46
                ;; (with-temp-buffer
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    47
                ;;   (insert-file-contents file))
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    48
                (insert "\n-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-\n\n")
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    49
                (insert-file-contents file)
1242
3ac891ab0ad6 Fix: Warning: `end-of-buffer' is for interactive use only; use `(goto-char (point-max))' instead.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1060
diff changeset
    50
                (goto-char (point-max))))
1056
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    51
            (directory-files debian-doc-dir t)))
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    52
    (read-only-mode 1)
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    53
    (debian-doc-mode)
1242
3ac891ab0ad6 Fix: Warning: `end-of-buffer' is for interactive use only; use `(goto-char (point-max))' instead.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1060
diff changeset
    54
    (goto-char (point-min))))
1056
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    55
1060
53526ea61f74 Add autoloads to debian-doc.el.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1057
diff changeset
    56
;;;###autoload
1056
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    57
(defun debian-doc-visit ()
1057
899bedcbfa57 Add docs to fix "M-x checkdoc" errors.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1056
diff changeset
    58
  "Prompt for Debian package which represent docs and visit its entry in Debian-oc buffer."
1056
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    59
  (interactive)
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    60
  (let (word start)
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    61
    (debian-doc)
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    62
    (unless debian-doc-completion-list
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    63
      (save-excursion
1242
3ac891ab0ad6 Fix: Warning: `end-of-buffer' is for interactive use only; use `(goto-char (point-max))' instead.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1060
diff changeset
    64
        (goto-char (point-min))
1056
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    65
        (while (setq start (search-forward "Document: " nil t))
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    66
          (end-of-line)
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    67
          (push (buffer-substring-no-properties start (point)) debian-doc-completion-list))))
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    68
    (when (setq word (completing-read "Package: " debian-doc-completion-list nil t))
1242
3ac891ab0ad6 Fix: Warning: `end-of-buffer' is for interactive use only; use `(goto-char (point-max))' instead.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1060
diff changeset
    69
      (goto-char (point-min))
1056
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    70
      (search-forward (concat "Document: " word) nil t)
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    71
      (recenter-top-bottom))))
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    72
(define-key debian-doc-mode-map (kbd "RET") 'debian-doc-visit-at-point)
0ec83e102baa Base implementation of Debian doc-base and Emacs integration.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    73
1057
899bedcbfa57 Add docs to fix "M-x checkdoc" errors.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1056
diff changeset
    74
899bedcbfa57 Add docs to fix "M-x checkdoc" errors.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1056
diff changeset
    75
(provide 'debian-doc)
899bedcbfa57 Add docs to fix "M-x checkdoc" errors.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1056
diff changeset
    76
899bedcbfa57 Add docs to fix "M-x checkdoc" errors.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1056
diff changeset
    77
;;; debian-doc.el ends here