view .elisp/settings/80.go.el @ 325:64e73453e43f

xmonad: Pull apart custom layout into something readable This change doesn't affect any behavior, but it does document the custom layout by naming function parameters. Hopefully, this will make things easier to fix the next time the XMonad developers break us.
author Lucas Bergman <lucas@bergmans.us>
date Tue, 11 Mar 2014 12:49:05 -0500
parents aa5afa13e12c
children ec41fb19c4c8
line wrap: on
line source

;; completions for go
(defun af-go-hook ()
  ;; enable tabs
  (setq tab-width 2)
  (setq indent-tabs-mode t)
  (make-variable-buffer-local 'whitespace-style)
  (setq whitespace-style '(trailing lines-tail indentation trailing empty))
  )

(defun af-get-go-elisp-location ()
  (let* ((gobinary (shell-command-to-string "which go"))
         (gobin (substring (let ((x (file-name-directory gobinary)))
                             (if x x "z")) 0  -1))
         (goroot (file-name-directory gobin)))
    (if goroot (concat goroot "misc/emacs") "")))

(defun af-get-gocode-elisp-location ()
  (let* ((binary (shell-command-to-string "which gocode"))
         (bin (substring (let ((x (file-name-directory binary)))
                               (if x x "z")) 0 -1))
         (basedir (file-name-directory bin)))
    (if basedir
        (concat basedir "src/github.com/nsf/gocode/emacs-company/")
      "")))

(let* ((goloc (af-get-go-elisp-location))
       (goel (concat goloc "/go-mode.el")))
  (if (file-exists-p goel)
      (progn
        (message "Go is installed, loading go-mode")
        (add-to-list 'load-path goloc)
        (require 'go-mode)
        (add-hook 'go-mode-hook 'af-go-hook)
        (add-hook 'go-mode-hook 'go-eldoc-setup)
        (let* ((loc (af-get-gocode-elisp-location))
               (el (concat loc "/company-go.el")))
          (if (file-exists-p el)
              (progn
                (message "Found gocode, loading company-mode support...")
                (add-to-list 'load-path loc)
                (require 'company-go))
            (message "gocode missing, skipping company-mode support."))))
    (message "Go appears to not be installed, skipping Go setup.")))