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 с дополнением
//подскажите, где расцветку кода питон для хабра найти?
