The goal of keys is to add hotkeys to shiny applications using
Mousetrap. With keys, you
can:
- Assign hotkeys on app load
- Add and remove hotkeys from server
- Pause and unpause hotkeys from server
- Record keys from server
Installation
Install the released version of keys from CRAN:
install.packages("keys")Or install the development version from GitHub with:
# install.packages("devtools") devtools::install_github("r4fun/keys")
You can also install keys with conda-forge. More information here:
https://github.com/conda-forge/r-keys-feedstock
Usage
To use keys, start by adding a dependency to it using useKeys().
Then, you can add a keysInput to the UI:
library(shiny) library(keys) hotkeys <- c( "1", "command+shift+k", "up up down down left right left right b a enter" ) ui <- fluidPage( useKeys(), keysInput("keys", hotkeys) ) server <- function(input, output, session) { observeEvent(input$keys, { print(input$keys) }) } shinyApp(ui, server)
You can add binding after application launch using addKeys.
library(shiny) library(keys) ui <- fluidPage( useKeys(), actionButton("add", "Add keybinding") ) server <- function(input, output, session) { observeEvent(input$add, { addKeys("keys", c("a", "b", "c")) }) observeEvent(input$keys, { print(input$keys) }) } shinyApp(ui, server)
Bindings can be removed after application launch using removeKey.
library(shiny) library(keys) ui <- fluidPage( useKeys(), keysInput("keys", c("a", "b", "c")), actionButton("rm", "Remove `a` keybinding") ) server <- function(input, output, session) { observeEvent(input$rm, { removeKeys("a") }) observeEvent(input$keys, { print(input$keys) }) } shinyApp(ui, server)
For more information about what types of hotkeys you can use, please take a look at the mousetrap github repository.
Acknowledgements
All credit goes to Craig Campbell who is
the author of Mousetrap.