キーボードショートカット

useKeymap、キーシーケンス、?ヘルプオーバーレイ、キーヒント、コマンドパレット。

useKeymap でショートカットを一度宣言します。Text.jsはそれらを振り分け、? オーバーレイに一覧表示し、フッターに表示して、コマンドパレットで検索できるようにします。

ライブ80×18 · booting Turbolog…tsx
preview://keymap:1
useKeymap(  {    "j, down": { label: "Next", run: next, hint: true },    "k, up": { label: "Previous", run: previous },    "g g": { label: "Go to top", run: top },    "ctrl+s": { label: "Save", run: save, hint: true },  },  { group: "Navigation" },);return (  <>    <StatusBar right={<Text color="subtle">main</Text>}>      <KeyHints />    </StatusBar>    <CommandPalette commands={commands} />    <KeyHelp />  </>);

useKeymap

構文意味
ctrl+k修飾キー:ctrl alt shift meta mod
mod+k⌘ または Ctrl のうち、押されているキー
j, downいずれかのキー
g gキーシーケンス(キー間の間隔は1秒)
G大文字は Shift の併用
?入力文字との一致

値にはハンドラー、または label、group、hint、disabled、noRepeat を持つバインディングを指定します。ラベルのないバインディングも動作しますが、ヘルプオーバーレイには表示されません。

useKeymapBindings() は、現在有効なラベル付きバインディングを返し、独自のフッターやメニューに利用できます。

キーマップは useInput を通じて実行されるため、通常のルールが適用されます。フォーカスのある入力が優先され、一致したキーは伝播を停止し、開いている <Modal> はその外側のバインディングを無効にします。これを変更するには { priority, global, isActive } を渡します。

<KeyHelp>

? を押すと、ラベル付きのすべてのバインディングがグループ別に表示されます。開いた場所で有効なものが一覧表示されます。

<KeyHelp keys="?" title="Keyboard shortcuts" />

<KeyHints> と <StatusBar>

<KeyHints /> は、hint: true が指定されたバインディング、または明示的な items を表示します。<StatusBar> は right スロットを持つ1行のフッターです。

<StatusBar right={<Text color="subtle">▼ iad1</Text>}>  <KeyHints items={[{ keys: "ctrl+k", label: "commands" }]} /></StatusBar>

<Kbd>mod+k</Kbd> は単一のキーを描画します。formatKeys("ctrl+shift+p") は、macOSでは ⌃⇧P、それ以外では ctrl+shift+P を返します。

<CommandPalette>

Ctrl+K(または Ctrl+P)で、独自のコマンドとラベル付きのすべてのバインディングを対象にしたあいまい検索ランチャーが開き、一致した文字が強調表示されます。

<CommandPalette  commands={[{ id: "theme", label: "Toggle theme", group: "View", run: toggleTheme }]}/>
プロパティ説明
commands{ id, label, group?, keys?, keywords?, run }[]
keys開くためのショートカット(デフォルトは ctrl+k, ctrl+p、null で無効化)
includeKeymapキーマップのバインディングを一覧表示(デフォルトは true)
open / onOpenChange制御モード

パレットはコマンドを実行する前に閉じるため、コマンドから独自のモーダルを開けます。fuzzyMatch と fuzzyFilter は、独自のリストで使えるようにエクスポートされています。

GitHubでこのページを編集