Gnome deskbar-applet — это апплет к панели Gnome, который позволяет искать файлы, выполнять программы, введя первые буквы в их названии (напоминает Quicksilver или spotlight из мака)
В этой статье я расскажу, как легко писать дополнения на Python к этому апплету. Мы напишем искалку в Хабре.
Создадим где-нибудь файлик habr-suggestions.py, откроем в своем любимом редакторе.
Для начала, сделаем «скелет»:
Идем дальше. Сам поиск будем проводить через страничку habrahabr.ru/search/?q=ЧТО_МЫ ИЩЕМ, дополним функционал так называемыми «предположениями», suggestions, которые реализуем через гугль. Нам понадобится модуль simplejson для распарсинга ответов гугля.
Устанавливаются дополнения легко — просто перетащите tar.bz2 файл с .py и .png файлом внутри в окно настоек Deskbar-applet, вот так:
Отметьте его галочкой, и он заработает:
Скачать .tar.bz2 с дополнением
//подскажите, где расцветку кода питон для хабра найти?
В этой статье я расскажу, как легко писать дополнения на Python к этому апплету. Мы напишем искалку в Хабре.
Создадим где-нибудь файлик habr-suggestions.py, откроем в своем любимом редакторе.
Для начала, сделаем «скелет»:
from gettext import gettext as _ import deskbar.interfaces.Module import deskbar.interfaces.Match from deskbar.handlers.actions.ShowUrlAction import ShowUrlAction from deskbar.core.Utils import load_icon HANDLERS = ["HabrSuggestHandler"] class HabrSuggestHandler(deskbar.interfaces.Module): INFOS = {'icon': load_icon("habr.png"), 'name': _("Habrahabr.ru Suggest"), 'description': _("As you type, Habr will offer suggestions."), 'version': '1.0.0.0'} def __init__(self): deskbar.interfaces.Module.__init__(self) def query(self, qstring): pass
- Импортируем нужные модули
HANDLERS = ["HabrSuggestHandler"]
Указываем апплету, какой класс в нашем модуле главныйINFOS = ...
Описание дополненияdeskbar.interfaces.Module.__init__(self)
Вызываем родительский конструкторdef query(self, qstring):
Функция, которая будет вызываться при вводе искомого, пока пустая
Идем дальше. Сам поиск будем проводить через страничку habrahabr.ru/search/?q=ЧТО_МЫ ИЩЕМ, дополним функционал так называемыми «предположениями», suggestions, которые реализуем через гугль. Нам понадобится модуль simplejson для распарсинга ответов гугля.
from gettext import gettext as _ import deskbar.interfaces.Module import deskbar.interfaces.Match from deskbar.handlers.actions.ShowUrlAction import ShowUrlAction from deskbar.core.Utils import load_icon import urllib try: import simplejson except: pass HANDLERS = ["HabrSuggestHandler"] GOOGLE_SUGGEST_URL = "http://suggestqueries.google.com/complete/search" HABR_SEARCH_URL = "http://habrahabr.ru/search/" class HabrSuggestAction(ShowUrlAction): def __init__(self, query): ShowUrlAction.__init__(self, query, GOOGLE_SEARCH_URL + '?' + urllib.urlencode({'q': query})) def get_verb(self): return _("Search <b>Habrahabr.ru</b> for <i>%(name)s</i>") class GoogleSuggestMatch(deskbar.interfaces.Match): def __init__(self, query, **args): deskbar.interfaces.Match.__init__ (self, name=query, category="web", icon="habr.png", **args) self._query = query self.add_action( HabrSuggestAction(query) ) def get_hash(self, text=None): return self._query class HabrSuggestHandler(deskbar.interfaces.Module): INFOS = {'icon': load_icon("habr.png"), 'name': _("Habrahabr.ru Suggest"), 'description': _("As you type, Habr will offer suggestions."), 'version': '1.0.0.0'} def __init__(self): deskbar.interfaces.Module.__init__(self) def query(self, qstring): args = {'output': 'firefox', 'qu': qstring, 'as_sitesearch': 'http://habrahabr.ru' } url = GOOGLE_SUGGEST_URL + '?' + urllib.urlencode(args) result = simplejson.load(urllib.urlopen(url)) if not 'Error' in result: matches = [] # result looks like ["qstring" , ["suggestion 1", "suggestion 2",]] for suggest in result[1]: matches.append( GoogleSuggestMatch(suggest) ) self._emit_query_ready(qstring, matches) @staticmethod def has_requirements(): try: import simplejson return True except: HabrSuggestHandler.INSTRUCTIONS = _("Python module simplejson is not available") return False
Устанавливаются дополнения легко — просто перетащите tar.bz2 файл с .py и .png файлом внутри в окно настоек Deskbar-applet, вот так:
Отметьте его галочкой, и он заработает:
Скачать .tar.bz2 с дополнением
//подскажите, где расцветку кода питон для хабра найти?