writeSexpToStringLoop(obj)
}
-printToString <- function(val) {
+withOutputToString <- function(expr) {
+ call <- substitute(expr)
f <- fifo("")
- tryCatch({ sink(f); print(val); sink(); readLines(f) },
+ sink(f)
+ tryCatch({ tryCatch(eval.parent(call), finally=sink())
+ readLines(f) },
finally=close(f))
}
+printToString <- function(val) {
+ withOutputToString(str(val, indent.str="", list.len=5, max.level=2))
+}
+
`swank:connection-info` <- function (slimeConnection, sldbState) {
list(quote(`:pid`), Sys.getpid(),
quote(`:package`), list(quote(`:name`), "R", quote(`:prompt`), "R> "),
`swank:eval-and-grab-output` <- function(slimeConnection, sldbState, string) {
retry <- TRUE
value <- ""
- output <- NULL
- f <- fifo("")
- tryCatch({
- sink(f)
- while(retry) {
+ output <-
+ withOutputToString(while(retry) {
retry <- FALSE
withRestarts(value <- eval(parse(text=string), envir = globalenv()),
- retry=list(description="retry SLIME interactive evaluation request", handler=function() retry <<- TRUE))}},
- finally={sink(); output <- readLines(f); close(f)})
+ retry=list(description="retry SLIME interactive evaluation request", handler=function() retry <<- TRUE))})
list(output, printToString(value))
}
list()
}
}
+
+`swank:value-for-editing` <- function(slimeConnection, sldbState, string) {
+ paste(deparse(eval(parse(text=string), envir = globalenv()), control="all"),
+ collapse="\n", sep="")
+}
+
+`swank:commit-edited-value` <- function(slimeConnection, sldbState, string, value) {
+ eval(parse(text=sprintf("%s <- %s", string, value)), envir = globalenv())
+ TRUE
+}