Skip to content

feat: direct入力状態からabbrevモードを一時的に使うabbrevFromDirect APIを追加#243

Open
yoshphys wants to merge 3 commits intovim-skk:mainfrom
yoshphys:feat/abbrev-from-direct
Open

feat: direct入力状態からabbrevモードを一時的に使うabbrevFromDirect APIを追加#243
yoshphys wants to merge 3 commits intovim-skk:mainfrom
yoshphys:feat/abbrev-from-direct

Conversation

@yoshphys
Copy link
Copy Markdown
Contributor

@yoshphys yoshphys commented Mar 19, 2026

概要

skkeleton無効(direct入力)状態から直接abbrevモードに入り、変換確定またはキャンセル後に自動的にdisableに戻るabbrevFromDirect APIを追加します。

使用例

vim.keymap.set({ "i", "c", "t" }, "<C-/>", function()
  if not vim.fn["skkeleton#is_enabled"]() then
    vim.fn["skkeleton#handle"]("abbrevFromDirect", vim.empty_dict())
  end
end)

実装内容

  • Context.onAbbrevDone: abbrevセッション完了時のコールバックフィールドを追加。循環依存を避けながらdisable処理を委ねるために使用
  • initializeStateWithAbbrev(): onAbbrevDoneがある場合はmodeChange("hira")をスキップしてコールバックを実行(hiraへの一瞬の遷移を防ぐ)
  • abbrevFromDirect(): enableしてからabbrevモードに入り、onAbbrevDoneskkeleton#disableを設定
  • completeCallback(): ddc経由(<C-y>など)で確定した場合もonAbbrevDoneを処理(<C-y>はskkeletonのmapped_keysに含まれないため必要)
  • henkanInput(): abbrevFromDirectセッション中に変換候補を確定させるキーを入力した際、handleKey経由でkanaテーブルに通さず直接出力する。kakutei内でonAbbrevDoneskkeleton#disable)が呼ばれた後にキーがkana変換されてしまう問題を修正

依存

このPRはfix #242cancel()のバグフィックス)に依存しています。

yoshphys and others added 3 commits March 19, 2026 14:35
cancel()はinitializeState()を直接呼んでいたため、state.modeは
"direct"にリセットされるがmodeChange()は呼ばれず、context.mode
(およびvim.g["skkeleton#mode"])が"abbrev"のまま残るバグがあった。

initializeStateWithAbbrev()を使うよう変更することで、abbrevモードから
抜ける際にmodeChange("hira")が呼ばれ、表示上のモードが正しく同期される。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
skkeleton無効(direct入力)状態から直接abbrevモードに入り、
変換確定またはキャンセル後に自動的にdisableに戻る機能を追加する。

実装内容:
- Context.onAbbrevDone: abbrevセッション完了時のコールバックフィールドを追加
- initializeStateWithAbbrev(): onAbbrevDoneがある場合はmodeChange("hira")を
  スキップしてコールバックを実行(hiraへの一瞬の遷移を防ぐ)
- abbrevFromDirect(): enable後にabbrevモードに入り、onAbbrevDoneにdisableを設定
- handle()にaabbrevFromDirectルーティングを追加
- completeCallback(): ddc経由での確定時もonAbbrevDoneを処理

使用例:
  vim.fn["skkeleton#handle"]("abbrevFromDirect", vim.empty_dict())

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant