Python」タグアーカイブ

アクティブ以外全部閉じる

gEdit のタブ右クリックメニューの name 属性名が知りたい。
いやぁ gEdit のソースコードを見たけど全然解らないや!

gedit

ココの GNOME ftp site って所から ftp で落とせる。
想像していたより小さくて驚いた、まぁ Gtk+ 自体が部品のようなアプリだが。
しかし C でよくぞここまで綺麗に、Windows では考えられない。

でも結局タブの name 属性は解らないまま。
日本語版じゃどうせ解らないから最初からメリケンの Google で探しまくる。
それでもやはり解らない、みんなこういうカスタマイズに興味はないのか?

てゆーか他人が書いたコードをそのまんま貼っている人って以外に多いんだなぁ。
一部日本人だけの特徴だとずっと思っていたよ。

ふと思いついてキーワードから gEdit を外して探してみた。

http://www.tortall.net/mu/wiki/EpiphanyExtensions/tab-menu-close.py?raw

なんか全然関係なさそうだけどコレってもしかして…

ui_str = """<ui>
    <popup name="NotebookPopup">
        <separator/>
        <menuitem name="but_active" action="but_active"/>
    </popup>
</ui>
"""

で gEdit のタブ右クリックメニューに追加できた!
コレさえ解れば簡単だ、ということで [アクティブ以外全部閉じる] 完成。
本サイトにて公開中、以上自己宣伝検索の技でした。

しかしプラグインはたったの百行以下でも成立するからイイね。
これなら結構頻繁に本サイトも更新できるようになりそうだ。

ui_manager

EyeOfGnome – SunagaLab

Gnome 標準の「画像ビューア」も Python でプラグイン拡張ができるんだ。
知らなかった、しかし需要が恐ろしく微妙だ…
何か作ってみようと思ったけど今は全然思いつかない。

しかし同じように get_ui_manager メソッドでわりと楽に UI の取得ができるようで。
調べてみると Totem も当然のように、いや俺はコレについて書くわけには…
よく解らないんだが GtkBuilder は関係あるのかな?

GtkBuilderとGladeについてと、PyGTK上での使用について(概要) – 試験運用中なLinux備忘録

今唐突に思いついたが gEdit のタブ右メニューに「このタブ以外を閉じる」が欲しいぞ。
タブ右メニューの name は…ソースを見るしかない臭いんだが、あまりやりたくないけど。

ところで Gnome 標準なら全部こうなのかな?と思って検索したけどそうでもないや。
まあそりゃ Tomboy なんかは mono だし当然 C# になるわな。
mono やりたい人はこんなのから始めるといいかもよ。

Tomboy/HowToCreateAddins – GNOME Live!

私は Tomboy は使っていないけど…

SyntaxHighlighter 2.0 は textarea もイケた

SyntaxHighlighter 2.0 に詳しいサイトを見つけた。

SyntaxHighlighter2.0の使い方 – ShanaBrian Official WebSite

textarea のままイケたんだ orz
pre に全書き換えしたあの苦労はいったい…

まぁおかげでいつかやろうと思っていた徹底的な整理が終わったけど。
ヘッダとフッタは require_once で読み込んでソコから又色々読み込んで
てなわけでテンプレートはこんなに小さくなった。

<?php $title = ""; require_once("../_header.php"); ?>

<h2></h2>
<div class="entry">
</div>

<!--
<h2></h2>
<div class="entry">
</div>
<pre class="brush: py"></pre>
-->

<?php require_once("../_footer.php"); ?>

もう Bluefish はいらないや、で削除と。

後 pre 変更するのに困ったのが HTML のエンティティ化。
textarea は < とかはそのまんま書けたけど pre は変換しなきゃ駄目。
コレ C++ でやると泣く、山括弧を使いまくる言語だもの。

しかたがないので一度 Windows にもっていき秀丸のマクロでやったり…
それも面倒なので HTML エスケープの gEdit のプラグインを作ってみた。

HTML エスケープ
少し改造しました、トップページ(上のリンクの本サイトのとこ)からどうぞ。

もう少し試して解説ページを作ります。

起動している自ウインドウを見つける

多重起動防止でまだ詰まっております。
C 言語での方法はボチボチ見つかるけど Python に書き換えると上手くいかない。

色々調べると wnck なんていうモジュールがあることが解った。

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import wnck

# デスクトップ取得
w = wnck.screen_get_default()

# ディスプレイサイズ

print "ディスプレイ幅",w.get_width()

print "ディスプレイ高さ",w.get_height()

なんてコトができるというのが解った。
が PyGtk のヘルプにも Python のヘルプにも wnck の項目が見つからない…

GNOME Library – 開発者

Gnome のヘルプ内で Libwnck というのがやっと見つかった。
Opera のページ内検索は便利だね、ドットを押すだけだし。
いや、肝心の検索バーが Linux 版はたまに入力不能になるので…まあこれはいい。
後は man と dir(wnck) と USA Google を使って地味に調べてみた。

PyGTK FAQ Entry

ほーこんなことができるんだ。
ということは

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import gtk
import wnck

screen = wnck.screen_get_default()

while gtk.events_pending():
    gtk.main_iteration()

for window in screen.get_windows():
    name = window.get_name()
    if name.endswith("Y901x"):
        print "起動しています"
        break

なんてコードで現在 Y901x が起動しているかどうかは確認できるわけだ。
同じ名前が存在していたら困るけどまず無いだろう。
とはいえいつのまにか全然違うコードになるかもしれないんだけど…

とにかく後はウインドウに URI を渡す処理だけだ、もう少し。

デスクトッププロパティ

多重起動防止をどうするか調べていている。
どうやら atom を使う方法があるようだ、ということで

gtk.gdk.atom_intern

とかでググりまくっていたらこんなのを見つけた。

Extended Window Manager Hints

んーということならデスクトップのプロパティは

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import gtk

# デスクトップ取得
w = gtk.gdk.get_default_root_window()
# 得られるプロパティのリスト取得
p = gtk.gdk.atom_intern("_NET_SUPPORTED")
a = w.property_get(p)[2]
# ループで丸ごと表示
for r in a:
    p = gtk.gdk.atom_intern(r)
    print r
    print w.property_get(p)

とすればどのキーワードでどのプロパティが取れるか全部表示できて解りやすい。
とりあえず出力されるタプルの3番目がリストか文字列になっている。
None でないのを展開、又は文字列ならそのまま表示させれば情報が手に入る。
freedesktop.org だから KDE でも問題無いと思う、試していないけど。

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import gtk

# デスクトップ取得
w = gtk.gdk.get_default_root_window()

# ディスプレイサイズ
p = gtk.gdk.atom_intern("_NET_DESKTOP_GEOMETRY")
print "ディスプレイ幅",w.property_get(p)[2][0]
print "ディスプレイ高さ",w.property_get(p)[2][1]

# ワークエリア
p = gtk.gdk.atom_intern("_NET_WORKAREA")
area = w.property_get(p)
print "ワークエリア:Left",w.property_get(p)[2][0]
print "ワークエリア:Top",w.property_get(p)[2][1]
print "ワークエリア:Width",w.property_get(p)[2][2]
print "ワークエリア:Height",w.property_get(p)[2][3]

# 仮想デスクトップの数
p = gtk.gdk.atom_intern("_NET_NUMBER_OF_DESKTOPS")
print "仮想デスクトップの数",w.property_get(p)[2][0]

# 現在の仮想デスクトップ位置
p = gtk.gdk.atom_intern("_NET_CURRENT_DESKTOP")
print "現在の仮想デスクトップ位置",w.property_get(p)[2][0]

# 現在の仮想デスクトップ名
p = gtk.gdk.atom_intern("_NET_DESKTOP_NAMES")
print "現在の仮想デスクトップ名",w.property_get(p)[2],"\n"

_NET_CLIENT_LIST で表示されているウインドウ ID
_NET_ACTIVE_WINDOW でアクティブウインドウ ID

が得られるんだがコレを上手く使えないかな?いまココ