[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
;;; tooltip-at-point-elisp.el --- elisp support for tooltip doc lookup
From: |
Kevin A. Burton (burtonator) |
Subject: |
;;; tooltip-at-point-elisp.el --- elisp support for tooltip doc lookup |
Date: |
18 Dec 2002 16:14:36 -0800 |
User-agent: |
Gnus/5.0808 (Gnus v5.8.8) Emacs/21.2.90 |
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
;;; tooltip-at-point-elisp.el --- elisp support for tooltip doc lookup
;; $Id: tooltip-at-point-elisp.el,v 1.4 2002/12/08 03:01:21 burton Exp $
;; Copyright (C) 2000-2003 Free Software Foundation, Inc.
;; Copyright (C) 2000-2003 Kevin A. Burton (address@hidden)
;; Author: Kevin A. Burton (address@hidden)
;; Maintainer: Kevin A. Burton (address@hidden)
;; Location: http://relativity.yi.org
;; Keywords:
;; Version: 1.0.0
;; This file is [not yet] part of GNU Emacs.
;; This program is free software; you can redistribute it and/or modify it under
;; the terms of the GNU General Public License as published by the Free Software
;; Foundation; either version 2 of the License, or any later version.
;;
;; This program is distributed in the hope that it will be useful, but WITHOUT
;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
;; FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
;; details.
;;
;; You should have received a copy of the GNU General Public License along with
;; this program; if not, write to the Free Software Foundation, Inc., 59 Temple
;; Place - Suite 330, Boston, MA 02111-1307, USA.
;;; Commentary:
;; This package provides tooltip-at-point functionality for Emacs Lisp. It used
;; the describe-X functions and analyzes the current (point) to determine the
;; most appropriate documentation to display.
;;
;; See tooltip-at-point.el for more information.
;; NOTE: If you enjoy this software, please consider a donation to the EFF
;; (http://www.eff.org)
;;; TODO:
;;
;; - Support for all describe-X functions (including the EIEIO describe-class
;; and describe-method too)
;;; Code:
(defun tooltip-at-point-elisp--get-documentation-function(function)
"Get a string of documentation for the given function."
(let((inhibit-read-only t)
(result nil))
(save-excursion
;;FIXME: describe-function-1 only works if this is the *Help* buffer but
;;we don't want to overwrite this for temp lookups
(set-buffer (get-buffer-create "*Help*"))
(erase-buffer)
(let((standard-output (current-buffer)))
(prin1 function)
;; Use " is " instead of a colon so that
;; it is easier to get out the function name using forward-sexp.
(princ " is ")
(describe-function-1 function nil (interactive-p)))
(setq result (tooltip-at-point-elisp--get-documentation "function"
(buffer-string)))
(kill-buffer (current-buffer))
result)))
(defun tooltip-at-point-elisp--get-documentation(type documentation)
"Output the symbol and type and documentation formated."
(let((header (concat type ": ")))
(add-text-properties 0
(length header)
'(face bold)
header)
(concat header documentation)))
(defun tooltip-at-point-elisp--get-documentation-variable(variable)
"Get a string of documentation for the given variable."
(save-excursion
(save-window-excursion
;;this is a hack to prevent the help enter message from being generated
(switch-to-buffer (get-buffer-create "*Help*"))
(tooltip-at-point-elisp--get-documentation "variable"
(describe-variable variable)))))
(defun tooltip-at-point-elisp-documentation()
"Show documentation for the given symbol at point."
(interactive)
(tooltip-at-point-elisp-documentation--with-protected-help-buffer
(let((function (function-called-at-point))
(variable (variable-at-point))
(function-begin 0)
(variable-begin 0))
;;determine which is closer.. the defun or the variable
(when function
(save-excursion
(end-of-line)
(when (search-backward (pp function) nil t)
(setq function-begin (match-beginning 0)))))
(when variable
(save-excursion
(end-of-line)
(when (search-backward (pp variable) nil t)
(setq variable-begin (match-beginning 0)))))
;;now see which way to get the documentation
(if (and variable
(> variable-begin function-begin))
(tooltip-at-point (tooltip-at-point-elisp--get-documentation-variable
variable))
(if (and function
(> function-begin variable-begin))
(tooltip-at-point
(tooltip-at-point-elisp--get-documentation-function function))
(error "No function or variable at point"))))))
(defmacro tooltip-at-point-elisp-documentation--with-protected-help-buffer
(&rest body)
"Rename the current help buffer, create a *new* help buffer, execute the body,
then restore the old help buffer."
`(unwind-protect
(progn
(save-excursion
;;delete Help.original if it exists (shouldn't)
(when(get-buffer "*Help.original*")
(kill-buffer (get-buffer "*Help.original*")))
(set-buffer (get-buffer-create "*Help*"))
(rename-buffer "*Help.original*"))
,@body)
(save-excursion
;;now kill the EXISTING help buffers.
(when(get-buffer "*Help*")
(kill-buffer (get-buffer "*Help*")))
(set-buffer (get-buffer-create "*Help.original*"))
(rename-buffer "*Help*"))))
(define-key emacs-lisp-mode-map "\C-c?" 'tooltip-at-point-elisp-documentation)
(define-key lisp-interaction-mode-map "\C-c?"
'tooltip-at-point-elisp-documentation)
;;support for apropos mode
(define-key apropos-mode-map "\C-c?" 'tooltip-at-point-elisp-documentation)
;; we would also this in help mode because there are often references we should
;; find here as well.
(define-key help-mode-map "\C-c?" 'tooltip-at-point-elisp-documentation)
(provide 'tooltip-at-point-elisp)
;;; tooltip-at-point-elisp.el ends
- --
Kevin A. Burton ( address@hidden, address@hidden, address@hidden )
Location - San Francisco, CA, Cell - 415.595.9965
Jabber - address@hidden, Web - http://www.peerfear.org/
GPG fingerprint: 4D20 40A0 C734 307E C7B4 DCAA 0303 3AC5 BD9D 7C4D
IRC - openprojects.net #infoanarchy | #p2p-hackers | #reptile
It is error alone which needs support of the government. Truth can stand by
itself. --Thomas Jefferson
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.7 (GNU/Linux)
Comment: Get my public key at: http://relativity.yi.org/pgpkey.txt
iD8DBQE+AQ9rAwM6xb2dfE0RAk+rAJ9M2eF15GjKSqpxu+bFbGLlJibmLwCeMJtr
MjlR8SzFsIuxZEFKa5RlSzA=
=s4zg
-----END PGP SIGNATURE-----
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- ;;; tooltip-at-point-elisp.el --- elisp support for tooltip doc lookup,
Kevin A. Burton (burtonator) <=