Scrapboxで範囲選択中にIMEをオフにしたい


まとめ

  • が消えないとあまりシームレスじゃないので、使うのやめる
  • どうやったら消せるんだろうなぁこれ


元の入力は要らないので切り捨てたい

  • known issueだった
  • だめ
    • preventDefault や stopPropagation の組み合わせを変える
    • 処理入った直後に実行してみる
  • モダンブラウザにおけるキー入力のキャンセル - Qiita
    • Firefoxの場合、keydownの後にcompositionupdateが発生するらしい
    • リスナー2つくって、クロージャかなんかで状態変数でやりとりすればいいかもしれない
    • ああ、ダメだ、IMEオンのときはkeydownに来ないんだ
//残骸。動かん
export function brackettingAlways() {
  document.addEventListener('keydown', e => {
   const eData = e.data
   console.log(e)

    const buttons = document.getElementsByClassName('popup-menu')
      ?.[0]?.getElementsByClassName('button')
    if (!buttons) return; // そもそもpopup menuがなかったら何もしない
    if (eData.length === 0) return;
    switch(eData.split('').pop()) {
      case '「':
        document.getElementsByClassName('button link-button')?.[0]?.click();
        break;
      default:
        break;
    }
  });

  document.addEventListener('compositionupdate', e => {
   const eData = e.data
   console.log(e)

    const buttons = document.getElementsByClassName('popup-menu')
      ?.[0]?.getElementsByClassName('button')
    if (!buttons) return; // そもそもpopup menuがなかったら何もしない
    if (eData.length === 0) return;
    switch(eData.split('').pop()) {
      case '「':
        document.getElementsByClassName('button link-button')?.[0]?.click();
        break;
      default:
        break;
    }
  });
}


[thk(thk.md) /takker/IME onの時、キー入力をScrapboxに渡すUserScript]

  • 範囲選択しているかどうかは「popup menu出てるか」で判定する
  • 出てたら0番目のbuttonをclick
export function execute() {
  document.addEventListener('compositionupdate', e => {
    const buttons = document.getElementsByClassName('popup-menu')
      ?.[0]?.getElementsByClassName('button')
    if (!buttons) return; // そもそもpopup menuがなかったら何もしない
    if (e.data.length === 0) return;
    switch(e.data.split('').pop()) {
      case '「':
        e.preventDefault();
        e.stopPropagation();
        document.getElementsByClassName('button link-button')?.[0]?.click();
        break;
      default:
        break;
    }
  });
} 


やりたいこと

  • 範囲選択中はほぼリンクをつける
  • IMEオンだとつかない → オフにして → つける、とかしてて面倒くさい
  • UserScriptでできないかしら
    • IME制御が無理ゲーな気がする
    • たぶんブラウザがセキュリティ的に許されてない