代码: 全选
#!/usr/bin/perl
use utf8;
use Gtk2 -init;
sub popM {
my ($widget, $button, $time, $menu) = @_;
if ($button == 3) {
my ($x,$y,$push_in)=Gtk2::StatusIcon::position_menu($menu, $widget);
$menu->show_all();
$menu->popup(undef,undef,sub{return($x,$y,0)},undef,0,$time);
}
}
open(CFGFILE,"$ENV{HOME}/.traymenu.rc") or die "不能打开配置文件。";
my $menu = Gtk2::Menu->new();
my $item;
my $defaultcmd;
while(<CFGFILE>){
chomp;
next if /^#/;
my($menuname,$iconfile,$command)=split(/,/);
if(!$defaultcmd){$defaultcmd=$command;}
print "$menuname\n";
$item = Gtk2::ImageMenuItem->new_with_label("执行$menuname");
$item->set_image(Gtk2::Image->new_from_file($iconfile));
$item->signal_connect('activate', sub{`$_[1]`;},$command);
$menu->append($item);
}
close CFGFILE;
my $status_icon = Gtk2::StatusIcon->new_from_stock('gtk-home');
$item = Gtk2::ImageMenuItem->new_from_stock('gtk-quit');
$item->signal_connect('activate', sub{Gtk2->main_quit();}, $status_icon);
$menu->append($item);
$status_icon->set_tooltip("截图/贴图/贴文字集合");
$status_icon->signal_connect('activate', sub{`$defaultcmd`;});
$status_icon->signal_connect('popup-menu', \&popM, $menu);
$status_icon->set_visible(1);
Gtk2->main();
配置文件格式如下。
代码: 全选
☎ cat ~/.traymenu.rc
# 菜单项目名,图标,执行命令
# 第一条命令为缺省点击命令
截图并贴图,/home/exp/应用/脚本/f2.png,p-p截图并贴图.bash
截图,/home/exp/应用/脚本/f1.png,import-截图