Oct 02 2008

Macros

Tag: basicoverdrive @ 2:22 am

Emacs, como su propio nombre indica es un Editor de MACroS. Existen ocasiones en las que realizamos una tarea de forma repetitiva, es ahí cuando necesitamos hacer uso de las macros, eso sí, en el momento que las macros no sean lo suficientemente potentes como para resolver dicha tarea, deberemos hacer uso de lisp, el cual, es mucho más potente.

C-x ( : ‘kmacro-start-macro‘; inicia una macro.
C-x ) : ‘kmacro-end-macro‘; finaliza una macro.
C-x e : ‘kmacro-end-and-call-macro‘; ejecuta la última macro definida. Presionando e repite la macro.

F3 : ‘kmacro-start-macro-or-insert-counter‘; inicia una macro. Si es presionado cuando se está definiendo una macro, inserta un contador.
F4 : ‘kmacro-end-or-call-macro‘; finaliza una macro si está en progreso. Si no lo está, invoca la última macro.

Dos formas de crear, guardar y ejecutar macros:

1) Indicamos que queremos comenzar a crear una macro

C-x (

2) Realizariamos una serie de tareas repetitivas

Por ejemplo escribimos: 1 TAB 2 TAB 3

3) Indicamos que queremos dar por finalizada la macro

C-x )

4) Ejecutamos la macro tantas veces como necesitemos

C-x e

Opción alternativa:

1) Indicamos que queemos comenzar a crear la macro

F3

2) Realizariamos una serie de tareas repetitivas

Por ejemplo escribimos: 1 TAB 2 TAB 3

3) Indicamos que queremos dar por finalizada la macro

F4

4) Ejecutamos la macro tantas veces como necesitemos

F4

La diferencia estriba, en que uno nos permite finalizar y ejecutar la macro directamente, o bien ejecutar una macro si esta ha sido definida.

Otro ejemplo para ejecutar una macro de forma repetida sin ir repetición tras repetición, lo cual lo hace mucho más útil para muchas repeticiones:

1) Creamos la macro

Realizar los pasos del 1 al 3 de cualquiera de las dos formas mostradas anteriormente.

2) Le decimos el número de repeticiones

Es decir el último paso de cualquiera de los dos ejemplos anteriores le pasariamos el parametro 100
M-100 F4 o M-100 C-x e
Por alguna extraña razón para pasarle los parametros empleando la tecla meta no puedo realizarlo con la tecla Alt, sino que debo usar Esc y soltar.

Además con C-u C-x ( podremos añadir nuevas tareas a la última macro definida. Decir también podemos aplicar macros sobre regiones mediante M-x apply-macro-to-region-lines.

Más acciones con macros:

C-x C-k n : ‘name-last-kbd-macro’; nombra la última macro creada. Esto es, que guardara en memoria la ultima macro creada por nosotros (se nos preguntara por el nombre de la macro).
(sin keystroke asociada) : ‘insert-kbd-macro‘; inserta una macro nombrada en un fichero, de esta forma podremos guardar los cambios y re-utilizar la macro en un futuro.
C-x q : ‘kbd-macro-query‘; inserta una petición en una definición de macro. [A EXPANDIR]
C-u C-x q : inserta una edición recursiva en una definición de macro. [A EXPANDIR]
C-M-c : ‘exit-recursive-edit‘; sale de una edición recursiva. [A EXPANDIR]
C-x C-k b : ‘kmacro-bind-to-key‘; Asocia una macro a un keystroke. C-x C-k [0-9A-Z] están reservadas.
C-x C-k SPC : ‘kmacro-step-edit-macro‘; edita una macro mientras se ejecuta paso a paso. En el modeline nos mostrara las distintas opciones entre ellas y, n y q (para si, no o salir).
C-x C-k l : ‘kmacro-edit-lossage‘; asocia los últimos 100 keystrokes en una macro.
C-x C-k e : ‘edit-kbd-macro‘; edita una macro. C-x e para la última macro definida, M-x para una macro nombrada, C-h l para macros asociadas a una tecla.
C-x C-k <CR>: ‘kmacro-edit-macro‘; edita la última macro.
C-x C-k C-e : ‘kmacro-edit-macro-repeat‘; edita la última macro de nuevo.

Al igual que existe un kill ring para aquellos elementos eliminados, existe un macro ring para aquellas macros creadas, al cual se acceder o alterar mediante los siguientes keystrokes:

C-x C-k C-t : ‘kmacro-swap-ring‘; transpone la última macro con la anterior.
C-x C-k C-d : ‘kmacro-delete-ring-head‘; elimina la última macro del macro ring.
C-x C-k C-p : ‘kmacro-cycle-ring-previous‘; salta a la macro anterior del macro ring.
C-x C-k C-n : ‘kmacro-cycle-ring-next‘; salta a la siguiente macro del macro ring.
C-x C-k r : ‘apply-macro-to-region-lines‘; aplica la macro a cada línea de una región.

Con esto podemos ahorrar mucho tiempo y ser más productivos, sin embargo, cuando las macros no resuelven tareas complejas que requieren más potencia, debemos plantearnos hacer uso de lisp.


Sep 30 2008

El diario de emacs

Tag: basicoverdrive @ 5:30 pm

Además del calendario que emacs posee (explicado en el artículo anterior) emacs posee un diario, que cabe decir, que esta intimamente relacionado con el calendario.

  • Creando el diario la primera vez

Antes de nada, para crear un diario, primero debemos tener el fichero llamado diary en nuestro directorio de usuario, por lo que procederemos a crearlo:

$ touch ~/diary

Dentro de dicho fichero podemos emplear distintos formatos, tales como:

DD/MM/YYYY
MM/DD/YYYY
Mes 17 2004 foobar
11/14 foobar
&SATURDAY foobar
FRIDAY foobar

Además de ello, existen algunas reglas que merece la pena saber, por ejemplo:

-> Si no especificamos el año, será una entrada para todos los años.

-> Si no especificamos el mes, será una entrada para todos los meses.

-> Si ponemos & delante de por ejemplo del dia será sólo el próximo dia.

Para especificar el horario europeo podemos añadir en nuestro .emacs:

(setq european-calendar-style ‘t)

  • Añadiendo entradas al diario

Primero deberemos lanzar el calendario, el cual como hemos dicho antes está intimamente relacionado. Para ello debemos pulsar M-x calendar. Una vez estemos en el calendario podremos ejecutar uno de los siguientes comandos para añadir entradas:

g d : ‘calendar-goto-date‘; se desplaza a una fecha.

Una vez estemos en la fecha deseada podremos añadir entradas empleando una de las siguientes combinaciones:

i d : ‘insert-diary-entry‘; añade una entrada diaria.
i w : ‘insert-weekly-diary-entry‘; añade una entrada semanal.
i m : ‘insert-monthly-diary-entry‘; añade una entrada mensual.
i y : ‘insert-yearly-diary-entry‘; añade una entrada anual.
i a : ‘insert-anniversary-diary-entry‘; añade un aniversario.
i c : ‘insert-cyclic-diary-entry‘; añade una entrada cíclica (que se repite cada cierto periodo de tiempo).

También podemos usar la marca, moviéndonos por ejemplo con C-n y pulsar:

i b : ‘insert-block-diary-entry‘; el cual añadirá una entrada para un bloque, por ejemplo para un viaje de una duración determinada.

  • Mostrando entradas en el diario

en nuestro .emacs podemos añadir:

(diary)

o bien pulsando d en nuestro calendario ‘view-diary-entries
o bien pulsando s para mostrar todas las entradas ‘show-all-diary-entries

con:

m : mostraremos en rojo las entradas del calendario ‘mark-diary-entries
u : quitaremos la marca.

Con esto parece que nuestro calendario va tomando forma y ya no es un ‘simple calendario’ con un montón de funcionalidades, sino que sirve también para función de diario.


Sep 29 2008

El calendario de Emacs

Tag: basicoverdrive @ 1:15 pm

Con M-x calendar lanzaremos el calendario que posee Emacs. Por defecto los días comenzarán por Domingo, si queremos que empiece por lunes en nuestro .emacs debemos poner:

(setq calendar-week-start-day 1)

Si queremos ver el calendario cada vez que iniciemos emacs podemos añadir esta otra línea:

(calendar)

Moviéndonos por el calendario podremos ejecutar lo siguiente:

. : ‘calendar-goto-today‘; desplaza el cursor a la fecha actual.
C-f : ‘calendar-forward-day‘; desplaza el cursor al dia anterior.
C-b : ‘calendar-backward-day‘; desplaza el cursor al dia posterior.
C-n : ‘calendar-forward-week‘; desplaza el cursor a la semana anterior.
C-p : ‘calendar-backward-week‘; desplaza el cursor a la semana posterior.
M-} : ‘calendar-forward-month‘; desplaza el cursor al mes posterior.
M-{ : ‘calendar-backward-month‘; desplaza el cursor al mes anterior.
C-x ] : ‘calendar-forward-year‘; desplaza el cursor al año posterior.
C-x [ : ‘calendar-backward-year‘; desplaza el cursor al año anterior.

Como podemos ver, desde Emacs, empleamos los mismos keystrokes que usabamos en otro modo para avanzar o retroceder palabras, líneas o párrafos para movernos en la misma proporción por el calendaria, de forma que no debemos realizar tanto esfuerzo para recordar dichos keystrokes.

C-a : ‘calendar-beginning-of-week‘; desplaza el cursor al principio de la semana.
C-e : ‘calendar-end-of-week‘; desplaza el cursor al final de la semana.
M-a : ‘calendar-beginning-of-month‘; desplaza el cursor al principio de mes.
M-e : ‘calendar-end-of-month‘; desplaza el cursor a final de mes.
M-< : ‘calendar-beginning-of-year‘; desplaza el cursor a principio de año.
M-> : ‘calendar-end-of-year‘; desplaza el cursor a final de año.
g d : ‘calendar-goto-date’; desplaza el cursor a una fecha especificada.
o : ‘calendar-other-month‘; pone el mes especificado centrado en la pantalla.
C-x < : ‘scroll-calendar-left‘; hace un desplazamiento del scroll de un mes más.
C-x > : ‘scroll-calendar-right‘; hace un desplazamiento del scroll de un mes menos.
C-v : ‘scroll-calendar-left-three-months‘; hace un desplazamiento del scroll de 3 meses adelante.
M-v : ‘scroll-calendar-right-three-months‘; hace un desplazamiento del scroll de 3 meses atrás.
SPC : ‘scroll-other-window‘; hace un desplazamiento del scroll de una pantalla.

También podremos mostrar vacaciones mediante los siguientes keystrokes:

a : ‘list-calendar-holidays‘; muestra las vacaciones en el periodo mostrado.
(sin keystroke asociada) : ‘holidays‘ : muestra las vacaciones para el mes actual.
h : ‘calendar-cursor-holidays‘; muestra si un dia es vacaciones.
x : ‘mark-calendar-holidays‘; marca las vacaciones con un dia especial.
u : ‘calendar-unmark‘; elimina la marca.

Además de ello emacs posee algunas opciones relativas al dia, así como calendarios alternativos:

p d : ‘calendar-print-day-of-year‘; imprime el número de dia del año.
p o : ‘calendar-print-other-dates‘; imprime información sobre la fecha en todos los calendarios.
M-= : ‘calendar-count-day-region‘; imprime el número de día del año de una región.
M : ‘calendar-phases-of-moon‘; imprime el calendario de las fases lunares.
S : ‘calendar-sunrise-sunset‘; imprime el calendario solar.

Quién necesita otras aplicaciones de calendario cuando esta te muestra hasta los dís de fiesta en tu mismo entorno sin necesidad de recurrir a salir a otra aplicación? Además de ello, emacs posee otros tipos de calendarios. Para un uso más avanzado del calendario se puede acceder al manual oficial de Emacs en http://www.gnu.org/software/emacs/manual/html_node/emacs/ en la sección «Calendar/diary» ya que emacs posee un sin fin de opciones incluyendo calendarios Mayas, Gregorianos, de fases lunares, etc.


« Página anteriorPágina siguiente »