defineショートカット
アプリでキーボードショートカットを定義するためのコンポーザブル。
使用法
自動インポートされたdefineShortcutsコンポーザブルを使用して、キーボードショートカットを定義します。
<script setup lang="ts">
const open = ref(false)
defineShortcuts({
meta_k: () => {
open.value = !open.value
}
})
</script>
- ショートカットはmacOS以外のプラットフォーム用に自動的に調整され、
metaからctrlに変換されます。 - コンポーザブルは、VueUseの
useEventListenerを使用してキーダウンイベントを処理します。 - 利用可能なショートカットキーの完全なリストについては、
KeyboardEvent.keyAPIドキュメントを参照してください。設定内のキーは大文字小文字を区別しないため、meta_kとmeta_Kは等価です。
API
defineShortcuts(config: MaybeRef<ShortcutsConfig>, options?: ShortcutsOptions): () => void
アプリケーションのキーボードショートカットを定義します。コンポーネントのアンマウント前にショートカットを停止する必要がある場合に備えて、リスナーを削除する関数を返します。
パラメータ
config
MaybeRef<ShortcutsConfig> required
ショートカット定義と値がキーとなるオブジェクトは、ハンドラ関数またはショートカット設定オブジェクトのいずれかです。ショートカットをリアクティブに更新するには、
refを渡します。false、nullまたはundefinedの値は、ショートカットをスキップします。これにより、条件付きで有効にします。options
ShortcutsOptions
ショートカット動作のオプション設定。
chainDelay
number
ショートカットをチェーンとみなすためのキー押下間の遅延。デフォルトは
800です。layoutIndependent
boolean
有効にすると、ショートカットは文字値ではなく物理的なキー位置に一致することで、さまざまなキーボードレイアウト(アラビア語、ヘブライ語)で一貫して動作します。
falseデフォルト文字ベースのマッチングにe.keyを使用レイアウト固有true物理キーマッチングにe.codeを使用レイアウトに依存
ショートカット定義
ショートカットは以下の形式で定義されます。
- シングルキー:
'a'、'b'、'1'、'?'など。 - キーの組み合わせ
_を使用してキーを分離します。例:'meta_k'、'ctrl_shift_f' - キーシーケンス
-を使用してシーケンスを定義します。例:'g-d'
修飾子
meta/commandmacOSでは⌘ Command、その他のプラットフォームではCtrlを表します。ctrlすべてのプラットフォームでCtrlを表します。shift:Shiftが必要な場合のアルファベットキーに使用されます。alt/optionmacOSでは⌥ Option、その他のプラットフォームではAltを表します。物理的なキーの位置で一致します。OptionはmacOSで文字を書き換えます。
特殊キー
特殊キーにマッチする名前を使用します。
escapeEscキーのトリガーenter:Enterキーでトリガーarrowleft``arrowright``arrowup``arrowdownそれぞれの矢印キーでトリガーtabタブキーのトリガーbackspaceBackspaceキーのトリガーdeleteDeleteキーのトリガーspaceスペースバーのトリガー。altと組み合わせない限り、layoutIndependentが必要です。
ショートカット設定
各ショートカットは、次のプロパティを持つ関数またはオブジェクトとして定義できます。
interface ShortcutConfig { handler: (e?: KeyboardEvent) => void; usingInput?: boolean | string }
パラメータ
handler
(e?: KeyboardEvent) => void required
ショートカットがトリガーされたときに実行される関数です。発信元の
KeyboardEventを受け取ります。usingInput
boolean | string
入力フォーカスに基づいてショートカットがトリガーされるタイミングを制御します。
falseデフォルトショートカットは入力がフォーカスされていない場合にのみトリガーされます。true:入力にフォーカスがあってもショートカットがトリガーされますstring:指定した入力(名前)がフォーカスされた場合にのみショートカットがトリガーされます
例
基本的な使い方
<script setup lang="ts">
defineShortcuts({
'?': () => openHelpModal(),
'meta_k': () => openCommandPalette(),
'g-d': () => navigateToDashboard()
})
</script>
入力フォーカス処理付き
usingInputを使用して、特定の入力がフォーカスされている場合にのみショートカットをトリガーします。
<template>
<UInput v-model="query" name="queryInput" />
</template>
<script setup lang="ts">
const query = ref('')
defineShortcuts({
enter: {
usingInput: 'queryInput',
handler: () => performSearch()
},
escape: {
usingInput: true,
handler: () => clearSearch()
}
})
</script>
メニュー項目からショートカットを抽出する
extractShortcutsユーティリティを使用して、メニュー項目からショートカットを自動的に定義します。