その他の設定ダイアログからログファイル名に設定できないstrfnameフォーマットがある(ロケール=日本)
trunkに修正を入れました。r10443です。
次の修正でかなり使い勝手が良くなったと思います。
さらに次の修正を入れようと思います。
Tera Term 4 では最小の修正にしようと思います。
修正ありがとうございます。
trunk/r10443 で簡単に確認しました。(細かくは見ていない)
「&u」「&h」 はプレビューで表示されますが、ログファイルの名前には反映されないようです。
※Bluetooth経由のUART接続でしか見ていないので「&p」は未確認だけどログ開始画面で&pのまま表示されるのでたぶん反映されない。
以下使ってみた感想。
設定するファイル名の例をプルダウンから選べるようにした
選択肢から選べるならフィーリングで使う人もいるので敷居は低くなったと感じます。
ヘルプに書いてあるとは言え、 strftime と書かれて認識できるのは、 プログラムを書く人だけではないかと前々から思っていました。
大多数の人は使えていないと思われます。
普通は、ある目的の作業内においてログが複数ある場合、日付情報付いていて、
フォーマットが統一しているファイル名なら文句はでないので
プルダウンで選べるのは良いと思います。
また、プルダウンの項目は、いろいろな人の意見を募ったほうが良いかと思いました。
自分からは以下の2つ。
フォーマット後がその場でプレビューできるようにした
Tipsだとちょっと主張しすぎかなというところもありますが、ログファイル名のイメージがわくのと フォーマットの誤記を確認出来て、わかりやすくなったと思います。
Tera Term 4 では最小の修正にしようと思います。
Tera Term 4 での修正は、今まで特に指摘が無かったのならそれで良いのではないかと思います。
「...ログ開始画面で&pのまま表示されるのでたぶん反映されない。」と書きましたが、反映がされてはいないのですが、反映するタイミングは、 strftime 形式の反映も含めて、ログ開始画面を開いた時ではなく、「OK」ボタンを押したタイミングではないでしょうか。
ログファイルのファイル名に日付が欲しいのは、ログ開始時刻であって、ログ開始画面を開いた時刻ではないため。
i18n対応しました。
ファイル名のプレビュー不要な時は表示しないようにしました。 例えば "teraterm.log" の時はプレビューは表示されません。
もう少しでログファイル名の全体を Unicode化できそうです。
レスポンスありがとうございます。
時間などと同様で、ログを作成する時の状態でログファイル名が決定することになります。 &h は未接続だと空になります。
接続前にログを開始しているのかな?(もしかすると起動時に自動的にログ採取開始?)
それと、&p はシリアルの場合は空になります。&h を試してみてください。(パイプ時も未実装ですね。)
&h, &pはなんとなくssh接続時を意識したもののように感じます。
https://ttssh2.osdn.jp/manual/5/ja/menu/setup-additional-log.html
今後の課題ですね。続きは作っていただいたチケットで。
&u が Windowsのログオンユーザー名というのもマニュアルに書いたほうがよさそうですね。
接続前にログを開始しているのかな?(もしかすると起動時に自動的にログ採取開始?)
ログ開始画面経由は、シリアル接続後にログ取得開始しています。
それと、&p はシリアルの場合は空になります。&h を試してみてください。(パイプ時も未実装ですね。)
誤解を与えてしまってすみません。接続先がシリアルで &p が空になることは確認(ドキュメントの通り)していたのですが、 今確認できる ssh サーバが無かったので &p は反映されるのかどうかは未確認という意味で書きました。
なお、未接続の時&hが空になることも確認しています。
&u が Windowsのログオンユーザー名というのもマニュアルに書いたほうがよさそうですね。
これは私も思いました。 シリアルでは、ローカルPCのユーザ名が表示されてました。 ソースコードを見る限り ssh/シリアル関係なくローカルPCのWindowsのログオンユーザー名(GetUserNameW()で取得)のようですね。
ヘルプの説明はあっていますが、sshのリモート先の login ID と勘違いしそうな気がします。
Reply To tomo3136
ヘルプに書いてあるとは言え、 strftime と書かれて認識できるのは、 プログラムを書く人だけではないかと前々から思っていました。 大多数の人は使えていないと思われます。
Tera Termのようなターミナルエミュレーターを使うのはプログラムを書けるような人だと思っていましたがそうでもないんでしょうか。strftimeと書かれていて認識できなかったら自分で調べられないような人が使うものではないと思ってしまいます。もちろん分かりやすくなっているのはいいことだと思います。
Tera Termのようなターミナルエミュレーターを使うのはプログラムを書けるような人だと思っていましたがそうでもないんでしょうか。 strftimeと書かれていて認識できなかったら自分で調べられないような人が使うものではないと思ってしまいます。
これは手厳しい。。。
そうですね。私もそう思いたいのですが、それは理想かなと思っています。
ターミナルエミュレーターは、リモート操作が使用目的なので、それができればプログラムは書けなくても使えます。
ターミナルエミュレーターを使用する人の多くはエンジニアだとは思いますが、ソフト開発者、ハード開発者、インフラエンジニア、テストエンジニア、メンテナンス作業者、製造ライン作業者、などなど多岐にわたります。
ソフト開発者は C言語を学んでいれば知識としてあると思いますが、その他の分野の人たちに同等の知識を求めるのは酷だと思います。
メンテナンス作業者、製造ライン作業者に至っては、誰かが構築してくれた環境を使っているに過ぎないと思います。
自分はソフト開発者ではないし、周りも Teraterm を使っても、ほとんどの人はプログラムを書きません。
「strftime」と書くことをどうこうしてほしいわけではなく、折角使える機能があるなら、多くの人に使ってもらえるほうが良いのではないかと思います。
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/storage/snapshot/teraterm-5.0-alpha1-r10445-20221231-appveyor.zip
あけましておめでとうございます。
修正ありがとうございます。ログファイル名の😄にはほっこりしました。
年末と違って年始は予定が多いので、確認は落ち着いてからにしたいと思います。
appveyorのスナップショットは、ハッシュ値はないのでしょうか。
以下、自分の見解。
strftime の %yと%Yや%mと%Mなど、ちょっと記憶が怪しいことが多いので マニュアル引かなくてもテンプレートを持ってきて確認できればな、、、、
普段から使用していないと記憶が怪しいことが多いので、気の利いた機能と思っています。
"teraterm.log" がドロップダウンの中にあれば、 「なぞの記号でファイル名を作らなければならぬ」と 誤解を生まなくてよさそうです。(iniのデフォルト値ですね)
r10445には入っていないのでわかりませんが、ドロップダウンにあれば不要な誤解を生みにくいと思います。
"teraterm_%y%m%d%H%M%S.log" があれば、 「普通の文字になぞの記号を組み合わせていろいろできるんだ」と 気づくきっかけになりそうでよさそうです。(なくても気づく?)
r10445には入っていないのでわかりませんが、ドロップダウンにあったほうが参考にしやすいと思います。
自分の感覚では、理系な人は無くても気づけそうですが、文系な人は無いと気づけるかは微妙な気がします。
とりあえず今回の実装はこれぐらいにとどめようかと思います。
そうですね。俺パターン追加はカスタマイズ機能のカスタマイズであり必要かも怪しいので、明確な機能リクエストがあってからでも良いのではないでしょうか。
もし、ログファイル名の変更がちょくちょく発生する、ということなら、、、、
「ログファイル名の変更がちょくちょく発生」する場面は思い浮かびませんが、もしそこまで欲する場合、自分なら外部で作成したログファイル名をコマンドラインで指定(/L)するか、 マクロでログファイル名を作って開いてる(logopenコマンド)と思います。
4-stable にも修正を入れました。r10452 です。
主に Tera Term 5 向けの修正となったのでマイルストーンを変更します。
ドロップダウンに次のアイテムを追加して一段落としようと思います。
"teraterm.log" "teraterm_%y%m%d%H%M%S.log"
修正ありがとうございます。 確認が遅くなり申し訳ありません。
確認:4-stable/r10452
設定:TERATERM.INI Locale=Japanese
設定:TERATERM.INI Locale=en_US.utf8
確認:trunk/r10455
Teraterm5 では、設定ファイルでは TERATERM.INI で Locale が無くなったのでどこで指定するのでしょうか。
マクロ log_open のヘルプドキュメントでは、出力先ディレクトリを指定したい場合は、changedir してから log_open するサンプルになっている。 Teraterm5 では、changedir しても効かない。 logopen のファイル名を絶対パスにすれば指定したディレクトリに出力できる。 マクロのドキュメントは修正が必要と思われます。
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設定を直さないといけなさそう…)
でも、設定されるロケールによっては動作がおかしくなることがあると思い 少しづつ直しつつありますが、まだ依存しているところが残っている状態です。
"teraterm.log" がドロップダウンの中にあれば、 「なぞの記号でファイル名を作らなければならぬ」と 誤解を生まなくてよさそうです。(iniのデフォルト値ですね) "teraterm_%y%m%d%H%M%S.log" があれば、 「普通の文字になぞの記号を組み合わせていろいろできるんだ」と 気づくきっかけになりそうでよさそうです。(なくても気づく?)
項目の追加ありがとうございます。使いやすくなったと思います。
ticket #46481によると環境変数展開が修正前はできていて、修正後はできないようなので調査します。
環境変数展開は、下のようなこともできてしまうので、Teraterm4のように展開するのが正解か、Teraterm5のようにできないのが正解か迷っていて、チケット作成はまだしていませんでした。
* サブディレクトリABCを作成し、環境変数 TEST1=ABC\DEF を設定した場合、標準ログファイル名に c:\work\tt\%%ABC%%\teraterm.log を設定すると他のフォルダにログファイルが作成出来てしまう。これは許していいのだろうか。しかしながら、コマンドライン"/L"指定した時には環境変数展開は使いたいかも。
ticket #46481の確認結果2.mdでは、ドキュメントにもなさそうだし意図しない設定ができるならTeraterm5のほうが正しいのかなと思い、そのような判定の書き方になってしまいましたが、Teraterm5でも下位互換(Teraterm4)とするなら環境変数展開はあったほうがよさそうです。
環境変数展開を調べようとしています。
Tera Term 4 で再現しようとしていますがうまくいきません。
環境変数展開を再現する例を教えていただけますか?
テストでは以下でした。
条件が絞れていませんでした。
コマンドラインの場合は、teraterm4でもteraterm5でも同じでした。
cmd.exe で /L="teraterm-%%USERNAME%%.log" した場合は、環境変数を展開してからstrftime展開。
powershell.exe で /L="teraterm-%%USERNAME%%.log" した場合は、strftime展開のみ。
標準ログファイル名で指定していますが、ログ開始画面で teraterm-%USERNAE%.log に設定しても同じ。
teraterm4 では、環境変数を展開しますが、teraterm5 では環境変数を展開しない。
環境変数を展開された teraterm4 でも、「自動的にログを採取する」をチェック入れておくと環境変数を展開しない。
環境変数を展開されたのは、ファイル保存ダイアログ経由だからのようです。
手元でチェックすると、Tera Termのコードの外で 環境変数の展開が行われているところがあります。
cmd.exe と コモンダイアログの2箇所です。
最近のOS(Windows 10,11)だと同じだと思います。チェックしていただけますか?
次の例では、環境変数 PROCESSOR_LEVEL には 6 が入っています
%環境変数名% で展開される
%環境変数名% では展開されない
コモンダイアログによる %環境変数名% の展開
---
ファイル名入力時に環境変数が展開されるということが書いてあるドキュメントを 探したのですが見つけることができませんでした。
cmd.exe と コモンダイアログの2箇所です。 最近のOS(Windows 10,11)だと同じだと思います。チェックしていただけますか?
Windows11のみですが、確認しました。同じ動きとなります。
ファイル名入力時に環境変数が展開されるということが書いてあるドキュメントを 探したのですが見つけることができませんでした。
私も探してみましたが見つけることができませんでした。
環境変数が展開されることはテストでたまたま項目に挙げただけに過ぎず、 ヘルプドキュメントに書いていないし、OSの違いによるものかもしれません。
環境変数で書いても壊れることはない(保存先がNGならNGを表示する)ので Teraterm としては問題なしでよさそうです。
FileDir の環境変数展開もプレビューできると便利そうです。
ドキュメントにないな、となったのは Windowsのファイルを開くダイアログです。
MSDN などのドキュメント、一般のブログでも見つけられませんでした。
例えば、メモ帳アプリのファイル保存時に、%PROCESSOR_ARCHITECTURE%.log とすると AMD64.log となります。
クローズします。
履歴に入れていませんでした。
TT4のほうに、変更で
として、TT5へマージとしますね。明日やります。
確認: 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 を削除、または補足説明したほうが良いと思います。