marked with `vi_normal` mode will be available when in normal (when the cursor
moves using h, j, k or l)
:::
The event section of the keybinding entry is where the actions to be performed
are defined. In this field you can use either a record or a list of records.
Something like this
```nu
...
event: { send: Enter }
...
```
or
```nu
...
event: [
{ edit: Clear }
{ send: Enter }
]
...
```
The first keybinding example shown in this page follows the first case; a
single event is sent to the engine.
The next keybinding is an example of a series of events sent to the engine. It
first clears the prompt, inserts a string and then enters that value
```nu
$env.config = {
...
keybindings: [
{
name: change_dir_with_fzf
modifier: CONTROL
keycode: Char_t
mode: emacs
event:[
{ edit: Clear }
{ edit: InsertString,
value: "cd (ls | where type == dir | each { |row| $row.name} | str join (char nl) | fzf | decode utf-8 | str trim)"
}
{ send: Enter }
]
}
...
}
```
One disadvantage of the previous keybinding is the fact that the inserted text
will be processed by the validator and saved in the history, making the
keybinding a bit slow and populating the command history with the same command.
For that reason there is the `executehostcommand` type of event. The next
example does the same as the previous one in a simpler way, sending a single
event to the engine
```nu
$env.config = {
...
keybindings: [
{
name: change_dir_with_fzf
modifier: CONTROL
keycode: Char_y
mode: emacs
event: {
send: executehostcommand,
cmd: "cd (ls | where type == dir | each { |row| $row.name} | str join (char nl) | fzf | decode utf-8 | str trim)"
}
}
]
...
}
```
Before we continue you must have noticed that the syntax changes for edits and
sends, and for that reason it is important to explain them a bit more. A `send`
is all the `Reedline` events that can be processed by the engine and an `edit`
are all the `EditCommands` that can be processed by the engine.
### Send Type
To find all the available options for `send` you can use
```nu
keybindings list | where type == events
```
And the syntax for `send` events is the next one
```nu
...
event: { send: <NAME OF EVENT FROM LIST> }
...
```
::: tip
You can write the name of the events with capital letters. The
keybinding parser is case insensitive
:::
There are two exceptions to this rule: the `Menu` and `ExecuteHostCommand`.
Those two events require an extra field to be complete. The `Menu` needs the
name of the menu to be activated (completion_menu or history_menu)
```nu
...
event: {
send: menu
name: completion_menu
}
...
```
and the `ExecuteHostCommand` requires a valid command that will be sent to the
engine
```nu
...
event: {
send: executehostcommand
cmd: "cd ~"
}
...
```
It is worth mentioning that in the events list you will also see `Edit([])`,
`Multiple([])` and `UntilFound([])`. These options are not available for the
parser since they are constructed based on the keybinding definition. For
example, a `Multiple([])` event is built for you when defining a list of
records in the keybinding's event. An `Edit([])` event is the same as the
`edit` type that was mentioned. And the `UntilFound([])` event is the same as
the `until` type mentioned before.
### Edit Type
The `edit` type is the simplification of the `Edit([])` event. The `event` type
simplifies defining complex editing events for the keybindings. To list the
available options you can use the next command
```nu
keybindings list | where type == edits
```
The usual syntax for an `edit` is the next one
```nu
...
event: { edit: <NAME OF EDIT FROM LIST> }
...
```
The syntax for the edits in the list that have a `()` changes a little bit.