Oct 25 2008

Párrafos, márgenes y alineación

Tag: basicoverdrive @ 9:11 pm
  • Párrafos

Para identar párrafos podemos pulsar TAB sobre cada línea o bien presionar C-j para ‘newline-and-indent‘, presionando C-j C-j nos crea una línea en blanco entre párrafos. También podemos usar M-x paragraph-indent-text-mode (en modo mayor) o bien M-x paragraph-ident-minor-mode (en modo menor) para obtener una sangría.

Si queremos poder identar un párrafo de un documento de forma individual podemos seleccionarlo como región y pulsar M-q. También podemos utilizar distinta identación para distintos párrafos mediante M-x fill-individual-paragraphs. Con C-_ C-x h para ‘fill-individual-paragraph‘, esto ajustara el párrafo de forma contigua a una región dada. Debemos tener en cuenta que C-M-\ para ‘indent-region‘ sólo identará un nivel debido a que fue desarrollado para identar código.

Si por ejemplo seleccionamos una región y pulsamos C-x TAB para ‘indent-rigidly‘, identará una columna por defecto, podemos emplear esta acción con C-u o M-número para poder lanzar el comando con argumentos y así poder realizar identaci&oaacute;n para múltiples columnas. Con M-m para ‘back-to-identation‘ nos desplazaremos hasta el primer carácter no blanco del párrafo actual. C-M-o para ‘split-line‘ podemos partir el párrafo o línea en dos, dejando una línea en blanco entre medio.

  • Márgenes

Para trabajar con márgenes podemos emplear el prefijo de keystrokes C-x h para marcar todo el buffer y así realizar una de las siguientes acciones:

M-x increase-left-margin : incrementa el margen izquierdo.
M-x decrease-left-margin : decrementa el margen izquierdo.
M-x increase-right-margin : incrementa el margen derecho.
M-x decrease-right-margin : decrementa el margen derecho.

Si no especificamos un argumento numérico con C-u o M-número usará el valor que contenga la variable standard-indent que por defecto es 4.

Existe otro problema típico cuando las lineas son demasiado largas respecto al ancho de la ventana, y es que podemos querer realizar un salto de línea automático cuando sean demasiado largas, pero sin tener que hacerlo de forma manual, sino que sea Emacs quien haga dicho cálculo, para ello podemos ejecutar M-x auto-fill-mode y conseguiremos este efecto de forma automática.

Para el mismo caso anterior, podemos conseguir un efecto de prefijo delante de cada línea, esto se consigue mediante C-x . para ‘set-fill-prefix‘; con esto conseguiremos poner prefijos cada vez que la línea sea cortada. La forma correcta de usarlo es primero poniendo el prefijo y luego ejecutando el comando; por ejemplo: pulsando 5 veces espacio y luego C-x .

  • Alineación

Emacs no se considera un procesador de textos, en todo caso contiene un editor. La tarea de un editor es trabajar con o editar texto, mientras que la de un procesador es dar un formato de presentación. Sin embargo, aunque emacs no sea un procesador de texto permite realizar ciertas tareas básicas de presentación y formato de texto, entre ellas se puede alinear texto:

M-s : ‘center-line‘; centra una línea.
M-S : ‘center-paragraph‘; centra un párrafo.
(sin keystroke asociada) : ‘center-region‘; centra una región.
(sin keystroke asociada) : ‘set-justification-center‘; centra el texto seleccionado.


Oct 19 2008

Identación: Tabulaciones y espacios en emacs

Tag: basicoverdrive @ 9:31 pm

Explicaremos en la primera parte de este artículo el comportamiento de las tabulaciones en emacs, problemas típicos así como sus soluciones hasta conseguir un control total del entorno.

En emacs Antes que nada decir que por defecto en emacs una tabulación (a partir de ahora lo llamaremos TAB) son tomados como 8 espacios, la forma de representarlo. Por defecto emacs trabaja en modo fundamental, el cual es un modo generalizado para la mayoría de tareas. Sin embargo, para trabajar en texto plano de forma específica podemos emplear text-mode.

En text-mode cuando escribimos texto, si presionamos intro para ir a la siguiente línea y pulsamos acto seguido tabulador, la tabulación no será tomada como 8 espacios sino que se posicionará justo por debajo del primer carácter de la segunda palabra de la línea anterior, y así tantas veces como TAB pulsemos, o dicho de otra manera el TAB se alineará con la línea anterior.

Es posible editar las posiciones para cada tabulación mediante M-x edit-tab-stops, esto nos abrirá:

emacstabs

Básicamente de estas 3 líneas, la primera significa en que posición pararía cada vez que pulsasemos una tabulación. La segunda línea indica el número de decenas de carácteres, mientras que la tercera indica el número de carácteres. Podemos cambiar el comportamiento de las tabulaciones desde aquí.

Para añadir una nueva tabulación nos desplazariamos con C-f o C-b hasta la columna deseada, y luego presionamos :. Para eliminar una tabulación nos desplazariamos de la misma forma con C-f o C-b hasta la columna deseada donde se encuentre una tabulación y presionamos DEL.

Fijémonos que el buffer se encuentra en modo Ovwrt (sobreescritura) cuando realizamos esta acción de modificar las tabulaciones, y dichos cambios sólo serán aplicados sobre el buffer actual. Una vez hayamos terminado de modificarlos podemos guardar dichos cambios y salir presionando C-c C-c. Sin embargo si queremos ignorar los cambios podemos simplemete eliminar el buffer mediante C-x k.

Debemos tener en cuenta que hasta ahora hemos trabajado con tabulaciones no rigidas que se llaman, es decir, que dependia de las líneas contiguas para realizar la tabulación y rara vez se cumplian los 8 carácteres. Sin embargo existe una forma de trabajar con tabulaciones rígidas para ello debemos utilizar C-q TAB en lugar de TAB, que se traduce como el carácter ^I. Para cambiar el ancho del TAB rígido podemos editar nuestro .emacs y poner por ejemplo:

(setq-default tab-width 4)

Si queremos que emacs inserte espacios en lugar de TAB podemos añadir en nuestro .emacs:

(setq-default indent-tabs-mode nil)

Para eliminar TABs creados anteriormente a esta regla, pero que aún persisten ahí podemos utilizar M-x untabify, y convertirá todos los TABs del documento actual en blancos. Si queremos realizar el paso inverso de convertir blancos en TABs podemos emplear M-x tabify.


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.


« Página anterior