14 марта 2011

Zen Coding v.0.7

    Вчера вышла новая версия Zen Coding. Тем, кто не в теме - сюда или сюда. Главная вкусняшка (для меня :-) - это text nodes, вполне самостоятельный элемент. Там так и написано "Text nodes are not just element’s properties". Теперь можно вставлять текст, там, где необходимо во время использование Zen, например, в ссылках или списках. Удобно. 
   Кстати. От Emacs отошел в сторону Notepad++. Тоже редактор, но для добавление новых функций не требует изучения языка Lisp. В Emacs это надо, уж поверьте. Да и Zen Coding реализован полностью. (Если вы увидите плагин под Emacs полностью поддерживающий Zen, скажите)

   Notepad++ отлично поддерживает кодировки, имеет кучу плагинов, среди которых есть очень полезный плагин под названием Python Script. И, чудо!!! С его помощью я сделал такое же управление FireFox, как и в том скринкасте. Всего за полчаса работы, не имея навыков программирования в Python!!! Решение очень простое: MozRepl << скрипт телнет-клиента на python <<  назначенные горячие клавиши в Notepad++ под этот скрипт.


UPDATE#1:
   Расширение для Notepad++ под названием Python Script. Как известно, Npp написан на базе Scintilla, что дает дикую расширяемость, что и использовали создатели Python Script. Все крайне просто, с помощью данного плагина можно получить доступ к редактору, как к объекту Python (ссылка на документацию). Дальше - дело прямых рук и трезвой головы :-)
   скрипт перезагрузки Firefox:



# coding: utf-8
import sys
import telnetlib
notepad.save()
tn=telnetlib.Telnet("127.0.0.1",4242)
tn.write("BrowserReload();")
tn.close()


   Для начала сохраняем содержимое текущего окна Npp - notepad.save(). Так, как Mozrepl является по сути своей вариацией телнет-сервера, то мы и создаем телнет-клиент. Как видно по коду, это не так уж и сложно. Передаем команду "BrowserReload();", затем закрываем соединение. Скрипт этот сохраняем в \Program Files\Notepad++\plugins\PythonScript\scripts\, затем через меню -> плагины -> Pyhon Script ->configuration открываем окно конфигурации плагина. Выбираем нужный нам скрипт, нажимаем "add", после чего перезапускаем редактор. Далее меню -> опции -> горячие клавиши. Откроется окно назначения горячих клавиш, где ищем наш скрипт и назначаем ему связку(у меня это <ALT>+<SHIFT>+<P>). И все...
   На самом деле простор для творчества огромный. Используя документацию по Python Script для Notepad++ и документацию по Mozrepl для Firefox можно творить что угодно. Например, передавать лисе имя открытого файла(это при изменении локальной страницы, ибо на сервере, пусть и домашнем, адреса немного отличаются от локальных путей), можно передавать, как в моей статье про Emacs содержимое буфера(текущего окна редактора). Правда с последним моментом у меня не очень получилось. Поясню, что в Emacs-реализации данной техники содержимое буфера передается путем преобразования в JSON. Приведу кусок кода на Lisp из той статьи:
   содержимое функции moz-update - 


(interactive)
(comint-send-string (inferior-moz-process)
(concat "content.document.body.innerHTML=" (json-encode (buffer-string)) ";")))
 видите заветное "json-encode (buffer-string)"? Таким образом Emacs передает данные в Mozrepl по телнет. 


   А вот мой код на Python - 
# -*- coding: utf-8 -*-


import sys
import telnetlib
import json
text=json.dumps(editor.getText())
tn=telnetlib.Telnet("127.0.0.1",4244)
tn.write("content.document.body.innerHTML="+text+";\r")
tn.close()
Объясняю, что не срослось. Просто происходит ошибка Mozrepl при передаче некоторых текстов, если можно так выразится. Ошибку можно увидеть через консоль Firefox. Как я понял, что-то здесь на уровне передачи. Что - не знаю, глубже не копал. Мне хватает и моего решения, все же экономит одно движение и пару кликов. А может решение найдете и вы, кто знает :-)

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

  1. можешь написать
    скрипт телнет-клиента на python

    ОтветитьУдалить
  2. спасибо
    все работает
    и еще одно спасибо за быстрый и развернутый ответ

    ОтветитьУдалить
  3. У меня немного сложнее получилось прикрутить py скрипт к MozRepl...

    Во-первых пришлось добавить таймаут к подключению:

    # coding: utf-8
    import sys
    import telnetlib
    notepad.save()
    tn=telnetlib.Telnet('localhost',4242,1) #таймаут 1
    tn.write("BrowserReload();")
    tn.close

    Во-вторых долго неудомевал почему ничего не работает =) Как оказалось надо запустить telnet сервер MozRepl...
    Нашел не сразу, но нашел:

    Включаем отображение меню в FF (Кнопка FF - Настройки - Панель меню)
    Потом из меню - Инструменты - MozRepl - Старт

    Там же поставил галку ActivateOnStratup.

    P/S
    Комбинацию забиндил на alt-S, Python 2.7

    Всем удачи =)

    ОтветитьУдалить
    Ответы
    1. Да, спасибо, все по делу. Действительно, про момент запуска сервера MozRepl как-то забыл указать.

      Удалить