Mery.his を編集対象ファイルと同じフォルダに置きたい

  1. Kuroさま、毎日 Mery を愛用させて頂いております。

    要望なのですが、Mery.his を編集対象ファイルと同じフォルダに置けるオプションを追加して頂けないでしょうか。

    理由として、ファイルを OneDrive に保存し複数端末で同期しているのですが、ブックマーク位置を保存する Mery.his が同期対象外のフォルダにあるため、ブックマークした端末以外で編集するとブックマーク位置がずれてしまいます。
    Mery.his を同期対象にするという方法も考えられますが、現状の Mery.his は同期していない端末固有ファイルの情報も保持しているためゴミの蓄積や意図しない動作の要因になるかと思います。

    トレイアイコンを利用していることからインストール版に欲しい機能なのですがいかがでしょうか。

    ご検討のほど宜しくお願い致します。

     |  Toku  |  返信
  2. Mery をご愛用いただき、ありがとうございます。

    > 要望なのですが、Mery.his を編集対象ファイルと同じフォルダに置けるオプションを追加して頂けないでしょうか。

    たとえば、C:\Temp\File1.txt を編集する際に、履歴ファイルとして C:\Temp\File1.his を書き出し/読み込みするということでしょうか?

    その場合、残念ながら対応は難しそうです。

    というのも、指定したファイルとは異なり、「自動的に」意図しないファイルが書き出されたり読み込まれたりするリスクがあるからです。

    たとえば、共有フォルダーやネットワークドライブでは、履歴ファイルが他のユーザーにアクセスされたり、外部から改ざんされるリスクがあります。

    また、File1.his が Mery の履歴ファイルとは限らないため、他のアプリケーションによって上書きされることや、逆に Mery が他のアプリケーションのファイルを上書きする可能性もあります。

    そのため、履歴ファイルや設定ファイルは、安全な場所や、ユーザーが意図的に指定した場所に保存することが推奨されます。

    > Mery.his を同期対象にするという方法も考えられますが、現状の Mery.his は同期していない端末固有ファイルの情報も保持しているためゴミの蓄積や意図しない動作の要因になるかと思います。

    そうですね。たとえば、Mery.his に記録されたファイルのパスが他の端末には存在しない場合、そのエントリは無視されます。

    アプリケーションには影響しませんし、ゴミもたまりませんが、ローカルに存在しないファイルのエントリは Mery.his の更新時に削除されてしまいます。

    セキュリティに問題がなければ、ファイルを保存したり開いたりするときに、ブックマークを任意のファイルに保存・復元するマクロを作成することで、ある程度実現できるかもしれませんが…。

    また、技術的な選択肢としては、設定ファイルの保存先を任意のフォルダーに指定できる機能を導入し、OneDrive などのクラウドフォルダーを利用することも考えられます。

    この機能は、Notepad++ や EmEditor さんでも提供されています。

    ただし、同期できるのは設定など端末に依存しない部分のみで、ファイルに紐づいたカーソル位置やブックマークの同期はできないようです。

    テキストエディターの性質上、ファイルにデータを埋め込むこともできませんし、ファイルから切り離されたデータをファイルの同期と同じ感覚で同期させるのは難しそうです。

    このような同期の仕組みについては、現状あまり詳しくないため、すぐに対応できるわけではありませんが、いただいたご意見を参考に、今後の課題として検討してみたいと思います。

     |  Kuro  |  返信
  3. Kuroさま、ご返信ありがとうございます。

    > たとえば、C:\Temp\File1.txt を編集する際に、履歴ファイルとして C:\Temp\File1.his を書き出し/読み込みするということでしょうか?

    編集対象を C:\Temp\File1.txt とするならば C:\Temp\.mery_his もしくは C:\Temp\.mery\mery.his の様な感じでイメージしています。

    ・ドットで始まるファイル/フォルダにする事で衝突をなるべく回避する
    ・編集対象ファイル単位ではなく、同一フォルダ内のファイルは一つの履歴ファイルで管理する

    > たとえば、共有フォルダーやネットワークドライブでは、履歴ファイルが他のユーザーにアクセスされたり、外部から改ざんされるリスクがあります。

    おっしゃる通りですね。
    そこまで考慮できていませんでした。

    同様の要望がこれまで上がってこなかったということでしたら大半の Mery ユーザーが現仕様で満足しているということだと思いますので、仕様を変えてしまうのではなくユーザーの選択式にすることではいかがでしょうか。

    設定オプションで %APPDATA%\Mery\Mery.his を使うか編集ファイルのカレントフォルダの xxx を使うか選べる
    もしくは
    編集ファイルのカレントフォルダに xxx があったらこれを優先して使用する

    xxx はユーザー設定にする・しない

    などです。

    > ただし、同期できるのは設定など端末に依存しない部分のみで、ファイルに紐づいたカーソル位置やブックマークの同期はできないようです。

    ご参考までですが、VS Code に Bookmars 拡張機能をインストールするとカレントフォルダに .vscode\bookmarks.json として保存されるようです。

    編集対象ファイルに関する情報をその付近で管理することができるようになると、クラウドストレージ上のファイルを端末を移動しながら継続的に直接編集できるようになる、といった夢が広がるかなと思っています。

    宜しくお願い致します。

     |  Toku  |  返信
  4. 一点忘れました。

    > また、技術的な選択肢としては、設定ファイルの保存先を任意のフォルダーに指定できる機能を導入し、OneDrive などのクラウドフォルダーを利用することも考えられます。

    %APPDATA%\Mery\Mery.ini の同期は一長一短あるかと思います。

    複数端末で設定を揃えられるメリットがある反面、端末毎に状況が異なる(画面の解像度やインストールしているフォントの違い等)ところで影響もありそうです。

     |  Toku  |  返信
  5. ご返信ありがとうございます。

    > 同様の要望がこれまで上がってこなかったということでしたら大半の Mery ユーザーが現仕様で満足しているということだと思いますので、仕様を変えてしまうのではなくユーザーの選択式にすることではいかがでしょうか。

    ご提案の意図は非常によく理解できます。しかし、選択式にした場合でも、セキュリティリスクを伴う機能を標準で提供するのは難しい状況です。

    > ご参考までですが、VS Code に Bookmars 拡張機能をインストールするとカレントフォルダに .vscode\bookmarks.json として保存されるようです。

    私も VS Code の Bookmarks 拡張機能を試してみました。

    確かに [Save Bookmarks In Project] を有効にすると、プロジェクトフォルダーに .vscode\bookmarks.json が保存されました。

    ただし、この動作はプロジェクトフォルダーを開いている場合に限られるようです。

    VS Code では、フォルダーを開く際に「このフォルダー内のファイルの作成者を信頼しますか?」という警告が表示され、同意した場合のみファイルの自動読み書きが許可される仕組みになっているようです。

    試しにプロジェクトフォルダー外のファイルにブックマークを追加してみたところ、そのデータはファイルが存在するフォルダーではなく、VS Code のローカル設定保存場所 (workspaceStorage の state.vscdb) に保存されました。

    この設計もセキュリティリスクを軽減するためのもののようですね。

    このような理由から、Mery で同様の機能を標準で実装するのは難しいですが、セキュリティ面を気にされない場合は、Mery 用のプラグインを作成することで同様の機能を実現することは可能だと思います。

    ただし、現時点ではブックマークの取得や設定を行う API はプラグインに提供されていないため、ブックマーク関連の API 追加については検討してみたいと思います。

    > 編集対象ファイルに関する情報をその付近で管理することができるようになると、クラウドストレージ上のファイルを端末を移動しながら継続的に直接編集できるようになる、といった夢が広がるかなと思っています。

    Mery では、そこまでの対応は少々難しいかもしれません。

    複数端末で同時にファイルを編集する際の整合性を保つのも難しく、クラウド対応エディターを利用する方が現実的だと思います。

    > 複数端末で設定を揃えられるメリットがある反面、端末毎に状況が異なる(画面の解像度やインストールしているフォントの違い等)ところで影響もありそうです。

    おっしゃるとおり、端末ごとの環境差による影響も無視できませんね。

    複数端末で設定を共有したいというご要望はいただいていないので、需要はあまりないかもしれませんね。

    他のエディターで実装されていた機能だったので、ちょっと気になった次第です。

    今のところ実装の予定はありませんが、もし将来的に検討することがあれば、その際はご意見を参考にさせていただきますね。

     |  Kuro  |  返信
  6. Kuroさま、ご返信ありがとうございます。

    > ご提案の意図は非常によく理解できます。しかし、選択式にした場合でも、セキュリティリスクを伴う機能を標準で提供するのは難しい状況です。

    承知しました。

    > 私も VS Code の Bookmarks 拡張機能を試してみました。

    このようなものもあるみたいです、程度にご紹介しましたが詳細に調査頂きありがとうございます。
    ファイル単体を開いた時の保存先について私も確認できました。

    > ただし、現時点ではブックマークの取得や設定を行う API はプラグインに提供されていないため、ブックマーク関連の API 追加については検討してみたいと思います。

    楽しみにしています。

    ブックマーク関連に含まれるとよいのですが、カーソル位置とマーカーにもアクセスできるとありがたいです。
    尤もハードルが高そうなのでプラグインを作れる自信はありませんが。

    > 複数端末で同時にファイルを編集する際の整合性を保つのも難しく、クラウド対応エディターを利用する方が現実的だと思います。

    あくまで夢ということで。
    ただ、セキュリティという観点ではクラウドストレージそのものに認証がありますのでクリアできるかなと思います。
    でも、特定の他者をリスクと見なすかどうかで判断が分かれますね。

    > 複数端末で設定を共有したいというご要望はいただいていないので、需要はあまりないかもしれませんね。

    Mery の場合、レジストリや複数ファイルではなく Mery.ini に全て保存されているのであまり必要とされていないのかもしれません。

    P.S. プレビュー機能を実装されたのですね

     |  Toku  |  返信
  7. ご返信ありがとうございます。

    > このようなものもあるみたいです、程度にご紹介しましたが詳細に調査頂きありがとうございます。
    > ファイル単体を開いた時の保存先について私も確認できました。

    いえいえ、VSCode でやっていることなら、仕様的に問題ないかなと思って調べてみたのですが、やっぱりユーザーの指定や許可が必要な仕様だとちょっと難しいですね。

    Mery (プラグイン) で実現できないか考えてみたのですが、なかなか良いアイデアが浮かびませんでした。

    たとえば、履歴ファイルの出力先をユーザーに指定してもらうのはどうかなとも思いましたが、その場合、指定したフォルダー外のファイルは対象外になっちゃいますしね。

    複数のフォルダーを指定できるようにすれば、VSCode のプロジェクト フォルダーみたいに、事前にいくつかフォルダーを登録して対応できるかもしれませんね。

    セキュリティ面を気にせず、開いたファイルと同じフォルダーに自動的に出力するだけなら、それほど難しくないかと思いますが。

    > ブックマーク関連に含まれるとよいのですが、カーソル位置とマーカーにもアクセスできるとありがたいです。

    カーソル位置を取得、設定する API はすでに用意されています。

    マーカー機能はまだベータ版の機能ですので、今後のバージョンで仕様が変更される可能性があります。そのため、API についても今後のバージョンで検討していきたいと思います。

    > P.S. プレビュー機能を実装されたのですね

    そうなんです。先週末から試行錯誤していたので、動作が不安定だった時もあったかもしれませんが、今は問題なく動いているようです。

     |  Kuro  |  返信
  8. Kuroさま、ご返信ありがとうございます。

    > たとえば、履歴ファイルの出力先をユーザーに指定してもらうのはどうかなとも思いましたが、その場合、指定したフォルダー外のファイルは対象外になっちゃいますしね。

    現状の Mery.his の出力先を同期フォルダ内にすることができれば要望は達成できます。
    懸念としては、ご指摘のセキュリティリスクがあることと、些細なことかもですが同期していないローカルのファイル情報も載ってしまう、というのがありますね。
    あと、同期フォルダなので大丈夫だとは思いますが、絶対パスが異なる可能性がもしかしたらあるかもしれません。

    > セキュリティ面を気にせず、開いたファイルと同じフォルダーに自動的に出力するだけなら、それほど難しくないかと思いますが。

    VS Code も管理ファイルにプロテクトを掛けている訳ではなくユーザー同意を得ているだけですから、同意を得る、もしくは得たと見なす、が落としどころ、ということではいかがでしょうか。
    ※見なすとは、コマンドライン引数にするとか隠しオプションにするとか、ひと手間入れないと使えないようにする、という感じです

    > カーソル位置を取得、設定する API はすでに用意されています。

    そうだったのですね、失礼いたしました。
    API を使うことなど考えたこともありませんでしたので、よく調べずに言ってしまいました。

     |  Toku  |  返信
  9. > 現状の Mery.his の出力先を同期フォルダ内にすることができれば要望は達成できます。

    横から失礼しますね
    単純にこれだけをやりたいのでしたら、シンボリックリンクを使ってみるのはいかがでしょうか?

    Meryの設定フォルダーから、Mery.hisを同期対象のフォルダーに移動します
    コマンドプロンプトを「管理者権限」で起動します。

    Meryの設定フォルダーに移動します
    cd "c:\path\to\mery\dir"

    シンボリックリンクを作成します
    mklink Mery.his "c:\path\to\sync\dir\Mery.his"

    ※ファイルパスについては環境に合わせて置き換えてください

    本体は同期フォルダー内の Mery.his ですが、Meryはシンボリックリンクを本体だと思って動作します。
    Kuroさんも想定していない使い方なので、何か問題が起きるかもですが、そこは自己責任で...

     |  pizz  |  返信
  10. pizzさま、ご返信ありがとうございます。

    > 横から失礼しますね
    > 単純にこれだけをやりたいのでしたら、シンボリックリンクを使ってみるのはいかがでしょうか?

    そういえば Windows にもシンボリックリンクありましたね。
    全く思い及びませんでした。

    > Kuroさんも想定していない使い方なので、何か問題が起きるかもですが、そこは自己責任で...

    はい。
    複数端末で同時に Mery を起動するとかしなければ問題ないと思われるので試してみようと思います。

    アドバイスありがとうございます。

     |  Toku  |  返信
スポンサーリンク