Gjs にて C 言語の __FILE__、Python の __file__ に相当するもの。
const System = imports.system;
System.programInvocationName;
なんだあったのか。
これでちょっぴりコードがスッキリできるぞ。
それと open シグナルの引数は二つだった。
引数や戻り値の数を間違って指定してもエラーにならない仕様ってチト困るよ。
それらはそれほど問題にならないのだけれども。
コレはどうにかならないものか…
#!/usr/bin/gjs
const Lang = imports.lang;
const Gtk = imports.gi.Gtk;
const Gio = imports.gi.Gio;
const System = imports.system;
const OpenApplication = new Lang.Class({
Name: 'OpenApplication',
Extends: Gtk.Application,
_init: function() {
this.parent({
// set G_APPLICATION_HANDLES_OPEN
flags: Gio.ApplicationFlags.HANDLES_OPEN
});
},
vfunc_open: function(files, hint) {
// Not compatible CJK
print(files[0].get_path());
// to JavaScript String
let jstr = decodeURIComponent(escape(files[0].get_path()));
print(jstr);
},
vfunc_activate: function() {
//
}
});
let app = new OpenApplication();
ARGV.unshift(System.programInvocationName)
app.run(ARGV)
ちなみに PyGObject
#!/usr/bin/env python3
import sys, gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gio
class OpenApplication(Gtk.Application):
def __init__(self):
Gtk.Application.__init__(self,
flags=Gio.ApplicationFlags.HANDLES_OPEN )
def do_open(self, files, n_file, hint):
print(files[0].get_path())
def do_activate(self):
pass
app = OpenApplication()
app.run(sys.argv)
アルファベットなら問題ないけど CJK だと引数の GioFile がおかしい。
path が滅茶苦茶な状態で渡されてくるので自力変換する必要あり。
変換方法はココで見つけたけどアルファベットは問題ないし UTF-16 じゃなくね?
get_uri でも同じ、一度変換して再変換という手間が必要。
PyGObject は問題ないのでバインディングの失敗ですよね。
# 追記
ARGV 自体がおかしかった。
ARGV.forEach(function(element) {
print(element);
});
/*
gjs test.js 日本語.txt
#=>æ?æ?¬èª?.txt
*/
