library(rstudioapi)
RStudio v1.4 includes a new visual
editing mode, which provides a WYSIWYM-style editing
interface for R Markdown documents. This vignette describes how
rstudioapi
can be used to interface with the RStudio visual
mode editor.
Most of the pre-existing rstudioapi
functions used for
interacting with a document
(e.g. rstudioapi::getSourceEditorContext()
) consume and /
or produce objects which describe the position of the current selection
in terms of row + column offsets into the document. Unfortunately, this
abstraction does not neatly map into visual editing mode, as there is no
notion of a “global” cursor position – rather, a cursor might be placed
into a particular cell, and could have an offset somewhere into that
cell.
If you are an RStudio Addin author, then you may want to ensure your addins are visual-mode-aware, so that they can function regardless of whether the user has enabled visual mode. To that end, we’ve introduced a small set of functions, which are more narrow in scope but can function in both source and visual mode:
rstudioapi::documentId()
: Retrieve the ID associated
with the document currently open and being edited in the RStudio
IDE.rstudioapi::documentPath()
: Retrieve the path on disk
for a file currently open in the RStudio IDE.rstudioapi::selectionGet()
: Get the contents of the
user’s selection.rstudioapi::selectionSet()
: Set the contents of the
user’s selection.In addition, the rstudioapi::insertText()
function will
function in both source and visual mode, as long as only the
text
argument is supplied.
Using this, you can build addins that modify the user’s selected
text. For example, a function that uses rstudioapi
to
reformat the user’s current selection might look like this:
<- function() {
reformat <- rstudioapi::documentId(allowConsole = TRUE)
id <- rstudioapi::selectionGet(id = id)
selection <- styler::style_text(text = selection$value)
formatted ::selectionSet(value = formatted, id = id)
rstudioapi }