Jun 13 2008

Modeline y operaciones con ficheros

Tag: introoverdrive @ 9:30 pm

En este artículo explicaré el significado básico del modeline y las operaciones más básicas con ficheros.

En el modeline podemos ver el estado del buffer (CH) que puede adquirir distintos valores:

  • * * Indica que el buffer ha sido modificado
  • – – Indica que el buffer no ha sido modificado
  • % * El buffer es de sólo lectura y ha sido modificado
  • % % En buffer es de sólo lectura y no ha sido modificado

Para explicar el caso %*, podemos utilizar un ejemplo muy sencillo, abriendo cualquier fichero con C-x C-f, lo modificados (entonces tendremos **) y si luego pulsamos M-x toggle-read-only, el buffer ahora pasará a ser de sólo lectura pero ha sido modificado antes de guardarse por lo tanto tenemos %*. Que no podamos modificar el buffer (introducir nuevos cambios), no quiere decir que no podamos guardar los cambios, si guardamos el fichero con C-x C-s entonces pasaremos a tener %%.

La otra parte que nos interesa comentar es la posición mostrada en el modeline. Que puede ser:

  • Top si se encuentra mostrando el principio del buffer
  • Bot si se encuentra mostrando el final del buffer
  • nn% si se encuentra mostrando un porcentaje concreto del buffer
  • All si esta mostrando todo el buffer

Cambiando de tercio, pero relacionado con lo anterior; las operaciones básicas con ficheros que podemos realizar son las de abrir un fichero pulsando C-x C-f, abrir un fichero como sólo lectura C-x C-r, guardar el fichero mostrado en el buffer actual con C-x C-s, o guardar todos los ficheros pulsando C-x s, así pues también podemos insertar un fichero en la posición actual del cursor del buffer actual usando C-x C-i.

En estos primeros pasos, tendemos a cometer errores, podemos deshacer cambios usando C-x u. O si hemos modificado los permisos de un fichero que era de sólo lectura pero lo habiamos abierto antes, podemos actualizar el buffer asociado al fichero sin necesidad de cerrar y volver a abrir el fichero manteniendo así la posición actual del cursor usando M-x revert-buffer. Por último si todos los cambios que hemos realizado, los hemos guardado previamente siempre podemos usar C-x C-f fichero~ Cx-w fichero . Ya que por defecto emacs guarda una copia del fichero original con su mismo nombre y terminado en ~.

modeline


Jun 06 2008

Vista general de emacs

Tag: introoverdrive @ 3:46 am

En emacs se pueden realizar muchas tareas. Sin embargo debemos dar una vista general sobre lo que se puede hacer, y luego en posts siguientes iré explicando como configurar y usar nuevas funcionalidades interesantes en emacs, de momento, podemos ver un tour general sobre emacs aquí:

http://www.gnu.org/software/emacs/tour/

Como podemos ver en dicha web, desde emacs podemos leer y escribir correos usando gnus, o bien para rss, para ello pulsaremos M-x gnus. El manejo de gnus no es fácil a simple vista, así que como dije antes, iremos dejándolo para siguientes posts.

También tenemos un cliente de irc llamado erc, para invocarlo tan sólo debemos pulsar M-x erc. Desde el cual, accediendo mediante bitlbee podemos conectar a redes como yahoo, msn, etc.

Por otra parte, podemos invocar gdb desde emacs, lo cual es muy útil, tan sólo debemos presionar M-x gdb. Así pues, debemos compilar los programas con el flag -ggdb o bien directamente -g. También podemos invocar a make desde el propio emacs, sin necesidad de salir, para ello pulsaremos M-x compile. Otra utilidad interesante es la de los diffs, emacs permite resaltar las diferencias entre dos ficheros, para ello usaremos M-x ediff.

Si necesitamos un shell dentro de emacs (útil para intercomunicar buffers y de esa manera ser más productivos) podemos presionar M-x shell, el cual invoca a nuestro shell. Tenemos otra alternativa, que es cargar un shell escrito en lisp para emacs, para ello presionaremos M-x eshell. Y por último podemos lanzar una terminal usando M-x term.

Emacs posee una supercalculadora integrada, para cargar dicha calculadora tan sólo debemos pulsar M-x calc. Debemos tener en cuenta que dicha calculadora usa notación polaca inversa (RPN).

En emacs, también tenemos un navegador que soporta imágenes entre otras cosas, para usarlo podemos pulsar las teclas M-x w3m.

También podemos invocar a las páginas man desde emacs usando M-x man, y hacer un grep de cualquier entrada usando M-x grep.

Por otra parte emacs soporta la manipulación y la edición para CVS, subversion u otros controles de versiones, usando las funciones que comiencen por el patrón M-x vc-*.

Y aquí va una para los que dicen que vi es omnipresente y emacs no. Desde emacs usando tramp (Transparent Remote Access, Multiple Protocol). Su uso será explicado luego, pero decir que se invoca de la misma forma que abrimos un fichero añadiendole un último parámetro para indicar que es remoto y que protocolo se usará, C-x C-f e indicando posteriormente el protocolo, usuario, contraseña, ruta y fichero. Además de ello tenemos un emulador de vim en emacs (con hasta 5 niveles distintos, pareciéndose más a emacs o a vim), así que no hay excusa para ir adaptandose poco a poco con emacs si eres usuario de vi! Para ello debes pulsar M-x viper-mode.

Emacs posee algunos juegos, yo no soy muy partidario de que se integre en ello, pero por razones historicas, muchos de ellos son incluidos; por ejemplo M-x hanoi para las torres de hanoi, o M-x tetris para lanzar el tetris.

Emacs tiene modos asociados a cada buffer, existen dos tipos de modos; el modo mayor y el menor (major y minor). Los modos mayores estan pensados para acciones concretas sobre lo que se quiera editar, mientras que los modos menores estan pensados para acciones generales que se puedan adaptar a distintos modos mayores. Entre los modos mayores existen M-x fundamental-mode, M-x text-mode, M-x c-mode, M-x java-mode, M-x perl-mode, M-x python-mode, y así con cualquier lenguaje que podamos imaginarnos. Para modos menores tenemos por ejemplo M-x follow-mode, M-x auto-fill-mode, etc; es decir acciones que se pueden aplicar a distintos modos mayores. Para cada buffer, tendremos asociado siempre un modo mayor, y cero o más modos menores. Existe un hack que permite usar más de un modo mayor de forma simultanea, llamado MMM (Multi Major Mode), que aunque no se encuentra integrado en emacs por defecto (es externo a emacs realmente) siempre se puede agregar y configurar, la web oficial del proyecto es http://mmm-mode.sourceforge.net/

Al lanzar muchas de éstas funcionalidades (por ejemplo gnus) no conocemos muchos de los keystrokes, o simplemente no nos acordamos, recordad que siempre podemos hacer referencia mediante el nombre del comando (el cual suele ser bastante intuitivo) o bien, podemos usar la tecla F10, el cual muestra un menu (parte de el generado de forma dinámica por muchas de estas funcionalidades o modos) y desde el cual podemos realizar la mayor parte de acciones fundamentales.

Por último si queremos consultar las ayudas (siempre con los prefijos C-h) podemos pulsar C-h t para el tutorial. C-h r para el manual, C-h f para la FAQ (Frequently Asked Questions o Preguntas de uso frecuente).

Si estamos comenzando a desvariar con tanto keystroke, podemos consultar al doctor desde emacs pulsando M-x doctor.

En los siguientes articulos iremos modo por modo, y funcionalidad por funcionalidad explicando su funcionamiento y como moverse de forma mínima agusto.


May 28 2008

Supervivencia en emacs

Tag: introoverdrive @ 3:08 am

Cambiar de editor o entorno requiere esfuerzo, mucho esfuerzo, ya que hemos estado acostumbrados a algún otro durante un largo periodo de tiempo.

Antes de ponerse a probar emacs, merece la pena conocer los keystrokes mas típicos, así como conocer algunos comandos que pueden ayudarnos en nuestro aprendizaje sin necesidad de leer un tutorial completo.

En primer lugar debemos saber como entrar y como salir de la aplicación; para entrar tan sólo debemos escribir en el shell: $ emacs

y esto lanzará la interfaz. Si estamos en las x, por defecto abrirá la aplicación con ventanas, si queremos que se ejecute sin ventanas en la terminal tan sólo deberíamos escribir: $ emacs -nw

Podemos modificar nuestro emacs a nuestro gusto incluyendo líneas en el fichero de configuración .emacs, sin embargo si queremos que se ignore dicha configuración y que se ejecute emacs por defecto ejecutariamos: $ emacs -q

Para salir de la aplicación tan sólo debemos pulsar la combinación de teclas: C-x-c

Cuando lanzamos la aplicación emacs necesita un buffer por defecto, llamado *scratch*, el cual podemos usarlo para cualquier cosa. Emacs necesita al menos un buffer, que además no siempre tiene porque estar asociado a un fichero, ya que en algunos casos no tiene sentido asociar un buffer a un fichero (por ejemplo si estás jugando al tetris). Además de ello, podemos ver un par de líneas en la parte inferior del frame (una más oscura que otra), la primera es llamada el modeline, que muestra información (modo en el que se trabaja, si el fichero ha sido modificado, línea actual, hora, etc). Debajo encontramos la otra línea (la más clara) la cual es llamada el mini buffer. El minibuffer es la embajada, es decir, desde donde podemos comunicarnos con emacs enviando comandos desde aquí.

Al fin y al cabo emacs es un interprete lisp escrito en C, y el resto de funcionalidades están escritas en lisp, por esta razón emacs es totalmente configurable en tiempo real; esto significa que podemos en cualquier momento cambiar las combinaciones de teclas por defecto sin necesidad de realizar cambios y tener que recompilar, como ocurre en otros editores lo cuales son de todo menos flexibles en este aspecto. Así que mientras usamos emacs aprenderemos lisp.

Continuando con el mundo de los buffers, si queremos guardar el buffer que no esté asociado a un fichero, o simplemente guardar algo que hemos modificado debemos pulsar (esto guarda varios buffers, no sólo el que se esté mostrando actualmente): C-x-s

Para eliminar dicho buffer usaremos: C-x k. Si lo que queremos es abrir un fichero, o bien crear un fichero utilizaremos C-x-f. Si el fichero existe lo abrirá, sinó lo creará

En emacs las ventanas son llamadas frames, mientras que si tenemos una ventana subdividida en partes, a cada una de dichas partes se le llamará ventana (esto es por razones históricas). Podemos dividir la ventana en dos de forma horizontal pulsando: C-x 2

O podemos dividirla de forma vertical con: C-x 3

Si queremos eliminar dicha ventana (que no implica que el buffer deje de existir) usaremos: C-x 0

Si queremos usar una sola ventana para todo el frame, en vez de que este dividida usaremos: C-x 1

Si queremos equilibrar todas las ventanas entre si usaremos C-x +

Por otra parte tenemos un tutorial que podemos ejecutar pulsando: C-h t

Probablemente 3 de los comandos más importantes sean estos:

  • M-x apropos : que busca comandos siguiendo una cadena como patrón.ejemplo: M-x apropos <CR> replace buscará todos los comandos relacionados o que contengan la cadena ‘replace’.
  • M-x describe-key : presionando una combinación de teclas devuelve el comando asignado;ejemplo: M-x describe-key <CR> C-g Explica que hace la combinación de teclas C-g, que nombre de comando largo tiene y la explicación de lo que hace.Como podemos observar cada comando puede ser ejecutado o bien usando keystrokes o pulsando M-x nombre-del-comando.
  • M-x where-is : en el cual escribes escribes el nombre del comando y devuelve la tecla asociada.ejemplo: M-x where-is <CR> tags-query-replace y devolvería la tecla asociada que por defecto que sería C-h w.

Además debemos tener en cuenta que existen más ‘describes’, quizás algo menos importante que describe-key, pero muy útil para futuros usos:

M-x describe-TAB : nos mostrará las posibles opciones, describe-function, describe-mode, etc.

Es decir que podemos usar el TAB (tabulador) para autocompletar, además podemos usar la combinación de teclas Alt+p para movernos por el historial hacia atrás, y Alt+n para movernos hacia delante. Estos últimos suelen ser muy útiles, debido a que emacs no guarda historiales como otros editores o entornos, sinó que emacs mantiene historiales independientes para cada tipo de acción, ya que no tendria mucho sentido si vuelves a buscar una cadena mirar en un historial general donde quizás hayas usado previamente una búsqueda de un comando. Sin embargo muchos por no decir el resto de entornos aún no tienen la lección aprendida.

Por último C-g lo que hará es cancelar cualquier combinación de teclas ya ‘iniciadas’ es decir, si pulsas por error C-h y querías seguir escribiendo en un buffer siempre puedes hacer C-g.

Por ejemplo C-h C-g, pulsamos el C-h por error, pero al pulsar el C-g nos quedamos como estábamos.

Por último, una vez controladas estas combinaciones de teclas fundamentales, podemos comenzar a usar el resto, lo mejor es imprimirse la quick reference card que trae emacs si se instala desde sources en el directorio ‘etc’ al descomprimir los fuentes de emacs. O bien descargarlo directamente desde aquí:

http://www.blackhats.es/emacs/emacs-refcard.pdf

A partir de este momento, uno ya se puede considerar seguro en emacs, y a partir de aquí uno puede comenzar a sentir la potencia que un entorno como emacs ofrece.

emacs by default


« Página anteriorPágina siguiente »