I’m using go-mode and needed the following script to correctly guess my GOPATH:
(defun go-set-project-with-guard ()
(let* ((g (go-guess-gopath))
(d (concat (getenv "HOME") "/src/golang"))
(r (concat (getenv "HOME") "/src:"))
(has-match (string-match r g)))
(if (not (eq 0 has-match))
(setenv "GOPATH" d)
(setenv "GOPATH" g))))
(eval-after-load 'go-mode
'(add-hook 'go-mode-hook 'go-set-project-with-guard))
The problem with using go-mode’s script was that my default path for code is ~/src. Which means that go-guess-gopath will recurse up to the top of that path rather than remaining at ~/src/golang.
So I wrapped the script with my own fn to check if script returns incorrect pathing, and set it correctly if so.
PS - I’d prefer to use apply-partially
here for concat '(getenv "HOME")'
but didn’t get it working in 10 min and figured my time was better spent posting this blog entry.