[4776] .NET 2003 外部ツール連携 
2005/11/2 (水) 19:09:57 bName
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MathPlayer 2.0; .NET CLR 1.1.4322; .NET CLR 1.0.3705)
サクラエディタ Ver.1.5.7.2

VisualStudio.NET2003(v.7.1.3091) で外部ツールにサクラエディタを登録し
ファイルを開こうとすると正常に開けません。

・設定
  外部ツール
    タイトル      サクラエディタで開く
    コマンド      C:\Program Files\sakura\sakura.exe
    引数        -Y=$(CurLine) $(ItemFileName)$(ItemExt)
    初期ディレクトリ  $(ItemDir)

と設定します。
そして実際に 「C:\aaa\xxx.cpp」をVC上からサクラエディタで開こうとすると
「C:\aaa\xxx.cp というファイルは存在しません。ファイルを保存したときに、ディスク上にこのファイルが作成されます。」
等のメッセージが表示され、ファイルを開く事ができませんでした。
(ファイル名の最後の文字が1〜3文字なくなってるようです)

そこで少し調べたのですが、VC側が引数として与える文字列に原因がある?、
上記の設定で実際にサクラエディタ側に渡される引数は
-Y="50" "xxx.cpp
となっており、最後のダブルクォーテーションが抜けていました。
(引数は WinMain の lpCmdLine を表示しました)

そこでWinMainの引数をいじって

  process = aFactory.Create( hInstance, lpCmdLine );
 
  ↓

  char tmp[1024];
  strcpy(tmp, lpCmdLine);
  TCHAR *pTmp = NULL;
  do {
    pTmp = strchr(tmp, '"');
    while (pTmp && *pTmp) {
      *pTmp = *(pTmp+1);
      pTmp++;
    }
  } while (pTmp);
  process = aFactory.Create( hInstance, tmp );

ように変更し、ダブルクォーテーションをすべて除去したらファイルを正常に開けました。
サクラエディタのバグではないのかもしれませんが、何かの形で対応して頂けたら嬉しいです。


以上よろしくお願いします。




[4782] Re: .NET 2003 外部ツール連携 
2005/11/4 (金) 00:01:18 もか
INCM1.23c
VS.NET 2003のバグでしょうけど、サクラエディタも変ですね。
ちなみに
「-Y=$(CurLine) $(ItemPath)""」
と書くと、
「-Y="50" "D:\dir\filename.cpp"」
として渡されるようです。


[4784] Re2: .NET 2003 外部ツール連携 
2005/11/4 (金) 12:10:31 bName
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MathPlayer 2.0; .NET CLR 1.1.4322; .NET CLR 1.0.3705)
もかさんの記述とおり設定の最後に「""」を追加したら
正常に動作しました。

自前で改造したコードだと色々弊害があるようなので
(grepのダイレクトジャンプ等での挙動が変ぽい?)
とりあえず、最後に「""」を追加する方法で対処したいと思います。

情報ありがとうございました。


[4804] Re3: .NET 2003 外部ツール連携 
2005/11/5 (土) 01:19:41 げんた
INCM1.23c
引用符が閉じられていない場合にファイル名の末尾が欠けてしまうようです.
これは引用符で始まっていたら最後の1文字も引用符に違いないと勝手に思って最後の1文字を捨ててしまうからです.
次回修正予定です.


[4807] Re4: .NET 2003 外部ツール連携 
2005/11/5 (土) 11:08:10 じゅうじ
Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)
▼ げんたさん
> 次回修正予定です.

せっかちじゃないけど、次がないので。まとめ、

案1:
変更前:
OK "My Doc → My Do ?or M ?
NG My Do"

変更後:
NG "My Do
NG My Do"

<<「上記のファイル名は無効です。」>>
先頭が「"」で、末尾が「"」でなければ、エラーにする。(普通はこれ)

案2:基底クラス:
先頭が「"」で、末尾が「"」でなければ、末尾に「"」を補う。
案2の案1:
末尾が「"」で、先頭が「"」でなければ、エラーにする。(.NET 2003対応)
案2の案2:
末尾が「"」で、先頭が「"」でなければ、先頭に「"」を補う。(桜的蝶親切)

INCM/CMT
Cyclamen v3.81