知らぬ間に Gjs の挙動が変わっていた。
普段は Python ばかりなのでいつからかは解らない。
#!/usr/bin/gjs -m import GLib from 'gi://GLib'; /** * res is Uint8Array */ let res = GLib.spawn_command_line_sync('pwd')[1]; print(res.toString()); //=> Warning
よく見ると実行はされているので警告されているだけですね。
今まで普通に動いた、なんなら toString さえ暗黙実行されていた。
Google translate 等を使えば解るけど TextDecoder 使えってさ。
互換性のために残しているけどはよ移行しろということらしい。
警告メッセージも親切になったもんだ、ということで。
主要ブラウザは全部が既に実装済みなんですね。
Web API なんだが Gjs や JXA でも使えるのだろうか?
#!/usr/bin/gjs -m import GLib from 'gi://GLib'; let res = GLib.spawn_command_line_sync('pwd')[1]; // TextDecoder let dec = new TextDecoder(); let text = dec.decode(res); print(text.trim());
動くじゃん、Spider Monkey 自体に実装されているのだろうか。
import 何も無しで使えるのって筆者は正直気持ち悪いんですけど。
string に変換されたので trim メソッドで改行を削除しています。
ちなみに。
#!/usr/bin/gjs /** * old gjs */ const GLib = imports.gi.GLib; const ByteArray = imports.byteArray; let res = GLib.spawn_command_line_sync('pwd')[1]; let text = ByteArray.toString(res); print(text.trim());
byteArray モジュールを使う以前の正規な手段もまだ使えます。
というか、imports でのインポートもまだ普通に使えるんだよね。
byteArray も imports も Gjs 独自実装だから排除したかったのだろうけど。
Gjs で新しい手段の import では -m オプションを忘れずに。
JXA では TextDecoder 等は使えない、やはり実装はバラバラ。
というか JXA の UTF8String って正体は string じゃないか。
普通に string のメソッドが使えるし、まあ Cocoa がそうなのね。
Uint8Array は JXA ではほぼ扱われることが無いということだろう。
Node.js やその他は知らないしどうでもいい。
非推奨の機能、廃止された機能 – JavaScript | MDN
てか escape や unescape は非推奨になっていたのか。
Tips ページをいくつか書き換えなきゃなぁ面倒だなぁ。
え?今日は公園には行きましたよ、察して。