[設定]タブ¶
扱うこと: ワークスペース(インデックス・取り込み一覧・ログの置き場所)の表示・変更、設定ファイルの場所の表示、検索結果の件数の上限の変更。扱わないこと: 設定ファイルの中身そのもの(設定ファイル(setting.config))。先に読むページ: 画面、データの置き場所とパスの決め方。
設定の画面(xaml\settings\settings.xaml・ui\settings\settings.ps1)は、題と説明は置かず、節ごとの枠つきのカードを縦に並べる。いまの節は「インデックス設定」(「ワークスペース」と「設定ファイル」の 2 つの行)と「検索結果」(「検索結果の件数の上限」の行)で、最大並列処理数の行は置かない。中身の左端は、検索・インデックス管理と同じ位置(窓の中身の左端から 16)にそろえ、上の余白は 16。中身の幅は最大 880 で、左に寄せる。節は Section.Card(枠つきの面)の中に、Section.Header(見出しの帯。高さ 32)と Section.Row(行。上に細い線)を縦に並べて作り、節(カード)の間は 16 にする(2 つ目からのカードに Margin="0,16,0,0" を付ける)。値を見せるだけの箱は Field.ReadOnly(高さ 30)。節を足すときもこの形で作る。中身が窓の高さを超えるときは、画面全体が縦にスクロールする。左の欄の最後の画面にする。
検索結果の件数の上限(searchLimit)は、「検索結果」の節の行で変える。右に[制限あり](ラジオ)と数の欄・件、その下に[制限なし](ラジオ)を置き、下に範囲と既定(1,000~100,000 件の範囲で指定できます。既定は 10,000 件です。)と、重さの注意(getSearchLimitTexts)を出す。判断は判断層の getSearchLimitView・getSearchLimitInputDecision(settings_view.ps1)が行う。
- [制限あり]: 欄に数を入れ、Enter か欄から出たときに確定し、Esc で今の値に戻す。全角の数字・前後の空白は受ける。
,は表示だけのものなので、どこにあっても無視する(表示された10,000の桁を足し引きしてもそのまま受ける)。範囲の外・数字でない文字は、欄の直下の理由(SearchLimitInputError。欄の枠も赤にする。場所はいつも空けておき、出ても下の行が動かない)に直し方を出して、変えない。 - [制限なし]: 選ぶとすぐ確定し、欄の数は既定を残して見せる。
searchLimitは 0 になり、検索は打ち切らず、打ち切りの文言も出さない。 - 確定すると
writeSearchLimitでsetting.configに書き、画面の控え($script:searchLimit)を直す。次の検索から効き、実行中の検索は変わらない。書けなかったときは理由を出して今の値に戻す。
今の画面の写真は画面設計(現行)にある。
ワークスペースは、インデックス・取り込み一覧・ログ(work の中身。配布物と開発用のフォルダ構成)を置くフォルダ。既定は %USERPROFILE%\Documents\tebunko_ws(データの置き場所とパスの決め方)。
stateDiagram-v2
state "既定の場所" as DefaultLoc
state "変更先のフォルダ" as Custom
[*] --> DefaultLoc
DefaultLoc --> Custom : [変更…]→ 確認 → ChangeWorkspace
Custom --> Custom : [変更…]→ 別のフォルダへ
Custom --> DefaultLoc : [既定に戻す]
「ワークスペース」の行には、今のワークスペースのフォルダを入力欄で出し、その下に補足を出す。既定の場所なら 既定の場所(ドキュメントの tebunko)です。、既定でなければ 既定の場所は「<既定の場所>」です。。その下に、注意(インデックスには文書の文字がそのまま入ります。…更新中は変えられません。)を先に、変え方(空のフォルダを選んでください。…)をあとに、2 つの段落で出す(見出しの補足より濃い Meta。getWorkspaceCautionTexts)。「設定ファイル」の欄には setting.config の場所を、枠を付けない読み取り専用の文字(選んでコピーできる。押しても何も起きない)で出し、ツールのフォルダにあれば ツールのフォルダに置いています。、既定のワークスペースの直下なら ツールのフォルダ(<ツールのフォルダ>)に書き込めないため、既定のワークスペースに置いています。 と補足する。文言は判断層の getWorkspaceView・getSettingsFileView(settings_view.ps1)が決める。
- [変更…]: フォルダ選択ダイアログ(フォルダ選択ダイアログ([参照…])。説明は
ワークスペースにする空のフォルダを選んでください。…)で空のフォルダを選んでもらい、ワークスペースにする。空でなければ警告する(下)。確認のあとに中身を移す・消す処理は裏で行い、待つ間のダイアログ(ワークスペースを移しています…)を出して本体の操作を止める。終わったら新しいワークスペースに切り替わる。失敗したときは警告を出し、今のワークスペースのまま使える。 - 欄に直接入力: ワークスペースのパスは、欄(
WorkspaceBox)に入力して変えられる。Enter か欄から出たときに確定し、Esc で取り消す。判断はgetWorkspaceInputDecision(settings_view.ps1)で、入力した文字のまま、ドライブ文字から始まるローカルのドライブのパス(testLocalDrivePath)だけを進める。空・相対パス・環境変数(%を含むもの。展開しない)・ネットワークの場所(\\サーバー\共有・割り当てたドライブ・つながっていないドライブ)・デバイス名の形(\\.\\\?\)は、欄の下(WorkspaceInputError)に直し方を出して、変えない(Enter のときは欄の文字を残し、欄から出たときは今の場所に戻す。Esc は今の場所に戻して理由を消す)。ネットワークの場所は、画面のスレッドでネットワークに触れないため、入力では受けず、[変更…]で選んでもらう。パスの整形(normalizeFolderPath)は、ローカルのドライブと分かってから行う。受けたパスは、[変更…]で選んだときと同じapplyWorkspaceに進み、下の表のとおり確かめて切り替える(無いフォルダは「ファイルを作れません」の警告で変えない)。更新中は、判断がBlockedを返し(理由は[変更…]と同じ文言)、欄から出たときはメッセージを出さずに今の場所に戻し、Enter のときは理由を欄の下に出して文字を残す。[変更…]・[既定に戻す]は、どの終わり方でも欄を今の場所に戻し、入力途中の文字と理由を消す。確認の画面を出している間は、[変更…]・[既定に戻す]・欄の入力のどれも重ねて始めない(invokeWorkspaceChange)。 - [既定に戻す]: 既定の場所に戻す(無ければ作る)。ほかのファイルが置いてあれば
「…」は空のフォルダではありません。…と出して戻さない(前から使っているワークスペースなら戻す)。設定ファイル(setting.configと、それに付く.tmp・.broken-<日時>)は、ツールのフォルダに書けないときに既定の場所へ置くので、ほかのファイルとして数えない。既定でない場所のときだけ表示する。
どちらも、更新中(画面を使わずに起動したものも含む)と、前のインデックスの削除・名前の変更中は変えられない(更新中はワークスペースを変えられません。…)。選んだフォルダは testWorkspaceChoice が調べる。
| 選んだフォルダ | 動き |
|---|---|
| 今と同じ(書き方の違い・ドライブの割り当てを含む) | 何もしない(ステータスに 今と同じワークスペースです) |
今のインデックス(<ワークスペース>\store\content。前の版の content_index も)の中 |
「<フォルダ>」は今のインデックスのフォルダの中です。… と出して変えない |
| ファイルを作れない | 「<フォルダ>」にはファイルを作れません。書き込めるフォルダを選んでください。 と出して変えない |
| 空のフォルダ | 確認ダイアログを出す |
| 空でないフォルダ | 警告のダイアログを出す |
どちらのダイアログも 確認ダイアログ の形で、中身は newWorkspaceConfirm が決める。
確認ダイアログ(空のフォルダ) の見出しは インデックスとログを「<フォルダ>」へ移動します。、ボタンは[移動する]([既定に戻す]からは[戻す])。
→ インデックス・ログを、このフォルダに置きます(選んだフォルダ)→ 今のワークスペースの中身(インデックス・ログ)は、新しいワークスペースへ移します(移す前の場所:<今のワークスペース>)
警告のダイアログ(空でないフォルダ) の見出しは 選んだフォルダは空ではありません。ワークスペースには空のフォルダを選んでください。。選び直さなくても済むよう、選んだフォルダの中にワークスペースのフォルダを作る選択肢も出す。既定のボタンは[キャンセル](何もしない。空のフォルダを選び直す)。
-
! このフォルダは空ではありません(ファイル・フォルダが N 個)(中身の名前を先頭の 3 つまで。ほかにもあればなど。数えるのは 1,000 個までで、それ以上は1,000 個以上) -
→ 今のワークスペースの中身(インデックス・ログ)は、新しいワークスペースへ移します - 選択肢[中に「workspace」を作って使う](
<選んだフォルダ>\workspace):workspaceが無いか、あっても空のときだけ出す。作ってから、そこをワークスペースにする。 - 選択肢[このフォルダをそのまま使う](
中のファイルは消しません。tebunko のファイルが同じフォルダに混ざります)。
インデックスがあるフォルダ(中に tebunko のファイル・フォルダ(WorkspaceMover.ListEntries)があるとき。ほかの人が共有したワークスペースなど)の見出しは 選んだフォルダには、すでにインデックスがあります。どうしますか?。インデックスを共有し、ほかの人が使えるようにするための選択肢を出す。既定のボタンは[キャンセル]。
✓ インデックス・取り込み一覧などがあります(中にある名前)→ 使うときは、インデックスの一覧もこのワークスペースのものにします(今のワークスペースの中身は移さず、元の場所に残します:<今のワークスペース>)- 補足:
ほかの人が共有したインデックスを使うときは[あるインデックスを使う]を選んでください。 - 選択肢[あるインデックスを使う]: 今のワークスペースの中身は移さない。インデックスの一覧(
targetFolders)を、そのワークスペースの取り込み一覧にあるクロール対象フォルダにする(WorkspaceMover.UseTargets。新しい取り込み一覧と前の版の取り込み一覧の両方を読み、新しい方を先にして無い名前を足す。取り込み一覧が無ければ一覧は変えない)。一覧を合わせないままインデックス作成をすると、一覧に無いインデックスが削除されたフォルダのものとして消えるため。 - 選択肢[消して、最初からやり直す](赤いボタン。
このフォルダのインデックス・ログを削除し、今のワークスペースの中身を移します(元に戻せません)): そのフォルダの tebunko のファイル・フォルダだけを削除し(WorkspaceMover.RemoveEntries。ほかのファイルは消さない)、今のワークスペースの中身を移す。
決めると、実行中の検索を止めてから、今のワークスペースの中身(tebunko が作るファイル・フォルダだけ。利用者のほかのファイルと、既定のワークスペースに置いた設定ファイルは移さない)を新しいワークスペースへ移す(WorkspaceMover.MoveEntries。データの置き場所とパスの決め方)。移し先に同じ名前があるときは何も移さず、フォルダをほかの処理が一時的に掴んでいて移せないときは、待ちながら数回試す(moveDirectoryRetry。最大およそ 3 秒)。数回試しても移せなければ、移した分を戻し、理由を知らせてワークスペースを変えない。戻せなかった項目があれば、その名前と残っている場所(移し先)を知らせる。別のドライブへは写してから元を消し、元を消せなかったときは移し先を正として切り替えたうえで、残った元の場所を警告で知らせる(手で消してもらう)。移せたら setting.config の workspaceFolder に保存し(既定の場所なら空)、画面は開き直さず、その場で新しいワークスペースに切り替える(ui/settings/settings.ps1 の switchWorkspace)。実行中の検索は止め、検索結果・プレビューを空にし、インデックス一覧・更新の状態・検索対象のツリー・件数を新しいワークスペースから読み直す。切り替える前に始めた裏の仕事(更新の状態の集計・件数の数え上げ)の結果は、画面に出さない。インデックス一覧(クロール対象フォルダ)は変わらず、中身を移したので、インデックス・更新の状態もそのまま使える。検索対象のツリーでチェックを外したフォルダ(searchExcludes)は <ワークスペース>\store\content の下のフルパスで持つため、移した先のインデックスの下に付け替える(moveSearchExcludes)。