sábado, febrero 07, 2009

Editor compatible con TextMate

Hace un mes comencé a crear un editor de texto (no una IDE) con PyQt4.
¿Por qué?
  • Me di cuenta que la parte jugosa de TextMate es Open Source, es decir, todo el conjunto de bundles que provee (sintaxis, snippets, comandos, templates, etc.) están en un repositorio SVN bajo licencia GPL.
  • Kate es genial, pero no es fácil de extender. Sobre todo cuando tu cerebro se olvida de los vericuetos de C++.
  • El concepto de proyecto de TextMate es muy bueno.
  • TextMate adolece de una consola integrada.
  • Falta un textmate para linux, más allá de los numerosos posts en varios blogs sobre pimp my gedit.
Los bundles de TextMate están hechos mayoritariamente en Ruby, aunque los hay en Perl, php y Python.
Todos estos bundles están guradados en un dialecto de XML llamado Property List (plist) y se ve más o menos así:

<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>content</key>
        <string>|yesno:"${1:arg}"</string>
        <key>keyEquivalent</key>
        <string>@|</string>
        <key>name</key>
        <string>yesno</string>
        <key>scope</key>
        <string>text.html.django</string>
        <key>uuid</key>
        <string>20F0FE5C-BF8C-4258-8F93-3D6F62447068</string>
</dict>
</plist
Que parecido a una serialización de un diccionario en XML, no? Ya hay módulos para decodificar plist.


La API entre el editor y estos scripts es muy similar a un CGI, lo cual me pareció genial. Para quien le interese, lo mejor es ver los screencasts en la pagina del creador de TextMate. Son varias vueltas de tuerca sobre la tradicional llamada a comandos desde un editor (como a Make, o correr un script sobre bash, etc.).

Comencé utilizando el componente QSciScinitilla, pero la creación de sintaxis se hace en un dialecto que desconozco.
Así que decidí usar el editor de texto nativo de PyQt4, con su subrayador de sintaxis.

Lamentablemente por otros proyectos he tenido que dejar el desarollo temporalmente, pero acá van unos screen-shots, de una alfa muy alfa:








2 comentarios:

paolocastro.deb dijo...

hace mucho tiempo que espero algo asi, felicidades por la iniciativa.


¿Es posible descargar el código, y de donde?


saludos.

Nahuel dijo...

Pablo, el proyectoe está parado por falta de tiempo. Siempre me dio un poco de imptencia cuando veía algo así en otro proyecto, pero actualmente tengo que terminar mi tesis y compromisos extra. Tengo muchas ganas de seguir adelante con el proyecto. Cada día estoy más a gusto en Qt, desde que aprendí a utilizar el framework de vista/escena o el genérico de model/view/delegate (aunque no tengan mucha aplicación aquí).

El código de mis proyectos está en BitBucket (soy un fan de hg), mi user es D3f0 y el proyecto se llama CrossMates como se puede ver en los screenshoots.
http://bitbucket.org/D3f0/crossmates/

El proyecto está en una etapa muy beta,lo cual es bueno si te querés sumar, o muy malo si lo queres usar :)

Lamentablemente he tenido que desmantelar mi hackintosh de donde tomaba ideas, pero espero poder hacer algo al respecto en breve con lo que prometen las máquinas virtuales.

Saludos
Nahuel