On Fri, 11 Sep 2009 18:56:36 +0200, Gabor Grothendieck
<ggrothendi...@gmail.com> wrote:

in the devel version.  If that does not help let me know offline
and I will try to help you.

Thanks Gabor,
I solved the problem.
Here is the code in case somebody else wants to have full completions for proto objects:

# slightly modified utils:::specialCompletions
specialCompletions1 <- function (text, spl)
{
    wm <- which.max(spl)
    op <- names(spl)[wm]
    opStart <- spl[wm]
    opEnd <- opStart + nchar(op)
    if (opStart < 1)
        return(character(0L))
    prefix <- substr(text, 1L, opStart - 1L)
    suffix <- substr(text, opEnd, 1000000L)
    if (op == "?")
        return(helpCompletions(prefix, suffix))
    if (opStart <= 1)
        return(character(0L))
    tryToEval <- function(s) {
        try(eval(parse(text = s), envir = .GlobalEnv), silent = TRUE)
    }
    comps <- switch(op, `$` = {
        if (.CompletionEnv$settings[["ops"]]) {
            object <- tryToEval(prefix)
            if (inherits(object, "try-error"))
                suffix
            else {
if (!inherits(object, 'proto') && is.environment(object)) { ## this line is modified!!
                    ls(object, all.names = TRUE, pattern = sprintf("^%s",
                                                 makeRegexpSafe(suffix)))
                }
                else {
                    grep(sprintf("^%s", makeRegexpSafe(suffix)),
                         names(object), value = TRUE)
                }
            }
        }
        else suffix
    }, `...@` = {
        if (.CompletionEnv$settings[["ops"]]) {
            object <- tryToEval(prefix)
            if (inherits(object, "try-error"))
                suffix
            else {
                grep(sprintf("^%s", makeRegexpSafe(suffix)),
                     methods::slotNames(object), value = TRUE)
            }
        }
        else suffix
    }, `::` = {
        if (.CompletionEnv$settings[["ns"]]) {
            nse <- try(getNamespaceExports(prefix), silent = TRUE)
            if (inherits(nse, "try-error"))
                suffix
            else {
                grep(sprintf("^%s", makeRegexpSafe(suffix)),
                     nse, value = TRUE)
            }
        }
        else suffix
    }, `:::` = {
        if (.CompletionEnv$settings[["ns"]]) {
            ns <- try(getNamespace(prefix), silent = TRUE)
            if (inherits(ns, "try-error"))
                suffix
            else {
                ls(ns, all.names = TRUE, pattern = sprintf("^%s",
                                         makeRegexpSafe(suffix)))
            }
        }
        else suffix
    }, `[` = , `[[` = {
        comps <- normalCompletions(suffix)
        if (length(comps))
            comps
        else suffix
    })
    if (length(comps) == 0L)
        comps <- ""
    sprintf("%s%s%s", prefix, op, comps)
}

environment(specialCompletions1) <- asNamespace("utils")
assignInNamespace("specialCompletions", specialCompletions1, "utils")

## names for proto objects
names.proto <- function(x){
    .local <- function(x){
if(inherits(x[[".super"]], "proto")) c(ls(x), Recall(x[[".super"]]))
        else ls(x)
    }
    unlist(.local(x))
}


## checks
tl <- list(abc="afdas")
p1 <- proto(p1_abc=123)
p2 <- proto(.=p1, p2_abc=23423)

names(p2)
#[1] "p2_abc" "p1_abc"
names(p1)
#[1] "p1_abc"

Completion works fine.

Vitalie.

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to