Skip to content

Instantly share code, notes, and snippets.

@timcharper
Last active April 6, 2016 06:38
Show Gist options
  • Save timcharper/6200774 to your computer and use it in GitHub Desktop.
Save timcharper/6200774 to your computer and use it in GitHub Desktop.
Tell ensime to use dash-at-point for scala-doc lookup
(add-to-list 'load-path "~/.emacs.d/vendor/dash-at-point/")
(require 'dash-at-point)
(defun dash-at-point/make-url (docset type member &optional delimiter)
"Returns dash url given docset (scala, java?), an ensime type and an ensime member"
(let ((member-suffix (if member (format "%s%s" (or delimiter ".") member) "")))
(format "dash://%s:%s%s" docset type member-suffix)))
(defun dash-at-point/ensime-make-java-doc-url (ensime-type &optional member)
(let* ((type (ensime-type-full-name ensime-type))
(sanitized-type (replace-regexp-in-string "^java\\.lang\\." "" type)))
(dash-at-point/make-url "java"
sanitized-type
(ensime-member-name member)
"%20"))) ;; dash javadoc sets do not index methods with owner Class prefix
(defun dash-at-point/ensime-make-scala-doc-url (type &optional member)
(dash-at-point/make-url "scala"
(ensime-type-full-name type)
(ensime-member-name member)))
(defun dash-at-point/browsable-url-p (s)
"Returns true if a url should be opened via OS url handler"
(cond ((not (stringp s)) nil)
((string-match "^file://" s) nil)
((string-match "^[a-z]+://" s) t)))
(defun dash-at-point/alist-replace (list name new-value)
"Replaces value for name in list. Does not mutate original list"
(let ((list-with-item-removed (delq (assoc name list) list)))
(append list-with-item-removed
(list (cons name new-value)))))
(eval-after-load 'ensime
'(progn
(setq ensime-doc-lookup-map
(dash-at-point/alist-replace ensime-doc-lookup-map
"^java\\."
'dash-at-point/ensime-make-java-doc-url))
(setq ensime-doc-lookup-map
(dash-at-point/alist-replace ensime-doc-lookup-map
"^scala\\."
'dash-at-point/ensime-make-scala-doc-url))
(defun ensime-http-url-p (s)
"Hack the ensime http predicate to treat dash urls as http, so
ensime will open said URL in the browser rather than in emacs."
(dash-at-point/browsable-url-p (s)))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment