 file name with a small hyperlink.  Display the result."
   (if (not buffer-file-name)
       (error "Cannot use guru on a buffer without a file name"))
-  ;; It's not sufficient to save a modified buffer since if
-  ;; gofmt-before-save is on the before-save-hook, saving will
-  ;; disturb the selected region.
-  (if (buffer-modified-p)
-      (error "Please save the buffer before invoking go-guru"))
   (and need-scope
        (string-equal "" go-guru-scope)
        (go-guru-set-scope))

        (shrink-window-if-larger-than-buffer w)
        (set-window-point w (point-min))))))

(defun go-guru-callees ()
  "Show possible callees of the function call at the current point."
  (interactive)

			 (1- (position-bytes (point))))))
         (env-vars (go-root-and-paths))
         (goroot-env (concat "GOROOT=" (car env-vars)))
         (gopath-env (concat "GOPATH=" (mapconcat #'identity (cdr env-vars) ":")))
	 (output-buffer (get-buffer-create "*go-guru*")))
    (with-current-buffer output-buffer
      (setq buffer-read-only nil)
      (erase-buffer)
      (insert "Go Guru\n"))
    (with-current-buffer (get-buffer-create "*go-guru-input*")
      (setq buffer-read-only nil)
      (erase-buffer)
      (go-guru--insert-modified-files)
      (let* ((args (list "-modified"
			 "-scope" go-guru-scope
			 mode
			 posn)))
	;; Log the command to *Messages*, for debugging.
	(message "Command: %s:" args)
	(message nil) ; clears/shrinks minibuffer
	(message "Running guru...")
	;; Use dynamic binding to modify/restore the environment
	(let ((process-environment (list* goroot-env gopath-env process-environment)))
	  (apply #'call-process-region (append (list (point-min)
						     (point-max)
						     go-guru-command
						     nil ; delete
						     output-buffer
						     t)
					       args)))))
    (with-current-buffer output-buffer
      (insert "\n")
      (compilation-mode)
      (setq compilation-error-screen-columns nil)
