---
title: "Using codriver"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{Using codriver}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)
knitr::opts_chunk$set(eval = FALSE)

```


Once you have configured a provider, codriver is the context-aware AI assistant
for RStudio that is literally at your fingertips. Codriver is by your side to
work in-place on the code you are editing.

_If you haven't configured yet, read the article 
[Getting started with codriver](getting-started-with-codriver.html)._

Codriver works directly in the RStudio source editor. At configuration time,
it binds to the shortcut key **`Ctrl+/`** (default; you can pass another
combination with the `shortcut` parameter). Pressing this shortcut — or
invoking from the **Addins** menu — launches codriver. Codriver inspects the
editor context, chooses and executes one of five modes, and presents the result.

Codriver works directly in the RStudio source editor. During configuration,
codriver offers to register the default keyboard shortcut **`Ctrl+/`**.
Shortcut registration is strongly recommended, but can be skipped or changed
later via **Tools > Modify Keyboard Shortcuts** in RStudio.

Pressing the keyboard shortcut - or invoking from the **Addins** menu - launches
codriver. Codriver inspects the editor context, chooses and executes one of five
modes, and presents the result.

This article explains the codriver modes and how results are presented.

------------------------------------------------------------------------

## Codriver modes

Codriver determines the mode from your cursor position and any selection. At a
high level:

- **At end of code → complete** \
  Codriver will complete the line of code at the cursor position.
  
- **On a comment line → generate** \
  Codriver will use the comment as a natural language instruction to generate
  new code.
  
- **In whitespace → continue** \
  Codriver will generate a new line or block of code without instruction, from
  context only. \
  _Note: whitespace directly after a comment line will trigger generate mode
  instead._
  
- **In code → edit** \
  Codriver will suggest improvements or fixes to existing code.
  
- **In an inline comment → comment** \
  Codriver will suggest a short inline comment (or improvement) for the code on
  the same line.

------------------------------------------------------------------------

## Result presentation

Depending on the context and selected mode, results are presented as **ghost
text** or an **edit suggestion**.

**Ghost text** - shown gray and italic in the editor - is used when codriver
suggests new content at the cursor position with nothing to replace. Accept with
`TAB`. Moving the cursor, clicking with the mouse, or typing anything other than
the suggested characters dismisses the suggestion.

**Edit suggestions** with green and red highlighting are used when codriver
proposes changes to existing code. Green for added text, red for removed text.
If the suggestion contains only additions, only removals, or a single addition
paired with a single removal on the same line, the changes are shown inline in
the existing code, with a marker in the gutter. Accept with `TAB` or by clicking
the gutter marker. `Escape` dismisses the suggestion.

For more complex changes, a small panel appears just below the affected code
instead. Accept with `TAB` or by clicking **Apply**. `Escape` or clicking
**Discard** dismisses the suggestion.

When codriver has no meaningful suggestion, it shows ghost text "# no
suggestion" or an edit suggestion panel with no changes highlighted.
