任务单 #45553

その他の設定ダイアログからログファイル名に設定できないstrfnameフォーマットがある(ロケール=日本)

开放日期: 2022-09-03 20:56 最后更新: 2023-01-16 00:18

报告人:
属主:
状态:
关闭
组件:
优先:
5 - Medium
严重性:
5 - Medium
处理结果:
Fixed
文件:
Vote
Score: 0
No votes
0.0% (0/0)
0.0% (0/0)

Details

確認: v4.50, v4.60, v4.70, v4.80, v4.90, v4.104, v4.106, v5.0 alpha

ヘルプにあるログファイル名としての strfname フォーマットのうち、 %c %x %X %Z は、その他の設定ダイアログからログファイル名として設定できない。

ロケールが日本の場合、ファイル名として無効な文字(コロンやスラッシュなど)を含むため、 CLogPropPageDlg::OnOK() の isInvalidFileNameChar() により設定に失敗する。

表示されるエラーダイアログも strfname フォーマットが間違っているのか、展開後のファイル名が間違っているのか同じメッセージなので見分けがつかない。

設定ファイル(TERATERM.INI)に指定すれば %c %x %X %Z も可能である。 設定ファイル(TERATERM.INI)の場合は、ログ開始時にreplaceInvalidFileNameChar()でファイル名から無効な文字を削除してログファイルが作成される。

設定: teraterm-%c-%x-%X-%Z.log

結果: teraterm-Sat Sep 3 062956 2022-090322-062956- (W€)-.log

その他の設定ダイアログからログファイル名の設定のチェックも replaceInvalidFileNameChar() してから isInvalidFileNameChar() したほうが 良いと思います。 もしくは、ヘルプから %c %x %X %Z を削除、または補足説明したほうが良いと思います。

任务单历史 (3/34 Histories)

2022-09-03 20:56 Updated by: tomo3136
  • New Ticket "その他の設定ダイアログからログファイル名に設定できないstrfnameフォーマットがある(ロケール=日本)" created
2022-12-30 02:02 Updated by: zmatsuo
  • 属主 Update from (无) to zmatsuo
评论
(This comment has been deleted)
2022-12-30 02:03 Updated by: zmatsuo
评论

trunkに修正を入れました。r10443です。

次の修正でかなり使い勝手が良くなったと思います。

  • 設定するファイル名の例をプルダウンから選べるようにした
  • フォーマット後がその場でプレビューできるようにした

さらに次の修正を入れようと思います。

  • i18nに対応していなかったのでその修正
  • ログファイル名作成をすべてUnicode化対応

Tera Term 4 では最小の修正にしようと思います。

2022-12-30 21:46 Updated by: tomo3136
评论

修正ありがとうございます。

trunk/r10443 で簡単に確認しました。(細かくは見ていない)

「&u」「&h」 はプレビューで表示されますが、ログファイルの名前には反映されないようです。

※Bluetooth経由のUART接続でしか見ていないので「&p」は未確認だけどログ開始画面で&pのまま表示されるのでたぶん反映されない。

以下使ってみた感想。

設定するファイル名の例をプルダウンから選べるようにした

選択肢から選べるならフィーリングで使う人もいるので敷居は低くなったと感じます。

ヘルプに書いてあるとは言え、 strftime と書かれて認識できるのは、 プログラムを書く人だけではないかと前々から思っていました。

大多数の人は使えていないと思われます。

普通は、ある目的の作業内においてログが複数ある場合、日付情報付いていて、

フォーマットが統一しているファイル名なら文句はでないので

プルダウンで選べるのは良いと思います。

また、プルダウンの項目は、いろいろな人の意見を募ったほうが良いかと思いました。

自分からは以下の2つ。

  • 通信ログを取るときは、ほかのツールのログも同時に取ることがあり、拡張子「.log」のみだと ファイルの中身を見ないと見分けがつかないことがある。 そのため、Teratermのログだと識別できると良いと思います。 自分は「teraterm_20221230210100.log」のような形が多い。
  • 一度選択を変えるとデフォルトの「teraterm.log」にキー入力しないと戻せないので、 ドロップダウンの項目にあったほうが良いかと思います。

フォーマット後がその場でプレビューできるようにした

Tipsだとちょっと主張しすぎかなというところもありますが、ログファイル名のイメージがわくのと フォーマットの誤記を確認出来て、わかりやすくなったと思います。

Tera Term 4 では最小の修正にしようと思います。

Tera Term 4 での修正は、今まで特に指摘が無かったのならそれで良いのではないかと思います。

2022-12-30 22:29 Updated by: tomo3136
评论

「...ログ開始画面で&pのまま表示されるのでたぶん反映されない。」と書きましたが、反映がされてはいないのですが、反映するタイミングは、 strftime 形式の反映も含めて、ログ開始画面を開いた時ではなく、「OK」ボタンを押したタイミングではないでしょうか。

ログファイルのファイル名に日付が欲しいのは、ログ開始時刻であって、ログ開始画面を開いた時刻ではないため。

2022-12-30 23:29 Updated by: tomo3136
评论

追加した内容は、別のチケットに分離しました。

#46391 「&u」「&p」「&h」 はログファイルの名前に反映されない

#46392 ログファイルのファイル名反映タイミング

2022-12-31 01:01 Updated by: zmatsuo
评论

i18n対応しました。

ファイル名のプレビュー不要な時は表示しないようにしました。 例えば "teraterm.log" の時はプレビューは表示されません。

もう少しでログファイル名の全体を Unicode化できそうです。

2022-12-31 01:23 Updated by: zmatsuo
评论

レスポンスありがとうございます。

時間などと同様で、ログを作成する時の状態でログファイル名が決定することになります。 &h は未接続だと空になります。

接続前にログを開始しているのかな?(もしかすると起動時に自動的にログ採取開始?)

それと、&p はシリアルの場合は空になります。&h を試してみてください。(パイプ時も未実装ですね。)

https://osdn.net/projects/ttssh2/svn/view/trunk/teraterm/teraterm/filesys_log.cpp?view=markup&revision=10444&root=ttssh2#l179

&h, &pはなんとなくssh接続時を意識したもののように感じます。

https://ttssh2.osdn.jp/manual/5/ja/menu/setup-additional-log.html

今後の課題ですね。続きは作っていただいたチケットで。

&u が Windowsのログオンユーザー名というのもマニュアルに書いたほうがよさそうですね。

2022-12-31 07:00 Updated by: tomo3136
评论

接続前にログを開始しているのかな?(もしかすると起動時に自動的にログ採取開始?)

ログ開始画面経由は、シリアル接続後にログ取得開始しています。

それと、&p はシリアルの場合は空になります。&h を試してみてください。(パイプ時も未実装ですね。)

誤解を与えてしまってすみません。接続先がシリアルで &p が空になることは確認(ドキュメントの通り)していたのですが、 今確認できる ssh サーバが無かったので &p は反映されるのかどうかは未確認という意味で書きました。

なお、未接続の時&hが空になることも確認しています。

&u が Windowsのログオンユーザー名というのもマニュアルに書いたほうがよさそうですね。

これは私も思いました。 シリアルでは、ローカルPCのユーザ名が表示されてました。 ソースコードを見る限り ssh/シリアル関係なくローカルPCのWindowsのログオンユーザー名(GetUserNameW()で取得)のようですね。

ヘルプの説明はあっていますが、sshのリモート先の login ID と勘違いしそうな気がします。

2022-12-31 07:45 Updated by: None
评论

Reply To tomo3136

ヘルプに書いてあるとは言え、 strftime と書かれて認識できるのは、 プログラムを書く人だけではないかと前々から思っていました。 大多数の人は使えていないと思われます。

Tera Termのようなターミナルエミュレーターを使うのはプログラムを書けるような人だと思っていましたがそうでもないんでしょうか。strftimeと書かれていて認識できなかったら自分で調べられないような人が使うものではないと思ってしまいます。もちろん分かりやすくなっているのはいいことだと思います。

2022-12-31 13:30 Updated by: tomo3136
评论

Tera Termのようなターミナルエミュレーターを使うのはプログラムを書けるような人だと思っていましたがそうでもないんでしょうか。 strftimeと書かれていて認識できなかったら自分で調べられないような人が使うものではないと思ってしまいます。

これは手厳しい。。。

そうですね。私もそう思いたいのですが、それは理想かなと思っています。

ターミナルエミュレーターは、リモート操作が使用目的なので、それができればプログラムは書けなくても使えます。

ターミナルエミュレーターを使用する人の多くはエンジニアだとは思いますが、ソフト開発者、ハード開発者、インフラエンジニア、テストエンジニア、メンテナンス作業者、製造ライン作業者、などなど多岐にわたります。

ソフト開発者は C言語を学んでいれば知識としてあると思いますが、その他の分野の人たちに同等の知識を求めるのは酷だと思います。

メンテナンス作業者、製造ライン作業者に至っては、誰かが構築してくれた環境を使っているに過ぎないと思います。

自分はソフト開発者ではないし、周りも Teraterm を使っても、ほとんどの人はプログラムを書きません。

「strftime」と書くことをどうこうしてほしいわけではなく、折角使える機能があるなら、多くの人に使ってもらえるほうが良いのではないかと思います。

2023-01-01 01:31 Updated by: zmatsuo
评论

r10445を入れました。ログファイル関連はすべてUnicodeファイル名となりました。

標準ログファイル名に "%y%m%d_%H%M%S_😄.log" とセットしてもokです。

strftime の %yと%Yや%mと%Mなど、ちょっと記憶が怪しいことが多いので マニュアル引かなくてもテンプレートを持ってきて確認できればな、 というのがドロップダウンとプレビューの元です。

"teraterm.log" がドロップダウンの中にあれば、 「なぞの記号でファイル名を作らなければならぬ」と 誤解を生まなくてよさそうです。(iniのデフォルト値ですね)

"teraterm_%y%m%d%H%M%S.log" があれば、 「普通の文字になぞの記号を組み合わせていろいろできるんだ」と 気づくきっかけになりそうでよさそうです。(なくても気づく?)

俺パターンを追加したいな、となると、 iniファイルに入れて…となって、 そのパターンを編集したいのでGUI (新しい接続の「ホスト」(コマンドライン)のヒストリを編集するGUIみたいな感じ) を作って、と進んでいきそうですね。

とりあえず今回の実装はこれぐらいにとどめようかと思います。

他にも追加したほうがよさそうなパターン案あれば追加してみてください。 このあたりです。

https://osdn.net/projects/ttssh2/svn/view/trunk/teraterm/teraterm/addsetting.cpp?view=markup&root=ttssh2#l1444

もし、ログファイル名の変更がちょくちょく発生する、ということなら、 ログ開始ダイアログのほうに手を入れる方向(ヒストリとか)のほうが妥当かもしれません。

(Edited, 2023-01-01 01:40 Updated by: zmatsuo)
2023-01-01 01:40 Updated by: zmatsuo
评论

あけましておめでとうございます。

スナップショットを置きました。

https://osdn.net/projects/ttssh2/storage/snapshot/teraterm-5.0-alpha1-r10445-20221231-appveyor.zip

2023-01-01 06:16 Updated by: tomo3136
评论

あけましておめでとうございます。

修正ありがとうございます。ログファイル名の😄にはほっこりしました。

年末と違って年始は予定が多いので、確認は落ち着いてからにしたいと思います。

appveyorのスナップショットは、ハッシュ値はないのでしょうか。

以下、自分の見解。

strftime の %yと%Yや%mと%Mなど、ちょっと記憶が怪しいことが多いので マニュアル引かなくてもテンプレートを持ってきて確認できればな、、、、

普段から使用していないと記憶が怪しいことが多いので、気の利いた機能と思っています。

"teraterm.log" がドロップダウンの中にあれば、 「なぞの記号でファイル名を作らなければならぬ」と 誤解を生まなくてよさそうです。(iniのデフォルト値ですね)

r10445には入っていないのでわかりませんが、ドロップダウンにあれば不要な誤解を生みにくいと思います。

"teraterm_%y%m%d%H%M%S.log" があれば、 「普通の文字になぞの記号を組み合わせていろいろできるんだ」と 気づくきっかけになりそうでよさそうです。(なくても気づく?)

r10445には入っていないのでわかりませんが、ドロップダウンにあったほうが参考にしやすいと思います。

自分の感覚では、理系な人は無くても気づけそうですが、文系な人は無いと気づけるかは微妙な気がします。

とりあえず今回の実装はこれぐらいにとどめようかと思います。

そうですね。俺パターン追加はカスタマイズ機能のカスタマイズであり必要かも怪しいので、明確な機能リクエストがあってからでも良いのではないでしょうか。

もし、ログファイル名の変更がちょくちょく発生する、ということなら、、、、

「ログファイル名の変更がちょくちょく発生」する場面は思い浮かびませんが、もしそこまで欲する場合、自分なら外部で作成したログファイル名をコマンドラインで指定(/L)するか、 マクロでログファイル名を作って開いてる(logopenコマンド)と思います。

2023-01-03 21:50 Updated by: zmatsuo
评论

4-stable にも修正を入れました。r10452 です。

主に Tera Term 5 向けの修正となったのでマイルストーンを変更します。

ドロップダウンに次のアイテムを追加して一段落としようと思います。

"teraterm.log"
"teraterm_%y%m%d%H%M%S.log"

2023-01-06 23:02 Updated by: zmatsuo
  • 状态 Update from 开启 to 关闭
评论

r10455 で追加しました。

クローズします。

2023-01-07 08:29 Updated by: nmaya
评论

&u が Windowsのログオンユーザー名というのもマニュアルに書いたほうがよさそうですね。

対応しました。

2023-01-07 08:30 Updated by: tomo3136
评论

修正ありがとうございます。 確認が遅くなり申し訳ありません。

確認:4-stable/r10452

設定:TERATERM.INI Locale=Japanese

  • 設定画面 ⇒ Ok
  • INIファイル ⇒ Ok
  • コマンドライン /L ⇒ Ok
  • マクロ log_open ⇒ Ok

設定:TERATERM.INI Locale=en_US.utf8

  • 設定画面 ⇒ Ok
  • INIファイル ⇒ Ok
  • コマンドライン /L ⇒ Ok
  • マクロ log_open ⇒ Ok

確認:trunk/r10455

  • 設定画面 ⇒ Ok
  • INIファイル ⇒ Ok
  • コマンドライン /L ⇒ Ok
  • マクロ log_open ⇒ Ok

Teraterm5 では、設定ファイルでは TERATERM.INI で Locale が無くなったのでどこで指定するのでしょうか。

マクロ log_open のヘルプドキュメントでは、出力先ディレクトリを指定したい場合は、changedir してから log_open するサンプルになっている。 Teraterm5 では、changedir しても効かない。 logopen のファイル名を絶対パスにすれば指定したディレクトリに出力できる。 マクロのドキュメントは修正が必要と思われます。

2023-01-07 13:35 Updated by: zmatsuo
  • 状态 Update from 关闭 to 开启
评论

Teraterm5 では、設定ファイルでは TERATERM.INI で Locale が無くなったのでどこで指定するのでしょうか。

環境変数LANGを設定した状態で起動すればよいと思います。

TT4ではCライブラリ(mbtowc()系など)を使って文字コード変換を行っていました。

このためTera Termが動作時のロケールは正しく設定する必要がありました。

TT4のマニュアル

https://ttssh2.osdn.jp/manual/4/ja/usage/unicode.html

TT5はCライブラリの文字コード変換は使用していないため ロケールの設定について特に気にしなくてもよくなり、設定から外しました。

https://ttssh2.osdn.jp/manual/5/ja/usage/unicode.html

(このページのUnicode設定を直さないといけなさそう…)

でも、設定されるロケールによっては動作がおかしくなることがあると思い 少しづつ直しつつありますが、まだ依存しているところが残っている状態です。

2023-01-07 14:33 Updated by: tomo3136
  • 状态 Update from 开启 to 关闭
评论

Teraterm5 では、設定ファイルでは TERATERM.INI で Locale が無くなったのでどこで指定するのでしょうか。

作りからすると TERATERM.INI で Locale ではなく、実行環境の設定を使用するようにしたみたいですね。

置換前:teraterm-%c-%x-%X-%Z.log

置換後:teraterm-Sat Jan 7 06_58_53 2023-01_07_23-06_58_53-“Œ‹ž (•W€Žž).log

4-stable/r10452 と違うので新規チケットを作成しました。

チケット #46476

2023-01-07 14:53 Updated by: tomo3136
评论

"teraterm.log" がドロップダウンの中にあれば、 「なぞの記号でファイル名を作らなければならぬ」と 誤解を生まなくてよさそうです。(iniのデフォルト値ですね) "teraterm_%y%m%d%H%M%S.log" があれば、 「普通の文字になぞの記号を組み合わせていろいろできるんだ」と 気づくきっかけになりそうでよさそうです。(なくても気づく?)

項目の追加ありがとうございます。使いやすくなったと思います。

2023-01-08 00:28 Updated by: zmatsuo
  • 状态 Update from 关闭 to 开启
评论

r10462で、setlocale()などで動作が変化する関数がすべてなくなりました。

メモリーリークを作っていたので修正しました。r10463です。

ticket #46481によると環境変数展開が修正前はできていて、修正後はできないようなので調査します。

2023-01-08 03:54 Updated by: tomo3136
评论

ticket #46481によると環境変数展開が修正前はできていて、修正後はできないようなので調査します。

環境変数展開は、下のようなこともできてしまうので、Teraterm4のように展開するのが正解か、Teraterm5のようにできないのが正解か迷っていて、チケット作成はまだしていませんでした。

* サブディレクトリABCを作成し、環境変数 TEST1=ABC\DEF を設定した場合、標準ログファイル名に c:\work\tt\%%ABC%%\teraterm.log を設定すると他のフォルダにログファイルが作成出来てしまう。これは許していいのだろうか。しかしながら、コマンドライン"/L"指定した時には環境変数展開は使いたいかも。

ticket #46481の確認結果2.mdでは、ドキュメントにもなさそうだし意図しない設定ができるならTeraterm5のほうが正しいのかなと思い、そのような判定の書き方になってしまいましたが、Teraterm5でも下位互換(Teraterm4)とするなら環境変数展開はあったほうがよさそうです。

2023-01-09 21:55 Updated by: zmatsuo
评论

環境変数展開を調べようとしています。

Tera Term 4 で再現しようとしていますがうまくいきません。

環境変数展開を再現する例を教えていただけますか?

2023-01-10 07:29 Updated by: tomo3136
评论

テストでは以下でした。

  • 設定画面で標準ログファイル名に teraterm-%%USERNAE%%.log を設定します。
  • ログ開始画面で、teraterm-%USERNAE%.log に strftime 展開されます。
  • 開始ボタンを選択すると環境変数を展開されます。

条件が絞れていませんでした。

コマンドラインの場合は、teraterm4でもteraterm5でも同じでした。

cmd.exe で /L="teraterm-%%USERNAME%%.log" した場合は、環境変数を展開してからstrftime展開。

powershell.exe で /L="teraterm-%%USERNAME%%.log" した場合は、strftime展開のみ。

標準ログファイル名で指定していますが、ログ開始画面で teraterm-%USERNAE%.log に設定しても同じ。

teraterm4 では、環境変数を展開しますが、teraterm5 では環境変数を展開しない。

環境変数を展開された teraterm4 でも、「自動的にログを採取する」をチェック入れておくと環境変数を展開しない。

環境変数を展開されたのは、ファイル保存ダイアログ経由だからのようです。

2023-01-10 21:51 Updated by: zmatsuo
评论

手元でチェックすると、Tera Termのコードの外で 環境変数の展開が行われているところがあります。

cmd.exe と コモンダイアログの2箇所です。

最近のOS(Windows 10,11)だと同じだと思います。チェックしていただけますか?

次の例では、環境変数 PROCESSOR_LEVEL には 6 が入っています

cmd.exe のコマンドライン展開

%環境変数名% で展開される

  • echo %PROCESSOR_LEVEL% (入力)
    • 6 (出力)
  • echo "%PROCESSOR_LEVEL%"
    • "6"
  • echo /L="teraterm-%PROCESSOR_LEVEL%.log"
    • /L="teraterm-6.log"
  • echo /L="teraterm-%%PROCESSOR_LEVEL%%.log"
    • /L="teraterm-%6%.log"

powershell のコマンドライン展開

%環境変数名% では展開されない

  • echo %PROCESSOR_LEVEL%
    • %PROCESSOR_LEVEL%
  • echo $env:PROCESSOR_LEVEL
    • 6

ファイルを開く(コモンダイアログ)

コモンダイアログによる %環境変数名% の展開

  • Tera Term 4
    • ファイル - ログ... を選ぶ
    • ログを開くダイアログ(Tera Term: ログ、コモンダイアログ)のファイル名に %PROCESSOR_LEVEL%.log と入れる
    • ファイル名は "6.log" となる。(Tera Termからみると"6.log"と入力されたときと同一)
  • Tera Term 5
    • ファイル - ログ... を選ぶ
    • ログファイル名の右の...を押す
    • ログを開くダイアログ(Tera Term: ログ、コモンダイアログ)のファイル名に %PROCESSOR_LEVEL%.log と入れる
    • ファイル名は "6.log" となる。

---

ファイル名入力時に環境変数が展開されるということが書いてあるドキュメントを 探したのですが見つけることができませんでした。

2023-01-12 07:34 Updated by: tomo3136
评论

cmd.exe と コモンダイアログの2箇所です。 最近のOS(Windows 10,11)だと同じだと思います。チェックしていただけますか?

Windows11のみですが、確認しました。同じ動きとなります。

ファイル名入力時に環境変数が展開されるということが書いてあるドキュメントを 探したのですが見つけることができませんでした。

私も探してみましたが見つけることができませんでした。

環境変数が展開されることはテストでたまたま項目に挙げただけに過ぎず、 ヘルプドキュメントに書いていないし、OSの違いによるものかもしれません。

環境変数で書いても壊れることはない(保存先がNGならNGを表示する)ので Teraterm としては問題なしでよさそうです。

2023-01-12 08:22 Updated by: nmaya
评论

ファイル名入力時に環境変数が展開されるということが書いてあるドキュメントを 探したのですが見つけることができませんでした。

私も探してみましたが見つけることができませんでした。

#39456, r7951 で入れましたが、影響範囲がわかりづらい書き方をしてしまいましたね。

2023-01-13 01:01 Updated by: zmatsuo
评论

FileDir の環境変数展開もプレビューできると便利そうです。

ドキュメントにないな、となったのは Windowsのファイルを開くダイアログです。

MSDN などのドキュメント、一般のブログでも見つけられませんでした。

例えば、メモ帳アプリのファイル保存時に、%PROCESSOR_ARCHITECTURE%.log とすると AMD64.log となります。

クローズします。

2023-01-13 01:01 Updated by: zmatsuo
  • 状态 Update from 开启 to 关闭
2023-01-13 08:21 Updated by: nmaya
  • 状态 Update from 关闭 to 开启
评论

trunk r10443, 4-stable r10452 で、strftime() と不正文字の削除の順番を入れ替えた

の変更履歴(バグ修正)はありますか?それとも「書かない」ですか?

2023-01-14 01:05 Updated by: zmatsuo
评论

履歴に入れていませんでした。

TT4のほうに、変更で

  • 標準ログファイル名にファイル名として不正な文字が含まれていた場合、'_'に置換するようにした

として、TT5へマージとしますね。明日やります。

2023-01-14 11:08 Updated by: zmatsuo
评论

trunk r10481, 4-stable r10480 に入れました。

内容的にはバグでもないか、と思い変更に入れました。

指摘ありがとうございました。

2023-01-16 00:18 Updated by: zmatsuo
  • 状态 Update from 开启 to 关闭
评论

クローズします。

Attachment File List

No attachments

编辑

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » 登录名