Jan 19 2012

Editor Hexadecimal en emacs: Hexl-mode

Tag: basicadmin @ 9:43 pm

Generalmente no suelo necesitar emplear el uso de editores hexadecimal, sin embargo existe un modo en especial en emacs para usarlo sin necesidad de salir a la consola. Recordemos que en consola podemos hacer uso de od, objdump y el comando file entre otros, para analizar ficheros. Para lanzar el editor hexadecimal en emacs tan solo debemos invocar a la funciona mediante M-x hexl-mode. Eso editara el fichero en modo hexadecimal.

A la izquierda la ventana con el modo hexl y a la derecha una copia del fichero empleando el whitespace-mode

La primera fila muestra el titulo de la tabla representada a continuacion. El primer valor es la direccion de memoria donde se almacena el contenido del fichero, y las siguientes filas indicaran su offset. Mas tarde nos encontramos con los valores que toma cada una de esas celdas de memoria, caracter a caracter (byte a byte realmente, en grupos de dos) en su valor hexadecimal, hasta el 15 (f). Recordemos que internamente el computador trabaja en hexadecimal por comodidad porque es como se emplea la memoria, de 16 en 16 bytes (de 0 al 15 – 0 a f). Finalmente a la derecha tenemos la traduccion en ascii de cada una de esas posiciones. En la otra ventana podemos comparar con el whitespace-mode ademas.

El fin de este articulo es solo nombrar que es posible emplear este modo (y bastante comodo y rapido). Sin embargo, si dare unas nociones basicas para aquellos que esten interesados en comenzar a trabajar y debuggear algun problema con algun fichero.

Antes de nada decir que es importante saber en que formato esta el fichero, si en DOS o en Unix. En el caso de estar en formato Unix el famoso CRLF es 0d0a. Aqui tenemos algunas valores hexadecimales importantes a la hora de analizar los ficheros:

  • CRLF -> 0d0a
  • INTRO -> 0a
  • SPACE -> 20
  • Control+z -> 1a (recordemos que en unix el control+z se suele emplear como el char de EOF)
  • 0 -> 30 (el numero 0)
  • . -> 2e (el punto)

En asciitable y asciicl es posible encontrar una lista mas completa de otros caracteres generalmente menos interesantes.

Generalmente si tenemos un error de EOF prematuro, lo que debemos buscar es cualquier caracter con valor menor a 0×20, entonces es sospechoso. Aunque a veces el problema esta en los parsers que no esperan (segun el formato del fichero) cierto tipo de caracter y se encuentran con un espacio, intro, o un caracter aunque sea imprimible no esperado, como ha sido el caso con el que me ha tocado pelear hoy.

Por supuesto es posible cambiar un caracter cualquiera por otro, para ello debemos darle el valor que queramos alli donde nos encontremos, pudiendo reemplazar un 1a (de EOF) por un 0a de intro o cualquier otro caso.

  • C-M-d : inserta un byte en formato decimal
  • C-M-o : inserta un byte en formato octal
  • C-M-x : inserta un byte en formato hexadecimal
  • C-x [ : Se mueve al principio de una pagina (1 Kb)
  • C-x ] : Se mueve al final de una pagina (1 Kb)
  • M-g : Salta a la direccion especificada en hexadecimal.
  • M-j : Salta a la direccion espcificada en decimal

Finalmente con C-c C-c para salir del editor hexadecimal de emacs para volver al anterior y mas comun para los mortales.

Gracias a |[TDP]| por sus sugerencias respecto al tema ha sido posible escribir este pequeno articulo.


Nov 26 2011

Emacs linum

Tag: basicadmin @ 2:27 pm

Este articulo sera simple y conciso. Sin embargo y aunque no sea fundamental ya que en el modeline por defecto nos indica el numero de linea en el que nos encontramos, cuando trabajamos con codigo fuente si puede ser interesante tener en el margen izquierdo el numero de lineas para todo el buffer mostrado. De esa forma no tendremos que perder la vista cada vez hacia el modeline.

Primero deberemos descargar linum aqui: http://www.emacswiki.org/emacs/linum-ex.el (notese que esto es una version extendida de la version que yo utilizo y por lo tanto mas moderna)

Y acceso directo al fuente en texto plano y sin formato aqui: http://www.emacswiki.org/emacs/download/linum-ex.el

De todos los scripts que encontre, por facilidad, simplicidad y rapidez a la hora de configurarlo, decidi finalmente usar linum. La configuracion sera muy simple, en mi caso agregue algo asi:

;; —————————————————————————
;; Linum (line numbers) M-x linum-mode to enable
;; —————————————————————————
(load-file “~/.emacs.d/linum/linum.el”)
(require ‘linum)
(setq linum-format “%d “)
;(autoload ‘linum “linum” “Line numbers for buffers.” t)
(add-hook ‘find-file-hook (lambda () (linum-mode 1)))

Por supuesto, debemos cercionarnos que el fichero linum.el tenga esa ruta. En mi caso, todo lo que voy anadiendo a emacs lo pongo dentro del directorio .emacs.d y tengo al menos un directorio para cada feature diferente, aunque tan solo tenga un fichero .el. De esa forma mantengo un orden estricto en todos los scripts, plugins o features para esta herramienta.

El resultado final sera algo asi:

Otras alternativas a linum se pueden encontrar en el wiki de emacs, mas especificamente aqui: http://www.emacswiki.org/emacs/LineNumbers


Apr 17 2011

Gnus (comandos adicionales)

Tag: basicadmin @ 2:02 pm

Hace ya algun tiempo, escribi un articulo sobre gnus. Basicamente se centraba en la configuracion del correo mediante POP/IMAP y SMTP, algunos conceptos como el de grupo y etiquetas (que aqui son un concepto algo mas avanzado a lo que solemos conocer con este nombre). Tambien daba algunos comandos basicos para que el que lo configurase, pudiese comenzar a utilizarlo y moverse sin necesidad de leerse en manual de gnus que son cientos y cientos de paginas.

Sin embargo, creo que es interesante introducir algunos comandos adicionales, para los que lo hayais usado, sigais sintiendos comodos y podais ganar tiempo, o simplemente algunas acciones que generalmente realizamos sin complicacion, pero que en gnus puede ser un problema si no conocemos los keybindings o los comandos asociados.

Sin mas dilacion, pasamos a mostrar algunos de esos comandos mas utiles:

# : Se emplea para activar el ‘flag select’, es decir, es como hacer una seleccion de un conjunto de mails para luego realizar una accion comun con ellos. La accion se realizara sobre toda esta seleccion, sea del tipo que sea. Por ejemplo podriamos seleccionar muchos mails con # y luego hacer un B backspace y eliminariamos todos de golpe. Tambien se podria combinar con prefijos, por ejemplo. C-100 # seleccionaria los primeros cien correos, luego B backspace, borraria estos 100 mails.

M-# : Se emplea para quitar el flag a un elemento seleccionado.

B-Backspace : Elimina un mail o grupo de mails (en el segundo caso seleccionados mediante #).

B m <grupo> : Mueve todos los mensajes a un grupo.

! : Hace un highlight de un mail, o lo que es lo mismo, lo agrega a favoritos. La diferencia estriba en que el mail aparecera siempre en la lista para ese grupo, junto con los nuevos, aunque este aparecera remarcado de otro color. Si ademas se quiere ver los mails antiguos al entrar en un grupo mediante INTRO (y no solo los favoritos), deberemos lanzar dicho comando con el prefijo, es decir: C-u INTRO.

M-u : Marca un mail como no leido o ‘mark-as-unread‘.

m : Crea un nuevo mail.

r : Contesta a un mail (reply).

R : Contesta a un mail incluyendo el mail original (quote). La funciona a la que se llama es ‘gnus-article-reply-with-original‘.

S W : Contesta a un mail incluyendo el mail original (quote) y ademas incluyendo a toda la lista de mails del mensaje original del CC. La funciona a la que se llama es ‘gnus-article-wide-reply-with-original‘.

S o m : Reenvia un mail (forward).

C-c C-a : Adjunta un fichero. Llama a la funcion ‘attach-file’.

C-c C-f C-c : Crea un CC (copia de mail). Tambien se permite escribir a mano dicho campo.

C-c C-f C-b : Crea un BCC (aka CCO -copia de mail oculta-). Tambien se permite escribir a mano dicho campo.

 


Next Page »