Add a keyboard shortcut for triggering on-hover docs (#508)

* Add a keyboard shortcut for triggering on-hover docs

* Update changelog
This commit is contained in:
Jonatan Kłosko 2021-08-20 23:25:18 +02:00 committed by GitHub
parent f91c71bf3a
commit f9e67d27c0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 42 additions and 1 deletions

View file

@ -10,6 +10,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- Introduced file system abstraction and an S3 support ([#492](https://github.com/livebook-dev/livebook/pull/492))
- Added support for configuring file systems using env variables ([#498](https://github.com/livebook-dev/livebook/pull/498))
- Added a keyboard shortcut for triggering on-hover docs ([#508](https://github.com/livebook-dev/livebook/pull/508))
### Fixed

View file

@ -1,4 +1,4 @@
import monaco from "./live_editor/monaco";
import monaco, { addKeybinding } from "./live_editor/monaco";
import EditorClient from "./live_editor/editor_client";
import MonacoEditorAdapter from "./live_editor/monaco_editor_adapter";
import HookServerAdapter from "./live_editor/hook_server_adapter";
@ -193,6 +193,18 @@ class LiveEditor {
const contentHeight = this.editor.getContentHeight();
this.container.style.height = `${contentHeight}px`;
});
// Replace built-in keybindings
// Note that generally we want to stick to defaults, so that we match
// VS Code, but some keybindings are overly awkward, in which case we
// add our own
// By default this is a sequence of: Ctrl + K Ctrl + I
addKeybinding(
this.editor,
"editor.action.showHover",
monaco.KeyMod.CtrlCmd | monaco.KeyCode.KEY_I
);
}
/**

View file

@ -1,4 +1,5 @@
import * as monaco from "monaco-editor/esm/vs/editor/editor.api";
import { CommandsRegistry } from "monaco-editor/esm/vs/platform/commands/common/commands";
import ElixirOnTypeFormattingEditProvider from "./elixir/on_type_formatting_edit_provider";
import theme from "./theme";
@ -80,3 +81,23 @@ export function highlight(code, language) {
return result.replace(/<br\/>$/, "");
});
}
/**
* Updates keybinding for the given editor command.
*
* This uses an internal API, since there is no clean support
* for customizing keybindings.
* See https://github.com/microsoft/monaco-editor/issues/102#issuecomment-822981429
*/
export function addKeybinding(editor, id, newKeybinding) {
const { handler, when } = CommandsRegistry.getCommand(id) ?? {};
if (handler) {
editor._standaloneKeybindingService.addDynamicKeybinding(
id,
newKeybinding,
handler,
when
);
}
}

View file

@ -11,6 +11,13 @@ defmodule LivebookWeb.SessionLive.ShortcutsComponent do
desc: "Show completion list, use twice for details",
basic: true
},
%{
seq: ["ctrl", "i"],
seq_mac: ["", "i"],
press_all: true,
desc: "Show identifier documentation",
basic: true
},
%{
seq: ["ctrl", "shift", "i"],
seq_mac: ["", "", "f"],