Comentaba en el artículo anterior que las repeticiones no son realmente de uso frecuente, sin embargo éstas pueden sernos muy útiles a la hora de escribir macros.
Gracias a David por aclararme en su dia todo el tema de repeticiones, sin él éste artículo no hubiese existido.
En el artículo anterior comentabamos que podiamos alterar el comportamiento de una función pasándole el valor -1 a una función. Veamos que otros parámetros y como se le pueden pasar a una función, así como su comportamiento final.
Recordemos que el argumento recibido no siempre tienen porque ser repeticiones (aunque sí generalmente), sinó que lo usará o interpretará de la forma que mas ‘le convenga’, y por lo tanto para cada uno de los comandos puede interpretarse (y de hecho se interpreta así) de forma posiblemente distinta.
A continuación en rojo irá marcada la parte repetitiva del comando (donde ‘enviamos’ los parámetros a la función) seguido de la parte en negrita que indicará el comando original, ya que será mucho más fácil explicar esto con ejemplos:
- C-u C-f : Le pasará el argumento 4 al comando que le siga. En éste caso repetira 4 veces la acción (avanzará 4 caracteres hacia delante).
- C-u C-u C-f : Se sumará 4 veces el valor del argumento hasta el momento. 0 veces = 1, 1 vez = 4, 2 veces = 8, etc.
- C-u 3 C-f : Se le pasará el argumento 3 a la función, y por lo tanto repetirá 3 veces en este caso dicha acción (pudiendo también enviar números negativos).
- C– C-f o M– C-f : Pasará el valor -1 como parámetro a la función.
- C-5 C-f o M-5 C-f : Pasará un argumento simple de un único dígito.
Recordad que no todos los comandos permiten recibir parámetros negativos a la función, ni siquiera no todos los comandos permiten recibir parametros, por lo tanto, esto no es universal para todos ellos.
Continuando con el formato del artículo anterior, llega la tercera y última parte, en cuanto se refiere a la sección básica del blog, sobre temas relacionados con desplazamiento y la alteración de texto.
En primer lugar citaré ciertos desplazamientos con los que se puede subsistir sin él, pero el cual es muy útil cuando se altera cierto tipo de texto.
Desplazamientos avanzados:
- M-f : ‘forward-word‘; Desplaza el cursor a la palabra siguiente.
- M-b : ‘backward-word‘; Desplaza el cursor a la palabra anterior.
- C-a : ‘beginning-of-line‘; Desplaza el cursor al principio de la línea.
- C-e : ‘end-of-line‘; Desplaza el cursor al final de la línea.
- M-a : ‘forward-sentence‘; Desplaza el cursor a la frase siguiente.
- M-e : ‘backward-sentence‘; Desplaza el cursor a la frase anterior.
- M-} : ‘forward-paragraph‘; Desplaza el cursor al siguiente párrafo.
- M-{ : ‘backward-paragraph‘; Desplaza el cursor al párrafo anterior.
- C-x ] : ‘forward-page‘; Desplaza el cursor a la página siguiente.
- C-x [ : ‘backward-page‘; Desplaza el cursor a la página anterior.
- C-v : ‘scroll-up‘; Mueve el scroll hacia arriba.
- M-v : ‘scroll-down‘; Mueve el scroll hacia abajo.
Pasemos ahora con la alteración de texto:
Tranposición:
- C-t : ‘transpose-chars‘; intercambia dos caracteres.
- M-t : ‘transpose-words‘; intercambia dos palabras.
- C-x C-t : ‘transpose-lines‘; intercambia dos líneas.
- Sin keystroke asociada : ‘transpose-sentence‘; intercambia dos frases.
- Sin keystroke asociada : ‘tranpose-paragraphs‘; intercambia dos párrafos.
Antes de continuar, debemos aclarar, que el comportamiento de algunos comandos depende de una tabla de sintaxis que ofrecen los modos, es decir, que no será lo mismo avanzar un párrafo en modo fundamental cuando editemos texto de cualquier tipo, que cuando avancemos por ejemplo un párrafo en c-mode. Por lo tanto el mismo comando realizará la misma acción, de formas distintas según el modo en el que se encuentre.
Capitalización:
- M-c : ‘capitalize-word‘; Convierte a mayúscula la letra actual.
- M-u : ‘upcase-word‘; Convierte a mayúsculas las letras desde el cursor hasta el final de la palabra actual.
- M-l : ‘downcase-word‘; Convierte a minúsculas las letras desde el cursor hasta el final de la palabra actual.
También podemos usar argumentos negativos, esto es, que podemos aplicar la acción sobre texto previo, en lugar del actual. Para ello solo debemos pulsar una vez M– (Meta guión) antes de la acción a realizar (debemos tener en cuenta que no todas las acciones aceptan argumentos negativos), aquí tenéis un ejemplo de en que casos podríamos usarlo:
- M– M-c : Convierte a mayúscula la primera letra de la palabra actual (ignorando desde el cursor hasta el final de la palabra).
- M– M-u : Convierte a mayúsculas la primera letra de la palabra actual
- M– M-l : Convierte a minúsculas las letras desde el cursor hasta el principio de la palabra.
En el siguiente artículo explicaré las repeticiones (gracias a David por aclararme todo el tema de repeticiones), las cuales no son de uso muy habitual, pero que pueden ser fundamentales a la hora de escribir macros o programas en emacs lisp.
Hasta éste artículo todos los posts fueron introductorios, esto es, que en los anteriores posts hemos explicado las nociones fundamentales para que uno comprenda a nivel general el entorno Emacs, y se sienta agusto con dicho entorno sin necesidad de leerse largos tutoriales.
A partir de éste artículo entramos en una nueva parte del aprendizaje, que son las nociones básicas para mejorar nuestros desplazamientos o movimientos, búsquedas, selecciones, repeticiones, reemplazos, así como la alteración básica de texto.
En dicho capítulo comenzaremos por mejorar nuestras formas de desplazamientos, búsquedas y selección y eliminación, pero lo haremos a modo sumario, debido a que ya conocéis los conceptos básicos explicados en la parte fundamental, y a partir de ahora sólo indagaré y matizaré aquellos casos en los que debamos entrar en profundidad o explicar ciertas excepciones por motivos obvios.
Además de ello, mostraré el comando asociado (color azul y entre comillado simple) a cada keystroke (color negro y en negrita). Recordemos que cada comando puede ser invocado mediante su nombre usando M-x comando o bien mediante su keystroke (si es que tiene una asociada, que no siempre es así), en capitulos posteriores, explicaremos como asociar comandos a keystrokes de forma personalizada.
Desplazamiento medio:
- C-f o flecha derecha : ‘forward-char’; Se desplaza al siguiente carácter.
- C-b o flecha izquierda : ‘backward-char’; Se desplaza al carácter anterior.
- C-p o flecha arriba : ‘previous-line’; Desplaza el cursor a la línea anterior.
- C-n o flecha abajo : ‘next-line’; Desplaza el cursor a la línea siguiente.
- C-x C-x : ‘exchange-point-and-mark’; Intercambia marca y cursor.
Búsqueda media:
- C-s C-w : ‘isearch-yank-word’; Busca la cadena que se encuentra en el cursor hasta el final del fichero.
- C-s C-y : ‘isearch-yank-line’; Busca la cadena que se encuentra en el cursor hasta el final de la línea.
- C-s M-y : ‘isearch-yank-kill’; Busca el texto que se encuentra en el kill ring como cadena de búsqueda.
Selección y eliminación avanzada:
- C-d : ‘delete-char’; Elimina el carácter actual. (Siguiente respecto al cursor)
- Del : ‘delete-backward-char’; Elimina el carácter anterior. (Anterior respecto al cursor)
- M-d : ‘kill-word’; Elimina la palabra actual.
- M-del : ‘backward-kill-word’; Elimina la palabra anterior.
- C-k : ‘kill-line’; Elimina desde el cursor hasta el final de la línea actual.
- C-a C-k : ‘kill-line’; Elimina la línea actual.
- M-k : ‘kill-sentence’; Elimina la frase actual.
- Sin tecla asociada por defecto : ‘kill-paragraph’; Elimina el párrafo actual.
- Sin tecla asociada por defecto : ‘backward-kill-paragraph’; Elimina el párrafo anterior.
- M-h : ‘mark-paragraph’; Selecciona el párrafo actual.
- C-x C-p : ‘mark-page’; Selecciona la página actual.
- C-x h : ‘mark-whole-buffer’; Selecciona todo el buffer.
Con ésto sólo nos queda por explicar el desplazamiento avanzado y la alteración básica de texto (transposición y capitalización de carácteres).