Sep 18 2008

Nuevo blog sobre lisp

Tag: basicoverdrive @ 8:01 pm

Con este ya son 19 artículos los escritos sobre GNU/Emacs en general, con ello quiero hacer un alto para explicar en que me baso para escribir mis artículos; en primer lugar me baso en los conocimientos adquiridos por parte de mi amigo David, en segundo lugar el metodo de ensayo y error o lo que vulgarmente llamamos pruebas, además de posible información adquirida de emacswiki entre otros sitios, por mailings, irc y demás. Además de ello estoy leyendo el famoso libro de O’reilly de GNU/Emacs, el contenido está bastante bien, sin embargo llegado al capítulo sobre Emacs lisp la cosa deja mucho que desear, para nada es entretenido, y para nada creo que haya sido escrito de forma didáctica para el lector.

Es por ello por lo que he decidido anunciar un nuevo blog que ha comenzado a escribir David, que junto a la charla de Marchesi creo que pueden ser los pilares fundamentales sobre los que se basen al menos mis reducidos conocimientos sobre lisp.

Creo que es de vital importancia entender los conceptos base en lisp así como su filosofia de resolver los problemas (ya sea scheme, elisp o CL) antes de ponerse a aprender sentencias como lo haríamos en cualquier otro lenguaje, por eso creo que es importante que la comunidad hispana interesada en dicho lenguaje debería pasarse por http://sobrelisp.blogspot.com y que no quede como un blog que alguien lo trabaja con ánimo de impartir conocimientos y que quede en el tintero.

La verdad es que no he encontrado, al menos de momento, ningún manual o tutorial, medianamente decente, corto y simple a la vez, que explique los pilares fundamentales de lisp para gente ajena al lenguaje, y creo que es por ello por lo que la gente tiende a pensar que éste es un lenguaje antiguo, en desuso e inútil.


Sep 09 2008

Gnus

Tag: basicoverdrive @ 3:57 am

Gnus es el lector de noticias, cliente de correo y mailings por excelencia, existen otros, como rmail (que usa Richard Stallman) aunque desconozco su uso. A continuación muestro los pasos necesarios para instalar el soporte, configurar y trabajar con una cuenta de correo gmail desde nuestro GNU/Emacs usando Gnus.

  • Comprobar TLS y OpenSSL

Lo primero es instalar gnutls y openssl si nos encontramos en gentoo:

# emerge gnutls openssl

O bien starttls y openssl si nos encontramos en debian:
# apt-get install starttls openssl

  • Configuracion pop/imap

Si lo que queremos es configurarlo con imap debemos añadir éstas líneas:

(setq gnus-select-method
‘(nnimap «Gmail»
(nnimap-address «imap.gmail.com»)
(nnimap-server-port 993)
(nnimap-stream ssl)))

Tambíen debemos comprobar que tenemos o bien habilitado imap en nuestro servidor de correo (para ello ir a opciones en nuestra cuenta de gmail y activarlo)Para la configuración pop3 debemos añadir éstas otras líneas en nuestro .emacs:

// TODO (por escribir)
// Actualmente he tenido problemas para la configuración pop3 sin fetchmail escribiré algo según vaya investigando.

Y por supuesto debemos comprobar que esté habilitado pop3 en las opciones de nuestro servidor de correo (debemos ir a opciones de nuestra cuenta de gmail y activarlo allí)

  • Configuración smtp

Debemos incluir éstas otras líneas en nuestro .emacs:

(require ‘smtpmail)
(setq mail-from-style’angles
;`user-full-name ‘
send-mail-function ‘smtpmail-send-it
message-send-mail-function ‘smtpmail-send-it
smtpmail-smtp-server «smtp.gmail.com»
smtpmail-smtp-service 587
smtpmail-debug-info t
smtpmail-starttls-credentials ‘((«smtp.gmail.com» 587 nil nil))
smtpmail-auth-credentials ‘((«smtp.gmail.com» 587 «tu.cuenta@gmail.com» nil)))

Ejecutar emacs y cargar gnus mediante M-x gnus.

  • Acceso a la cuenta

Nos pedirá el nombre de usuario, lo escribimos (podemos ponerlo tanto en formato usuario@gmail.com como usuario directamente).A continuación nos pedirá el password, lo escribimos y ya accederemos a la cuenta, si no queremos escribir cada vez el login podemos crear el archivo .authinfo en nuestro $HOME y poner esta línea:

machine imap.gmail.com login tuusuariogmail port 993

Se puede escribir el password, aunque no es recomendable por temas de seguridad.

  • Cambiar de directorio

Pulsamos j, y a continuación se nos pedirá a que grupo queremos saltar, por ejemplo INBOX. También podemos usar el TAB para ver sobre que grupos podemos saltar.

  • Entrando en inbox

Pulsamos INTRO sobre inbox y ya deberíamos ver los correos. Pulsamos INTRO sobre cualquier correo y deberíamos ver su contenido. Pulsando r sobre cualquier correo ya estemos dentro o no, haremos reply y contestaremos dicho correo.

  • Saliendo de Gnus

Para salir de Gnus podemos pulsar q. Si salimos directamente desde Emacs, no habrán sido marcados los correos para la siguiente sesión.

  • Configurando Gnus con mailing lists

Imaginemos que queremos subscritos a las listas de correo de Emacs, accederemos a http://savannah.gnu.org/mail/?group_id=40 y http://es.gnu.org/cgi-bin/mailman/listinfo/emacs-es y nos subscribimos. Ahora queremos tener un grupo para cada mailing, para ello debemos realizar los siguientes pasos, si por ejemplo tenemos las siguientes mailings de Emacs:

emacs-bug-tracker@gnu.org
emacs-bug-gnu-emacs@gnu.org
emacs-bidi@gnu.org
emacs-commit@gnu.org
emacs-diffs@gnu.org
help-gnu-emacs@gnu.org
info-gnu-emacs@gnu.org
emacs-devel@gnu.org
emacs-es@gnu.org

Pues bien añadiremos las siguientes líneas en nuestro .emacs:

;; Gnus filters
(setq nnimap-split-inbox «INBOX»
nnimap-split-rule
‘((«Emacs-bug-tracker» «^List-Id:.*emacs-bug-tracker\\.gnu.org»)
(«Emacs-bug-gnu-emacs» «^List-Id:.*emacs-bug-gnu-emacs\\.gnu.org»)
(«Emacs-bidi» «^List-Id:.*emacs-bidi\\.gnu.org»)
(«Emacs-commit» «^List-Id:.*emacs-commit\\.gnu.org»)
(«Emacs-diffs» «^List-Id:.*emacs-diffs\\.gnu.org»)
(«Emacs-help-gnu-emacs» «^List-Id:.*help-gnu-emacs\\.gnu.org»)
(«Emacs-info-gnu-emacs» «^List-Id:.*info-gnu-emacs\\.gnu.org»)
(«Emacs-devel» «^List-Id:.*emacs-devel\\.gnu.org»)
(«Emacs-es» «^List-Id:.*emacs-es\\.es\\.gnu\\.org»)))

Ahora bien, esto creará las llamadas LABELS o ETIQUETAS en gmail (que se verá reflejado en vuestro webmail de gmail.com) que aquí se llaman GRUPOS sin embargo, filtrará los mensajes en el momento que los baje a vuestro ordenador, lo cual es bastante lento, por lo que lo ideal es crear ahora filtros en gmail.com para que dicha clasificación la realice google en sus servidores y nosotros tan sólo debamos descargar el correo de cada grupo, lo cual acelera muchísimo el proceso. Para ello accederemos a nuestra cuenta por medio de gmail.com, seleccionaremos un correo de una mailing concreta, y en «más opciones» seleccionamos «filtrar mensajes como estos», entonces aparecerá una nueva pantalla con la opción de «Contiene la palabra:(emacs-devel.gnu.org)» entonces le damos a marcar otros X mensajes y le damos a continuar. Este paso lo realizamos para un correo cualquiera de cada mailing que estemos subscritos, así conseguiremos crear todos los filtros.

También podemos añadir la siguiente línea en nuestro .emacs para tener una visión permanente de los grupos a los que estamos subscritos, aun cuando no tengamos correo nuevo en dicha sesión:


;; Gnus permanent topics
(add-hook ‘gnus-group-mode-hook ‘gnus-topic-mode)

Un vez arranquemos nuestro Emacs con gnus, quizás no veamos los grupos, esto es porque no estamos REGISTRADOS a los grupos que hemos creado, para registrarnos una vez estemos dentro de gnus, podemos hacer lo siguiente:

A A’ que obtiene la lista de todos los grupos del servidor (es remoto, conecta con el SERVIDOR). Es solo útil cuando creamos un nuevo grupo en el servidor, etc.

Entonces nos desplazamos por cada uno de los grupos mientras vamos pulsando:

u’ que hace toggle a la subscripción de un grupo.

Cuando nos hayamos subscrito a todos los grupos que nos interese, ya podremos ver todos estos grupos cuando iniciemos gnus de forma normal pulsando:

l’ que actualiza la lista, y muestra los grupos a los que estás subscrito (no conecta con el servidor, es LOCAL)

o bien:

L’ que actualiza con toda la cache, es decir mostrando todos los grupos, incluso a los que no estás subscrito (no conecta con el servidor, es LOCAL).

Si queremos checkear los posibles nuevos correos que hayan llegado entre el momento que nos hayamos logueado y ahora (que podrian haber llegado nuevos correos) tan sólo debemos pulsar:

g‘ para refrescar todos los nuevos correos de los grupos.

Además con A T podremos ver todos los mensajes de un thread, lo cual es fundamental para las mailings (también se puede acceder por medio del menu F10 -> threads -> show all messages in a thread).

Con c sobre un buffer, marcaría todos los correos como leídos.

  • Topics

El concepto de topic o tema fue nuevo para mi cuando entre en el mundo Gnus. Los topics contienen grupos de una misma tematica, por ejemplo podríamos crear una topic llamado Emacs el cual incluyese todos los grupos anteriores. Pero también podríamos estar subscritos a un mont&oacite;n de mailings sobre lenguajes de programación y agruparlos todos en otro topic. Para ello pulsamos:

T n‘ y así crearemos un nuevo topic.

Ahora podemos desplazarnos hasta un crupo y pulsar:

C-k‘ para cortar o eliminar un grupo.

Desplazarnos hasta dentro del topic creado y pulsar:

C-y‘ para pegar dicho grupo.

Ahora podemos jugar con la identación y desidentación para dejar un formato aceptable a nuestros grupos y temas:

TAB : para identar

M-TAB : para desidentar.

  • Acciones sobre los correos

r responder al correo (sólo al destinatario).

S V responder a todos (respuesta amplia).

  • Estados de los correos

R indica que los correos han sido le&iacutedos (al menos se ha pulsado INTRO o SPC sobre ellos)

r indica que los correos han sido marcado como leídos por el usuario mediante d.

O indica que son correos leídos en sesiones previas (OLD).

Y aqui vemos otra captura de como gnus puede visualizar y adjuntar imagenes :-)

Es importante la primera vez que se lee el correo desde Gnus listar todos los grupos con A A, ir uno por uno haciendo «u» para subscribirse, y después de ello pulsando si se usa una cuenta de gmail «G c«, guardar y pulsar done, ya que sino por problemas con los servidores de gmail y pop3, no podremos distinguir los correos leidos de los nuevos.

Se puede profundizar mucho más en el manual oficial de Gnus disponible en http://gnus.org/manual/gnus.pdf


Ago 21 2008

Dired

Tag: basicoverdrive @ 1:50 am

[Artículo bajo revisión – necesita ser mejor redactado]

Con C-x d lanzaremos dired seguido del directorio específico. Si no nos muestra los colores debemos añadir a nuestro .emacs:

(global-font-lock-mode t)

o bien ejecutar M-x font-lock-mode.

El modeline mostrará el tipo de orden, el cual podemos alterar pulsando s para ‘dired-sort-toggle-or-edit’ el cual ordena por creados y modificados. Existen otros comandos interesantes tales como:

  • n : ‘dired-next-line‘; se mueve al siguiente directorio.
  • p : ‘dired-previous-line‘; se mueve al directorio anterior.
  • v : ‘dired-view-file‘; muestra un fichero.
  • q : ‘quit-window‘; sale de la vista del fichero o de dired.
  • = : ‘dired-diff‘; busca las diferencias en la línea que se está editando. O bien busca las diferencias entre dos ficheros marcados por una región.
  • enter o e : ‘dired-find-file‘; edita un fichero.
  • f : ‘dired-advertised-find-file’; busca un fichero.
  • C-x b nombre_del_directorio : cambia al directorio especificado.
  • d : ‘dired-flag-file-deletion‘; marca el fichero como eliminación.
  • u : ‘dired-unmark‘; quita la marca.
  • x : ‘dired-do-flagged-delete‘; ejecuta la eliminación de ficheros.
  • C : ‘dired-do-copy‘; copia un fichero.
  • [n]C ; donde [n] es un número, copia los n siguientes ficheros.
  • R : ‘dired-do-rename‘; renombra un fichero.
  • m : ‘dired-mark‘; marca el fichero.
  • 3m ; marca los 3 siguientes ficheros.
  • %l : ‘dired-downcase‘; marca todos los ficheros para convertir a minúsculas.
  • %u : ‘dired-upcase‘; marca todos los ficheros para convertir a mayúsculas.
  • Z : ‘dired-do-compress‘; comprime o descomprime un fichero. 3mZ comprimiría los siguientes 3 ficheros.
  • (sin keystroke asociada) : ‘auto-compress-mode‘; comprime y descomprime todos los ficheros por defecto. Tambien se puede conseguir este efecto por defecto añadiendo (auto-compression-mode 1) en nuestro .emacs.
  • X comando o ! comando : ‘dired-do-shell-command‘; ejecuta un comando shell sobre un fichero. Por ejemplo !sort ordenaría el listado de ficheros actuales mientras que !sort * > foobar ordenaría todas las líneas del fichero actual.
  • g : ‘revert-buffer‘; refresca el listado actual.
  • *! o M-Del : ‘dired-unmark-all-files‘; desmarca todos los ficheros si se pulsa enter. Si se pulsa t cambia los ficheros marcados.
  • * * : ‘dired-mark-executables‘; marca todos los ejecutables. C-u * es su análogo.
  • * / : ‘dired-mark-directories‘; marca todos los directorios. C-u / es su análogo.
  • * @ : ‘dired-mark-symlinks‘; marca todos los enlaces simbolicos. C-u @ es su análogo.
  • * c : ‘dired-changed-marks‘; cambia las marcas para los ficheros especificados.
  • %m : marca los ficheros que siguen un patrón de expresión regular. Por ejemplo ^ch%m marcaría todos los ficheros que empiecen por ch.
  • %s : ‘dired-mark-files-containing-regexp‘; marca los ficheros que siguen un patrón de expresión regular. Por ejemplo ^ch%g
  • + : ‘dired-create-directory‘; crea un directorio.
  • Q : ‘dired-do-query-replace‘; pregunta antes de mover ficheros si existe en fichero en el directorio destino.
  • A : ‘dired-do-search‘; realiza una búsqueda siguiendo un atrón de expresión regular en los ficheros marcados.
  • B : ‘dired-do-byte-compile‘; compila un fichero.
  • D : ‘dired-do-delete‘; elimina un fichero de forma inmediata.
  • G : ‘dired-do-chgrp‘; cambia los permisos del grupo.
  • h : ‘describe-mode‘; ayuda de dired.
  • H : ‘dired-do-hardlink‘; crea un enlace duro.
  • i : ‘dired-maybe-insert-subdir‘; lista el subdirectorio actual.
  • k : ‘dired-do-kill-lines‘; elimina la línea mostrada (no borra el fichero).
  • L : ‘dired-do-load‘; carga un fichero.
  • M : ‘dired-do-chmod‘; cambia los permisos del fichero.
  • o : ‘dired-find-file-other-window‘; busca un fichero en la ventana actual.
  • C-o : ‘dired-display-file‘; busca un fichero y lo muestra en otra ventana.
  • O : ‘dired-do-chown‘; cambia el propietario de un fichero.
  • P : ‘dired-do-print‘; imprime un fichero.
  • Q : ‘dired-do-query-replace‘; hace reemplazo en los ficheros marcados.
  • S : ‘dired-do-symlink‘; crea un enlace simbólico.
  • s : ‘dired-sort-toggle-or-edit‘; ordena por fecha o por nombre.
  • t : ‘dired-toggle-marks‘; marca o desmarca un fichero.
  • w : ‘dired-copy-filename-as-kill‘; copia el fichero en el kill ring.
  • y : ‘dired-show-file-type‘; muestra información del fichero.
  • ~ : ‘dired-flag-backup-files‘; marca todos los ficheros de backup. C-u ~ es su análogo.
  • # : ‘dired-flag-auto-save-files‘; marca todos los ficheros de autoguardar. C-u # es su análogo.
  • & : ‘dired-flag-garbage-files‘; marca todos los ficheros de basura. C-u & es su análogo.
  • . : ‘dired-clean-directories‘ ; numera los flags de eliminación.
  • M-= : ‘dired-backup-diff‘; compara el fichero con su backup.
  • > : ‘dired-next-dirline‘; se mueve al siguiente directorio.
  • < : ‘dired-prev-dirline‘; se mueve al directorio anterior.
  • ^ : ‘dired-up-directory‘; se mueve al directorio padre.
  • $ : ‘dired-hide-subdir‘; oculta o muestra el directorio actual.
  • M-$ : ‘dired-hide-all‘; oculta o muestra todos los directorios.
  • C-M-n : ‘dired-next-subdir‘; se mueve al siguiente directorio si tiene subdirectorios con i.
  • C-M-p : ‘dired-prev-subdir‘; se mueve al directorio anterior si tiene subdirectorios con i.
  • C-M-u : ‘dired-tree-up‘; se mueve al directorio padre si tiene subdirectorios con i.
  • C-M-d : ‘dired-tree-down‘; se mueve al directorio hijo si tiene subdirectorios con i.
  • M-} : ‘dired-next-marked-file‘; se mueve al siguiente fichero marcado con * o D.
  • M-{ : ‘dired-prev-marked-file‘; se mueve al fichero anterior marcado con * o D.
  • %d : ‘dired-flag-files-regexp‘; marca los ficheros que sigan un patrón de expresión regular para eliminación.
  • %R : ‘dired-do-rename-regexp‘; nombra los ficheros que sigan un patrón de expresión regular.

« Página anteriorPágina siguiente »