Difference between revisions of "Haskell mode for Emacs/Hoogle.el"

From HaskellWiki
Jump to navigation Jump to search
m (Hoogle.el moved to Haskell mode for Emacs/Hoogle.el)
(improve the lisp header. still need copyright information)
Line 4: Line 4:
   
 
<pre-lisp>
 
<pre-lisp>
  +
;;; hoogle.el --- functions for looking Haskell symbols up in Hoogle
;; This code comes from hyperclim.el and was originally written by
 
  +
;; Andy Hefner (andy.hefner@verizon.net)
 
  +
;; Copyright (C) 2007
  +
  +
;; Author: Andy Hefner <andy.hefner@verizon.net>, <lemens@endorphin.org>, David House <dmhouse@gmail.com>
  +
;; Maintainer: David House <dmhouse@gmail.com>
  +
;; Created: 2007
  +
;; Version: 0.1
  +
;; Keywords: doc, Haskell, Hoogle, search
  +
  +
;;; Commentary:
  +
 
;; This code comes from hyperclim.el (public domain) and was originally written by
 
;; Andy Hefner (andy.hefner@verizon.net)
 
;; modified for Hoogle -- clemens@endorphin.org
 
;; modified for Hoogle -- clemens@endorphin.org
 
;; Improved by David House <dmhouse@gmail.com> - Mar 07
 
;; Improved by David House <dmhouse@gmail.com> - Mar 07
Line 52: Line 64:
   
 
(provide 'hoogle)
 
(provide 'hoogle)
  +
;;; hoogle.el ends here
 
</pre-lisp>
 
</pre-lisp>

Revision as of 16:43, 14 October 2007

An Emacs Lisp library to integrate Hoogle with Emacs. The documentation is mostly the docstring of the hoogle-lookup function.

You'll need haskell-mode, at least version 2.2.

<pre-lisp>

hoogle.el --- functions for looking Haskell symbols up in Hoogle
Copyright (C) 2007
Author
Andy Hefner <andy.hefner@verizon.net>, <lemens@endorphin.org>, David House <dmhouse@gmail.com>
Maintainer
David House <dmhouse@gmail.com>
Created
2007
Version
0.1
Keywords
doc, Haskell, Hoogle, search
Commentary
This code comes from hyperclim.el (public domain) and was originally written by
Andy Hefner (andy.hefner@verizon.net)
modified for Hoogle -- clemens@endorphin.org
Improved by David House <dmhouse@gmail.com> - Mar 07

(require 'browse-url) (require 'haskell-mode) (eval-when-compile (require 'cl))

(defvar hoogle-url-base "http://haskell.org/hoogle/?q="

 "The base for the URL that will be used for web Hoogle lookups.")

(defvar hoogle-local-command "hoogle"

 "The name of the executable used for Hoogle. If this isn't

found in $PATH (using `executable-find'), then a web lookup is used.") (defvar hoogle-always-use-web nil

 "Set to non-nil to always use web lookups.")

(defvar hoogle-history nil

 "The history of what you've Hoogled for.")

(defun hoogle-lookup (p)

 "Lookup the identifier at point in Hoogle. If we can't find an

identifier at the point, or with a prefix arg of 1, prompts for a name to look up. If we can find a Hoogle in the $PATH (using `executable-find' on `hoogle-local-command'), it will be used, unless `hoogle-always-use-web' is non-nil. For web Hoogling, the name is appended to `hoogle-url-base' and `browse-url' is invoked."

 (interactive "p")
 (let ((symbol-name (haskell-ident-at-point)))
   ;; Read a name to lookup from the minibuffer if we couldn't find one in the
   ;; file.
   (unless (and (= 1 p) (stringp symbol-name))
     (setq symbol-name 
           (read-from-minibuffer 
            "Hoogle lookup name: " "" nil nil 'hoogle-history)))
   ;; If we can find a local Hoogle, and the user hasn't told us to always use
   ;; a web Hoogle, use the local Hoogle, otherwise use the web Hoogle.
   (if (and (not hoogle-always-use-web)
            (fboundp 'executable-find)
            (executable-find hoogle-local-command))
       (let ((b (get-buffer-create "*Hoogle output*")))
         (shell-command (concat "hoogle " symbol-name) b)
         (with-current-buffer b 
           (toggle-read-only)
           (set-buffer-modified-p nil)))
     (browse-url (concat hoogle-url-base symbol-name)))))

(provide 'hoogle)

hoogle.el ends here

</pre-lisp>