ネット接続不要、単一の HTML ファイルだけで動く Markdown エディタ/ビューア offline-md-editor-viewer の v0.4.0 を出しました。これまでは 1 枚の文書を開いて編集して上書きするだけの道具で、別のメモを開くと前のメモが消えていました。今回から文書をタブで開けます。手を動かした時間のほとんどは、タブを切り替えて戻ったときに何が壊れるかの潰し込みでした。
切り替えて戻ってきたときに残っているのは本文だけ、では足りませんでした。アンドゥとリドゥの履歴、カーソル位置とスクロール位置、文字コードと BOM と改行コード、読み取り専用の切り替え、未保存を判定するための基準。これを全部タブ単位で持たせています。
ここを本文だけにすると、Shift_JIS で開いたファイルに戻ったら UTF-8 になっている、といったことが起きます。他の文書を触ったせいでアンドゥ履歴が消えるのも同じ理屈です。
タブを切り替えると、エディタとプレビューがまとめて入れ替わります。
タブが増えると、3 枚開いていて 2 枚が未保存という状態が普通に起きます。未保存のタブには印が付き、閉じようとするとその文書の名前を示して聞かれます。ウィンドウごと閉じるときも 1 件ずつで、どれか 1 つでもキャンセルすればそこで止まり、アプリは終了しません。
ブラウザ版だけは、ページ側のダイアログを出して待つことがブラウザの仕様上できないので、標準の離脱確認のままです。
対象のファイル名がダイアログに出ます。以前はまとめて 1 回の確認でした。
タブと、タブ列の空いているところに右クリックメニューを付けました。新しい文書、このタブを閉じる、他のタブを閉じる、右側のタブを閉じる、ファイル名をコピー、パスをコピー。保存先が要る項目は無題のタブでは出さず、エクスプローラーで開くはデスクトップ版だけに出します。
複数まとめて閉じるときも、未保存は 1 件ずつ確認します。
note 版には、デスクトップ版で別の .md を開いてもウィンドウが増えなくなった話と、その実装で配置ごとに識別子を分けた理由を入れています。パス表示行に付けたコピー・ボタンと、ファイル操作コマンドが受け取るパスそのものが symlink やジャンクションだった場合に拒否するようにしたセキュリティ側の変更も書きました。