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 のほうが何をするにも便利だよ。