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.