Online video hd

Смотреть красивое видео

Официальный сайт ysaa 24/7/365

Смотреть видео бесплатно

karp 18.06.2010 13:58

СкриптыПростой виджет на GTK2-PERL

=screen
Долго думал, чем-бы бесполезным себя занять. В итоге решил разобраться как работает в Gtk Drag and Drop.
В результате получился скриптик.

Суть его в следующем:
Где-то на экране, поверх всех окон, на всех рабочих столах, висит небольшое окошко без рамки.
Чтобы выполнить какое-либо действие, нужно дропнуть файл на это окошко. На скрине видны два таких окошка.
Первое, что с крестом, удаляет дропнутый в него файл или каталог.
Второе - сжимает дропнутый в него файл. А если дропнули каталог, то сжимаются все файлы внутри каталога.

Под катом пример такого скрипта.

P.S. Можно попробовать сделать немного красивее. Например, чтобы картинка увеличивалась, когда на нее наводят.
P.P.S. Художник из меня никакой.

Листинг скрипта:
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/usr/bin/perl -w

use Gtk2 '-init';
use URI::file;
use utf8;

my $img = Gtk2::Image->new_from_file('trash.png'); # Создаем картинку
$img->drag_dest_set('all', 'copy');
$img->drag_dest_add_uri_targets;
$img->signal_connect('drag-data-received' => sub
{
my($widget, $content, $x, $y, $data, $info, $time) = @_;
my $str = $data->data; # Получаем URI
$str = URI->new($str)->file; # Преобразовываем в имя файла
system "rm -rf \"$str\""; # Удаляем файл
return 1;
}
);

my $vbox =Gtk2::VBox->new; # Создаем VBox
$vbox->pack_start($img,0,0,0); # Помещаем в него картинку
$vbox->show_all;

my $main = Gtk2::Window->new('toplevel'); # Создаем окно
$main->set_default_size(24, 24);
$main->set_decorated(0); # Убираем рамку окна
$main->stick; # Прилепляем окно на все рабочие столы
$main->set_skip_taskbar_hint(1); # Скрываем окно в панели задач
$main->set_keep_above(1); # Устанавливаем окно поверх остальных
$main->signal_connect("destroy" => sub{Gtk2->main_quit; });
$main->add($vbox); # Добавляем на окно VBox
$main->show_all;

Gtk2->main; # Запускаем основной цикл
0;



Вместо строки
system "rm -rf \"$str\""; # Удаляем файл
Можно вставить любое действие, например
system "gzip -r \"$str\""; # Cжимаем файл

-
P.S. Будьте осторожны. Не дай бог, запустите скрипт от root`а и чего-нибудь там напутаете. Это может закончится плачевно...


Тэги: gtk perl
+ 12 -
Похожие Поделиться

alvelin 18.06.2010 14:19 #
+ 0 -
Подобным же образом (drug-and-drop)сжимал/разжимал архивы Aladdin Expander в под MacOS classic. А можно на скрипт повесить "умное" поведение? - Т.е. если на значок перемещается папка, то она сжимается, а если архив - то, наоборот, распаковывается? (Т.е. на одну и ту же картинку?)
vvorth 18.06.2010 14:24 #
+ 1 -
до вот этого
$str = URI->new($str)->file; # Преобразовываем в имя файла
вставить проверку на что кончается $str и исходя из результата этого пускать либо архвацию либо распаковку.
inst 18.06.2010 16:06 #
+ 0 -
А что, в Perl нет аналога команды file?
Зачем это виндузятничество - полагаться на расширение, если можно уточнить более достоверно?

Да и потом, file возвращает directory если переданный путь - директория, а по расширению нельзя узнать, директория ли это.
karp 18.06.2010 16:35 #
+ 0 -
Можно определять по MIME...
motonarola 18.06.2010 16:47 #
+ 0 -
perldoc -f -X
vvorth 21.06.2010 09:44 #
+ 0 -
Я с перлом не знаком вообще - и предложил самый простой и очевидный выход исходя из того что я увидел в предложенном коде.
goblinyara 18.06.2010 14:25 #
+ 0 -
А можно на скрипт повесить "умное" поведение? - Т.е. если на значок перемещается папка, то она сжимается, а если архив - то, наоборот, распаковывается? (Т.е. на одну и ту же картинку?)

с перлом не знаком, но кто мешает в скрипте посмотреть тип объекта, да в зависимости от него уже либо сжимать, либо наоборот?
karp 18.06.2010 14:36 #
+ 0 -
Вариантов тьма. Можно сделать что угодно.
inst 18.06.2010 16:04 #
+ 0 -
drug-and-drop... drug - это же наркота, не?
antigluk 18.06.2010 16:39 #
+ 0 -
наркотики и кидалово...
inst 18.06.2010 16:49 #
+ 0 -
я и говорю, технология хорошая. Надо быстрее патентовать! Потом Microsoft потроллим.
alvelin 19.06.2010 07:40 #
+ 1 -
Угу. От космического до комического один шаг.
motonarola 18.06.2010 16:57 #
+ 1 -
небольшой совет:
лучше писать
system 'rm', '-rf', $str
т.к. в имени файла могут быть кавычки.

В хорошем качестве hd видео

Онлайн видео бесплатно


Смотреть русское с разговорами видео

Online video HD

Видео скачать на телефон

Русские фильмы бесплатно

Full HD video online

Смотреть видео онлайн

Смотреть HD видео бесплатно

School смотреть онлайн