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 */