From 951e1bc48b47245d364a2ef0819315e8445d3254 Mon Sep 17 00:00:00 2001 From: Sven Heyll Date: Tue, 25 Aug 2015 22:09:18 +0200 Subject: [PATCH] Fix hoogle lookup from local servers 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. --- haskell-mode.el | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/haskell-mode.el b/haskell-mode.el index a2b9c7360..c3685e614 100644 --- a/haskell-mode.el +++ b/haskell-mode.el @@ -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" + (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 () @@ -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"