選択範囲に似ているリンクを入力補完するUserScript
機能
ページ中の文字を選択すると、選択した文字に近いリンクが表示される
defaultで5個まで表示される。
一番下に、表示されなかったリンクの個数がでる
表示されたリンクを押すと、そのリンクで選択範囲が置き換わる
右クリックメニューやCtrl+クリックで、リンク先ページを新しいタブで開いたり、リンクをコピーしたり、ドラッグアンドドロップでリンクを挿入できたりもする
注意
コードブロック中、ページタイトル、テーブル記法のタイトルでは起動しない
複数行選択しているときも起動しない
使い方
簡単な方法
カスタマイズ
css変数 | default |
--select-suggest-bg | #111 |
--select-suggest-font-family | "Open Sans", Helvetica, Arial, "Hiragino Sans", sans-serif |
--select-suggest-text-color | #eee |
--select-suggest-border-color | #eee |
--select-suggest-selected-bg | #222 |
--select-suggest-information-text-color | #aaa |
setup()
にoptionを渡して制御できる
操作函数は await setup()
の戻り値に入っている
これを使って、各自でショートカットなどを実装する
動機
これと同じ不満を持っていた
どこから引用したか書き忘れてた
井戸端に置いたページにソースがある
で、最近(2022-08中旬)「
選択中に
入力補完が表示されればいいのでは?」と思いついた
体調が悪くて他のことができそうになかった
2023-01-26 08:20:10 えっこれ作ったの8月ってマジ?
もっと最近に作ったscriptだと思ってた
バグ
Firefoxでのみ発生している
Firefoxの問題かも
候補更新時に、選択状態をresetしない
最初と最後しか検索結果が更新されないようになっちゃった
実装したいこと
文字入力補完のスクショも撮る
popupmenuが表示されているときでも補完を有効にする
simple.tsに実装する
popup menuの(先頭|末尾)候補を選択しているときに次候補へ移動しようとしたら、このuserscriptの補完候補へ移動できるようにする
✅ショートカットキーの導入
選択・確定操作を外部から操作できるようにする
ショートカットキーの設定はユーザーに任せる
Promiseを使って吐き出す
workerを使う
モチベ
✅外部projectのリンクも補完できるようになる
ソース取得先を変えればいいだけ
実装
検索結果のやりとり
やってもいいんじゃない?
中断処理なしなら、補完候補を選んでいる途中にアイテムが変わって誤クリックする確率が減る
たぶん500ms以内で計算し終わるなら、中断処理なしでも動く
useSource
を廃止し、検索処理内でdatabaseを読み込むようにする
Workerに移行する前の前準備
Worker内でIndexed DBから直接データを読み込んで検索するようにする
タブごとにDBからデータを構築せずに済む
export不要
これは難しい
すべてのsourceを一つに合体してしまっている
メモリを節約する
タブがアクティブでないときは、リンクデータを解放する
アクティブになるたびにDBから読み出す?
同じ現象発生しているんだよなあ……
不便に慣れてしまいがちなので放置していたが、直そうかな
高速に絞り込まれていくヌルヌル感が目眩となって楽しさを産むのを体験してみようか
そっちのほうがテストもしやすい
❌補完ソースのデータ形式
現在
{...; projects: string[]; }[]
ヒットしたリンクの統計データをprojectごとに計算するのが難しい
例:編集距離dでマッチしたリンク数を各projectで計算する
検索と同時にカウントすれば、あまり難しくないかも
案
Map<string/* project name */, Link[]>
projectごとに絞り込む処理が高速になる
検索するリンク数が増える
重複しているリンクを、project数回検索しなければならなくなる
大したoverheadではないだろう
重複しているリンク数なんて、たかが知れている
project一つ一つを、独立したsourceとみなす
mod.tsxexport * from "https://raw.githubusercontent.com/takker99/scrapbox-select-suggestion/0.10.8/mod.tsx";
advanced.tsexport * from "https://raw.githubusercontent.com/takker99/scrapbox-select-suggestion/0.10.8/examples/advanced.ts";