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

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

    Similar posts

    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 6

      +1
      Или с картинками что-то не то, или одно из двух


      ЗЫЖ подсветка кода
        –3
        все правильно, так и должно быть
          +1
          Копипаст — зло
            0
            где копипаст? глючный ompload просто )
            0
            >так и должно быть
            Ну тогда: сам ты гей :)
          0
          перезалейте картинки куда-нить в другое место, все же интересно посмотреть, что там

          Only users with full accounts can post comments. Log in, please.