cat(port, file=f)
close(f)
}
+ ## FIXME: maybe we should support dontClose here?
s <- socketConnection(host="localhost", server=TRUE, port=port, open="r+b")
on.exit(close(s))
- serve(s)
+ tryCatch(serve(s), endOfFile=function(c) NULL)
}
serve <- function(io) {
sendToEmacs <- function(slimeConnection, obj) {
io <- slimeConnection$io
payload <- writeSexpToString(obj)
- writeChar(sprintf("%06x", nchar(payload)), io, eos=NULL)
+ writeChar(sprintf("%06x", nchar(payload, type="bytes")), io, eos=NULL)
writeChar(payload, io, eos=NULL)
flush(io)
}
readChunk <- function(io, len) {
buffer <- readChar(io, len)
+ if(length(buffer) == 0) {
+ condition <- simpleCondition("End of file on io")
+ class(condition) <- c("endOfFile", class(condition))
+ signalCondition(condition)
+ }
if(nchar(buffer) != len) {
stop("short read in readChunk")
}
`swank:connection-info` <- function (slimeConnection, sldbState) {
list(quote(`:pid`), Sys.getpid(),
quote(`:package`), list(quote(`:name`), "R", quote(`:prompt`), "R> "),
+ quote(`:encoding`), list(quote(`:coding-systems`), list("utf-8-unix")),
quote(`:lisp-implementation`), list(quote(`:type`), "R",
quote(`:name`), "R",
quote(`:version`), paste(R.version$major, R.version$minor, sep=".")))