Paepoi

Paepoi » Gjs Tips » GSettings(Gjs) Tips

GSettings(Gjs) Tips

# 最終更新日 2020.08.02

GSettings 基本
動かす毎に GNOME デスクトップ時計の曜日表示の ON/OFF を切り替えます
#!/usr/bin/gjs

const Gio = imports.gi.Gio;

let settings = new Gio.Settings({
    schema: 'org.gnome.desktop.interface'
});
let b = settings.get_boolean('clock-show-weekday');
settings.set_boolean('clock-show-weekday', !b);

GSettings のバリアント値
動かす毎に Eye of GNOME のプラグインを弄ります
#!/usr/bin/gjs

const GLib = imports.gi.GLib;
const Gio = imports.gi.Gio;

let settings = new Gio.Settings({
    schema: 'org.gnome.eog.plugins'
});
// 配列化、unpack では JavaScript 配列にならない
let plugins = settings.get_value('active-plugins').deep_unpack();
print(plugins);

if (plugins.includes('reload')) {
    print('EoG プラグインに reload が含まれています、取り除きます');
    plugins.splice(plugins.indexOf('reload'), 1);
    // GVariant 作成、引数はオブジェクトではないので注意
    let a = new GLib.Variant('as', plugins);
    settings.set_value('active-plugins', a);
} else {
    print('EoG プラグインに reload が含まれていますせん、追加します');
    plugins.push('reload');
    let a = new GLib.Variant('as', plugins);
    settings.set_value('active-plugins', a);
}

GSettings のバインド
理解り易くするため GUI にしています
Gedit の行番号表示をこのアプリ、Gedit 自体の設定、 dconf-editor すべてで同期します
#!/usr/bin/gjs

imports.gi.versions.Gtk = '3.0';

const GObject = imports.gi.GObject;
const Gtk = imports.gi.Gtk;
const Gio = imports.gi.Gio;
const System = imports.system;

var MyWindow = GObject.registerClass({
    GTypeName: 'MyWindow'
}, class MyWindow extends Gtk.ApplicationWindow {
    _init(app) {
        super._init({
            application: app,
            title: 'Gedit 行番号表示切り替え'
        });
        this.settings = new Gio.Settings({
            schema: 'org.gnome.gedit.preferences.editor'
        });
        let button = new Gtk.CheckButton({
            label: 'Gedit の行番号を表示する',
        });
        this.settings.bind('display-line-numbers', button, 'active', 0);
        this.add(button);
        this.resize(300, 300);
        this.show_all();
    }
});

var MyApplication = GObject.registerClass({
    GTypeName: 'MyApplication'
}, class MyApplication extends Gtk.Application {
    _init() {
        super._init();
    }
    vfunc_activate() {
        let window = new MyWindow(this);
    }
});

let app = new MyApplication();
app.run([System.programInvocationName].concat(ARGV));

Copyright(C) sasakima-nao All rights reserved 2002 --- 2023.