.claude/skills/m3e-shortcuts/SKILL.md
M3E viewer.tsのキーボードショートカットを追加・編集・削除するためのガイド。ユーザーが「ショートカット追加」「キーバインド変更」「hotkey」「キーボード操作」などに言及したとき、または viewer.ts の keydown ハンドラを修正する必要があるときに使用する。
npx skillsauth add akaghef/M3E m3e-shortcutsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
M3Eのキーボードショートカットは final/src/browser/viewer.ts 内のグローバル keydown イベントハンドラで管理されている。ショートカット設定ファイルやレジストリは無く、if/else chainで直接記述するスタイル。
ショートカットの追加・編集・削除は以下の順序で行う。
まず以下のドキュメントを読み、現在のキー割り当てとアクション定義を把握する。
| ファイル | 内容 |
|---|---|
| dev-docs/06_Operations/Keybindings_Beta.md | キー → アクション名のマッピング(全キーの一覧) |
| dev-docs/06_Operations/Actions_Beta.md | アクション名 → 説明・備考 |
これらが「仕様」であり、実装の正解はここに書かれている。衝突チェックもこのドキュメントで行う。
実装対象は final/src/browser/viewer.ts の keydown ハンドラ。詳細は後述の「実装ガイド」を参照。
実装が完了したら、変更内容に応じて Keybindings_Beta.md と Actions_Beta.md を更新する。
Keybindings_Beta.md を更新Actions_Beta.md を更新Keybindings_Beta.md 側は — に戻す)ショートカット一覧のオーバーレイ(Ctrl/Alt 長押しで表示)は viewer.html 内の #shortcut-cheatsheet にハードコードされている。ショートカットを変更したら必ずこの HTML も同期させること。
beta/viewer.html(および同期時に final/viewer.html)内の <div id="shortcut-cheatsheet"> ブロック<div class="cheatsheet-row"><kbd>キー</kbd><span>説明</span></div>変更パターン:
<kbd> 内のキー表記を更新<div class="cheatsheet-group"> を新設npx tsc -p tsconfig.browser.json --noEmit
3つの独立した keydown ハンドラが存在する。目的に応じて正しいハンドラに追加すること。
| ハンドラ | 検索キーワード | 用途 |
|---|---|---|
| メインハンドラ | document.addEventListener("keydown" | ツリー操作全般(ノード選択、スコープ遷移、コピペ等) |
| インラインエディタ | input.addEventListener("keydown" | テキスト編集中のショートカット(Enter, Tab, Escape等) |
| リニアテキストパネル | linearTextEl?.addEventListener("keydown" | メモパネル内のショートカット(Ctrl+Enter保存等) |
document.addEventListener("keydown", (event: KeyboardEvent) => {
// ── ガード節 ──
if (!doc) return;
if (inlineEditor && document.activeElement === inlineEditor.input) return;
if (document.activeElement === linearTextEl) return;
// ── ショートカット定義(if → preventDefault → command → return) ──
// Ctrl系 → 特殊キー(Escape, Tab, Enter, F2) → 数字キー → Alt系 → 裸キー → 矢印キー
// この順序に意味がある:修飾キー付きが先、裸キーが後
});
if ((event.ctrlKey || event.metaKey) && !event.shiftKey && !event.altKey && event.key.toLowerCase() === "k") {
event.preventDefault();
myCommand();
return;
}
| やりたいこと | 条件式 |
|---|---|
| Ctrl/Cmd | (event.ctrlKey \|\| event.metaKey) |
| Ctrl/Cmd+Shift | (event.ctrlKey \|\| event.metaKey) && event.shiftKey |
| Alt | event.altKey |
| 裸キー(修飾なし) | !event.ctrlKey && !event.metaKey && !event.altKey && !event.shiftKey |
Mac互換のため、Ctrl条件には必ず event.metaKey を OR で含める。使わない修飾キーは明示的に !event.shiftKey 等で否定する(意図しない発火を防ぐため)。
| キーの種類 | 書き方 |
|---|---|
| アルファベット | event.key.toLowerCase() === "k" (CapsLock対応) |
| 数字 | event.key === "1" |
| 特殊キー | event.key === "Enter" ("Escape", "Tab", "F2", "Delete", "Backspace", "ArrowUp" 等) |
| 記号 | event.key === "]" |
ショートカットの挿入位置は優先度に直結する(最初にマッチしたものが発火)。
同じカテゴリ内では、既存のショートカットの近くに配置する。
event.preventDefault() — ブラウザデフォルト動作の抑止。必須。return — 後続ショートカットの発火を防止。必須。event.repeat — 長押し連打を防ぎたい場合は if (!event.repeat) ガードを追加(既存例: toggleReparentSource)。tools
会話中のアイデア・判断・思いつきをbacklog/にmdファイルとして即座に書き出す。 フォーマットチェック不要、速度優先。エージェント間の非同期コミュニケーションプールとして機能する。 以下の場面でトリガーする: - 「tomd」「backlogに書いて」「mdに残して」「書き下して」と言われたとき - 会話中に設計判断やアイデアが出て「残しておいて」「プールして」と言われたとき - 「backlogに突っ込んで」「メモっといて(backlog)」と言われたとき
development
M3Eプロジェクトでエージェントが作業開始時にロールを確定するスキル。 ワークツリーで起動した各エージェントは、最初にこのスキルを実行して 担当ロール・ブランチ・作業範囲・割り当てタスクを確認する。 以下の場面でトリガーする: - 「/setrole」「setrole」「ロール設定」と言われたとき - エージェントがワークツリーで起動された直後 - 「自分の担当は?」「何をすればいい?」と聞かれたとき - ブランチや作業範囲の確認が必要なとき devM3E の Execute フェーズでサブエージェントを起動する際に自動実行される。
development
M3E開発でPR(Pull Request)のレビュー・マージ・事後処理を行うスキル。 pr-beta(PR作成)の対になるスキルで、マネージャー側のワークフローを担う。 以下の場面でトリガーする: - 「/pr-review」「PRレビューして」「PR見て」「マージして」と言われたとき - PR URLやPR番号が提示されたとき - devM3E の Integrate フェーズでマージ判断が必要なとき - 「PRどうなってる」「PR状況」と聞かれたとき dev-beta ブランチ(統合ロール)で使うことを想定。部下ブランチから呼ばれた場合でも動作するが、マージ権限は統合ロールのみ。
development
M3E開発で作業ブランチから dev-beta へのPR(Pull Request)を作成するスキル。 subworker(codex1/codex2/feature branch)が作業完了後に統合マネージャーへ マージ依頼を出すワークフローを自動化する。 以下の場面でトリガーする: - 「/pr-beta」「PRを作って」「dev-betaにマージ」「統合して」と言われたとき - 作業ブランチでの実装が完了し、統合フローに進むとき - devM3E の Integrate フェーズでPR作成が必要なとき dev-beta 以外のブランチにいるときに使う。dev-beta 上で呼ばれた場合はエラーにする。