12 SEXP RComp_assignBufferSym,
16 RComp_completeTokenSym,
18 RComp_retrieveCompsSym;
24 char *ROOT::R::R_completion_generator(
const char *text,
int state)
30 static int list_index, ncomp;
31 static char **compstrings;
37 assignCall = PROTECT(Rf_lang2(ROOT::R::RComp_assignTokenSym, Rf_mkString(text))),
38 completionCall = PROTECT(Rf_lang1(ROOT::R::RComp_completeTokenSym)),
39 retrieveCall = PROTECT(Rf_lang1(ROOT::R::RComp_retrieveCompsSym));
40 const void *vmax = vmaxget();
42 Rf_eval(assignCall, ROOT::R::rcompgen_rho);
43 Rf_eval(completionCall, ROOT::R::rcompgen_rho);
44 PROTECT(completions = Rf_eval(retrieveCall, ROOT::R::rcompgen_rho));
46 ncomp = Rf_length(completions);
48 compstrings = (
char **) malloc(ncomp *
sizeof(
char *));
49 if (!compstrings)
return (
char *)NULL;
50 for (i = 0; i < ncomp; i++)
51 compstrings[i] = strdup(Rf_translateChar(STRING_ELT(completions, i)));
57 if (list_index < ncomp)
58 return compstrings[list_index++];
61 if (ncomp > 0) free(compstrings);
67 char **ROOT::R::R_custom_completion(
const char *text,
int start,
int end)
70 char **matches = (
char **)NULL;
72 linebufferCall = PROTECT(Rf_lang2(ROOT::R::RComp_assignBufferSym,
73 Rf_mkString(rl_line_buffer))),
74 startCall = PROTECT(Rf_lang2(ROOT::R::RComp_assignStartSym, Rf_ScalarInteger(start))),
75 endCall = PROTECT(Rf_lang2(ROOT::R::RComp_assignEndSym, Rf_ScalarInteger(end)));
80 rl_completion_append_character =
'\0';
82 Rf_eval(linebufferCall, ROOT::R::rcompgen_rho);
83 Rf_eval(startCall, ROOT::R::rcompgen_rho);
84 Rf_eval(endCall, ROOT::R::rcompgen_rho);
86 matches = rl_completion_matches(text, ROOT::R::R_completion_generator);
87 filecompCall = PROTECT(Rf_lang1(ROOT::R::RComp_getFileCompSym));
88 infile = PROTECT(Rf_eval(filecompCall, ROOT::R::rcompgen_rho));
89 if (!Rf_asLogical(infile)) rl_attempted_completion_over = 1;