月別アーカイブ: 2016年10月

ClutterActor on the GtkWidget

今頃気が付いた、sushi は cbr/cbz を表示できる!

あ、sushi は nautilus で Space キーにてプレビューする拡張。
macOS のプレビューと同じものね、Fedora には最初から入っている。

でも巨大ファイルだと最初の表示が遅いなぁ。
CPU 全コアを使って展開しているけど全部読み込むまで表示されないっぽい。
マルチスレッドのほうがいいというわけではないのね。
Evince と同じなので多分 gir で Evince を使って…

そうか、gir で Evince を使えばいいのか!
読み込みの工夫で初回表示を早くできれば我がアプリに使えるかも。
sushi は Gjs だ、早速コードを見てみよう。

gedit /usr/share/sushi/js/viewers/evince.js

gtkclutter

うぅ、思ったより解析に時間が掛りそうだ。
いやまてよ、この下のほうのコードはまさか。
おまけで ClutterActor 上に GTK+ 部品を乗せる方法が解ったぞ。

#class ComipoliGoButton(Clutter.Actor):
class ComipoliGoButton(GtkClutter.Actor):
    def __init__(self, right):
        '''Clutter.Actor.__init__(self)
        if right:
            pixbuf = GdkPixbuf.Pixbuf.new_from_xpm_data(ICON_RIGHT)
        else:
            pixbuf = GdkPixbuf.Pixbuf.new_from_xpm_data(ICON_LEFT)
        image = Clutter.Image()
        image.set_data(
            pixbuf.get_pixels(),
            Cogl.PixelFormat.RGBA_8888,
            pixbuf.get_width(),
            pixbuf.get_height(),
            pixbuf.get_rowstride()
        )
        self.set_content(image)'''
        GtkClutter.Actor.__init__(self)
        if right:
            self.icon = Gtk.Button.new_from_icon_name("go-next-symbolic", Gtk.IconSize.MENU)
        else:
            self.icon = Gtk.Button.new_from_icon_name("go-previous-symbolic", Gtk.IconSize.MENU)
        #self.set_content(self.icon)
        self.props.contents = self.icon
        self.icon.show()
        #self.connect("enter-event", self.on_enter_event)
        #self.connect("leave-event", self.on_leave_event)
        #self.props.opacity = 0x00
        self.set_reactive(True)

うんうん。

gtkclutter2

ClutterActor 継承をヤメにして GtkClutterActor にする。
set_content だと例外になるけど property なら何故かセット可能。
上に GtkWidget があるせいで enter-event が動作しないので変える。
コレだけで普通に GtkWidget と相互の上下関係が作れる、やったね。

よし久々に comipoli の更新でもするか。
でも今日は「名駅周辺でポケボール集め」という大切な大切な用事が…
我が町でポケ GO をやっているとすぐ無くなっちゃうのは痛い。

macOS Sierra in Gedit, Kate

ftp.gnome.org

Mac 版 Gedit 3.13.91 なんてモンがあるジャン!
インストール方法は普通なので省略、macOS Sierra で起動できた!

Gatekeeper があるので初回は control を押しながら起動して開くを選ぶ。
次回からは普通に起動できる、もう慣れたよね。
off にする方法を Web で紹介している人はコレのいったい何が面倒なんだろう。

~/.config/gedit ディレクトリが作られている。
Fedora から tools と snippets ディレクトリをコピー。
おぉあたりまえのように動くぞ!

macOS デフォルトには ~/.local が無いんだね。
~/.local/share/gedit/plugins ディレクトリを自分で作る。
Gedit 及び Eye of Gnome プラグイン – L’Isola di Niente
の 3.12 版をインストールしてみる。

おぉ a_href_picture まで動く!
GTK+ も Python も同梱のものを使うようだ。

~/.config/dconf/user が作られない。
~/Library/Preferences/org.gnome.Gedit.plist がソレっぽい。
Mac では dconf の設定は個別になるようだ。
smart_home_end を BEFORE にしたいんだがどうすれば…

で、ココまでやってやっと気が付いた。

日本語が入力できないジャン…

Mac OS X版GTK+の日本語入力対応 その後 – ククログ(2013-12-26)

GTK+ 3.10 から mac での日本語入力問題は解決したんじゃなかったの?
mac で Xamarin をやっている人とか多いはず、ってアレは GTK2 だっけ。
どうやらこれについてはエンドユーザーではお手上げっぽい。

あぁ日本語入力以外は何も問題無いのに。

ヤケクソだ、Kate (KDE デフォルトエディタ) をインストールしてやる!
Qt なら多分だけど大丈夫だろう。

うん、Kate なら日本語入力は問題無いぞ。
って、return と delete キーが反応しないぞ!
コイツもソレ以外は問題なさそうなのに。

どっちもアカン、オススメブログとかで名前が出ないわけだ。

Visual Studio Code を使い続けるしかないか。
コード補完機能が正直ウザいんですけど。

JXA Rename

以前 JXA で Finder から選択項目を得られればどうにでもできる。
なんて書いたけどそのどうにかする方法を書いていない。
ということで選択ファイルを全部小文字にする手段でも。

Macでファイル名を小文字から大文字に一発で変換する ? 静岡県湖西市南台のECサイト制作会社

いや、これじゃカレントディレクトリ全部になっちゃう。
Terminal.app で開き直すのも面倒だし。

【Mac】Automatorを使って画像のファイル名を連番付きに変更する方法 | コトノバ

Automator にはこんなのがあるのか。
指定がごちゃごちゃして余計に面倒臭いと思うんですけど。

JXA で拡張ならこんなに簡単。

#!/usr/bin/osascript

let selections = Application("Finder").selection();
selections.forEach(function(item) {
    // Get Property
    let s = item.name();
    // Set Property
    item.name = s.toLowerCase();
});

後は小文字にしたいファイルを選択して。

lowercase

JXA のプロパティは括弧で getter、括弧無しなら setter になるようだ。
何か変だけどそういうもんだと思うしかない。
それとヘルプで r/o となっているところはリードオンリー。

finder_help

文字列変換は JavaScript そのまんま。
ただし alert, prompt とかは Application から作る。

Batch File Rename Script ? GitHub

cookbook はわざと難解に書いているとしか思えないのは気のせい?

shell

ブックマークの整理をしていて素晴らしいページを発見。
って、つまり一年以上前にブックマークして華麗に忘れていたんだけど。

スマートな紳士のためのシェルスクリプト – @IT

この人は経験値があって話が上手いな、真似したい。
筆者が自分のことを筆者と書いているのはそういう人達の真似だったり…
でも一番素敵と思ったのは (2) で駄目と書かれた

if type logger > /dev/null 2>&1; then
    LOGGER="logger -s -p user.notice -t dhclient"
else
    LOGGER=echo
fi

で。

いや、絶対パスに入っているかどうかはディストリビューション側の仕事で。
サードパーティ側はコマンドが使えるかどうか「だけ」が重要ですんで。

いやまて…
コレってインタラクティブシェルだとどうなる?
面白そうなので早速。

dev_null

インタラクティブシェルでもやはり何も出力されない。
>>> の PS2 変数さえ無視される、打ち込んだキー以外は完全破棄のようだ。
だけど exit() 等の関数は普通に通用されてしまう、面白い。
なので、gedit や gnome-terminal は問題なく起動できてしまう。

でも eog はどうやっても駄目、あぁなるほど。
eog って GNOME Project の中でもかなり特殊と感じていたのはコレか。
もの凄く優秀なアプリなんだけど GNOME の思想と何か違う、みたいな。
それが何かはまだ解らないけど、まあそれは別の話で。

あぁそういう手があったのか、みたいな。
mac でも当然使えるしシェルスクリプト覚書に追記しようかと。

Mac and Linux user-dir

Linux の sh でユーザーディレクトリのパスを得るのは簡単だ。
最近のバージョンであれば XDG 関連が最初から入っている(と思う)
詳しいことは man xdg-user-dir で。
たとえばドキュメントディレクトリなら

echo xdg-user-dir DOCUMENTS

「そんなコマンドネェよ」という人も大丈夫。
xdg-user-dir の中身は単純なシェルスクリプトなので自作も簡単。

#!/bin/sh

test -f ${XDG_CONFIG_HOME:-~/.config}/user-dirs.dirs && . ${XDG_CONFIG_HOME:-~/.config}/user-dirs.dirs
if [ "x$1" = "xDESKTOP" ]; then
  eval echo \${XDG_${1}_DIR:-$HOME/Desktop}
else
  eval echo \${XDG_${1}_DIR:-$HOME}
fi

何をやっているか理解できれば素敵。
デフォルト引数はこんな場合に使うのか、ふむふむ。

Mac では、困った user-dirs.dirs が無いぞ。
xdg-open には open_darwin() という関数があるのにな。

open_darwin

シェルから得る手段を探しているけど見つからない。
Mac って本当に sh ではたいしたことができないなぁ。
AppleScript か JXA を使いなさいということか。

って、だったら AppleScript を sh から使えばいいんでね?

#!/bin/sh

doc=`osascript -e "POSIX path of (path to documents folder)"`
echo Documents Path: $doc

おぉ!

user_dir

Mac や Linux ではやはり US キーボードでないと駄目だね。
バックコーテーションとチルダはシェルでよく使うから。
コレが日本語キーボードだと嫌がらせとしか思えない位置にある。

おまけ、Visual Studio Code で今頃知った。
command+shift+C でソース位置をカレントに terminal.app が開く。
拡張スクリプトを書こうとしたけど必要無かったYO!