|
G A C E T A D E L I N U X
...haciendo a Linux un poco más divertido! |
|
El Ultimo Editor
Por Stephen Bint Traducción al español por Fernando Frias
|
Como puede ser que los usuarios de Windows sean consentidos para elegir un excelente editor de textos, mientras que ninguno decente existe para la consola Linux? Linux es un mejor OS, apoyado por los mejores programadores quienes estan dedicados a producir mejores herramientas para beneficiarse los unos de los otros. El editor de texto es es la herramienta mas importante y frecuentemente usada por el programador. Aun los editors de la consola Linux son rudimentarios. Como puede ser esto?
Aquellos de nosotros que migramos desde windows a Linux esperamos, por lo menos, un editor de textos, para permitir seleccion de texto con el raton y para tener menus sensibles al raton y dialogos. De todos los editores solo mcedit, el editor construido dentro del navegador de disco del Midnight Commander, tiene esas caracteristicas. El resto no tienen dialogos ni tampoco interface para el raton o si la tienen es muy limitada y estupida.
Incluso mcedit tiene una imperfeccion fatal. Si hay algo acerca de su comportamiento que no te guste, o una funcion que le falte que te gustaria agregar, encontraras que hacer ingenieria inversa al codigo fuente para resolver el problema es mas dificil que hacer tu propio editor de textos desde cero. Desafortunadamente mcedit es bantante basico, realmente necesita que se le añada funcionalidad y no hay una forma sencilla de agregarsela.
Cual es el punto de que Open Source sea abierto, si es tan complicado y pobremente documentado hasta ser inpenetrable para cualquiera pero el autor?
Enfrentemoslo, Todos somos iguales. Nos gusta escribir codigo y odiamos escribir documentacion. Escribir algoritmos listos es divertido pero explicar como funcionan a los novatos es aburrido. Aun si alguien fuera a tomar el problema para escribir un editor con mantenimiento en mente y construir una simple forma para agregar functiones C++ a los menus, podria ser el ultimo editor jamas escrito. Nadie se molestaria en escribir un editor de textos si uno existe, cuyo comportamiento fue facil de cambirar y para el cual cualquier funcion podria ser agregada.
El fundamentalismo Stallmanista podria decir en este punto, emacs es extensible. Asi es, Pero necesitas aprender un segundo lenguaje para extenderlo . Ademas que, el editor basico tiene una cruda y confusa interface de usuario la cual no puede ser mejorada agregando modulos lisp.
Algunos de nosotros que aspiramos a usar Linux somos gente ordinaria, no genios del software. Es cruel e inecesario decirle a alguien que primero debe de luchar para aprender un primer lenguaje, y que debe simultaneamente aprender un segundo lenguaje para hacer que su editor funcione de la forma que quiere.
Nunca se hara. Emacs no es una herramienta. Es una prueba de inteligencia. es hora de que la gente estupida luche en contra los elitistas que son tan inteligentes, a ellos les parece divertido aprender Emacs. Nota que no tienes que aprender como usar mcedit. El hace lo que tu esperas asi que no hay nada que aprender .
El Ultimo Editor seria lo que Emacs debio de haber sido: un editor extensible con una interface raton-y-menu intuitiva. [Nota del editor: emacs nacio antes de que los menus-de-raton fueran inventados.] En lugar de complicar la pelicula con un segundo lenguaje, las extensiones serian escritas en C++. Vendria con una guia del programador, explicando como instalar tu propio menu de comandos y tambien describiendo la anatomia del codigo fuente de esa forma tu puedes facilmente encontrar el modulo en el que estas despues si tu quieres cambiar algo acera de su comportamiento basico. seria un kit del editor hagalo usted mismo.
Si el ultimo editor existiera, esto es lo que me gustaria. Tu lo descargarias, construirias y encontrarias que tiene una funcionalidad basica de mcedit. tendria seleccion con el raton, menus sensitivos al raton y una caja de dialago para brir archivos que te permite navegar el disco haciendo doble click en el directorio.
Tendria varias funciones: File Open, File Save, File Save As, Exit, Cut, Copy, Paste, Delete y Help. En un principio no habria funcion de busqueda, pero el archivo README explicaria que el codigo fuente para la funcion de busqueda esta incluido y daria instrucciones simples de como agregarlo. Las lineas a ser agregadas al codigo ya estarian ahi ,pero comentarizadas, para hacer facil agregar la funcion de busqueda.
Para agregar la funcion de busqueda tendrias que:
1. Mover el archivo fuente al directorio src del editor
2. Declarar la funcion al principio de main.cc como esto:
int show_search_dlg();
3. Agregar una linea a main() (actualmente comentarizada) como esto:
ed.add_menu_cmd( show_search_dlg, "Search", "Edit", F2_key, SHIFT_PRESSED );
...La cual instala un comando etiquetado como "Search" sobre el menu "Edit", el cual puede ser activado pulsando directamente Shift-F2.
4. En el archivo Makefile, agregar (descomentarizar) una regla de compilacion para el codigo fuente de file y agregar su nombre a la lista de objetos a ser enlazados.
5. Correr Make y ver que la funcion de busqueda este en el menu.
Habiendo seguido este procedimiento, jamas un completo novato sabria como escribir su propio menu de funciones. El editor seria una variable global, (objeto C++) accesible en cualquier codigo fuente que el usuario escriba, a travez de sus archivos de cabecera. Sus funciones miembro reportaran el estado de todas sus variables internas, como lo son la posicion del cursor y area seleccionadas. El arreglo de texto que contiene el archivo que esta siendo editado seria accesible como miembro variable, de mod que el archivo puede ser examinado y modificado dentro de la funcion del usuario.
Usualmente, la logica de colorizacion es impuesta sobre los usuarios. Algunos editores ofrecen un dialogo para cambiar los colores y agregar palabras reservadas, pero la logica es dictada por el autor.
El ultimo editor ofrecera una sencilla forma de que los usuarios escriban sus propias rutinas de colorizacion. Ademas de permitir a la gente de colorizar raros y excentricos lenguajes, esta caracteristica abriria el potencial oculto de la colorizacion.
Piensa en muchas formas que podiras elegir para colorizar codigo y un auxiliar para ingenieria inversa podria ser. Dependiendo de tus propositos, tu quiza querias colorizar identificadores de acruerdo al archivo de cabecera en donde esten declarados, o si son automaticos o alojados, o usar colores para indicar su ambito. quiza elijas tener varios esquemas de color instalados y cambiar entre ellos con teclas calientes.
Para hacer la colorizacion simple, el Ultimo Editor guardara sus archivos en arreglos de archivos que contiene dos arreglos de cadenas - una para el texto y otra para el color. El primer arreglo guardara tamaños de las cadenas en esos arreglos sincronizados de esa forma, para cada caracter guardado en el arreglo de texto, siempre hay un byte representando su color en las mismas coordenadas en el arreglo de colores.
El editor siempre dibujara sobre el array del color cuando se refresque, asi toda la programacion se tiene que hacer para colorear un caracter en ciertas coordenadas, es cambiar el color en el array de colores para esas mismas coordenadas y refrescar la pantalla.
Desde el punto de vista del usuario, las cajas de dialogo aparecen para ser una pequeña parte del editor de texto. Desde la perspectiva del programador, es de la otra forma . Los campos editables que aparecen en los dialogos son ventanas de edicion totalmente funcionales con un par de caracteristicas deshabilitadas. Entonces para escribir el Ultimo Editor es escribir la Ultimate Libreria de Widgets.
Una bien escrita libreria de widgets con buena documentacion es mas que una accessorio para un editor extensible. Si los usuarios llegan a familiarizarse con la libreria para mejorar el editor, pueden usarla para producir dialogos de configuracon que auxilian a los no experts para configurar otro software, haciendo preguntas simples y escribiendo sus propositos en un archivo config.
Linuxconf es una herramienta muy importante de configuracion, pero esta desteñida como un lenguaje muerto porque es dificil de usar. Debido a que es dificil de usar es dificil tener entusiastas para mejorarla. Usuarios y programadores difieren en lugar de dirigirse a otros, programas de configuracion de distribuciones especificas. Si linuxconf fue reescrito para mostrar dialogos sensitivos al raton que se comportan como dialogos apropiados (como los dialogos X-windows ), quiza maduren para incluir modulos para habilitar pistas para novatos para configurar cualquier paquete popular.
No estas de acuerdo, que el principal obstaculo para la popularidad de Linux, es esoterismo? quiero decir, nadie se molesta en escribir software para principiantes porque solo los expertos del software jamas usan Linux. El crecimiento de Linux esta siendo impedido por un elitista Catch-22. Si los programas idiotas-amigables no fueran importantes para ls popularidad de un SO, tendria Microsoft que tanto dinero y tiempo para ellos?
Reescribir linuxconf con una simple pero moderna libreria widget seria el primer paso para ser lo que seria - un proyecto que nunca termina. Deberia de estar en constante crecimiento en tantos mas modulos fueran agregados, hasta llegar a ser la tienda de una parada a travez de la cual todo el software Linux seria configurado por niños.
Quiero que este reto sea abierto para quien sepa C++. Debido a que enfrentar el raton, teclado y texto en color en pantalla bajo Linux es una pesadilla del bajo nivel, he producido una libreria de interface la cual lo hace mas simple bajo Linux como lo es en DOS. Recomiendo esta sobre Slang para el proposito de escribir un editor por varias razones.
Primero, el codigo Slang (incluyendo documentos y programas de ejemplo) comprimido ocupa 740k, en tanto el codigo de mi libreria comprimido ocupa 42k. Segundo, Slang no reporta movimiento de raton, asi un programa Slang no puede seleccionar arrastrando el raton. Tercero, el sistema de coloreo de Slang es complicado, pero el mio representa la pantalla como un buffer de pares de bytes caracter/color estilo EGA byte .
Escribi mi libreria despues de un intento de usar Slang por mi mismo llegando a la conslusion que las caracteristicas de su plataforma entera generan una inaceptable sobrecarga y toman menos que una completa ventaja del potencial de la consola Linux. Yo no dudo que el autor de Salng es mejor programador que yo, pero he producido una libreria especificamente para servir a los programadores que quieran producier el primer eidtor adecuado para la consola Linux .
La puedes bajar aqui: http://members.lycos.co.uk/ctio/
Y ahora que la interface con la consola es tan simpole bajo Linux como jamas fue en DOS, el obstaculo para los ditores Linux teniendo que las caracteristicas basicas de los editores DOS has sido removidas. Ahora cuqlauiera que sepa C++ puede hacer algo grande. Para producir el editor y la libreria widget he descrito quiza cambie el curso de la historia del software libre, desenrollando una alfombra roja para programadores el nivel entrante.
Estoy constantemente diciendo que no hay nececidad de reinventar la rueda . Un barco puede navegar el atlantico, activado solo por mis señas. Dejame asegurarte, marchare arriba y abajo de las calles tocando una trompeta y proclamando en lo alto de mi voz, "NO HAY NECECIDAD DE REINVENTAR LA RUEDA!" en el dia que alguien produzca una RUEDA REDONDA.
En teoria, cualquier editor de fuente abierta puede ser hackeado y hecho perfecto, pero aun estamos por un editor de consola con raton consciente el cual puede ser hackeado y mejorado por programadores con I.Q.s bajo 170. sin documentacion adecuada, la fuente abierta es un libro cerrado para mortales ordinarios.
Que eres tu, programdor C++? alguien con el poder de construir maquinas abstractas, un inventor que ha trascendido los limites de el mundo material ahogo los sueños de los inventores humanos de cada generacion antes de esta? Los ciudadanos de la bella ciudad de el Software libre raspan junto con ruedas cuadradas y tu podrias resolver sus problemas.
Si estas sentado sobre tu fofo trasero pensando, "Naahh. eso no es para mi", entonces que es para ti? Yo no, yo no tengo hogar. He tenido acceso a una computadora los sificiente para escribir la libreria de interface, pero ahora estoy viviendo en una tienda y la cercania que tengo con una computadora es ocasional el acceso a internet en el centro del dia para un desempleado. Por eso no puedo ser yo . Por que no podrias ser tu?
Quiza sea tu destino ser al autor del Ultimato Editor, el ultimo editor jamas escrito. Tal vez no mas que un mes despues la importancia del software libre ha sido reconocida y el rostro de Stallman es es esculpido en el monte Rushmore, ellos quiza tienen que golpear con dinamita y esculpir el tuyo en lugar de eso.
Slang, por John E. Davis. Slang parece haber eclipsado a curses, como la libreria de interface teclado/raton/texto en color que la mayoria de los programadores recomendarian . Si eres un inteligente muerto, quiza encuentres una forma para usar el subconjunto de Slang concerniente puramente con la interfaz de consola, la cual es parte del codigo de Midnight Commander . Es mas pequeño y permite seleccionar texto en la consola Linux, mientras aun ofrece funcionalidad limitada en terminales de menor capacidad, aun ventanas telnet!
CTIO, por Stephen Bint. Por mucho la mas simple y mejor libreria de interface de consola que he escrito. Solo funciona en la consola Linux y DOS, no en rxvt/xterm tampoco en ventanas telnet (pero ocupa solo 42k). lee acerca de mi combate to write it aqui.
emacs, por Richard Stallman. Una piedra angular en la historia del software libre.
Stephen es un Ingles sin hogar que vive en una tienda en los bosques. Yy come fuera
de cajones y fuma colillas de cigarro en encuentra sobre el camino. Aunque alguna vez trabajo
por corto tiempo cono programador C, el prefiere referirse a el mismo como "amateur entusiasta".