Paepoi

Paepoi » Gjs Tips » Gjs 組み込み機能

Gjs 組み込み機能

# 最終更新日 2023.11.19

標準出力
標準入力は無い、GIOChannel を使おう
#!/usr/bin/gjs

// print で標準出力に出力される
print('標準出力');

// printerr は標準エラー出力に出力される
printerr('標準エラー出力');

// log も標準エラー出力
// 「Gjs-Message: 時間情報: JS_LOG:」の接頭子付き
log('標準エラー出力');

// console.log が追加された、これまた標準エラー出力
// 「Gjs-Console-Message: 時間情報:」の接頭子付き
console.log('標準エラー出力');

system
mainloop 等は無くなりましたがコレは残っています
#!/usr/bin/gjs -m

import System from 'system';
import GObject from 'gi://GObject';
  
// 自身のカレントディレクトリからの相対パス、C 言語の argv[0] と同じ
print(System.programInvocationName);

// 自身の絶対パス
print(System.programPath);

// 引数の配列、ARGV と同じ
for (let a of System.programArgs) print(a);

// gjs --version コマンド同様、ただし区切りは無い
print(System.version);

// object のアドレス
let obj = {}
print(System.addressOf(obj));

// GObject 派生な場合のアドレス、Gtk.Window 等もコレ
let gobj = new GObject.Object();
print(System.addressOfGObject(gobj));

// 参照カウンタ数
let x = gobj.ref();
print(System.refcount(x));
gobj.unref();
print(System.refcount(x));

// 終了
System.exit(0);
print('一行前で終了したのでコレは表示されない');

TextEncoder, TextDecoder
UTF-8 バイト文字列と JavaScript 文字列の相互変換
#!/usr/bin/gjs

// Uint8Array に変換
let encoder = new TextEncoder();
let u8arr = encoder.encode('オリンパス PEN');
print(u8arr);
 
// JavaScript 文字列に変換
let decoder = new TextDecoder();
let jsStr = decoder.decode(u8arr);
print(jsStr);

byteArray
古い手段の UTF-8 バイト文字列と JavaScript 文字列の相互変換
#!/usr/bin/gjs -m

import ByteArray from 'byteArray;';

// Uint8Array に変換
let u8arr = ByteArray.fromString('オリンパス PEN');
print(u8arr);

// JavaScript 文字列に変換
let jsStr = ByteArray.toString(u8arr);
print(jsStr);

setInterval
Web API の setInterval を移植、繰り返し処理
#!/usr/bin/gjs -m

import GLib from 'gi://GLib';

const mainloop = new GLib.MainLoop(null, false);

let count = 1;
let id = setInterval(()=> {
    if (count == 5) {
        clearInterval(id);
        mainloop.quit();
    }
    console.log(count);
    count++;
}, 1000);

print('__do__');

mainloop.run();

print('__done__');

setTimeout
Web API の setTimeout を移植、指定ミリ秒後に実行
#!/usr/bin/gjs -m

import GLib from 'gi://GLib';

const mainloop = new GLib.MainLoop(null, false);

print('5 秒後に,,,');

setTimeout(()=> {
    print('何もおこりませんでした');
    mainloop.quit();
}, 5000);

mainloop.run();
Copyright(C) sasakima-nao All rights reserved 2002 --- 2024.