     (set-process-filter
      proc
      (lambda (process output)
-       (setq mural-server-output (concat mural-server-output output))))
-  proc))
+       (with-current-buffer (process-buffer process)
+         (save-excursion
+           (if mural-server-echo
+               (progn
+                 (goto-char (process-mark process))
+                 (insert output)
+                 (set-marker (process-mark process) (point))))
+           (setq mural-server-output (concat mural-server-output output))))))
+     proc))
 
 (defun mural-query (query)
   (if (equal "" query)

(defvar mural-server-path "mural_server"
  "Path to the mural_server executable")

(defvar mural-server-process nil)
(defvar mural-server-output "")
(defvar ido-dynamic-match-fn nil)

      (process-send-string (process-name (mural-get-server))
                           (concat query "\n"))

      ;; Wait up to 1/2 second
      (loop for i from 1 to 10
            until (mural-response-complete mural-server-output)
            do (accept-process-output mural-server-process .05))
      (if (mural-response-complete mural-server-output)
          (mural-parse-response mural-server-output)
        (progn
          (message "mural-server timeout")
          '())))))

(defun mural-parse-response (results)
  (mapcar (lambda (x) (substring x (length "MATCH ")))
