Jul 10 2008

Desplazamiento avanzado y Alteración de texto

Tag: basicoverdrive @ 1:41 pm

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.


Jul 09 2008

Desplazamiento medio, Búsqueda media, Selección y eliminación avanzada

Tag: basicoverdrive @ 1:41 pm

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).


Jun 17 2008

Scheme, common y emacs lisp

Tag: introoverdrive @ 1:38 am

Antes de continuar explicando keystrokes más avanzados creo que es importante tener un mínimo de cultura general de Lisp (list processing), ya que está totalmente relacionado con Emacs (más de un 75% está escrito en lisp, algo más de un 23% en c, y el resto en lenguajes como sh, perl, awk, python y demás).

En primer lugar decir que Lisp es un lenguaje de programación multiparadigma, de alto nivel, declarativo, funcional, orientado a objetos y con 50 años de história. La potencia de lisp es mucho mayor de la que lo gente se piensa y aunque tiene relación con la IA (Inteligencia Artificial) se usa y se ha usado para muchísimas cosas más, como estudiar los paradigmas de los lenguajes de programación del futuro.

Lisp tiene 3 dialectos principales hoy en dia (aunque existen más), éstos son Scheme, Common lisp y Emacs lisp.

  • Scheme: la filosofía de Scheme es minimalista. Scheme proporciona un número muy reducido de primitivas, construyendo el resto a partir de este reducido número de abstracciones. El estándar (R5RS) tan sólo ocupa unas 50 páginas y se puede descargar de la página de schemers.org (http://schemers.org/Documents/Standards/R5RS/r5rs.pdf).
  • Common lisp: por otro lado tenemos common lisp, él índice de las especificaciones de éste es tan grande como todas las especificaciones de scheme, por lo lo que posee un gran número de primitivas. La especificación y referencia más cercana es la CLtL (www.cs.cmu.edu/Groups/AI/html/cltl/cltl2.html).
  • Emacs lisp: por último tenemos Emacs lisp, éste dialecto fue escrito pensando u orientado para el entorno Emacs. El juego de primitivas que ofrece no es tan pequeño como el de Scheme, pero tan poco tan grande como el de Common lisp. Su número de primitivas también es reducido, lo que ocurre es que el estándar también define la biblioteca, que se construye con el juego de primitivas reducidas. La mejor referencia se encuentra en la web de gnu (http://www.gnu.org/software/emacs/manual/elisp.html).

Por supuesto nuestro entorno emacs tiene un intérprete de lisp (emacs lisp) escritro en c, que es la base de toda la aplicación y del resto de funcionalidades que se cargan. Por lo tanto podemos decir que podemos interpretar código Lisp desde emacs (y se hace constantemente). Para ello tenemos distintas posibilidades:

  • M-x run-scheme : podremos comenzar a interpretar scheme.
  • M-x run-lisp : podremos comenzar a interpretar common lisp.
  • M-x eval-expression ó M-: : podremos comenzar a interpretar emacs lisp desde el minibuffer.
  • C-x C-e : para interpretar emacs lisp escrito en algún buffer (útil cuando no es tan corto el código).

También podemos evaluar código emacs lisp usando M-x eval-buffer si queremos evaluar un buffer entero en dicho intérprete o bien M-x eval-region si lo que queremos es que interprete una región. Debemos tener instalados en nuestro sistema los intérpretes de scheme y common para poder evaluar expresiones de estos, el de emacs lisp, ya viene con GNU/Emacs.

lambda

Por último recomendar este magnífico video (Taller de lisp) también incrustado al final de éste post, de David Arroyo (los primeros 24 minutos sobre la história de Lisp) y José E. Marchesi (a partir del minuto 25, sobre como se implementa Lisp de forma interna).


« Página anteriorPágina siguiente »