<br />

Sets a keydown event handler to the root panel with a non-predefined key. The handler is fired only once when a user presses the bound key command. The same key will be bound to the latest handler set to it.

<br />

| Usage | Returns |
|---|---|
| `ui.root.setKeyHandler(keyCode, handler, *description*)` |   |

| Argument | Type | Details |
|---|---|---|
| `keyCode` | List\[ui.Key\]\|ui.Key | A key code or an array of key codes. For example, ui.Key.A or \[ui.Key.SHIFT, ui.Key.A\]. |
| `handler` | Function | The handler for the key command. |
| `description` | String, optional | A short description that explains this key command. The description will be visible in the Shortcuts Menu. |

## Examples

### Code Editor (JavaScript)

```javascript
// Replace the default UI widgets with a few custom widgets.
// Print "Shift A" to the console when Shift+A is pressed.
ui.root.setKeyHandler(
  [ui.Key.SHIFT, ui.Key.A],
  function() {
    print('Shift A');
  },
  'A simple print'
);

// Create a solid black image.
var blackImage = ee.Image(1).visualize({palette: ['black']});

// Create a Layer object so we can easily manipulate its properties.
var blackLayer = ui.Map.Layer(blackImage, {}, 'Black Overlay', true);

// Add the layer to the Map.
Map.layers().add(blackLayer);

// Pressing the "b" key will toggle the layer on and off.
ui.root.setKeyHandler(ui.Key.B, function() {
  // Get the current visibility state.
  var isShown = blackLayer.getShown();

  // Set the visibility to the opposite of the current state.
  blackLayer.setShown(!isShown);

  // Print the status to the console.
  print('Black layer visible: ' + !isShown);
}, 'Toggle black layer');
```