Paepoi

Paepoi » Gjs Tips » GLib 基本

GLib 基本

# 最終更新日 2018.01.01

特殊ディレクトリ、環境変数
#!/usr/bin/gjs

const GLib = imports.gi.GLib;

/*
 * ユーザーディレクトリ
**/
let dl = GLib.get_user_special_dir(GLib.UserDirectory.DIRECTORY_DOWNLOAD);
print(`ダウンロードディレクトリは ${dl} です`);
/* その他
GLib.UserDirectory.DIRECTORY_DESKTOP
GLib.UserDirectory.DIRECTORY_DOCUMENTS
GLib.UserDirectory.DIRECTORY_MUSIC
GLib.UserDirectory.DIRECTORY_PICTURES
GLib.UserDirectory.DIRECTORY_PUBLIC_SHARE
GLib.UserDirectory.DIRECTORY_TEMPLATES
GLib.UserDirectory.DIRECTORY_VIDEOS
*/

/*
 * 特殊ディレクトリ
**/
print(GLib.get_current_dir()); // 現在のカレントディレクトリ
print(GLib.get_home_dir()); // ホームディレクトリ
/* その他
get_system_config_dirs
get_system_data_dirs
get_tmp_dir
get_user_cache_dir
get_user_config_dir
get_user_data_dir
get_user_name
get_user_runtime_dir
*/

/*
 * 環境変数
**/
GLib.setenv('HOGE', 'hogehoge', false); // 環境変数のセット
print(GLib.getenv('HOGE')); // 環境変数の取り出し
for (let key of GLib.listenv()) {
    print(`${key}=${GLib.getenv(key)}`); // 環境変数の一覧
}

ファイルとディレクトリ
#!/usr/bin/gjs

/*
 * g_rename や g_remove はバインドされていない
 * cp や mv を行うには Gio を使う
 * Gio を使うまでもない単純作業用
**/

const GLib = imports.gi.GLib;

const DIRNAME = "日本語ディレクトリ";
const FILENAME = "日本語ファイル名.txt";
const CONTENTS = `一行目
に行目
3行目`;

// mkdir (ES6 から 8 進数表記は 0o*)
GLib.mkdir_with_parents(DIRNAME, 0o755);

// test
if (GLib.file_test(DIRNAME, GLib.FileTest.IS_DIR))
    print(`${DIRNAME} ディレクトリを作成しました`);

// cd
print("入ります");
GLib.chdir(DIRNAME);

// pwd
print(GLib.get_current_dir());

// リダイレクト (PyGObject と違い UTF-8 で出力)
GLib.file_set_contents(FILENAME, CONTENTS);

// 存在確認
if (GLib.access(FILENAME, 0o755))
    print(`${FILENAME} ファイルを作成しました`);

// コレも使える
print("出ます");
GLib.chdir("..");
print(GLib.get_current_dir());

ファイル名
//!/usr/bin/gjs

/*
 * 実在の有無は関係ありません
**/

const GLib = imports.gi.GLib;

const s = "/home/sasakima-nao/pic/[ドキドキ注意]優木苗.jpg";
 
// ディレクトリ名
print(GLib.path_get_dirname(s));
//=> /home/sasakima-nao/pic

// ファイル名のみ
print(GLib.path_get_basename(s));
//=> [ドキドキ注意]優木苗.jpg

// 絶対パスチェック
print(GLib.path_is_absolute(s));
//=> true

// フルパス作成(区切り文字の有無を自動調節)
print(GLib.build_filenamev(["/home/sasakima-nao/", "/H な画像", "お○ぱい.png"]));
//=> /home/sasakima-nao/H な画像/お○ぱい.png
URI 変換
#!/usr/bin/gjs

const GLib = imports.gi.GLib;

// スキーム取得、実在は関係ないようだ
let scheme = GLib.uri_parse_scheme("hoge://fuga.jp/");
print(scheme);
//=> hoge

// 第 3 引数を true にすると Unicode ドメイン対応になる
let uri = GLib.uri_escape_string("日本語blog.jp", null, false);
print(uri);
//=> %E6%97%A5%E6%9C%AC%E8%AA%9Eblog.jp

// 文字列に戻す
let txt = GLib.uri_unescape_string(uri, null);
print(txt);
//=> 日本語blog.jp

// パス名を URI に、ローカル(同一パソコン内)のファイルならホスト名は不要
uri = GLib.filename_to_uri("/home/sasakima-nao/苗ちゃん.jpg", null);
print(uri);
//=> file:///home/sasakima-nao/%E8%8B%97%E3%81%A1%E3%82%83%E3%82%93.jpg

// 文字列に戻す
let [pathName, hostName] = GLib.filename_from_uri(uri);
print(pathName);
//=> /home/sasakima-nao/苗ちゃん.jpg

リダイレクト
#!/usr/bin/gjs

const GLib  = imports.gi.GLib;

const FILE = "gjs_write.txt";
const TEXT = `echo ほげ > gjs_write.txt
と同様なリダイレクトです。
細かい制御はできませんので注意`;

let result = GLib.file_set_contents(FILE, TEXT); // Write
if (result) {
    print("Write Success");
}
let [result2, contents] = GLib.file_get_contents(FILE); // Read
if (result2) {
    print(contents.toString());
}
Copyright(C) sasakima-nao All rights reserved 2002 --- 2020.