Pull to refresh

Пишем дополнение к Gnome-deskbar-applet

Reading time3 min
Views760
Gnome deskbar-applet — это апплет к панели Gnome, который позволяет искать файлы, выполнять программы, введя первые буквы в их названии (напоминает Quicksilver или spotlight из мака)
В этой статье я расскажу, как легко писать дополнения на 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, вот так:


Отметьте его галочкой, и он заработает:

image

Скачать .tar.bz2 с дополнением
//подскажите, где расцветку кода питон для хабра найти?
Tags:
Hubs:
Total votes 21: ↑13 and ↓8+5
Comments6

Articles