Programando Python y Zope desde la consola con emacs

¿Quieres tener colores en tu emacs?

¿Quieres editar tus ficheros de zope desde la consola?

¿Quieres abrirlos directamente por FTP?

Aquí tienes unas pocas notas sobre como personalizar tu emacs para trabajar con Python, Zope2 o Zope3

Si estás en un entorno gráfico y lo que quieres es programar en una consola de texto, deberás invocar al comando con la opción ‘nw’ para que no abra una ventana adicional:


 emacs -nw

Puedes crear un alias para no tener que invocar a emacs de esta manera. Por ejemplo, puedes modificar tu ‘.bashrc’ asi:

alias emacs='emacs -nw'

Si quieres que emacs resalte la sintaxis del código de tus programas y plantillas, deberás utlizar el comando ‘font-lock-mode’:

M-x font-lock-mode

Si no queremos hacer esto cada vez que cargamos un fichero, podemos editar nuestro fichero de customización ‘.emacs’ así:

(add-hook 'find-file-hooks 'turn-on-font-lock)  

De esta forma, cada vez que se abre un fichero, se activa el resaltado de la sintaxtis.

Es muy recomendable tener el paquete de python para emacs instalado. En debian:

apt-get install python-mode

Si estas editando plantillas ‘zpt’, ‘dtml’ o ficheros de configuración ‘zcml’ tal vez quieras que emacs los interprete como html para que resalte adecuadamente la sintaxis. Denuevo deberás modificar tu fichero ‘.emacs’:

(add-to-list 'auto-mode-alist '("\.zpt$" . html-mode))(add-to-list 'auto-mode-alist '("\.pt$" . html-mode))(add-to-list 'auto-mode-alist '("\.zcml$" . html-mode))(add-to-list 'auto-mode-alist '("\.dtml$" . html-mode))

Si trabajas con Zope2 y lo que quieres es editar una plantilla que están en el ZODB, puedes hacerlo a través del protocolo FTP. Desde emacs puedes abrir un fichero mediante FTP, con la siguiente secuencia de comandos:

C-x C-f ftp://username@servername#portnumber:/path/to/template.pt

Recuerda habilitar el servidor ftp en el archivo de configuración de tu zope.

Referencias:

4 Responses to “Programando Python y Zope desde la consola con emacs”

  1. erral says:

    Para ZPT y ZCML (y también si quieres escribir HTML directo), yo utilizo nxml-mode

  2. nando says:

    Aupa Erral!¡interesante el nXML-mode! más completo que el modo html. Permite validar tu documento y tal…Me lo apunto!

  3. nando says:

    Daniel Lemire nos cuenta como introducir de forma sencilla el autocompletado en la consola de Python:

    >>> import readline, rlcompleter>>>>>> readline.parse_and_bind("tab: complete")>>>

    Recupero una vieja receta que Dave Kulman envió a la lista de Python. Con el siguiente fichero de inicialización vamos a activar el autocompletado cada vez que arranquemos el interprete.

    Creamos un fichero en nuestro directorio ‘home’ llamado initialize.py con el siguiente código:

    #========================================================# initialize.py# Dave's initialization file for Python interactive sessions.import sys, os, readlinehistfile = os.path.join(os.environ["HOME"], ".pyhist")try:    readline.read_history_file(histfile)except IOError:    passimport atexitatexit.register(readline.write_history_file, histfile)del os, histfiletry:    import readlineexcept ImportError:    print "Module readline not available."else:    import rlcompleter    readline.parse_and_bind("tab: complete")#========================================================

    Para que el intérprete lea este fichero debemos crear la variable de entorno PYTHONSTARTUP. Lo podemos hacer de forma automática insertando la siguiente linea el ‘.bashrc’ de nuestro directorio ‘home’:

    export PYTHONSTARTUP=$HOME/initialize.py

  4. nando says:

    Me envía erral un trozo de código para tracear un producto de zope:

       import pdb   pdb.set_trace()

    ¿Cómo debugueo mi zope?

    - Pegas estas dos lineas en cualquier función del producto

    - Arrancas tu instancia Zope (con ‘./runzope’ o ‘./zopectl fg’)

    - Cuando se ejecutan estas dos lineas de python, se nos presentará una consola con el siguiente prompt:

      (Pdb) 

    - En ella tendremos todos los objetos que intervienen en la ejecuación a nuestra dispocición. (locals(), globals(), etc.)

    Python Interactive Debugging

Leave a Reply