home *** CD-ROM | disk | FTP | other *** search
/ Education Sampler 1992 [NeXTSTEP] / Education_1992_Sampler.iso / Programming / Source / winterp-1.13 / contrib / doc / rd-doc.el < prev    next >
Encoding:
Text File  |  1991-10-06  |  4.4 KB  |  125 lines

  1. ;;!emacs
  2. ;;
  3. ;; FILE:         rd-doc.el
  4. ;; SUMMARY:      Provide completion and documentation lookup facilities.
  5. ;; USAGE:        GNU Emacs Lisp Library
  6. ;;
  7. ;; AUTHOR:       Bob Weiner, Brown University
  8. ;; ORIG-DATE:    19-Dec-90
  9. ;; LAST-MOD:     17-Sep-91 at 22:21:55 by Bob Weiner
  10. ;;
  11. ;; Copyright (C) 1990, 1991 Bob Weiner
  12. ;; WINTERP Copyright 1989, 1990, 1991 Hewlett-Packard Company (by Niels Mayer).
  13. ;; XLISP version 2.1, Copyright (c) 1989, by David Betz.
  14. ;;
  15. ;; Permission to use, copy, modify, distribute, and sell this software and
  16. ;; its documentation for any purpose is hereby granted without fee,
  17. ;; provided that the above copyright notice appear in all copies and that
  18. ;; both that copyright notice and this permission notice appear in
  19. ;; supporting documentation, and that the name of Hewlett-Packard, Niels
  20. ;; Mayer, Brown University and Bob Weiner not be used in advertising or
  21. ;; publicity pertaining to distribution of the software without specific,
  22. ;; written prior permission.  Hewlett-Packard, Niels Mayer, Brown University
  23. ;; and Bob Weiner makes no representations about the suitability of this
  24. ;; software for any purpose.  It is provided "as is" without express or
  25. ;; implied warranty.
  26. ;;
  27. ;; This file is not part of GNU Emacs.
  28. ;;
  29. ;; DESCRIPTION:  
  30. ;;
  31. ;;   'rd-doc' is invoked by env-specific '*-doc' packages.
  32. ;;   Each such package must override the values of all variables within the
  33. ;;   'Private variables' section below.
  34. ;;
  35. ;; DESCRIP-END.
  36. ;;
  37.  
  38. ;; ************************************************************************
  39. ;; Other required Elisp libraries
  40. ;; ************************************************************************
  41.  
  42. ;;  Require 'wrolo' or 'rolo'.
  43. ;;  My rolodex package has been renamed 'wrolo' but many sites still call
  44. ;;  it rolo, so account for both possible names when trying to load it.
  45. ;;
  46. (cond ((or (featurep 'wrolo) (load "wrolo" 'try)))
  47.       ((or (featurep 'rolo)  (load "rolo"))))
  48.  
  49. ;; ************************************************************************
  50. ;; Public functions
  51. ;; ************************************************************************
  52.  
  53. (defun rd-doc (str)
  54.   "Display doc entries matching STR from 'rd-doc-files'."
  55.   (interactive (list (rd-complete-name)))
  56.   (let ((rolo-file-list rd-doc-files)
  57.     (rolo-display-buffer rd-doc-buf))
  58.     (rolo-fgrep str)))
  59.  
  60. (defun rd-complete-name (&optional must-match prompt)
  61.   "Interactively completes symbol name from 'rd-doc-list' if possible, and returns class name.
  62. Optional MUST-MATCH means name must match a completion table entry.
  63. Optional PROMPT is intial prompt string for user."
  64.   (interactive)
  65.   (let ((default (rd-find-name))
  66.     (completion-ignore-case t)
  67.     completions
  68.     name)
  69.     ;; Prompt with possible completions of class-name.
  70.     (setq prompt (or prompt "Doc name:")
  71.       completions rd-doc-list
  72.       name
  73.       (if completions
  74.           (completing-read
  75.         (format "%s (default %s) " prompt default)
  76.         completions nil must-match)
  77.         (read-string
  78.           (format "%s (default %s) " prompt default))))
  79.     (if (equal name "") default name)))
  80.  
  81.  
  82. (defun rd-find-name ()
  83.   "Return symbol name that point is within, else nil."
  84.   (if (= (point) (point-max)) (skip-chars-backward " \t\n"))
  85.   (save-excursion
  86.     (skip-chars-forward " \t")
  87.     (skip-chars-backward rd-identifier-chars)
  88.     (if (looking-at rd-identifier)
  89.     (buffer-substring (point)
  90.               (match-end 0)))))
  91.  
  92. ;; ************************************************************************
  93. ;; Public variables  - Overridden by environment-specific *-doc packages.
  94. ;; ************************************************************************
  95.  
  96. (defvar rd-doc-files nil
  97.   "List of documentation files to search.
  98. Overridden by environment-specific *-doc packages.
  99. Each section within a file should begin with 'outline-regexp'.")
  100.  
  101. (defvar    rd-doc-buf nil
  102.   "Name of buffer in which to display matching doc sections.
  103. Overridden by environment-specific *-doc packages.")
  104.  
  105. (defvar    rd-doc-list nil
  106.   "Completion list of keywords to use when prompting for doc search key.
  107. Overridden by environment-specific *-doc packages.")
  108.  
  109. (defvar    rd-identifier-chars nil
  110.   "Characters used to match doc key at point.
  111. Overridden by environment-specific *-doc packages.")
  112.  
  113. (defvar rd-identifier nil
  114.   "Regular expression matching a doc key at point.
  115. Overridden by environment-specific *-doc packages.")
  116.  
  117.  
  118. ;; ************************************************************************
  119. ;; Function calls
  120. ;; ************************************************************************
  121.  
  122. (rd-doc-init)
  123.  
  124. (provide 'rd-doc)
  125.