Christophe Weblog Wiki Code Publications Music
swank:value-for-editing and swank:commit-edited-value
[swankr.git] / swank.R
diff --git a/swank.R b/swank.R
index 99f508bc153379b56c4586b6f61e7ee0db6b6c93..488ad56943417d0414b9eba804fc14d63cd0a4b1 100644 (file)
--- a/swank.R
+++ b/swank.R
@@ -247,7 +247,11 @@ writeSexpToString <- function(obj) {
 
 printToString <- function(val) {
   f <- fifo("")
-  tryCatch({ sink(f); print(val); sink(); readLines(f) },
+  sink(f)
+  tryCatch({
+    tryCatch(str(val, indent.str="", list.len=5, max.level=2),
+             finally=sink())
+    readLines(f) },
            finally=close(f))
 }
 
@@ -444,3 +448,13 @@ computeRestartsForEmacs <- function (sldbState) {
     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
+}