Christophe Weblog Wiki Code Publications Music
add `swank:apropos-list-for-emacs`
authorChristophe Rhodes <csr21@cantab.net>
Tue, 15 Jul 2014 18:42:33 +0000 (19:42 +0100)
committerChristophe Rhodes <csr21@cantab.net>
Tue, 15 Jul 2014 18:42:33 +0000 (19:42 +0100)
and also `swank:describe-definition-for-emacs`, helping to make it
useful.  It's still a bit weird with the confusion between name of
thing, name of help file, and so on (and also because
describe-definition-for-emacs must return a definition kind from a
restricted set defined in base slime) but it's basically working.

swank.R

diff --git a/swank.R b/swank.R
index 38160ed..f7ea3b1 100644 (file)
--- a/swank.R
+++ b/swank.R
@@ -381,6 +381,25 @@ helpFilesWithTopicString <- function(value) {
   helpFilesWithTopicString(value)
 }
 
+`swank:apropos-list-for-emacs` <- function(slimeConnection, sldbState, name, onlyExternal, package, caseSensitive) {
+  x <- help.search(name, fields="alias", package=.packages())$matches
+  brieflyDescribe <- function(name, title) {
+    if (exists(name, globalenv())) {
+      val <- get(name, globalenv())
+      kind <- if("function" %in% class(val)) quote(`:function`) else quote(`:variable`)
+      list(quote(`:designator`), name, kind, title)
+    } else {
+      ## maybe
+      list(quote(`:designator`), name, quote(`:type`), title)
+    }
+  }
+  mapply(brieflyDescribe, x[,"name"], x[,"title"], SIMPLIFY=FALSE)
+}
+
+`swank:describe-definition-for-emacs` <- function(slimeConnection, sldbState, name, kind) {
+  `swank:describe-symbol`(slimeConnection, sldbState, name, NULL)
+}
+
 `swank:throw-to-toplevel` <- function(slimeConnection, sldbState) {
   condition <- simpleCondition("Throw to toplevel")
   class(condition) <- c("swankTopLevel", class(condition))