Abr 24 2009

VC (Version Control) en emacs

Tag: basicoverdrive @ 12:56 am

Emacs provee de un front-end que agiliza el uso de control de versiones, dicha feature se llama VC (Version Control) y permite usar de forma generalizada distintos controles de versiones mediante una misma interfaz. Los controles de versiones soportados son SCCS, RCS, CVS, SVN, GIT y demás, aunque algunos de ellos no estan adaptados perfectamente o requieren de algún otro front-end más específico para ellos mismos, como es el caso de emergente GIT.

Modelo tradicional vs concurrente

Existen dos modelos basicos a hora de trabajar con controles de versiones, uno es el tradiciona y otro el concurrente que muestro a continuacion para notar las diferencias:

Modelo tradicional:

modelo tradicional

Modelo concurrente:

concurrente

(Imágenes extraidas del libro ‘Learning GNU Emacs’, 3rd Edition by Debra Cameron, James Elliot, Marc Loy. O’Reilly)

Por lo que puede existir algún problema durante los procesos de check in debemos intentar resolverlos mediante M-x vc-resolve-conflicts. A partir de aquí podemos comenzar a explicar las siguientes tareas típicas y los keybindings asociados a un proceso general de desarrollo.

C-c C-c; commit del buffer comentado.
C-x v u: ‘vc-revert-buffer‘; revisa los cambios realizados desde el último check in.
C-x v c: ‘vc-cancel-version‘; cancela una revisión.

Indicadores VC

En el modeline se pueden mostrar los siguientes indicadores:

Si no muestra nada indica que no se está bajo VC.
CVS-version cambiado respecto al repositorio.
CVS:version cambios guardados pero no committeados.

Además debemos comprobar la variable ‘vc-handeled-backends’ que revisa cuál es el control de versiones disponible en el sistema que puede ser:

comb: el control de versiones empleado en el sistema es SCCS.
rcs: el control de versiones empleado en el sistema es RCS.
cvs: el control de versiones empleado en el sistema es CVS.
snv: el control de versiones empleado en el sistema es SNV.

Trabajando con grupos y directorios

C-x v d: ‘vc-directory‘; configura dired para registrar ficheros bajo el directorio actual.

Reporte de revisiones

C-x v =; ‘vc-diff‘; configura dired para mostrar los diffs y presionando ‘g‘ refresca el estado de VC en el directorio.
C-u C-x v =; muestra el fichero y dos revisiones para reportar diffs entre dichas versiones del fichero.
C-x v ~: ‘vc-version-other-window‘; realiza la revisión de cualquier fichero guardado.

Si estamos en foo.c y pulsamos C-x v ~ 1.3 abrirá el fichero foo.c~1.3~ (es decir la version 1.3 de dicho fichero).

Historial de cambios

C-x v l: ‘vc-print-log‘; muestra cambios en el historial y changelog.
C-x v a: ‘vc-update-change-log‘; actualiza el fichero changelog al estilo GNU.

Registrando un fichero

C-x v i: ‘vc-register‘; registrar un fichero en el control de versiones.

Insertando cabeceras del control de versiones

C-x v h: ‘vc-insert-headers‘; inserta cabeceras de control.

Además existe la variable ‘comment-start‘ y ‘comment-end‘ que puede tomar uno de estos tres valores: nroff, troff. groff.

Creando y recuperando snapshots

C-x v r: ‘vc-retrieve-snapshot‘; hace check out del snapshot del proyecto de desarrollo o lo que es lo mismo, asocia un nombre un snapshot nuevo.
C-x v s: ‘vc-create-snapshot‘; crea un nuevo snapshot del proyecto de desarrollo.

Renombrando ficheros

vc-rename-file‘; dicha función renombra un fichero bajo el control de versiones. Aunque en algunos controles de versiones da problemas, por lo que si ocurre debemos realizar de nuevo la acción limpiando la cache mediante ‘vc-clear-context‘.

Configurando VC

Las siguientes variables pueden modificarse para alterar el funcionamiento y configuración de VC:

vc-display-backends‘; maneja el control de versiones usado por VC.
vc-display-status‘; muestra el número de revisión y su estado.
vc-backend-header‘; contiene un listado de cabeceras dado por la variable ‘vc-cvs-header‘, etc.
vc-keep-workfiles‘; evita tener que hacer check out cada vez.
vc-mistrust-permissions‘; si se pone a ‘t‘ le indica a VC que no confie en los permisos del fichero local, sino en los del control de versiones.
vc-suppress-confirm‘; si se pone a ‘t’ elimina la confirmación para ‘vc-revert-buffer‘.
vc-initial-comment‘; comentario inicial cuando se muestra un fichero (opcional) por los controles de versiones.
vc-switches‘; puede tomar 2 valores:

-c para cuando haga diff tenga un formato context-diff.
-u para cuando haga diff tenga un formato unified-diff.

Extendiendo VC

Existen extensiones por ejemplo para ClearCase de IBM, llamada vc-clearcase.


Abr 22 2009

Formato de texto enriquecido en emacs (rtf – Riched Text Format)

Tag: basicoverdrive @ 4:34 am

Es posible trabajar en GNU/Emacs con formato de texto enriquecido (Riched Text Format, que generalmente usa la extensión .rtf). Para quienes no lo sepan, dicho formato se emplea para mejorar o resaltar el texto plano sin necesidad de usar formatos pesados ni demasiadas opciones.

Cuando se trabaja con un buffer en emacs mientras se emplea el modo para texto enriquecido, emacs automáticamente convierte el formato de text a text/enritched a la hora de guardar el fichero en disco, por lo que emacs podrá reconocer este formato y reconvertir el texto cuando se cargue de nuevo el fichero en un buffer, reconociendo por lo tanto el formato automaticamente.

Para habilitar el formato de texto enriquecido tan sólo debemos pulsar M-x enritched-mode. Antes de comenzar a explicar las opciones que tenemos debemos distinguir entre tipos de líneas.

Hard y soft lines

Emacs distingue entre dos tipos diferentes de nuevas líneas, las duras (hard lines) y las blandas (soft lines). Estas funcionalidades se pueden habilitar o deshabilitar en emacs mediante M-x use-hard-newlines.

Las líneas duras (hard lines) son empleadas para separar párrafos u otros elementos en una lista, siempre buscando una línea como margen. El comando intro (newline) y C-o (open-line) inserta hard lines.

Las líneas blandas (soft lines) son usadas para ajustar texto entre márgenes. Todos los comandos relacionados con dichos ajustes, incluyendo Auto Fill, etc, sólo eliminan soft lines.

Las hard lines y soft lines pueden parecer lo mismo, pero es importante saber su diferencia. Es decir debemos evitar usar intro para ‘romper lineas’ por la mitad para crear párrafos, eso creará barreras y problemas a la hora de dar formato a los márgenes para los párrafos. En lugar de ello, debemos usar Auto Fill mode para romper líneas, de esa forma si el texto o los márgenes cambian, emacs podrá reorganizar las líneas de forma correcta.

En cambio, en tablas y listas, donde las líneas siempre deben permanecer en el formato que se escribieron originalmente, debemos usar intro para finalizar las líneas. Para dichas líneas debemos ajustar la alineación del texto a unfilled.

Información del formato y color

(sin keystroke asociada): ‘facemenu-remove-face-props; elimina de una región las propiedades asociadas al color y letra.
(sin keystroke asociada):describe-text-properties; muestra las propiedades del texto seleccionado.
(sin keystroke asociada):list-faces-display; muestra un listado de todos las fuentes existentes.
(sin keystroke asociada): list-colors-display; muestra una lista de todos los colores existentes.

Así pues se podrá especificar un color determinado a una fuente mediante el uso de M-x facemenu-set-foreground y M-x facemenu-set-background para el color de fuente y fondo respectivamente.

Propiedades de las fuentes

M-o d: ‘facemenu-set-default‘; elimina todas las propiedades de una región, incluyendo colores o bien fuerza el siguiente carácter a no tener definida una propiedad específica de fuente.
M-o b: ‘facemenu-set-bold‘; marca en negrita el texto de una región o bien el siguiente carácter.
M-o i: ‘facemenu-set-italic‘; marca en cursiva el texto de una región o bien el siguiente carácter.
M-o l: ‘facemenu-set-bold-italic‘; marca en negrita y cursiva el texto de una región o bien el siguiente carácter.
M-o u: ‘facemenu-set-underline‘; subraya el texto de una región o bien el siguiente carácter.
M-o o fuente: ‘facemenu-set-face‘; añade la fuente a una región o bien en siguiente carácter.

Además se definen dos adicionales fuentes, excerpt y fixed, empleadas para usar texto con tamaño fijo de ancho de fuente (por defecto el valor es variable-width). En caso de que el terminal no soporte mostrar diferentes fuentes, obviamente no será visible esta diferencia, pero se conservará dicho valor de forma interna y emacs podrá seguir trabajando con ellos especificando dichos valores y trabajando de forma correcta y conservando valores de forma interna en emacs para que cuando se emplee un terminal con dicho soporte sean visibles dichos cambios.

Indentación

C-x TAB o C-u C-x TAB o C-num C-x TAB: ‘increase-left-margin‘ o ‘decrease-left-margin‘ o ‘increase-right-margin‘ o ‘decrease-right-margin‘; indenta la región en 4 columnas. Si se prevee de un argumento, será un número específico de columnas dado el que incrementará el margen izquierdo. Si el argumento es negativo lo decrementará en dicho número específico de columnas.

Las variable standard-indent especifica cuantas columnas deben añadir o substraer de la identación dichos comandos (su valor por defecto es 4). El valor del margen derecho es controlado por la variable fill-column.

Estos comandos se pueden adaptar al margen izquierdo y derecho de forma absoluta mediante set-left-margin y set-right-margin asociados a C-c [ y C-c ] respectivamente.

Existen momentos cuando se edita, que los párrafos quedan desordenados, para ello se debe emplear M-q que ejecutará el comando fill-paragraph.

Márgenes

M-j l: set-justification-left‘; Izquierda.
M-j r: set-justification-right‘; Derecha.
M-j b: set-justification-full‘; Justificado.
M-j c o M-S: set-justification-center‘; Centrado.
M-j u: set-justification-none‘; Sin justificación.

Los estados de márgenes se aplican de forma completa a párrafos. El valor por defecto de los márgenes viene dado por la variable default-justification.

Propiedades especiales

Existen propiedades especiales que al no ser estandares puede no ser interpretadas por otros entornos, sin embargo en emacs tenemos la posibilidad de trabajar partes de texto de sólo lectura (read-only), invisible, e intangible, una no podrá ser modificada, otra no será mostrada y la última no podrá ser accedida con el cursor.

Forzando emacs para reconocer rtf proviniente de otros entornos

Existen propiedades especiales en emacs como por ejemplo M-x format-decode-buffer para traducir el texto y adaptarlo al formato de texto enriquecido. Si en cambio no queremos interpretar dichos formatos de texto enriquecido podremos usar M-x find-file-literally. Para especificar una conversión de carácteres a otro formato específico siempre podremos emplear M-x format-find-file.


Mar 10 2009

Ayuda y documentación en emacs

Tag: basicoverdrive @ 12:28 am

La ayuda y/o documentación de emacs la podemos dividir en 4 o 5 partes básicas que son; el tutorial, apropos, info, el manual y el faq.

Ayuda – El tutorial

C-h t : ‘help-with-tutorial‘; lanza el tutorial.
C-h C-h o C-h ? : ‘help-for-help‘; ayuda de la ayuda.
C-h c : ‘describe-key-briefly‘; describe un keystroke dado de manera breve.
C-h k : ‘describe-key‘; describe un keystroke dado de manera extendida.
C-h f : ‘describe-function‘; describe que acción realiza una función.
C-h v : ‘describe-variable‘; describe para que se emplean variables definidas en emacs, pudiendo así luego modificar su valor y por ende su comportamiento.
C-h m : ‘describe-mode‘; describe el modo actual así como muestra todos los keystrokes específicos para dicho modo.
C-h b : ‘describe-bindings‘; describe los keystrokes generales, así como los específicos y su forma natural de prefijos.
C-h w : ‘where-is‘; muestra en que keystroke esta mapeada una función.
C-h s : ‘describe-syntax‘; describe la sintaxis empleada que se usa para definir keystrokes.
C-h l : ‘view-lossage‘; muestra los ultimos 100 caracteres escritos.
C-h e : ‘view-echo-area-messages‘; muestra los mensajes aparecidos en el minibuffer en la sesión actual.

Ayuda – Apropos

C-x _ o C-x u : ‘undo‘; deshace la última tarea.
C-h a : ‘apropos-command‘; hace apropos de las funciones, es decir busca un listado de funciones según una cadena o parte de ella dada.
(sin keystroke asociada) : ‘apropos-variable‘; hace apropos de las variables, es decir busca un listado de variables según una cadena o parte de ella dada.
(sin keystroke asociada) : ‘apropos-value‘; hace apropos de las variables que referencian dicho valor especificado.
(sin keystroke asociada) : ‘apropos-documentation‘; hace apropos de la documentación.
(sin keystroke asociada) : ‘apropos‘; hace apropos para funciones y variables.

Ayuda – info

C-h i : entra en info.

h : para ayuda.
SPC : mueve el scroll hacia abajo.
u u : se mueve un nivel hacia arriba.
t : se desplaza al top de este nivel.
i : para búsqueda.
, : se desplaza a la siguiente macro relacionada con este comando.
l : hace info del último buscado.
TAB o n : siguiente referencia.
p : referencia previa.
u : hace info de up (arriba).
m : info menu.
q : info quit.
s : info search.
g : goto node.

Manual e información general

C-h r : emacs manual.
C-h F : ‘info-goto-emacs-command-node‘; hace info de un comando dado.
C-h K : ‘info-goto-emacs-key-node‘; hace info de un keystroke dado.
C-h C-f : muestra la FAQ.
C-h n : ‘view-emacs-news‘; muestra las últimas noticias sobre emacs.
(sin keystroke asociada) : ‘emacs-index-search‘ : hace búsquedas relacionadas con emacs.
(sin keystroke asociada) : ‘elisp-index-search‘ : hace búsquedas relacionadas con elisp.
(sin keystroke asociada) : ‘search-emacs-glossary‘; muestra el nodo del glosario de info.
C-h : ‘view-order-manuals‘; muestra informació sobre la compra de manuales en papel.
C-h p : ‘finder-by-keyword‘; muestra informació sobre los paquetes lisp disponibles en el sistema.
C-h C-c : ‘describe-copying‘; muestra la licencia de emacs (GPL).
C-h C-d : ‘describe-distribution‘; muestra información sobre comprar emacs de la Free Software Foundation (FSF).
C-h C-p : ‘describe-project‘; muestra información del proyecto GNU.
C-h C-w : ‘describe-no-warranty‘; muestra la no-garantía de emacs.
C-h C-t : ‘view-todo‘; muestra las tareas TODO (a hacer) para contruibuir con el proyecto.
C-h C-e : ‘view-emacs-problems‘; muestra un listado de problemas conocidos en emacs.
C-h h : ‘view-hello-file‘; muestra el fichero HELLO en la mayorían de lenguajes disponibles.
C-h L : ‘describe-language-environment‘; muestra información sobre como son soportados los lenguajes bajo emacs.
C-h C-\ : ‘describe-input-method‘; muestra el método de introducción actual o la lista completa mediante TAB.
C-h C : ‘describe-coding-system‘; muestra el sistema de encoding actual o la lista completa mediante TAB.

Ayuda – completion

TAB : autocompleta la cadena a ser escrita, si existe más de una opción y se pulsa 2 veces, muestra la lista de posibles opciones.
SPC : autocompleta la cadena a ser escrita hasta el siguiente carácter de puntuación.
? : Lista las posibles opciones de autocompletado en *Completions* buffer.

Para ignorar las extensiones de un fichero podemos invocar a completion-ignored-extensions o bien añadir a nuestro .emacs:

(setq completion-ignore-extensions
(cons «.ps» completion-ignored-extensions))

Recordad que emacs es autodocumentado, lo cuál lo hace muy potente y sin necesidad de depender de tutoriales o manuales externos, entre los que se incluye este mismo blog, aunque recordar que este blog tiene la finalidad de aprender desde 0 de forma rápida las tareas más habituales para alguien que se quiera iniciar en emacs y en español.


« Página anteriorPágina siguiente »