From: Christophe Rhodes Date: Tue, 15 Jul 2014 18:42:33 +0000 (+0100) Subject: add `swank:apropos-list-for-emacs` X-Git-Url: http://christophe.rhodes.io/gitweb/?p=swankr.git;a=commitdiff_plain;h=df701650ca9a83709e81e75c423ac3cc882cb246 add `swank:apropos-list-for-emacs` 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. --- diff --git a/swank.R b/swank.R index 38160ed..f7ea3b1 100644 --- 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))