ghc-mod/elisp/ghc-info.el

71 lines
2.0 KiB
EmacsLisp
Raw Normal View History

2010-11-15 03:46:55 +00:00
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;;; ghc-info.el
;;;
;; Author: Kazu Yamamoto <Kazu@Mew.org>
;; Created: Nov 15, 2010
;;; Code:
(require 'ghc-func)
2010-11-15 05:46:59 +00:00
(defun ghc-show-type (&optional ask)
(interactive "P")
2010-11-15 03:46:55 +00:00
(if (not (ghc-which ghc-module-command))
(message "%s not found" ghc-module-command)
(let ((modname (ghc-find-module-name)))
(if (not modname)
(message "module should be specified")
(ghc-show-type0 ask modname)))))
(defun ghc-show-type0 (ask modname)
2012-01-23 06:12:24 +00:00
(let* ((expr0 (ghc-things-at-point))
(expr (if ask (ghc-read-expression expr0) expr0))
(cdir default-directory)
(file (buffer-name)))
(with-temp-buffer
(cd cdir)
(apply 'call-process ghc-module-command nil t nil
`(,@(ghc-make-ghc-options) "type" ,file ,modname ,expr))
(message (buffer-substring (point-min) (1- (point-max)))))))
2010-11-15 03:46:55 +00:00
2010-11-15 05:46:59 +00:00
(defun ghc-show-info (&optional ask)
(interactive "P")
(if (not (ghc-which ghc-module-command))
(message "%s not found" ghc-module-command)
(let ((modname (ghc-find-module-name)))
(if (not modname)
(message "module should be specified")
(ghc-show-info0 ask modname)))))
(defun ghc-show-info0 (ask modname)
2012-01-23 06:12:24 +00:00
(let* ((expr0 (ghc-things-at-point))
(expr (if ask (ghc-read-expression expr0) expr0))
(cdir default-directory)
(file (buffer-name))
(buf (get-buffer-create ghc-error-buffer-name)))
(with-current-buffer buf
(erase-buffer)
(insert
(with-temp-buffer
(cd cdir)
(apply 'call-process ghc-module-command nil t nil
`(,@(ghc-make-ghc-options) "info" ,file ,modname ,expr))
(buffer-substring (point-min) (1- (point-max))))))
(display-buffer buf)))
2010-11-15 05:46:59 +00:00
(defun ghc-read-expression (default)
2012-01-06 02:12:28 +00:00
(if default
(let ((prompt (format "Expression (%s): " default)))
(read-string prompt default nil))
(read-string "Expression: ")))
2010-11-15 05:46:59 +00:00
(defun ghc-find-module-name ()
(save-excursion
(goto-char (point-min))
(if (re-search-forward "^module[ ]+\\([^ ]+\\)" nil t)
(match-string-no-properties 1))))
2010-11-15 03:46:55 +00:00
(provide 'ghc-info)