четверг, января 04, 2007

Swish-e, python-gtk, glade...

Уже довольно давно я пользуюсь замечательным поисковиком swish-e. Он довольно быстро индексирует документы, а потом ищет по созданному индексу (о его близком сородиче, swish++, писал virens). Все бы хорошо, только компьютером я пользуюсь не один, вместе со мно им пользуются далекие от компьютеров родственники. И совсем мне неохота объяснять им про прелести командной строки... Так что понадобилась "графическая морда" к swish-e. Ничего полезного не нашел, пришлось писать самому. Стал подбирать, на чем писать. Прежде всего, логика предельно простая (запустить команду и перехватить стандартный вывод), поэтому желания писать на чем-нибудь типа C/C++ не возникает совсем. В идеале это должен быть bash-скрипт. Но как из bash сделать GUI? Варианты получились такие.

Xdialog. Позволяет что-нибудь спросить у пользователя, например, так:
ANSWER=$(Xdialog --stdout --inputbox "Что ищем?" 10 30)
Нет возможности сделать сколько-нибудь сложный диалог. В данном случае этот вариант отпал.

kaptain. Позволяет создавать довольно сложные диалоги, которые описываются на специальном языке. Но эти диалоги нельзя изменить после создания, т.е. они могут работать только как формы ввода. Кроме того, у kaptain большие проблемы с нелатинскими алфавитами. Опять отпадает.

gtk-server. Практически, представляет собой интерфейс к функциям gtk для любого окружения - для вызова функции нужно записать ее имя и параметры на стандартный вход gtk-server. Практически всем подходит, но shell-script с его использованием больше похож на обычную C-программу с использованием gtk. Пока отложил в сторонку.

А остановился я в итоге на связке python + python-gtk + glade. Python - скриптовый, достаточно высокоуровневый, язык, так что простая логика на нем занимает мало места. Сам интерфейс нарисовал с помощью Glade (визуальный конструктор интерфейсов для gtk), сохранил в .glade-файле (это xml), а из python-скрипта он только подгружается (с помощью python-glade). Скрипт получился довольно скромного размера, соответственно своей простой функциональности. Кому интересно, взять можно здесь: http://portnov84.narod.ru/downloads/sw-search-0.1b.tar.gz (Depends: swish-e, python, python-gtk2, python-glade-2).

8 комментариев:

  1. Статья интересная, самому скоро придётся графические окна создавать. Большое спасибо за наводку на glade, будем изучать :-)

    ОтветитьУдалить
  2. А чего бы не воспользоваться стандартным путем? swish-e идёт в комплекте с CGI-сериптом, который являет собой вполне нормальный к оному web-интерфейс.

    ОтветитьУдалить
  3. @ nikolay
    Это называется стандартный? Я это называю нестандартный :) Во-первых, ставить ради локального поисковика веб-сервер, во-вторых, объяснять родственникам, почему для поиска по своим документам надо нажимать кнопку "интернет".

    ОтветитьУдалить
  4. Анонимный1/31/2008 10:17 AM

    zenity - тот же xdialog, только с GTK-окошками. Так же мало возможностей

    ОтветитьУдалить
  5. Анонимный4/22/2009 6:59 PM

    Хотел посмотреть исходники, а narod.ru говорит "нет такого файла"

    ОтветитьУдалить
  6. Очепятка. http://portnov84.narod.ru/downloads/sw-search-0.1b.tar.gz

    ОтветитьУдалить
  7. Если действительно GUI нет, так может на SF.net залить?

    ОтветитьУдалить