Skip to content

Commit

Permalink
Fix hoogle lookup from local servers
Browse files Browse the repository at this point in the history
Use a better way to check if the hoogle process is alive: Instead of
checking if the corresponding buffer-name is an alive process, store the
process handle in a global variable and check that.

The problem is that when using 'hoogle-lookup-from-local' without any
hoogle server running, a new local hoogle server is started, but the
code fails to recognize that server is running and instead repeatedly
reports that the server is not running offering to start it.
  • Loading branch information
Sven Heyll committed Aug 25, 2015
1 parent 083c113 commit 951e1bc
Showing 1 changed file with 17 additions and 13 deletions.
30 changes: 17 additions & 13 deletions haskell-mode.el
Original file line number Diff line number Diff line change
Expand Up @@ -859,27 +859,33 @@ is asked to show extra info for the items matching QUERY.."
(defvar hoogle-server-process-name "emacs-local-hoogle")
(defvar hoogle-server-buffer-name (format "*%s*" hoogle-server-process-name))
(defvar hoogle-port-number 49513 "Port number.")
(defvar hoogle-server-process nil "The process handle of the local hoogle server.")

(defun hoogle-start-server ()
"Start hoogle local server."
(interactive)
(unless (hoogle-server-live-p)
(start-process
hoogle-server-process-name
(get-buffer-create hoogle-server-buffer-name) "/bin/sh" "-c"
(format "hoogle server -p %i" hoogle-port-number))))
(if (executable-find "hoogle")
(unless (hoogle-server-live-p)
(set 'hoogle-server-process
(start-process
hoogle-server-process-name
(get-buffer-create hoogle-server-buffer-name)
"/bin/sh" "-c"

This comment has been minimized.

Copy link
@gracjan

gracjan Sep 2, 2015

Do we have to go through /bin/sh here? How about calling hoogle directly:

(start-process
               hoogle-server-process-name
               (get-buffer-create hoogle-server-buffer-name)
               "hoogle" "server" "-p" (number-to-string hoogle-port-number))

?

This comment has been minimized.

Copy link
@sheyll

sheyll via email Sep 2, 2015

Owner

This comment has been minimized.

Copy link
@gracjan

gracjan via email Sep 2, 2015

(format "hoogle server -p %i" hoogle-port-number))))
(error "hoogle executable not found")))

(defun hoogle-server-live-p ()
"Whether hoogle server is live or not."
"Whether the hoogle server process is live."
(condition-case _err
(process-live-p (get-buffer-create hoogle-server-buffer-name))
(process-live-p hoogle-server-process)
(error nil)))

(defun hoogle-kill-server ()
"Kill hoogle server if it is live."
"Kill the hoogle server if it is live."
(interactive)
(when (hoogle-server-live-p)
(kill-process (get-buffer-create hoogle-server-buffer-name))))
(kill-process (get-buffer-create hoogle-server-buffer-name))
(set 'hoogle-server-process nil)))

;;;###autoload
(defun hoogle-lookup-from-local ()
Expand All @@ -890,10 +896,8 @@ is asked to show extra info for the items matching QUERY.."
hoogle-port-number
(read-string "hoogle: " (haskell-ident-at-point))))
(when (y-or-n-p
"hoogle server not found, start hoogle server?")
(if (executable-find "hoogle")
(hoogle-start-server)
(error "hoogle is not installed")))))
"hoogle server not running, start hoogle server?")
(hoogle-start-server))))

;;;###autoload
(defcustom haskell-hayoo-url "http://hayoo.fh-wedel.de/?query=%s"
Expand Down

0 comments on commit 951e1bc

Please sign in to comment.