【要望】Gitの編集

  1. 現状ではGitの編集として関連付けすると
    正常にgit rebase -iやgit commitなどの編集ができないので
    できれば対応していただけたらなと思います

    よろしくお願いします

     |  S  |  返信
  2. 書き込みありがとうございます。

    git の編集ですが、git から渡されるファイルのパスが「/」区切りになっているため Mery 側ではじいているようです。ここのチェックを少し変えれば一応 git の編集もできるようにはなったのですが…

    git rebase などは他のアプリを起動して、そのアプリが終了するまで待機するという仕組みになっているようですが、Mery のように一つのプロセスで複数のファイルを編集するタイプのアプリケーションでは、すでに Mery が起動中の場合には git 側で外部アプリの起動・終了が監視できないので git rebase がそのまま最後まで走ってしまいますね…

    Mery を強制的に別プロセスで起動するような仕組みを設ければ実現可能かもしれませんが、そもそも一つのプロセスでの動作を前提に設計しているアプリケーションなので動作保証外ってことにはなりそうですね。

    なかなか難しそうです。

     |  Kuro  |  返信
  3. ks です。
    案だけですが、中継用の exe (not Mery) を用意して、それ経由で Mery を起動して編集するというのはどうでしょう。

    流れとしては
    1. git が中継用 exe のプロセスを生成。
    2. 中継用 exe が Mery を叩く。
    3. Mery の編集完了を何らか取得(プラグインなど?)
    4. 中継用 exe が終了
    となるでしょうか。

    これなら Kuro さん側での対応は不要になります。
    (パス区切り文字も、中継で変換してしまえば良いので)

     |  ks  |  返信
  4. > ks です。
    > 案だけですが、中継用の exe (not Mery) を用意して、それ経由で Mery を起動して編集するというのはどうでしょう。

    > 流れとしては
    > 1. git が中継用 exe のプロセスを生成。
    > 2. 中継用 exe が Mery を叩く。
    > 3. Mery の編集完了を何らか取得(プラグインなど?)
    > 4. 中継用 exe が終了
    > となるでしょうか。

    > これなら Kuro さん側での対応は不要になります。
    > (パス区切り文字も、中継で変換してしまえば良いので)
    なるほど…
    ただ、自分はIPC通信どころかWindows用のプログラム(C/C++/Delphi)を作ったことがないのできつそうです…

     |  S  |  返信
  5. > 書き込みありがとうございます。

    > git の編集ですが、git から渡されるファイルのパスが「/」区切りになっているため Mery 側ではじいているようです。ここのチェックを少し変えれば一応 git の編集もできるようにはなったのですが…

    > git rebase などは他のアプリを起動して、そのアプリが終了するまで待機するという仕組みになっているようですが、Mery のように一つのプロセスで複数のファイルを編集するタイプのアプリケーションでは、すでに Mery が起動中の場合には git 側で外部アプリの起動・終了が監視できないので git rebase がそのまま最後まで走ってしまいますね…

    > Mery を強制的に別プロセスで起動するような仕組みを設ければ実現可能かもしれませんが、そもそも一つのプロセスでの動作を前提に設計しているアプリケーションなので動作保証外ってことにはなりそうですね。

    > なかなか難しそうです。
    http://stackoverflow.com/questions/1634161/how-do-i-use-notepad-or-other-with-msysgit
    同じような構造?のNotepad++では別プロセスで走らせるコマンドラインオプションをつけるという形になってますね

     |  S  |  返信
  6. 別 exe を中継する作戦は私も考えてみたのですが、編集終了を取得するのがちょっと難しそうですね。
    NotePad++ と同様、E○Editor でも動作保証外ですが別プロセスで起動する起動時引数を使うようになっているようですね。

    Mery でも別プロセスで起動できる引数を用意したとして、二重起動した場合に問題になりそうなところといえば、常駐してたらトレイアイコンが二つ表示されることぐらいしか思い浮かばないですが…w

    試しに実装してみようかしら。

     |  Kuro  |  返信
  7. > 別 exe を中継する作戦は私も考えてみたのですが、編集終了を取得するのがちょっと難しそうですね。

    Kuro さんもすでに考えられていたとはっ
    どや顔で書き込んでいた自分が恥ずかしい……

    編集終了はタブを閉じたときにプラグインから exe に伝えれば良いかと
    プロセス間のやりとりは、簡単な方法だと特定ファイルの作成・削除かなぁ

    > 試しに実装してみようかしら。

    こちらも試しに作ってみますね

     |  ks  |  返信
  8. > プロセス間のやりとりは、簡単な方法だと特定ファイルの作成・削除かなぁ

    編集終了の通知だけなら exe に SendMessage してやっても良さそうですね。

    それか、今回のケースは exe のプロセスさえ死ねばいいわけなので、編集終了時に exe を kill してやるだけでも良いかもしれませんね。

    現在の Mery で使用できそうな方法を hoge.exe と hoge.js で考えてみました。

    ① git rebase などで hoge.exe を呼び出す
    ② hoge.exe は引数の 1 番目 (ファイル名) の「/」を「\」に置換して Mery に渡す、ついでに自分の PID も
    ③ Mery のイベントマクロ「文書を閉じた時」に hoge.js が発動して hoge.exe のプロセスを taskkill する

    こんな感じでしょうか。

    ちなみに Mery を無理やり別プロセスで起動するオプションを試しに実装してみたのですが、本気で作りこまない限りは下記のような問題が発生しそうですので、許容範囲かどうか判断に迷うところです。

    ・異なるプロセス間でのタブの移動はできない
     → これは我慢できそう
    ・編集中のファイルを別のプロセスでも編集できてしまう
     → これも仕方がないな~で済みそう
    ・設定 (INI) の保存は最後に終了したプロセスが上書きする
     → 設定を変更しても反映されてない!ってことが起こり得る
    ・マクロや外部ツールの設定などが別プロセスに反映されない
     → せっかくマクロを登録しても最後に終了したプロセスの設定で上書きされてしまう

    こんな感じです。
    これらの問題は NotePad++ でも発生しますが…w

     |  Kuro  |  返信
  9. > ・異なるプロセス間でのタブの移動はできない
    >  → これは我慢できそう
    →これは特に問題にはならないと思います
    > ・編集中のファイルを別のプロセスでも編集できてしまう
    >  → これも仕方がないな~で済みそう
    →これも特には問題にならないかなと
    > ・設定 (INI) の保存は最後に終了したプロセスが上書きする
    >  → 設定を変更しても反映されてない!ってことが起こり得る
    > ・マクロや外部ツールの設定などが別プロセスに反映されない
    >  → せっかくマクロを登録しても最後に終了したプロセスの設定で上書きされてしまう
    →これらは、新しいプロセスで起動したものは常にデフォルトのiniなどを使用するという形では利用できませんかね?
     例えば、作業フォルダを変更するなど(?)

     |  S  |  返信
  10. とりあえず実装してみたので、Wiki に置きました。
    http://www.haijin-boys.com/wiki/%E5%88%A5%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%81%A7%E7%B7%A8%E9%9B%86

    これでいいのか自信はないですが……。

    動きとしては、普通に Mery のタブとして開き、タブを閉じると中継プロセスが死ぬようにしています。
    Kuro さんの用意されたオプションにくらべ、
    ・同一のエディタ上で開く
    ・設定なども特に別になるようなことはない
    という点が違います。
    割と適当に作っているので、タブを別のフレームに移動したりすると動かないかもしれません。
    あと開発の関係上、.NET Framework 4.0 以降が必要で、たぶん起動は少し重いです。

     |  ks  |  返信
  11. > とりあえず実装してみたので、Wiki に置きました。
    http://www.haijin-boys.com/wiki/%E5%88%A5%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%81%A7%E7%B7%A8%E9%9B%86

    > これでいいのか自信はないですが……。

    > 動きとしては、普通に Mery のタブとして開き、タブを閉じると中継プロセスが死ぬようにしています。
    > Kuro さんの用意されたオプションにくらべ、
    > ・同一のエディタ上で開く
    > ・設定なども特に別になるようなことはない
    > という点が違います。
    > 割と適当に作っているので、タブを別のフレームに移動したりすると動かないかもしれません。
    > あと開発の関係上、.NET Framework 4.0 以降が必要で、たぶん起動は少し重いです。

    タブを閉じたときに感知されないということがありますが、他は完璧です
    感謝の言葉も見つからないくらいです

    実装の面でもなるほどという感じです
    ありがとうございます

     |  S  |  返信
  12. > タブを閉じたときに感知されないということがありますが、他は完璧です

    やはり問題がありましたか……。
    とりあえず、右クリックからの「他の全てのタブを閉じる」などで反応しなかったのだけ修正しました。
    他の問題については、挙げていただいて再現すれば直せるかもしれません。

    # あとはソースもアップしたので、きっと誰かもっとマシなコードにしてくれるはず!

     |  ks  |  返信