A Completion Generator for R
This page documents a mechanism to generate relevant completions from a partially completed command line. It is not intended to be useful by itself, but rather in conjunction with other mechanisms that use it as a backend. The functions listed in the usage section provide a simple control and query mechanism. The actual interface consists of a few unexported functions described further down.
rc.settings(ops, ns, args, func, ipck, S3, data, help, argdb, fuzzy, quotes, files)
rc.status() rc.getOption(name) rc.options(...)
## S3 method for class 'default': .DollarNames(x, pattern = "") ## S3 method for class 'list': .DollarNames(x, pattern = "") ## S3 method for class 'environment': .DollarNames(x, pattern = "")
- ops, ns, args, func, ipck, S3, data, help, argdb, fuzzy, quotes, files
- logical, turning some optional completion features on and off.
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
All settings are turned on by default except
fuzzy. Turn more off if your CPU cycles are valuable; you will still retain basic completion on names of objects in the search list. See below for additional details.
- name, ...
- user-settable options. Currently valid names are
[object Object],[object Object],[object Object]
Usage is similar to that of
- An R object for which valid names after
"$"are computed and returned.
- A regular expression. Only matching names are returned.
There are several types of completion, some of which can be disabled
rc.settings. The most basic level, which can not be
turned off once the completion functionality is activated, provides
completion on names visible on the search path, along with a few
special keywords (e.g.,
TRUE). This type of completion is not
attempted if the partial
[object Object],[object Object],[object Object],[object Object],[object Object]
rc.settingsis called without any arguments, it returns the current settings as a named logical vector. Otherwise, it returns
rc.statusreturns, as a list, the contents of an internal (unexported) environment that is used to record the results of the last completion attempt. This can be useful for debugging. For such use, one must resist the temptation to use completion when typing the call to
rc.statusitself, as that then becomes the last attempt by the time the call is executed.
The items of primary interest in the returned list are:
comps The possible completions generated by the last call to
.completeToken, as a character vector.
token The token that was (or, is to be) completed, as set by the last call to
.assignToken(possibly inside a call to
linebuffer The full line, as set by the last call to
start The start position of the token in the line buffer, as set by the last call to
end The end position of the token in the line buffer, as set by the last call to
fileName Logical, indicating whether the cursor is currently inside quotes. fguess The name of the function the cursor is currently inside. isFirstArg Logical. If cursor is inside a function, is it the first argument?
- In addition, the components
optionsgive the current values of settings and options respectively.
If you are uncomfortable with unsolicited evaluation of pieces of
code, you should set
ops = FALSE. Otherwise, trying to
foo@ba will evaluate
foo, trying to complete
foo[i, 1:10]$ba will evaluate
foo[i, 1:10], etc. This
should not be too bad, as explicit function calls (involving
parentheses) are not evaluated in this manner. However, this
will affect promises and lazy loaded symbols.
There are several unexported functions in the package. Of these, a few are special because they provide the API through which other mechanisms can make use of the facilities provided by this package (they are unexported because they are not meant to be called directly by users). The usage of these functions are:
.assignToken(text) .assignLinebuffer(line) .assignStart(start) .assignEnd(end)
.completeToken() .retrieveCompletions() .getFileComp()
.guessTokenFromLine() .win32consoleCompletion(linebuffer, cursorPosition, check.repeat = TRUE, minlength = -1)
The first four functions set up a completion attempt by specifying the
token to be completed (
text), and indicating where
end, which should be integers) the token is
placed within the complete line typed so far (
Potential completions of the token are generated by
.completeToken, and the completions can be retrieved as an Rcharacter vector using
.retrieveCompletions. It is possible for
the user to specify a replacement for this function by setting
rc.options("custom.completer"); if not
function is called to compute potential completions. This facility is
meant to help in situations where completing as R code is not
appropriate. See source code for more details.
If the cursor is inside quotes, completion may be suppressed. The
.getFileComp can be used after a call to
.completeToken to determine if this is the case (returns
TRUE), and alternative completions generated as deemed useful.
In most cases, filename completion is a reasonable fallback.
.guessTokenFromLine function is provided for use with
backends that do not already break a line into tokens. It requires
the linebuffer and endpoint (cursor position) to be already set, and
itself sets the token and the start position. It returns the token as
a character string.
.win32consoleCompletion is similar in spirit, but is more
geared towards the Windows GUI (or rather, any front-end that has no
completion facilities of its own). It requires the linebuffer
and cursor position as arguments, and returns a list with three
there is an unambiguous extension at the current position,
addition contains the additional text that should be inserted
at the cursor. If there is more than one possibility, these are
available either as a character vector of preformatted strings in
possible, or as a single string in
possible consists of lines formatted using the current
width option, so that printing them on the console one line at
a time will be a reasonable way to list them.
comps is a space
separated (collapsed) list of the same completions, in case the
front-end wishes to display it in some other fashion.
minlength argument can be used to suppress completion when
the token is too short (which can be useful if the front-end is set up
to try completion on every keypress). If
TRUE, it is detected if the same completion is being requested
more than once in a row, and ambiguous completions are returned only
in that case. This is an attempt to emulate GNU Readline behaviour,
where a single TAB completes up to any unambiguous part, and multiple
possibilities are reported only on two consecutive TABs.
As the various front-end interfaces evolve, the details of these functions are likely to change as well.
.addFunctionInfo can be used to add information
about the permitted argument names for specific functions. Multiple
named arguments are allowed in calls to it, where the tags are names
of functions and values are character vectors representing valid
arguments. When the
argdb setting is
TRUE, these are
used as a source of valid argument names for the relevant functions.