1
1
mirror of https://github.com/kanaka/mal.git synced 2024-09-20 10:07:45 +03:00
mal/r/readline.r
Joel Martin c9de2e82ed Tests: add testing Dockerfile. Impl fixes.
- tests/docker/Dockerfile: specifies full docker image containing all
  tools/languages (except matlab).
- tests/docker-build.sh: build above image.
- tests/docker-run.sh: launch above image.
    Example: ./tests/docker-run.sh make test^js^step2
- Various fixes across multiple languages:
    - Unicode fixes for bash and R on Ubuntu Utopic
    - readline history fixes for when ~/.mal-history is not available
      or readable/writable. No fatal errors.
    - fixes to work with perl 5.20 (and still perl 5.18)
2015-03-11 22:22:35 -05:00

45 lines
1.1 KiB
R

..readline.. <- TRUE
HISTORY_FILE = paste(path.expand("~"), "/.mal-history", sep="")
library(rdyncall, lib.loc="lib/")
#.rllib <- dynfind(c("edit"))
.rllib <- dynfind(c("readline"))
.call_readline <- .dynsym(.rllib,"readline")
.call_add_history <- .dynsym(.rllib,"add_history")
.state <- new.env()
.state$rl_history_loaded = FALSE
.readline <- function(prompt) {
res <- .dyncall(.call_readline, "Z)p", prompt)
if (is.nullptr(res)) {
return(NULL)
} else {
return(ptr2str(res))
}
}
readline <- function(prompt) {
if (!.state$rl_history_loaded) {
.state$rl_history_loaded <- TRUE
if (file.access(HISTORY_FILE, 4) == 0) {
lines <- scan(HISTORY_FILE, what="", sep="\n", quiet=TRUE)
for(add_line in lines) {
.dyncall(.call_add_history, "Z)v", add_line)
}
}
}
line <- .readline(prompt)
if (is.null(line)) return(NULL)
.dyncall(.call_add_history, "Z)v", line)
if (file.access(HISTORY_FILE, 2) == 0) {
write(line, file=HISTORY_FILE, append=TRUE)
}
line
}