🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.os.linux.programacion
Article #7517

Re: Entornos de desarrollo

#7517
From: Pascal Bourguignon
Date: Fri, 21 Feb 2003 21:20
72 lines
3692 bytes
EnigmaaASI <bagpipeQUITAESTO@ono.com> writes:

> Wenas. Tengo que hacer un programa en C y otro en Java que demuestre
> el funcionamiento de un programa tipo vim o emacs, pero no se por
> donde empezar. Alguno de vosotros seria tan amable de darme alguna
> idea para el comienzo de este?.


Necesitas escribir un editor de texto. 
�Porqu� no lees las fuentes de uno de ellos?
    
    - hemlock (un emacs escrito enteramente en Common-Lisp),
    - emacs (escrito parte en C parte en Lisp),
    - vim,
o quizas, para empezar, seria m�s simple estudiar las fuentes de:
    - pico,
    - nano,
    - ed.

Nota  que los  editores tipo  emacs son  en efecto  una  biblioteca de
funciones  para manipular  texto,  con solo  un  interfaz que  permite
invocar estas  funciones con presi�n  de una sequencia de  teclas. Asi
que puedes  empezar por esto,  y poner el  interfaz luego.  Y  como la
mayoria  (o  todas en  el  caso de  Hemlock)  de  estas funciones  son
escritas  en Lisp,  el usuario  puede  cambiar las  y personalisar  su
editor facilmente.


Primero, tienes que decidir como guardas el texto en memoria.  Hay dos
grandes maneras  de considerar el  texto: como una unica  sequencia de
letras, o  como una sequencia de  l�neas. (Antiguamente, o  en case de
querer hacer un  editor de "graficos" ASCII, se  puede tanbien guardar
el texto como una tabla de letras de dos dimensiones).

Una vez que tienes decidido las estructuras de datos, hay que escribir
funciones para manipular los:
    
    - insertar una letra,
    - quitar una letra,
    - insertar una nueva l�nea,
    - suprimir una l�nea,
    - hacer sustituciones,
    - seleccionar una region,
    - quitar una region,
    - monstrar l�neas de texto en la pantalla,
    - cargar un archivo texto en memoria,
    - guardar un texto en un archivo,
    - etc.

Finalmente, solamente  falta conectar estas funciones  con el teclado.
Es decir, en  lugar de programar en duro  la correspondencia, si pasas
por una tabla, es m�s facil y m�s configurable:
    
    "a" --> insertar-la-propria-letra
    "b" --> insertar-la-propria-letra
    ...
    "^B" --> buscar-texto
    "^S" --> hacer-una-sustitution
    "^G" --> guardar-archivo
    "^C" --> cargar-archivo
    ...

Una pena  que debes hacer  lo en  C o Java,  porque eso no  permite al
usuario de  personalizar mucho el editor.  O  tiendrias que reescribir
un Lisp en C o Java.  Seria mejor hacer lo en Lisp desde en comienzo.
    

-- 
__Pascal_Bourguignon__                   http://www.informatimago.com/
----------------------------------------------------------------------
There is a fault in reality. Do not adjust your minds. -- Salman Rushdie
Technical Details
Message-ID: <87fzqh1gba.fsf@thalassa.informatimago.com>
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!fu-berlin.de!uni-berlin.de!213.220.35.225!not-for-mail
References: <3E55E7BC.3070908@ono.com>

Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII
X-Google-Thread: f86c8,da91a6602af3de70
X-Google-Attributes: gidf86c8,public
X-Google-ArrivalTime: 2003-02-21 13:20:46 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!fu-berlin.de!uni-berlin.de!213.220.35.225!not-for-mail
From: Pascal Bourguignon <pjb@informatimago.com>
Newsgroups: es.comp.os.linux.programacion
Subject: Re: Entornos de desarrollo
Date: 21 Feb 2003 22:20:41 +0100
Organization: informatimago.com
Lines: 72
Sender: pascal@thalassa.informatimago.com
Message-ID: <87fzqh1gba.fsf@thalassa.informatimago.com>
References: <3E55E7BC.3070908@ono.com>
NNTP-Posting-Host: 213.220.35.225
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
X-Trace: fu-berlin.de 1045862445 53517034 213.220.35.225 (16 [41911])
User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2