clipoli の Linux 版を作ろうと思う。
GNOME でランチャなんて馬鹿馬鹿しいけどクリップボード機能は欲しいので。
Windows で言うタスクトレイは Linux では通知スペースと言うらしい。
ココにアイコンを表示させてランチャ形式にすればいいかな。
方法は日本語でアッサリ見つかった。
GtkStatusIcon というのを作ってメニューを突っ込めばいいのね。
ini 読み込みコードは後で作るとして。
yield でタプルを戻すだけでいいから C# より簡単だ。
次にクリップボードとランチャの振り分け。
まあ実験段階なのでこんな感じで実験してみよう。
#! /usr/bin/python
# -*- encoding: utf-8 -*-
import pygtk
pygtk.require("2.0")
import gtk
import os
class TrayItem(gtk.Menu):
def __init__( self, trayIcon):
gtk.Menu.__init__( self)
self.tray = trayIcon
labels = [
("Launcher", "Totem", "totem"),
("Launcher", "Firefox", "firefox"),
("Launcher", "sasakima site", "xdg-open http://palepoli.skr.jp/"),
("Clipboard", "Clip", "てきすと") ]
for l in labels:
m = gtk.MenuItem(l[1])
m.set_name(l[2])
if l[0] == "Launcher":
m.connect("activate", self.on_launcher)
elif l[0] == "Clipboard":
m.connect("activate", self.on_clipboard)
self.append(m)
self.append(gtk.SeparatorMenuItem())
q = gtk.MenuItem("終了")
q.connect("activate", self.on_quit)
self.append(q)
self.show_all()
def on_launcher(self, widget):
l = widget.get_name()
os.system("%s &" % l)
def on_clipboard(self, widget):
c = gtk.Clipboard()
c.set_text(widget.get_name())
def on_quit(self, widget):
gtk.main_quit()
def show_menu(self, widget, button, time):
self.popup( None, None, gtk.status_icon_position_menu, 0, time, self.tray)
def show_menu_act(self, widget):
self.popup( None, None, gtk.status_icon_position_menu, 0, 0, self.tray)
tray = gtk.StatusIcon()
trayMenu = TrayItem( tray)
tray.set_from_stock( gtk.STOCK_DIALOG_INFO)
tray.connect( "popup-menu", trayMenu.show_menu)
tray.connect( "activate", trayMenu.show_menu_act)
gtk.main()
GtkWidget も Name に文字列を突っ込むという無茶が可能なのね。
こんなことをしようと考えてしまうのは私くらいだろうけど。
.NET の Process.Start() みたく URL なら全自動ってならないや。
xdg-open に渡すしかないか、ちょっといまいちかも。
それとランチャはバックグラウンドで動かす用の & 指定も忘れずに。
gtk.status_icon_position_menu を指定すればこうなるのか。
None だと普通にカーソルがあった位置に出るんだよね。
えらく簡単にココまで作れてしまったなぁ。
やっぱり Linux のほうが何をするにも便利だよ。
