   (ac-fsharp-show-errors
    (concat (replace-regexp-in-string "DATA: errors\n" "" str) "\n")))
 
-(defn display-tooltip (str)
-  "Display a tooltip. If the user has requested a popup tooltip,
-display using popup. Otherwise, display in the minibuffer."
-  (let ((s (replace-regexp-in-string "DATA: tooltip\n" "" str)))
-    (if (not (@ awaiting-popup))
-        (message (fsharp-doc/format-for-minibuffer s))
-      (@set awaiting-popup nil)
-      (popup-tip s))))
+(defn handle-tooltip (str)
+  "Display information from the background process. If the user
+has requested a popup tooltip, display a popup. Otherwise,
+display a short summary in the minibuffer."
+  (let ((cleaned (replace-regexp-in-string "DATA: tooltip\n" "" str)))
+    (if (@ awaiting-popup)
+        (_ display-info-popup cleaned)
+      (message (fsharp-doc/format-for-minibuffer cleaned)))))
+
+(def info-buffer-name "*F# info*")
+
+(defn display-info-popup (str)
+  "Display the given string in a popup or help window."
+  (@set awaiting-popup nil)
+  (if ac-fsharp-use-popup
+      (popup-tip str)
+    (save-excursion
+      (let ((help-window-select t))
+        (with-help-window (@ info-buffer-name)
+          (princ str))))))
 
 (defn handle-project (str)
   (setq ac-fsharp-project-files (cdr (split-string str "\n")))

  (setq ac-fsharp-completion-data (s-split "\n" (s-replace "DATA: completion" "" str) t)
        ac-fsharp-waiting nil))

(defn open-declaration (str)
  (if (string-match "\n\\(.*\\):\\([0-9]+\\):\\([0-9]+\\)" str)
      (let ((file (match-string 1 str))
            (line (+ 1 (string-to-number (match-string 2 str))))

      (otherwise (list "mono" exe)))))

(defvar ac-fsharp-use-popup t
  "Display tooltips using a popup at point. If set to nil,
display in a help buffer instead.")

; Both in seconds. Note that background process uses ms.
(defvar ac-fsharp-blocking-timeout 1)
