2007/3/3 (土) 22:12:39 maru  
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
[4693] ファイルが存在しなくても前回の文字コード
>>data:5912あたりから
もともとの仕様では、ファイルが存在しない場合
にも、前回の文字コードを意識する動作になっていた
ようですが私が削ってしまったようです。
当時、前回の文字コードを優先するモードがなかった
ので、あまり目立たない動作でしたが、現在の仕様では
前回の文字コードを継承したほうが自然な感じです。

ついでに前後の重複コードを削りました。
patches#1672919

2007/3/4 (日) 19:31:30 じゅうじ  
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)
[4694] Re:ファイルが存在しなくても前回の文字コード
▼ maruさん
> >>data:5912あたりから
> もともとの仕様では、ファイルが存在しない場合
> にも、前回の文字コードを意識する動作になっていた
> ようですが私が削ってしまったようです。


そんな事、無いですよ。ver:1.5.13.1 以前からです。

> 当時、前回の文字コードを優先するモードがなかった
> ので、あまり目立たない動作でしたが、現在の仕様では
> 前回の文字コードを継承したほうが自然な感じです。


前回と異なる文字コードがONの場合に、履歴から削除したファイルをオープンした場合に、問い合わせていましたので、問い合わせ無くしました。
あと、修正前の前回のソースはコメントにして残しました。
Yahoo!/Developer/Source/CEditDoc_cpp_2007-02-25.diff

2007/3/6 (火) 00:19:08 maru  
INCM1.23a
[4698] Re2:ファイルが存在しなくても前回の文字コード
>> 前回の文字コードを意識する動作になっていた
>> ようですが私が削ってしまったようです。

>そんな事、無いですよ。ver:1.5.13.1 以前からです。


あせってパッチを出しましたが、それを聞いて安心しました。

ところで、動作仕様で迷う部分があります。

例えば、前回と異なる場合は問い合わせる設定になっていて、英数字のみのファイルをUTF-8で開いているとします。
ここでさらに、同じファイルを文字コード指定なしで開こうとしたとき、自動認識の結果ではSJISになるため、とうぜん現在の文字コードとは異なります。

この場合すでにファイルを開いているので「前回と同じ文字コードを使いますか」のメッセージは不自然ですが、かといってSJISで開く意思表示もしていないので、「既に開いているファイルを違う文字コードで開くときは、一旦閉じて…」のメッセージも早とちりな感じです。
一例をあげましたが、動作や設定の組み合わせ次第で他にもいくつかのこういうパターンになるみたいです。
従来動作では、エクスプローラからのD&Dなどによる場合はメッセージなしで該当ウィンドウをアクティブにするのみですが、「開く」「最近使ったファイル」などでは「既に開いている…」メッセージ、となっているようです。
だだし、すでに開いているファイルが実在しない場合(排他しない設定時)ではメッセージなし、みたいです。難解(^^;;

「既に開いているファイルを…」のメッセージは編集中ファイルの意図しない破棄などを防止することが目的だと思うので、個人的には、すでにファイルを開いている場合、設定にかかわらずアクティブにするのみが分かりやすくていいと思うのですが。
つまり、「開き直す」以外の手段で、明示的に現在と異なる文字コードを指定して開こうとした場合にのみ「既に開いているファイルを違う文字コードで開くときは…」の警告をする。

2007/3/6 (火) 11:51:51 じゅうじ  
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; InfoPath.1; .NET CLR 2.0.50727)
[4702] Re3:ファイルが存在しなくても前回の文字コード
▼ maruさん
>この場合すでにファイルを開いているので「前回と同じ文字コードを使いますか」のメッセージは不自然ですが、かといってSJISで開く意思表示もしていないので、「既に開いているファイルを違う文字コードで開くときは、一旦閉じて…」のメッセージも早とちりな感じです。

現状で良いと思います。
そうなりますか? 私の操作した感じでは、半角カナのみのEUCファイルがSJISと誤認識され、EUCで開き直している場合、ファイルの二重オープンは出来ません。
自動選択「認識」なら、編集中のウインドウが優先されますし、文字コード指定なら、「既に開いている…」のメッセージが出て、編集中のウインドウに戻ります。

参考までに、ファイルの排他制御は、◎「他プロセスからの上書きを禁止する(P)」です。
[v]「前回と異なる文字コードのとき問い合わせを行う(Q)」にしています。
リンク
>>data:5915 履歴で、削除したファイルを開く... [じゅうじ]の6)
>>data:5700 早速Closeされたので、公告 [じゅうじ]

二重オープンについては、maruさんの担当で前回直されてますよ。
ここは直したけど、水平的に他も心配といった事でしょうか。

2007/3/6 (火) 13:42:04 ラスティブ  
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2) Gecko/20070219 Firefox/2.0.0.2
[4703] Re4:ファイルが存在しなくても前回の文字コード
> 例えば、前回と異なる場合は問い合わせる設定になっていて、
> 英数字のみのファイルをUTF-8で開いているとします。
> ここでさらに、同じファイルを文字コード指定なしで開こうとしたとき、
> 自動認識の結果ではSJISになるため、・・・


この問題は、関数 CMemory::CheckKanjiCode に、
“半角英数記号ばかりでした”フラグをつけると、
すこし扱いやすくなれるでしょうか…?

横やり入れるようで恐縮です(f^^;)

2007/3/6 (火) 22:24:36 maru  
INCM1.23a
[4705] Re5:ファイルが存在しなくても前回の文字コード
▼ じゅうじさん
私の中で1.5.13.1の動作とごっちゃになって勘違いしていたようで、議論がややこしくなってしまいました。すいません。

>自動選択「認識」なら、編集中のウインドウが優先されますし、文字コード指定なら、「既に開いている…」のメッセージが出て、編集中のウインドウに戻ります。
で、結論としてはこの動作で良いんですよね?
現在、#1672919のパッチの動作確認を行っておりまして、仕様を確認するのが主旨です。

ところで、>>data:5936の「このpatch」はどの話ですか。ここの話題と関係あり?

▼ ラスティブさん
お気遣いありがとうございます。
仕様上どのように動作させるべきかという話ですので、この件に関して認識精度は影響ありません。

2007/3/7 (水) 01:22:05 maru  
INCM1.23a
[4706] Re6:ファイルが存在しなくても前回の文字コード
たびたびすいません、もう一回確認させてください。1.5.13.1とそれ以降で動作が異なるようです。(1)と(2)について、それぞれどちらが正解なのでしょうか?

(1)「前回と異なる文字コードのとき問い合わせを行う」設定のときに前回SJISで開いていたファイルを、次回開くときにUTF-8を明示指定した場合、「前回と同じ文字コードを使いますか」の問い合わせを行うかどうか
1.5.13.1        問い合わせる
1.5.15.2        問い合わせない

(2)自動認識にてSJISと判定されるはずのファイルをUTF-8にて開いたまま、「最近使ったファイル」または「開く(文字コード自動認識)」により同一ファイルを開くと「一旦閉じてから…」を表示するかどうか
1.5.13.1        表示する
1.5.15.2        表示しない

ついでに気が付いたことですが、存在しないファイルを「最近使ったファイル」で開いたあと、該当のファイルが他のアプリケーションなどから生成された場合には、排他制御も更新の監視も動作しません。ただ、これは常識の範囲で当然の内容かなぁと思います。

2007/3/8 (木) 11:32:51 じゅうじ  
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; InfoPath.1; .NET CLR 2.0.50727)
[4710] Re7:ファイルが存在しなくても前回の文字コード
▼ maruさん
要するに、
>>data:5700 の後追い説明です。

(1)二重オープンでは無い場合。
(1.1)開く時に、前回と異なった文字コードを指定する場合でも、「前回と同じ・・・」は問い合わせないで良いと思います。なぜなら、その直前に既に文字コードを指定していますので。

(2)二重オープンの場合。
(2.1)最近使ったファイルから開く場合は、「いったん閉じてから…」は、表示の必要は無いと思います。
(2.2)自動判定で開く場合も、「前回と異なる…」がONの設定であっても、前のウインドウがアクティブになるので、「いったん閉じてから…」のメッセージは必要ないと思います。
(2.3)文字コード指定で開く場合のみ、「いったん閉じてから…」の警告メッセージが必要と思います。

追加(3)履歴から、削除されたファイルをオープンする場合。>>data:5915
(3.1)削除されたファイルの履歴情報はそのまま残して、(無題)SJISのウインドウを作成する。(次回ファイルの復活までそのまま)→なお、メッセージの表示は不要です。
(3.2)ファイルパスとファイル名と文字コードと改行コードは残して、0バイトのウインドウを作成する。(すいさん要望?)
後者は、強引な感じがするので、どちらかを予め選ぶチェックボックスは必要ないですか?(私はコード出来ませんが)


失礼、(無題)はいつでも作成出来ると、昼休みに考え直しました。
(3.1直り)削除されたファイルを履歴から開いた場合、「ファイルが有りません、前回と同じファイル名、文字コードで新規に作成します。[OK][Cancel]」のメッセージボックスを、
1)出す、2)出さないのチェックボックスを予め設定するのが良いと、思います。

2007/3/8 (木) 13:31:01 ラスティブ  
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2) Gecko/20070219 Firefox/2.0.0.2
[4711] Re8:ファイルが存在しなくても前回の文字コード
まとめると、こんな感じでしょうか。

 -----
IF 開こうとするファイルが存在しない == TRUE
 IF 開こうとするファイルパスが履歴にない == TRUE
  ・デフォルト設定で、ファイルを新規作成する。
 ELSE
  IF 使われる文字コードがユーザーから指示されている == FALSE
   ・履歴の情報を元に、ファイルを新規作成する?
    「ファイルが有りません、前回と同じファイル名、文字コードで新規に作成します。」
    というようなメッセージボックスを表示する?
  ELSE
   ・指示されている文字コードで、ファイルを新規作成する?
    前回と異なる文字コードのとき問い合わせを行う」設定がオンのときは、
    履歴の情報がユーザーの指示と違っていたら問い合わせる?
  ENDIF
 ENDIF
ELSE
 IF 開こうとするファイルパスが履歴にない == TRUE
  ・適当に自動判別してファイルを開く。
 ELSE
  IF 二重オープンしようとしている == FALSE
   ・履歴の情報を元に、ファイルを開く。
    前回と異なる文字コードのとき問い合わせを行う」設定がオンのときは、
    履歴の情報が自動認識と違っていたら問い合わせがある。
  ELSE
   ・「いったん閉じてからやりなおして」みたいなメッセージを出して、
    操作を中止させる?
   ・文字コード指定で開く場合のみ中止させる?
  ENDIF
 ENDIF
ENDIF
 -----

2007/3/8 (木) 14:46:31 じゅうじ  
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; InfoPath.1; .NET CLR 2.0.50727)
[4712] Re9:ファイルが存在しなくても前回の文字コード
▼ラスティブ さん
> まとめると、こんな感じでしょうか。

拡張するとしたら、このような、図になります。

削除されたファイルが開けるのは、「最近使ったファイル(F)」から、のみだと思います。
履歴から開くと、今まで言っていたのは、この意味ですので、以後区別して発言します。
履歴には、文字コードが既に記録され、指定されているので、且つ
削除されたファイルの文字コードは、もはや自動認識出来ないので、前回との比較も無く。

 -----
IF 開こうとするファイルが存在しない == TRUE
 (削除)
|・履歴の情報を元に、ファイルを新規作成する?キャンセル?−−のダイアログボックス
||「ファイルが有りません、前回と同じファイル名、文字コードで新規に作成します。」
||というようなメッセージボックスを表示する?しない?−−のチェックボックス
 (削除)
ELSE
 (省略)
ENDIF
 -----

2007/3/9 (金) 00:06:11 maru  
INCM1.23a
[4713] Re10:ファイルが存在しなくても前回の文字コード
えっと、さっき気が付きましたが、おもいっきり作業がかぶってますね…。>>dev:4693 >>:4694
しかも、なぜかINCMからは4694の後半部分がバサッと抜けてしまっており、CEditDoc_cpp_2007-02-25.diff に気が付きませんでした。
どおりで話が微妙にかみ合わないと思った。

気を取り直して(^^;; 本題に入ります。

▼ラスティブ さん
> まとめると、こんな感じでしょうか。
> IF 開こうとするファイルが存在しない == TRUE

排他制御しない設定では、ファイルが存在しなくても既に開いている、という状況が発生します。

▼じゅうじ さん
>削除されたファイルが開けるのは、「最近使ったファイル(F)」から、のみだと思います。
ファイルが存在しなくても、履歴と異なる可能性もあるのでは?コマンドライン指定やマクロによる文字コード指定で。

▼どなたか…
元々持っていたバグのようですが、ファイルが存在しなくて、且つすでに開いているファイルを「開き直す」した場合、m_nCharCodeだけ書き換えてReloadには失敗するので、おかしくなりますね。
バグの件はとりあえず報告だけです。しばらくはペースダウンしそうなので、今すぐには手を付けられません。

2007/3/9 (金) 14:23:03 じゅうじ  
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; InfoPath.1; .NET CLR 2.0.50727)
[4714] Re9:ファイルが存在しなくても前回の文字コード
> まとめると、こんな感じでしょうか。

拡張するとしたら、このような、図になります。
▼ maruさん

コマンドラインの件、無視していました、失礼しました。
チェックボックスは既に有りました、見落としていました。
[ ] 開こうとしたファイルが存在しないとき警告する(E)

 -----
IF 開こうとするファイルが存在しない == TRUE
|IF 開こうとしたファイルが存在しないとき警告する(E)が、ONの場合
||・「○○というファイルは存在しません。ファイルを保存…」を表示
|ENDIF
||
|IF 開こうとするファイルパスが履歴に無い(コマンドラインから開く) == TRUE
||IF 文字コードがユーザーから指示されていない == TRUE
|||・デフォルトの文字コードS-JISで、ウインドウを新規作成する。
||ELSE
|||・指示されている文字コードで、ウインドウを新規作成する。
||ENDIF
|ELSE
||IF 文字コードがユーザーから指示されていない == TRUE
|||・履歴の情報を元に、ウインドウを新規作成する。
||ELSE (コマンドラインから開く)
|||・指示されている文字コードで、ウインドウを新規作成する。--- @
||| 履歴の文字コード情報を更新する
||ENDIF
|ENDIF
ELSE-IF 開き直す(W)から開く(文字コード指定) == TRUE
| ・指示されている文字コードで、表示し直す
|  ステータスバーと、履歴の文字コード情報を更新する
ELSE
|(省略)
ENDIF
 -----

@ ファイルが存在しない時は「前回と異なる文字コード」の問い合わせは必要無い?
 既に、コマンドラインで文字コードを指定・指示している為。

2007/3/10 (土) 19:34:17 maru  
INCM1.23a
[4720] Re10:ファイルが存在しなくても前回の文字コード
以前の記憶をさかのぼりながらソースを読んでみたところ、いくつか分かったことがあります。

1.>>data:4706の(1)について
これは「問い合わせる」が正解と考えます。
問題となる「前回と異なる文字コードのとき問い合わせを行う」の設定ですが、これまでは「‘自動認識の結果が’前回と異なるとき」が通説とされてきましたが、実際には単に「前回と異なるとき」でした。(1.5.13.1で確認)
具体的に説明すると
・文字コード指定なしの場合:自動認識の結果が前回と異なるときに発動
・文字コード指定ありの場合:指定された文字コードが前回と異なるときに発動

です。
これらの状況から、もともと自動認識はあまり関係ありませんでしたので、従来機能を継承する意味では、「問い合わせる」が良さそうです。

2.>>data:4706の(2)「…一旦閉じて…」について
「表示しない」が多分正解です。
じゅうじさんが>>data:5700で解説されていますが、ちょっと補足が必要です。
>現在オープンしているファイルを、違う文字コードで二重オープンしようとすると、ワーニングのダイアログが出る時と、出ない時が有りますので、無くします。
実際には元々の仕様では、違う文字コードで二重オープンしようとしたとき、必ずワーニングが出るようにしたかったのだと思います。
二重オープンを考えるとき、前回の文字コードとは現在の文字コードのことを指しますので、旧仕様における「前回と異なるとき…」無効時は、自動認識が優先され、現在開いている文字コードは無視されます。そこで自動認識結果と現在の文字コードが違う場合はワーニングを出す必要があったわけです。ところが、おそらく勘違いで自動認識が優先されない設定のときにワーニング、というコーディングになっていました。
で、1.5.14.0以降自動認識を優先する動作はなくなったため、文字コード指定する以外に違う文字コードによる二重オープンのケースはほぼありませんので、「表示しない」が妥当かと。

2007/3/10 (土) 19:35:30 maru  
INCM1.23a
[4721] Re11:ファイルが存在しなくても前回の文字コード
>>dev:2720の続きです

3.「前回と異なる…」機能について
従来は誤認識対策として説明されてきましたが、>>dev:2720の1でも説明したとおり本来目的がちょっと違っているようですので、1.5.14.0以降の仕様検討において考え方を変える必要がありそうです。
もちろん自動認識機能の誤認識対策としての側面もあったでしょう。そうすると『自動認識が間違っている可能性もあるので、前回の文字コードも選択できるように』ということだったのであれば、前回を優先する現在仕様においては、『前回開いた文字コードが間違っている可能性があるので、自動認識結果も選択できるように』という意味になってしまいます。
現実にはそんなことはほとんど発生せず、意図的にイレギュラーな文字コードで開いたと考えるのが妥当ですので、これに対するリカバリは「開き直す」を使うべきでしょう。むしろ、比較的精度の良いはずの自動認識機能にて誤認識した際のマイナス要素を露呈ためだけのチェックボックスともなりかねません。私個人としては、履歴に記録された文字コードは自動認識精度をより高めるための補正データとして考えた方が良さそうに思います。
例えば「前回と異なる文字コードのとき問い合わせを行う」を廃止して「以前開いた文字コードを自動認識補正のために利用する」に変更するなど。

4.ファイルが存在しない時の「前回と異なる文字コード」の問い合わせ
私の考えでは、原則としてファイルの有無にかかわらず履歴を優先すべきと思います
よって仕様としては、ここでも問い合わせがあった方が分かりやすいし、ソースもシンプルかと。
一方ユーザビリティの面では意見が別れそうですが、さすがにファイルがない状態で文字コード指定された場合は、例外的に履歴を無視しても実害はないと思います。

2007/3/7 (水) 09:01:59 じゅうじ  
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
[4708] Re6:ファイルが存在しなくても前回の文字コード
▼ maruさん
> ところで、>>data:5936の「このpatch」はどの話ですか。ここの話題と関係あり?

▼ 2007/3/4 (日) 19:31:30 じゅうじ  返信 削除
[dev:4694] Re:ファイルが存在しなくても前回の文字コード
前回と異なる文字コードがONの場合に、履歴から削除したファイルをオープンした場合に、問い合わせていましたので、問い合わせ無くしました。
あと、修正前の前回のソースはコメントにして残しました。
Yahoo!/Developer/Source/CEditDoc_cpp_2007-02-25.diff
 
です。>>data:5936に、返信ありがとうございます。

INCM/CMT
Cyclamen v3.81
[ut:0.020][st:0.010]