csmをCSM(CuStoMise) コピペ機能を検証する

全国1億2000万のctrlswapminiユーザーの皆様こんばんわ、DORです。

唐突ですが、皆様はUKEditorって使ったことありますか? 文字コード指定や正規表現が使える高機能なエディタです。ちなみにDORは今日初めて使いました(ぉ

で、実はこのUKEditorではcsmポケベル入力のコピペ機能が正常に動作しないのです。

目的

UKEditorでcsmのコピペ機能が正常に動作するようにする。

解説

まず、コピペ機能がどういった処理をしているのか見てみましょう。以下は2タッチ入力に標準で定義されているコピペ機能(抜粋)です。

Key bell # [#]
raw DOWN VK_CONTROL DOWN A UP A UP VK_CONTROL # [1] CTRL+A
raw DOWN VK_SHIFT DOWN VK_RIGHT UP VK_RIGHT # [2] select start
raw DOWN VK_SHIFT UP VK_SHIFT # [5] select end
raw DOWN VK_CONTROL DOWN X UP X UP VK_CONTROL DOWN VK_SHIFT UP VK_SHIFT # [7] CTRL+X
raw DOWN VK_CONTROL DOWN C UP C UP VK_CONTROL DOWN VK_SHIFT UP VK_SHIFT # [8] CTRL+C
raw DOWN VK_CONTROL DOWN V UP V UP VK_CONTROL # [9] CTRL+V

この中で「DOWN 〜」「UP 〜」と書いてある箇所が実際のキー入力を定義している箇所です。
例として[#][2]で選択開始して[#][7]で切り取る際は以下の順でキー入力が行われます。

  1. Shift押す(Shift)=選択開始
  2. Right押す(Shift+right)=カーソルを1つ右へ ※選択開始したことを分かりやすくするための処理
  3. Right離す(Shift)
  4. Ctrl押す(Ctrl+Shift)
  5. X押す(Ctrl+Shift+X)=切り取り
  6. X離す(Ctrl+Shift)
  7. Ctrl離す(Shift)
  8. Shift押す(Shift)
  9. Shift離す(なし)

切り取りのときCtrl+Shift+Xが入力されているのと、その後Shiftを押し直して離しているのが分かります。大半のアプリではこれで問題ないのですが、UKEditorのように「Ctrl+X」と「Ctrl+Shift+X」が区別されるアプリでは正常に動作しないわけです。

変更箇所

  • Keymap niko_normal
    • Key bell # [#]
    • raw DOWN VK_CONTROL DOWN X UP X UP VK_CONTROL DOWN VK_SHIFT UP VK_SHIFT # [7] CTRL+X
    • raw DOWN VK_CONTROL DOWN C UP C UP VK_CONTROL DOWN VK_SHIFT UP VK_SHIFT # [8] CTRL+C
  • Keymap niko_small
    • 同上

※ニコタッチ入力ではなくポケベル入力の方は適宜読み替えて下さい

変更内容

    • raw UP VK_SHIFT DOWN VK_CONTROL DOWN X UP X UP VK_CONTROL DOWN VK_SHIFT UP VK_SHIFT # [7] CTRL+X ←行修正
    • raw UP VK_SHIFT DOWN VK_CONTROL DOWN C UP C UP VK_CONTROL DOWN VK_SHIFT UP VK_SHIFT # [8] CTRL+C ←行修正

続・解説

先ほどと同じ[#][2]→[#][7]の例で、

  1. Shift押す(Shift)=選択開始
  2. Right押す(Shift+right)=カーソルを1つ右へ
  3. Right離す(Shift)
  4. Shift離す(なし)
  5. Ctrl押す(Ctrl)
  6. X押す(Ctrl+X)=切り取り
  7. X離す(Ctrl)
  8. Ctrl離す(なし)

になり、切り取りがCtrl+Xで行われているのが分かります。

ちなみにDOWN VK_SHIFTを1つ削っていますが、これはUPだけで問題ありません([#][2]はDOWNだけなので、その逆もできるわけです)

おまけ

UKEditorのUKEditor.keyを編集して、Ctrl+Shift+?に機能を割り当ててしまってもいいです。ついでに^A(Ctrl+A)が、[HOME]でedit_select_allと重複しているので、[HOME]のショートカットを変更しておきましょう。これでcsmの[#][1]で全選択が使えるようになります。