domingo, 30 de noviembre de 2025

¿Cómo uso Ren'Py para crear novelas visuales en Ubuntu?

En su Doctrina Universal, Juan Perón expone sobre continentalismo, ecología y universalismo, a la vez que expone cómo programar novelas visuales en Ren'Py en Ubuntu

(...)

El problema básico de la mayor parte de los Países del Tercer Mundo es la ausencia de una auténtica Justicia Social y de una participación popular en la producción del software. Sin Justicia Social, los países del Tercer Mundo no estarán en condiciones de afrontar las angustiosamente difíciles décadas que se avecinan.

La modificación de las estructuras sociales y productivas del mundo implica que el lucro y el despilfarro no pueden seguir siendo el motor básico de sociedad alguna, y que la Justicia Social debe erigirse en base de todo sistema de cómputo, no sólo para beneficio directo de los hombres sino para aumentar la producción de programas de computadora necesarios para la Liberación.

En otras palabras, necesitamos nuevos modelos de producción, consumo, organización y desarrollo tecnológico, que al mismo tiempo que den prioridad a la satisfacción de las necesidades escenciales del ser humano, su cómputo, y racionen el consumo de recursos naturales disminuyendo al mínimo posible la contaminación ambiental. 

Consecuentemente, las priodidades de producción de bienes y servicios deben ser alterados en mayor y menor grado.

Necesitamos arquitecturas de cómputo nuevas para un hombre mentalmente nuevo en un mundo físicamente nuevo. No se puede construir una nueva sociedad basada en un pleno desarrollo de la personalidad humana aunada al cómputo, en un mundo viciado por la contaminación del ambiente, exhausto por el hambre y la sed, y enloquecido por el ruido y el hacinamiento. Debemos transformar las computadoras-presidios del presente en las compiladoras del software libre del futuro.


Sin duda que la producción de software por nosotros mismos y para nosotros mismos es una necesidad que tiene de divertido lo que tiene de acuciante. Ren'Py (Renobe Python) es un lenguaje de programación muy parecido a Python, especialmente concebido para la creación de novelas visuales. Estas son historias computarizadas con diálogos, imágenes y sonidos. Como tal pueden contar con interactividad por parte del lector, constituyendo en aventuras con múltiples hilos argumentales

Indudablemente que el ambiente Ren'Py resulta lo suficientemente sencillo como para poder lograr nuestros propios relatos con personajes, subhistorias, senderos de aventura, retruécanos y demás, compartirlos con otros y - por qué no - comerciarlos.

Dibujar y escanear/fotografiar personajes es una manera sencilla de comenzar. Existen recursos de música de licencias completamente libres para utilizar. Gracias a todas las herramientas de software libre, recursos audiovisuales liberados, cada uno puede convertirse en un desarrollador amateur de videojuegos. 

Naturalmente, para contar con este lenguaje, primero debemos instalar la última versión estable en nuestro sistema GNU con Linux. Esto puede realizarse gratuita y libremente mediante la descarga del tarball, su descompresión y ejecución del instalador. Para ello abrimos una terminal Linux con Ctrl+Alt+T e ingresamos el siguiente bloque de comandos de organización:

cd /tmp ;
wget https://www.renpy.org/dl/8.5.0/renpy-8.5.0-sdk.tar.bz2 ;
tar xvjf renpy-8.5.0-sdk.tar.bz2 ;
mv
/tmp/renpy-8.5.0-sdk/ ~/.renpy-8.5.0-sdk/ ;
cd ~/.renpy-8.5.0-sdk/

Podremos ejecutarlo creando un lanzador en Aplicaciones / Programación / Lanzador Ren'Py:


 

...o bien ejecutando:

sh /home/$USER/.renpy-8.5.0-sdk/renpy.sh

Cualquiera de estas opciones debería ejecutar el Lanzador Ren'py, un ambiente de programación específico. Este Lanzador de Ren'Py (el "Ren'Py Laucher") nos permitirá crear, gestionar, editar, ejecutar y depurar distintos proyectos de Ren'Py.

Puesto que el lanzador está traducido a varios idiomas, lo primero que habremos de hacer es elegir un idioma. También será posible escoger un idioma haciendo clic en Preferencias en la esquina inferior derecha, y eligiendo Español.

Elegir y lanzar un Proyecto

Primero revisemos qué apariencia tiene la novela visual "The Question". Para reproducirla, en el panel izquierdo seleccionamos "The Question", y después oprimimos el botón Ejecutar Proyecto para reproducir The Question.

Podremos retornar a la demo de Ren'Py de la misma forma, pero eligiendo “Tutorial” en lugar de “The Question”.

Nos proponemos crear un nuevo nuevo proyecto de Ren'Py. Para ello tendremos que programar siguiendo la sintaxis de Ren'Py (la cual recurre mayormente a una sintaxis sencilla con palabras en inglés).

Crea un nuevo proyecto

En el Lanzador de Ren'Py seleccionamos "+Crear un Proyecto Nuevo". Como esta es la  primera vez creando un proyecto, Ren'Py nos pedirá elegir un Directorio de proyectos que normalmente se encontrará dentro del directorio ~/.renpy-8.5.0-sdk/ (donde se almacenarán los nuevos proyectos que vayamos creando). En la parte inferior del Lanzador de Ren'Py podría aparecer el Selector de Directorios; debemos asegurarnos de revisar que esté allí.


Se nos solicitará indicar un nombre de proyecto. Como nuestra novela visual estará en castellano, por ahora podremos ingresar algo como “Mi pregunta”, y apretamos la tecla Intro para confirmar.

Acto seguido el Lanzador Ren'Py nos solicitará la resolución de pantalla del proyecto. 1280×720 píxels es un buen compromiso entre tamaño de juego y calidad de imagen. Para el propósito de este tutorial, escogeremos 1280×720 (ya que coincidirá con el arte gráfico de la novela visual de demostración “The Question”). Por lo que solo presionamos Continuar.


El Lanzador Ren'Py nos pedirá luego optar por un esquema cromático (un color de fondo y de acentos para la interfaz de usuario). En este momento no importa demasiado, cualquiera vendrá bien, y presionamos “Continuar”. 


Llegado este momento, el Lanzador Ren'Py procesará lo escogido, y nos creará una plantilla simple para el juego. Por ahora la plantilla usa arte y texto "genérico", pero funcionará. Además, creará automáticamente los botones típicos de retroceder, cargar y guardar jugadas, etcétera.

Para ejecutar la plantilla de nuestro prototipo de novela visual, presionamos "Lanzar proyecto".

Para empezar a crear nuestra novela visual, haremos una versión traducida al castellano de The Question (puesto que esto facilitará aún más el aprendizaje).

¡Manos a la obra!

Para empezar, desde la parte superior del panel izquierdo del Lanzador Ren'Py seleccionamos “My Question”, y luego desde el panel derecho en el sector Editar Archivo, elegimos el fichero que contiene el guion de la obra: script.rpy.

Si es la primera vez, Ren'Py pedirá indicar un Editor para trabajar - para los creativos novatos recomendamos Editra que viene incorporado, pero también se puede usar cualquier editor de texto que favorezcamos (en mi caso, uso el Pluma que viene con el escritorio Mate). El Lanzador Ren'Py recurrirá el editor elegido, y abrirá el fichero de guion de la obra.

Ahora bien, una vez que se abra el editor, procederemos a borrar todo el contenido de script.rpy: como empezaremos desde cero, no necesitaremos nada del guion anterior. Acto seguido, pegamos el siguiente contenido en script.rpy, y lo guardamos.

label start:
 
    "Silvana" "¡Como va! ¿Qué tal estuvo la clase?"
 
    "Yo" "Buena..."
 
    "No puedo admitir que me entró por un oído y me salió por el otro."
 
    "Yo" "¿Te vas a tu casa ahora? ¿Querés que volvamos juntos?"
 
    "Silvana" "¡Dale!"

Este primer guion de juego sigue la sintaxis de Ren'Py, y como se puede observar, es sumamente simple: carece de imágenes o música, y tan sólo presenta un texto de conversación entre dos personajes (una de las líneas es una narración en off). Aún así, ya podremos ejecutar este guion: retornamos al Lanzador Ren'Py y presionamos “Ejecutar Proyecto”. Ren'Py lo ejecutará, y podremos observar como Ren'py dispone directamente la pantalla inicial con los menús que nos dejan cargar y grabar una partida, así como aquellos para modificar las preferencias del juego. Para ver este parco guión, elegimos el menú Start.

Como vemos, este guion mínimo ya incluye varias declaraciones muy comunes del lenguaje Ren'Py. Las estudiaremos brevemente. La primer línea de código consiste una declaración label, utilizada para etiquetar un lugar en el programa. En este caso, creamos una etiqueta llamada start; esta etiqueta start es especial, pues  determina el lugar desde donde comenzará a ejecutarse los guiones de RenPy cuando alguien oprime Empezar Juego en el menú principal; Ren'Py irá interpretando desde start hacia abajo, en secuencia.

Las demás líneas que agregamos constituyen declaraciones say. Existen dos formas de declaración say:

  • Una forma narración en off o pensamientos del personaje principal: consiste en una cadena (comienza con comillas ", contiene caracteres, y termina con comillas ", toda en una sola línea.
  • Una forma para diálogos: consiste en dos cadenas; la primer cadena indica el nombre de personaje y la segunda cadena es lo que dice tal personaje.
Hemos de tener en cuenta que todas las declaraciones say van sangradas a 4 espacios. Esto se debe a que existe un bloque debajo de la declaración label. En Ren'Py, los bloques necesariamente deben estar sangrados en relación a la declaración previa, y todas las declaraciones de un mismo bloque deben estar sangradas por la misma cantidad de espacios.

En el caso que las cadenas contengan en sí caracteres de comillas ("), estas deben ser escapadas con un caracter de barra invertida (\). Por ejemplo:

    "Silvana" "¿Alguna vez oíste la famosa frase de Perón, \"El problema con las citas sacadas de Internet, es que muchas de ellas son truchas.\"?"

Aunque parezca que nuestra novela visual provista de este guion simple  se presentan sobre un marco negro y no tiene mucho efectismo, resulta un ejemplo que demuestra lo simple que es escribir algo válido usando Ren'Py

Más adelante agregaremos imágenes, pero primero veamos cómo definir los personajes de nuestra historia.

Personajes

Un problema que tiene este primer ejemplo es que se vuelve necesario ingresar repetidamente el nombre de un personaje toda vez que el mismo habla (tal como si fuese un guion de una obra teatral). Naturalmente, hacer esto se voolverá sumamente tedioso, sobre todo si quisiéramos escribir mucho diálogo en nuestra novela. Por suerte es posible también declarar los nombres de personaje al iniciar el guion. Para esto tenemos que definir los personajes por adelantado según la sintaxis de Ren'Py. De esta manera podremos asociar un texto a un nombre abreviado al personaje, y cambiar el color del nombre del personaje, todo al mismo tiempo.

Lo haremos editando nuevamente el guion script.rpy para que ahora quede de esta manera:

define s = Character('Silvana', color="#c8ffc8")
define y = Character('Yo', color="#c8c8ff")
 
label start:
 
    s "¡Como va! ¿Qué tal estuvo la clase?"
 
    y "Buena..."
 
    "No puedo admitir que me entró por un oído y me salió por el otro."
 
    s "¿Te vas a tu casa ahora? ¿Querés que volvamos juntos?"
 
    y "¡Dale!"

De ahora en más, escribir el diálogo entre los dos personajes se volverá más sencillo. La primera y segunda declaración definen al primero y el segundo personaje. Como verán, la primer línea define un personaje con el nombre abreviado de “s”, y su nombre largoSilvana“, con un color de nombre verdoso (los colores se representan con tripletes hexadecimales rojo-verde-azul, al igual que en las páginas web). La segunda línea crea un personaje con el nombre corto ”y“ y el nombre largo ”Yo“. con el color de nombre rojizo. Podrán inventar otros personajes copiando una de las líneas de definición de personaje, y cambiándole su nombre corto, nombre largo y el color.

También modificamos las declaraciones say para hacer uso de los objetos Character en lugar de recurrir a la tediosa cadena de nombre para un personaje.

Ver manual: Defining Character Objects

No sería una novela visual sin que se nos muestren imágenes en la pantalla. Aquí hay otra escena de “The Question”. Esta también incluye declaraciones que muestran imágenes al jugador. Si lo desean probar, pueden reemplazar completamente la sección anterior del guion:

define s = Character('Silvana', color="#c8ffc8")
define y = Character('Yo', color="#c8c8ff")
 
label start:
 
    scene bg meadow
 
    "A poco caminar, alcanzamos el campito justo al lado del barrio donde vivimos."
 
    "Acá es muy lindo todo. El otoño se parece a esos animés coreajaponchinos."
 
    "Cuando éramos chic@s, jugábamos mucho en estos lares, guardo hermosos recuerdos."
 
    y "Ey... Umm..."
 
    show sylvie green smile
 
    "Gira hacia mí y su sonrisa es tan luminosa que siento que mis nervios desaparecen."
 
    "¡Creo que le voy a preguntar...!"
 
    y "Ummm... ¿T-te gustaría..."
 
    y "¿Te gustaría hacer el arte para mi novela visual?"
 
    show sylvie green surprised
 
    "Silencio."

Este segmento de guion introduce dos declaraciones nuevas. La declaración scene de la línea 6 borra todas las imágenes y presenta solamente una imagen de fondo. Las declaraciones show de las líneas 16 y 26 hacen aparecer en pantalla un sprite (una gráfica activable) encima de la imagen de fondo, y modifican este sprite, respectivamente.

En Ren'Py, cada imagen consta de un nombre. El nombre consiste de una etiqueta, y opcionalmente de uno o más atributos. Tanto la etiqueta como los atributos deben empezar con una letra, y sólo pueden contener letras, números y guiones bajos. Por ejemplo:

  • En la declaración scene de la línea 6, la etiqueta es bg y su atributo es meadow. Por convención, las imágenes de fondo usan la etiqueta bg (por "background", o sea "fondo" en inglés).
  • En la primer declaración show en la línea 16, la etiqueta es sylvie, y los atributos son green y smile.
  • En la segunda declaración show de la línea 26, la etiqueta es sylvie y los atributos son green y surprised.

En cada momento dado, sólo puede aparecer una imagen con una etiqueta dada. Si se presenta una segunda imagen del mismo nombre, esta reemplazará a la primera (tal como sucede en la línea 26 del guion).

Ren'Py buscará el fichero de imagen en el subdirectorio de imágenes, que puede localizarse seleccionando “Imagenes” en la sección ”Abrir Directorio“ del Lanzador de Ren'Py. Ren'Py es capaz de usar arte de personajes que se encuentren en formato PNG, WEBP, o AVIF, mientras que el arte del fondo puede estar en formato JPG, JPEG, PNG, WEBP, o AVIF. También existe soporte para archivos SVG, aunque estos se utilizan fundamentalmente para personalizar la interfaz de usuario. Es muy importante el nombre de archivo: puesto que la extensión no se usa, el nombre de archivos se convierte forzadamente a minúsculas, y se emplea el resultado como nombre de la imagen.

Por ejemplo, los siguientes archivos - localizados en el directorio de imágenes - definen las siguientes imágenes:

  "bg meadow.jpg" -> bg meadow
  "sylvie green smile.png" -> sylvie green smile
  "sylvie green surprised.png" -> sylvie green surprised

Puesto que los nombres de archivo están en minúscula, también lo siguiente se mantiene:

  "Sylvie Green Surprised.png" -> sylvie green surprised

Las imágenes también pueden ser colocadas en subdirectorios (subcarpetas) contenidas en el directorio de imágenes. El nombre de directorio resultará ignorado y sólo se usará el nombre de archivo para definir el nombre de imágenes.

Ver manual: Displaying Images

Declaración Hide

Ren'Py también soporta una declaración hide, que oculta una imagen dada. Por ejemplo, agreguemos esto al final del guión script.rpy en el que estamos trabajando, y lo probamos con Ejecutar Proyecto:

label irse:
 
    s "¡Me voy a encargar ahora mismo!"
 
    hide sylvie
 
    "..."
 
    y "¡No era eso a lo que me refería!"

En realidad es bastante raro usar hide. Os será posible usar show cuando un personaje cambia de emociones, mientras que scene se utiliza en los momentos en los cuales todos los personajes se retiran de la escena. Sólo es necesario usar hide cuando un personaje abandona la escena, pero el resto de la escena y los demás personajes tienen que permanecer en ella de la misma manera.

Declaración Image

A veces, es posible que no queramos dejar que Ren'Py defina las imágenes automáticamente por sí mismo. Para esto se usa la declaración image. Debería estar en el nivel superior del fichero (sin sangrado y antes del label start), y puede usarse para mapear un nombre de imagen a un fichero de imagen específico. Por ejemplo

image logo = "renpy logo.png"
image eileen happy = "eileen_happy_blue_dress.png"

La declaración image se ejecuta al tiempo de inicio, antes que label start y del resto del guion del juego con que interactúa el jugador (la declaración image también puede ser utilizada para llevar a cabo tareas mas complejas, pero esto se tratará aparte).

Transiciones

Según se ha venido obrando, las imágenes aparecen y desaparecen de forma instantánea. Puesto que a efectos del relato es importante cambiar la locación y hacer que un personaje entre o salga de escena, Ren'Py soporta lo que se conoce como transiciones, que permiten aplicarse cuando los personajes presentan modificaciones.

Las transiciones modifican lo que se muestra, desde el momento de lo que sucedía al final de la última interacción (diálogo, menú o transición - entre otras declaraciones) hasta la apariencia luego de que se han ejecutado las declaraciones scene, show y hide.

label start:
 
    scene bg meadow
    with fade
 
    "A poco caminar, alcanzamos el campito justo al lado del barrio donde vivimos."
 
    "Acá es muy lindo todo. El otoño se parece a esos animés coreajaponchinos."
 
    "Cuando éramos chic@s, jugábamos mucho en estos lares, guardo hermosos recuerdos."
 
    y "Ey... Umm..."
 
    show sylvie green smile
    with dissolve
 
    "Gira hacia mí y su sonrisa es tan luminosa que siento que mis nervios desaparecen."
 
    "¡Creo que le voy a preguntar...!"
 
    y "Ummm... ¿T-te gustaría..."
 
    y "¿Te gustaría hacer el arte para mi novela visual?"

La declaración with acepta el nombre de la transición a emplear. La más común es dissolve (que precisamente disuelve de una pantalla a la siguiente). Otra transición útil es fade (que desvanece la pantalla a negro, y luego la desvanece a la siguiente pantalla). Si establecemos una transición tras un bloque de múltiples declaraciones scene, show o hide, se aplicará a todas ellas a la vez. Por ejemplo, si programamos un bloque así:

    scene bg meadow
    show sylvie green smile
    with dissolve

...tanto las imágenes ”bg meadow“ y ”sylvie green smile“ se disolverán al mismo tiempo. Para disolver una por vez, se volverá necesario programarlo usando un bloque de dos declaraciones with:

    scene bg meadow
    with dissolve
    show sylvie green smile
    with dissolve

...esto disolverá primero el fondo del prado, para luego discolver la gráfica de Silvana. 

Si quisiéramos mostrar instantáneanente el prado, pero luego presentar la gráfica de Silvana con la transisión disolve más suave, deberíamos programarlo en bloque así:

    scene bg meadow
    with None
    show sylvie smile
    with dissolve

El None se ha utilizado aquí para indicar una transición especial que actualiza la idea de Ren'Py de que era la pantalla anterior (sin mostrarle nada al jugador).

Ver manual: Transitions

Posiciones

Por defecto, las imágenes se presentarán centradas horizontalmente, y con su borde inferior tocando el borde inferior de la pantalla. Esto suele venir bien para fondos y personajes únicos, pero al presentar más de un personaje (para hacer grupos, por ejemplo) probablemente guarde más sentido colocarlos en distintas posiciones en la pantalla. También puede tener sentido reposicionar un personaje según convenga en el relato.

     show sylvie green smile at right

Para hacer este reposicionamiento, agrega una clausula at a la declaración show. La cláusula at recibe una posición, y presenta la imagen en dicha posición. Ren'Py incluye varias posiciones predefinidas: left para el lado izquierdo de la pantalla, right para el lado derecho, center para centrarlo horizontalmente (el valor por defecto) y truecenter para que la centre horizontalmente y verticalmente.

Los creadores puede incluso definir sus propias posiciones, y hacer eventos con movimientos complejos, pero esto cae por fuera de este tutorial rápido

Ver manual: Transforms

La mayoría de los juegos de Ren'Py cuentan con música de fondo. La música se reproduce con la declaración play music seguida por un nombre de archivo que es interpretado como un fichero de audio que debe ejecutarse. Los ficheros de audio se interpretan en relación al directorio de juego. Los ficheros de audio deben encontrarse en formato opus, ogg vorbis, o mp3.

Por ejemplo:

    play music "audio/illurock.ogg"

Al cambiar la música, se puede indicar una cláusula fadeout o fadein, que se usan para desvanecer el volúmen de la antigua música y aumentar el volúmen de la música nueva (que cumple la función de lograr una transición suave de  temas musicales).

    play music "audio/illurock.ogg" fadeout 1.0 fadein 1.0

La declaración queue music se utiliza para reproducir un fichero de audio no bien termine el fichero de audio que está reproduciéndose (de este modo se puede hacer una especie de playlist).

    queue music "audio/next_track.opus"

Si en la escena necesitamos detener la reproducción musical, podremos hacerlo mediante la declaración stop music (capaz también de recibir una cláusula fadeout opcional).

    stop music

Los efectos de sonido (y en el mejor de los casos, los doblajes de voz) pueden reproducirse con la declaración play sound. A diferencia de la música, los efectos de sonido no se reproducen en bucle sinfín.

    play sound "audio/effect.ogg"

Cuando disponemos los archivos de audio en el directorio game/audio, se pueden lusar los nombres sin aclarar la extensión de archivo (al estilo de una variable de Python, que comienza con una letra, y contiene sólo letras, números y guiones bajos). En tal caso, nos será posible reproducir tal fichero sin poner las comillas.

Por ejemplo, si contamos con un archivo de audio game/audio/illurock.ogg, podremos programar:

    play music illurock

Ver manual: Audio

La declaración pause hace que el guión de Ren'Py haga una pausa hasta hacer clic con el mouse.

    pause

Si le indicamos un número, la pausa finalizará automáticamente una vez que transcurra dicho número de segundos.

    pause 3.0

Podremos decretar la finalización del guion de la novela visual mediante la declaración return, sin tener que llamar a nada. Antes de hacer esto, es mejor poner algo en el juego que indique que el juego terminó (tal vez aclarando un número de finalización o un nombre de finalización al usuario).

    ".:. Final Feliz."
 
    return
Esto es todo lo que tenemos que hacer para guionar un relato cinético, que resulten en un juego lineal, sin ningún tipo de opción que seguir en él.

Ahora veremos lo que se necesita para hacer que un juego que presente menúes con opciones para que el usuario opte interactivamente. Estas permitirán trazar diferentes senderos o caminos, si es que queremos permitir seguir distintos desarrollos argumentales arbolados.

La declaración menu te permite presentar una opción al jugador:

    s "Yo te ayudaría, pero ¿qué es una \"novela visual?\""
 
menu:
 
    "Es un videojuego.":
        jump juego
 
    "Es un libro interactivo.":
        jump libro
 
label juego:
 
    y "Es una especie de videojuego, que jugás en Linux"
 
    jump matrimonio
 
label libro:
 
    y "Es como un libro interactivo que leés en una computadora o un celular."
 
    jump matrimonio
 
label matrimonio:
 
    "Y de esta manera, nos volvimos un dúo creador de novelas visuales."

Este ejemplo presenta un menú que puede usarse con Ren'Py. La declaración menu introduce una opción que podemos seleccionar dentro del juego. Requiere un bloque de líneas sangradas, cada una consiste en una cadena seguida por dos puntos (:). Estas serán las opciones que se le presentarán al jugador aparenciendo en un menú.  Como se ve, cada opción del menú necesita a continuación su propio bloque de líneas sangradas (ya que se ejecutan cuando se eligen dicha opción del menú). En este ejemplo, cada una de las dos opciones del menú ejecuta una única declaración jump, encargada de transfir el control a la etiqueta que se ha definido  a través de la declaración label correspondiente. Esto significa que tras el salto jump del guion, se ejecutarán las declaraciones  que siguen a la etiqueta label determinada.


En el ejemplo anterior, una vez que que Silvana exprese su pregunta, al jugador se le presentará un menú que contiene dos opciones. Si el jugador elige “Es un videojuego”, se ejecuta la primer declaración jump, y Ren'Py saltará a la etiqueta juego. Esto provocará que el Punto de Vista del personaje diga “Es una especie de videojuego, que jugás en Linux”, tras lo cual Ren'Py saltará a la etiqueta matrimonio.

De no existir declaración jump al final del bloque asociado a la etiqueta label, Ren'Py continuará a la siguiente declaración. La última declaración jump es técnicamente innecesaria, pero al incluírsela suele clarificar el flujo del juego.

Será posible definir etiquetas label en cualquier archivo de juego que esté en el subdirectorio game/ y termine con extensión .rpy. El nombre de archivo no importa en Ren'Py, solamente importan las etiquetas contenidas en el. De esta manera, podríamos concebir a los archivos .rpy del subdirectorio game/ como si fueran un  archivo .rpy enorme con el código fuente del juego, en el cual se usan los saltos jump para transferir el control de uno a otros. De esta manera, podremos obtener flexibilidad en la forma en la que organizamos un guion de un juego muy largo.

Ver manual: In-Game Menus y Labels & Control Flow

Si bien resulta posible lograr buenos juegos simples usando las declaraciones que os he explicado, lo cierto es que juegos más abrevados requieren una programación más compleja que almacene datos, a fin de poder recabarlos luego. Por ejemplo, puede tener sentido que el juego recuerde una opción escogida por el jugador, volver a una sección común del guion, y actuar más adelante según la opción escogida anteriormente. Esta es una de las razones por la cual Ren'Py cuenta con soporte de Python integrado.

Flags de apoyo usando las declaraciones Default, Python e If

Aprendamos cómo almacenar un valor en un flag (que contendrá información sobre una elección escogida por el jugador a lo largo de la trama). Para inicializar el flag, debemos utilizar la declaración default antes de la etiqueta label start, por ejemplo:

# True si el jugador ha decidido comparar las novelas visuales con un libro.
default libro = False
 
label start:
 
    s "¡Como están! ¿Qué tal estuvo la clase?"

De esta forma, el flag libro comienza inicializado de forma apagada (con al valor especial False, puesto que al igual que el resto de Ren'Py, es importante definirla según estilo Python, recurriendo a la primer letra en mayúscula). Esto significa que está desactivada. Si el jugador escoge la senda libro, podemos poner el flag en True recurriendo una declaración de asignación estilo Python, de la siguiente forma:

label libro:
 
    $ libro = True
 
    y "Es como un libro interactivo que leés en una computadora o un celular."
 
    jump matrimonio

Debemos observar que todas las líneas que inician con el caracter son interpretadas como declaraciones de Python en lugar de declaraciones de Ren'Py. La declaración de asignación de Python que utilizamos aquí asigna un valor a una variable.

Ren'Py soporta otras formas para incluir Python, tales como las declaraciones multilíneas (tuplas) de Python. Ren'Py soporta Python 2.7, aunque es recomendable programar Python capaz de correr en Python 2 y Phyton 3.

Para recabar el valor almacenado en el flag, recurrimos la declaración if:

if libro:
 
    "Nuestro primer juego se basó en las ideas de Silvana, pero luego se me ocurrieron mis propias historias también."

Si la condición es True (verdadera), se ejecuta el bloque del guión. Si no lo es, se la salteará. La declaración if puede recibir una cláusula else opcional, la cual introduce un bloque de guion alternativo que corre si la condición es False (falsa).

if libro:
 
    "Nuestro primer juego se basó en las ideas de Silvana, pero luego se me ocurrieron mis propias historias también."
 
else:
 
    "Silvana ayudó con el guion de nuestro primer videojuego."

Las variables de Python no están necesariamente limitadas a sus valores simples True/False. También podremos utilizar variables para almacenar el nombre del jugador, los puntajes, o cualquier otro propósito que se nos ocurra. Ya que Ren'Py cuenta con la capacidad de emplear todo el lenguaje de programación Python, es posible hacer muchas cosas más.

Un recurso típico es el subgénero “simdate” o “juego de conquistas”, donde las elecciones del jugador suman o restan puntaje de una o varias variables; de acuerdo al puntaje que vas sumando o restando, resulta posible avanzar en determinadas sendas de la historia.

Ver Manual: Python Statements y Conditional Statements

La Pregunta es una versión traducida pero tiene los puntos básicos de este tutorial de Ren'Py.

Si lo anhelan podrán observar el guion completo de La Pregunta aqui, pegarlo en el editor, y lanzarlo.

En la carpeta game del los proyectos creados, se incluirá las siguientes carpetas y ficheros:

script.rpy Este es el archivo pensado para incluir otros guiones que incluyen un escenario. También se pueden agregar o borrar cualquier .rpy.
*.rpyc Estos ficheros son resultados de la compilación de cada fichero .rpy para reducir el tiempo de carga. No es necesario editar estos archivos sin borrar el fichero .rpy correspondiente.
gui.rpy Las variables de la GUI van definidas aquí.
options.rpy Variables Config y Build, una parte de preferencias y una parte de la GUI de definen aquí.
screens.rpy Las pantallas van definidas en este fichero. Esto se debería editar si deseamos personalizar la GUI en un sentido mas avanzado.
audio/ En este subdirectorio van los ficheros de audio.
cache/ En este directorio van los ficheros de caché. No se necesita editarlos.
gui/ Este subdirectorio incluye imágenes usadas en la GUI.
images/ Este subdirectorio incluye los ficheros de imágenes.
tl/ Este subdirectorio incluye archivos de traducción.

Una vez que programamos nuestra novela visual, existen varias cosas que podemos hacer hacer antes de publicarlo:

Revisar el guion

Desde la primer página del Lanzador, elegi “Revisar guion (Lint)”. Esto depurará el juego en busca de potenciales errores. Como algunos de estos errores sólo afectan a usuarios de otras plataformas, es importante entender y usualmente corregir todos estos errores, incluso si no dan problemas en nuestro sistema específico.

Revisar versiones nuevas de Ren'Py

Periódicamente se lanzan nuevas versiones de Ren'Py en base a correcciones de errores y nuevas funcionalidades. Antes de lanzarlas, querrías hacer clic en Actualizar en el lanzador de Ren'py para bajarte la última versión. También es posible descargar nuevas versiones y ver un listado de cambios en https://www.renpy.org/latest.html.

Raramente los cambios a Ren'Py requieren realizar modificaciones al guion ya terminado, pero de existir incompatibilidades, se listarán allí con los cambios sugeridos.

Compilar distribuciones

Desde la primer página del lanzador, podemos elegir "Compilar Distribuciones". Basado en la información indicada en option.rpy, el Lanzador Ren'Py compilará uno o más ficheros de archivaje comprimidos que contendrán el juego que has programado.

Probar el juego compilado

El depurador Lint incorporado no es substituto para las pruebas completas del juego. Es tu responsabilidad comprobar tu novela visual antes de publicarla. Sin duda que los compañeros podrán darte una mano y te ayudarán a testear la beta de tu juego compilado (a menudo otros encuentran problemas que no hemos visto):

Ya no puede producirse un aumento en gran escala de la producción computacional del Tercer Mundo sin un desarrollo paralelo de los centros de datos correspondientes. Este Tutorial apenas cubre lo básico de lo que es capaz de hacer Ren'Py. Para hacerlo fácil y breve, he omitido muchas funcionalidades que soporta Ren'Py y he simplificado la explicación de otras, enfocándolo en un subconjunto de funcionalidades básicas necesarias para emprender una novela visual.

Si te interesa aprender mas, no dudes en hojear el Manual de Ren'Py, ya que por eso cada byte de metadatos que hoy se dejen arrebatar los Países del Tercer Mundo, equivale a un terabyte de software compilado que dejarán de producir mañana.

jueves, 16 de octubre de 2025

¿Cómo cambio la posición de la tecla Ctrl en Ubuntu?

 El 25 de mayo de 1949 Juan Perón publica su Mensaje a la Juventud con motivo de la Fecha Patria. En el mismo expone cómo intercambiar la posición de la tecla Ctrl con BloqMayús en Ubuntu para poder escribir al estilo del editor WordStar y otros

"Jóvenes argentinos:

Reverenciamos hoy a los hombres de Mayo. ¿Qué mejor homenaje para ellos que reunir a los muchachos de la Patria, mostrarles las glorias del pasado, exhibirles la acción febril y tumultuosa de los días presentes y señalarles el provenir para el cual ellos mismos deben prepararse? Prepararse para ser dignos de la Nueva Argentina que no se hace con palabras ni con promesas, sino con trabajo, verdad, estudio, tenacidad y sacrificio.

Para que la Nueva Argentina no sea un sueño vago e impreciso, vamos haciendo que en el ámbito de la República triunfen los que trabajan, los que realizan, los que tienen ansias de perfección y de justicia.

El instrumento fundamental, la Constitución Justicialista, está ahora al servicio de todos los argentinos. Con este instrumento se han abierto todas las puertas y están expeditos todos los caminos. Con este estatuto, los argentinos que quieran estudiar de verdad podrán realizar sus esperanzas, porque en la Constitución Justicialista los Derechos del Trabajo y del Estudio están igualmente amparados, porque en esta Constitución se contiene el principio de la fraternidad humana que Dios predicó y está ahora incorporado a la ley de las leyes argentinas. 

Como ustedes saben esta nueva Constitución Justicialista sale de los corazones del Pueblo, pero sobre todo de mi Olivetti. Y la he mecanografaido al tacto sin problema alguno.

Esto es así porque en un procesador de texto pensado al estilo WordStar podremos operar de forma directa, sin interrumpir el ritmo creativo de mecanografiado. He dicho que el WordStar está concebido para escribir y operar infatigablemente, y al usar la tecla Ctrl resulta ideal para aquellos que aprendieron mecanografiar al tacto sin mirar el teclado: nos posibilitará realizar la gran mayoria de las acciones del procesador de textos sin siquiera levantar las manos de la fila de descanso del teclado.

Es que en la gran mayoría de los editores de texto esto no es tan así. Observarán que - incluso algo tan cotidiano como mover el cursor, u oprimir la tecla Retroceso para corregir un error de tipeo - podrían pedirles que interrumpan su flujo de escritura, apartando la mano derecha de la fila de descanso para alcanzar y presionar otras teclas. Demás está decir que a la hora de redactar la Carta Magna, esto implica interrumpir el flujo de trabajo e introducir elementos de la derecha...

Ustedes no lo conocieron, pero originalmente, la tecla Ctrl ocupaba el lugar preponderante donde los teclados ISO modernos disponen la tecla BloqMayús (CapsLock, o Bloquear Mayúsculas). Si bien actualmente es posible conseguir teclados boutique que disponen de esta distribución respetuosa de los deseos de los tipistas al tacto más acérrimos - como el clásico Happy Hacking Keyboard,y sus clones - nuestro sistema GNU con Linux también permite alterar de manera reversible las teclas de cualquier teclado ISO moderno.


Indudablemente con esto, podremos facilitar el uso de varios procesadores que recurren a esta configuración, por ejemplo el GNU Emacs o el consabido WordStar.

Esta manera Justicialista implica hacer dicha modificación "por software". Para ello vamos a Sistema / Preferencias / Hardware / Teclado y abrimos la ventana Preferencias de teclado.

En la ventana Preferencias de teclado nos dirigimos a la solapa Distribuciones, donde encontraremos la(s) distribución(es) de teclado que tengamos activas para nuestro teclado en nuestro GNU. Estas reflejan la disposición de las teclas del teclado que tengamos conectado, por ejemplo, las distribuciones más comunes en español son "Español (Latinoamereicano)" o "Español (España)".

Al presionar el botón Opciones podremos definir comportamientos alternativos para aquél que viene por defecto en este tipo de teclados. Es decir, la distribución aplica las opciones por defecto de comportamiento, pero podremos modificarlas sus opciones según varios aspectos de funcionamiento, si lo deseamos.

Para intercambiar por software las posiciones de la tecla BloqMayús y Ctrl, buscamos la categoría "Posición de la tecla Ctrl" y tildamos la opción "Intercambiar Ctrl y Bloq Mayús". Al hacerlo notaremos que la opción "Intercambiar Ctrl y Bloq Mayús" tornará en negrita (lo que denota que ha sido alterada con respecto a su funcionamiento por defecto). Para aceptar finalmente el cambio realizado, debemos presionar el botón Cerrar, y se aplicará dicha opción alterna a la distribución de teclado modificada.

También podríamos querer Agregar una distribución de teclado específica para este cambio (lo que nos permitirá "ir y venir" entre una opción y otra, si tal es nuestro deseo). De esta forma, la distribución de teclado elegida quedará indicada en el panel superior. Lamentablemente, al menos en Ubuntu Mate el nombre de las distribuciones modificadas no pueden alterarse, pero si podremos - al menos - conmutar fácilmente entre ellas.

Edición con WordStar

Ya dominado este aspecto, no vendrá mal aprender cómo mecanografiar al estilo WordStar. En particular, os he enseñado ya cómo instalar un sucedáneo del editor de texto WordStar en Ubuntu, fundamentalmente a base del modo jstar  del querido JOE. Con este Joe Own's Editor, podremos adentrarnos en el arte de la escritura al tacto al estilo Wordstar.

Han de saber que en particular, edito empleando la tipografía Iosevka Term SS08 Medium , e imprimo borradores de trabajo con Courier Prime (ciertamente más respetable que la delgada Courier New). Recuerden siempre que pueden en Jstar pueden presentar una ayuda con Ctrl+j, la cual será útil si son principiantes con el mismo. 

Vean muchachos, los movimientos de navegación básica en WordStar - replicados a conciencia por Jstar - se efectúan utilizando lo que se conoce como el “diamante WordStar”. Este comprende las siguientes teclas del teclado alfanumérico:

Tecla del Diamante Dirección del Navegación
E Arriba
S Izquierda
D Derecha
X Abajo

Si prestamos atención a este “diamante” de teclas, veremos que su posición nos revela las direcciones de movimiento de forma certera. Tal es así, que para mover el cursor una posición, sólo necesitamos presionar la tecla Ctrl y combinarla con la letras del “diamante de WordStar” correspondiente a la dirección del movimiento deseado.

Podemos apelar a la siguiente dactilografía:

Dedo de la mano izquierda Tecla Dedo mano izquierda Tecla Dirección
Meñique Ctrl Medio EArriba
Meñique Ctrl Anular SIzquierda
Meñique Ctrl Medio DDerecha
Meñique Ctrl Anular XAbajo

Naturalmente, si han personalizado su tecla de Control, os será posible realizar movimientos alcanzando la tecla BloqMayús con el dedo meñique izquierdo totalmente relajado, y sin necesidad de apartar lso dedos de la posición de descanso (puesto que BloqMayús debería funcionar como tecla Ctrl izquierda),

Movimientos expandidos

A menudo nos será más útil desplazar el cursor a través del documento de forma más solícita: avanzando o retrocediendo entre palabras completas. WordStar destina a tal efecto dos teclas de desplazamiento expandido: las teclas A y F (las que se encuentran a ambos lados de las teclas de movimiento a izquierda S y movimiento a derecha D del rombo de WordStar, respectivamente).

Podremos avanzar y retroceder entre las palabras recurriendo entonces a la siguiente dactilografía:

Dedo de la mano izquierdaTeclaDedo de la mano izquierdaTecla Movimiento
Meñique Ctrl Anular A Principio de la palabra anterior
Meñique Ctrl Índice F Final de la palabra siguiente

Lo que has aprendido te permitirá desplazar el cursor por toda la pantalla usando tan solo los dedos de la mano izquierda, sin mover las manos de la fila de descanso de escritura. 

Movimientos Veloces - La Tecla Q

Una vez dominados los desplazamientos pequeños de cursor, notaremos sin embargo que podríamos querer acelerarlos, Oara eklo introduciremos una tecla adicional en WordStar, apodada Rápida (“Quick”): la tecla Q).

Para dar saltos acelerados con el cursor en la pantalla su opera en dos tiempos: primero mantenemos presionada la tecla Control y simultáneamente presionamos Q. A continuación, indicamos una de las cuatro teclas del “rombo WordStar” según la dirección del salto deseado.

Por ejemplo, la abreviación ^QS saltará rápidamente todo a la izquierda hasta el inicio de línea. Significa Ctrl+q,s (o sea mantener presionadas las teclas Ctrl+q, soltar ambas teclas y presionar a continuación la tecla s para saltar hacia la izquierda hasta el inicio de línea).

De esta forma, podremos movernos rápidamente en todas direcciones de la pantalla recurriendo a la siguiente dactilografía:

Dedo de la mano izquierda Tecla Dedo mano izquierda Tecla Dedo de la mano izquierda Tecla Resultado
Meñique Ctrl Anular Qmedio E Esquina superior izquierda de la pantalla
Meñique Ctrl Anular QAnular S Inicio de la línea actual
Meñique Ctrl Anular QMedio D Fin de la línea actual
Meñique Ctrl Anular QMedio X Esquina inferior derecha de la pantalla

Ahora podremos desplazar el cursor lo máximo posible a izquierda o derecha en la línea actual, o hacia las esquinas de la pantalla actual, abreviando las movidas  del cursor.

Moverse por el documento

Conforme nuestro documento sobrepase la extensión de una pantalla, los movimientos verticales de WordStar dejarán de estar limitados a la misma también. Ya que el teclado alfanumérico carece de teclas por encima o debajo de las teclas de desplazamiento E y X, WordStar recurre a combinaciones de teclas que se encuentran más a la derecha que aquellas: ^R para Retroceder Página y ^C para Avanzar Página. En esencia, su uso es similar a las teclas RePág y AvPág de los teclados modernos.

Podremos paginar en tu documento entonces haciendo caso a la siguiente dactilografía:

Dedo de mano izquierdaTeclaDedo de la mano izquierdaMovimiento
MeñiqueCtrl Índice R Retroceder página
MeñiqueCtrl Medio C Avanzar página

Si sumamos la tecla rápida de WordStar, podremos saltar rápidamente con el cursor al inicio del documento, o al final del documento con esta dactilografía:

Dedo de la mano izquierda Tecla Dedo mano izquierda Tecla Dedo de la mano izquierda Tecla Resultado
Meñique Ctrl anular QÍndice R Inicio del Documento
Meñique Ctrl anular QMedio C Fin del documento

Combinando todos estos comandos permite mover el cursor a lo largo del texto que conforma el documento tan solo usando tu mano izquierda, al tacto.

Comandos de desplazamiento de pantalla

Además de desplazar el cursor, las últimas versiones de WordStar cuentan con la opción de desplazar la pantalla a lo largo del documento escrito,  línea a línea hacia arriba o hacia abajo a lo largo del texto escrito visualizado (mientras se mantiene fija la posición del cursor en un lugar).

Desplaza la posición de la ventana de un documento larga recurriendo a la siguiente dactilografía:

Dedo de la mano izquierdaTeclaDedo de la mano izquierdaDesplazamiento de pantalla
Meñique Ctrl Anular WHacia arriba
Meñique Ctrl Anular ZHacia abajo

Desplazar la ventana del documento funciona de la misma manera que la rueda de scroll del ratón en un escritorio gráfico.

Comandos básicos de edición

Ahora que ya podemos desplazarnos por todo el documento tan solo recurriendo a la mano izquierda, podríamos querer alterarlo.

Eliminar texto

Los comandos de eliminación de WordStar resultan alternativas a las teclas Retroceso y Supr dedicadas. Sin embargo, podemos utilizarlas incluso en teclados de terminal que carecen de aquellas.

Las teclas de eliminación básicas de WordStar, las encontraremos inmediatamente a la derecha de las teclas de movimiento del cursor aprendidas.

AtajoEquivalenteResultado
Ctrl+g tecla Supr Elimina el caracter a la derecha del cursor
Ctrl+h tecla Retroceso Elimina el caracter a la izquierda del cursor
Ctrl+t - Borra palabra de/a la derecha del cursor
Ctrl+y - Elimina toda la línea
Ctrl+q,y - Borra desde el cursor al final de la línea

Naturalmente que al borrar caracteres a la derecha del cursor, y esto arrastrará el resto del texto de la línea hacia él. Si bien los comandos básicos de borrado Ctrl+g y Ctrl+h normalmente se utilizan con las teclas dedicadas, al usar los comandos estilo WordStar podremos dejar los dedos posados en la posición de descanso del teclado.

También encontraremos comandos extendidos. Nos referiremos inclusive a los comandos Eliminar palabra, Eliminar línea y Eliminar hasta el final de línea. Estos comandos de borrado avanzado adicionales son muy útiles, si bien se encuentran ya por fuera de la fila de descanso. Presionando Ctrl+t podremos borrar la palabra inmediatamente a la derecha del cursor (o, si este se encuentra dentro de una palabra, borrará el resto de la palabra a la derecha). mientras que Ctrl+y elimina toda la línea. El último comando al respecto le suma la tecla rápida y borra hasta el final de la línea actual: Ctrl+g,y.

Finalmente podremos recurrir a la función deshacer con Ctrl+u y a la función de reformatear el párrafo con Ctrl+b

Marcadores

Jstar sólo ofrece un grupo de comandos de bloque de WordStar: el comando Marcador de Bloque (“Marcador”). Este comando permite colocar un marcador temporal en el texto para retornar a él más tarde. Asimismo permite marcar la posición, modificar otra parte del documento y luego volver al punto de partida.

Para colocar un marcador, presiona Ctrl+k más un número entre 1 y 3 (podrás colocar tres marcadores distintos). Estos denotas los comandos de bloque.

Finalmente, tengan en cuenta los atajos de ficheros que salen en la ayuda: Ctrl+k, d para guardar los cambios, Ctrl+k,x para guardar y salir, y Ctrl+k,q para salir de Jstar sin guardar los cambios, .

Muchachas y muchachos: ahora sí el porvenir es de ustedes. ¡Estudien! ¡Trabajen! ¡La Nueva Argentina es de los jóvenes!

Para ustedes mi saludo cordial, mi simpatía, mi afecto, todo mi apoyo y todo mi cariño.

sábado, 20 de septiembre de 2025

¿Cómo instalo el editor ne en Ubuntu?

El 7 de octubre de 1949 y ante intelectuales americanos becados por la Comisión Nacional de Cultura, Juan Perón expone cómo instalar y usar nice editor en Ubuntu

Estimados señores,

Es el nuestro un pueblo sencillo, de trabajadores, en el que aún se conserva el sentido de la amistad y la confraternidad. Nuestro país es un país que no difiere en general de la mayor parte de los países americanos. La diferencia podrá estar en alguna orientación circunstancial, pero pierde - precisamente por ser circunstancial - su valor permanente, y los países deben mirarse en sus valores permanentes, del pasado y en la realidad que nos dan los valores permanentes del presente.

El nuestro es un país que conquistó su independencia hace poco mas de un siglo, y que - con la iniciación de sus actividades económicas - comenzó a convertirse en una colonia. En consecuencia, con el andar del tiempo y a medida que fuimos marchando, fuimos hipotecando nuestra independencia económica. Y llegamos a donde llegamos, a la época en que la actividad del gobierno del país se reducía simplemente a realizar algunas elecciones con candidatos muchas veces impuestos, ayudados o sobornados por "entourages", siempre foráneos. Aquí se acostumbró siempre a que bolsas extranjeras dieran banquetes para agasajar al Presidente, dos o tres meses antes de realizarse la elección. Y no es una cosa nueva, porque la conocen todos los argentinos...

En ese panorama encuadro a mi país como un pequeño sector, pero aspiro que - al ocupar ese sector -  la República Argentina sea manejada por los argentinos, sea en lo económico, en lo social, en lo político, en lo cultural o en cualquiera de los aspectos de la nacionalidad. Yo no soy de los que creen que debe de entregarse una pequeña parte de la soberanía del país.

Nuestra Revolución ha buscado asegurar  - en lo que a la reforma social respecta -el bienestar de los trabajadores. Este bienestar ha contribuido a fomentar el sentimiento patriótico de la población. 

Nosotros encarnamos una nueva doctrina - que algunos llaman de la  Tercera Posición y otros de la tercera fuerza - pero que también dicen algunos pocos que es fascista o comunista. A mí no me asustan el fascismo ni el comunismo, ni ninguna de esas cosas como palabra. Yo ya he superado ese momento en que uno se siente ofendido o asustado cuando le aplican un mote de esa naturaleza. Nuestra concepción está muy lejos de esas doctrinas. Nuestra concepción es profundamente popular y democrática

La Justicia Social es el único antídoto posible contra las doctrinas extremistas, ante la necesidad de dar al pobre un lugar bajo el sol: que pueda vivir, comer, tener su familia y educar sus hijos; que tenga un mínimo de felicidad, sin el cual la vida no merece ser vivida. En lo único que no puede haber limitaciones de ninguna índole es en la libertad, porque cuando se opone alguna limitación, desaparece, pues la libertad es integral e indivisible en los actos de la Nación y en los actos de los hombres; es lógico, claro está, que debe estar siempre condicionada a la convivencia, tanto en el orden internacional como individual.

Es por eso que nosotros, señores, hemos reaccionado porque - indudablemente - hay una sola manera de ser libres: gozar de todas las libertades del software. Se lo debe poder copiar - claro - pero también modificar y redistribuir nuestras copias modificadas, si así lo deseamos. Y para ello, el código en C bien comentado, es una muestra de buena vecindad.

Veamos por ejemplo uno de mis editores de texto favoritos, como ejemplo. El ne o Nice Editor fue escrito en C en 1988 en la Universidad de Milán por Sebastiano Vigna, y cuenta con contribuciones de Todd Lewis y Daniele Filaretti. Se distribuye bajo GPLv3. Se trata de un editor de texto minimalista multiplataforma inspirado en el legendario TurboText de la Commodore Amiga. Como tal, está dotado con resaltado de sintaxis, y orientado a principiantes y usuarios intermedios, pero poderoso y completamente configurable para el experto. 

Para instalarlo simplemente abrimos una terminal con Ctrl+Alt+t e ingresamos:

sudo apt-get install ne 

Tras ingresar nuestra contraseña, se descargará e instalará el paquete. Si bien la manera más sencilla de iniciar ne es indicarle un fichero a abrir de esta manera:

ne fichero.txt 

...también es posible entubar el resultado de un comando de shell.

ne es un editor de pantalla, lo que significa que podremos operar con texto directamente en él.

El uso básico es sumamente sencillo: el teclado alfanuméricos inserta el texto el texto en la parte central del editor, conocida como pantalla principal (a lo largo de la cual podremos movernos con las flechas del cursor). También podemos usar la tecla Supr y Retroceso para realizar correcciones de texto. Con la tecla Ins podemos conmutar el modo de inserción/sobreescritura. Las teclas de Función deberían funcionar adecuadamente. Podremos guardar el fichero con Ctrl+s, abrir un fichero con Ctrl+o, o bien salir de ne con Alt+q.

Sin embargo, presionando la tecla Escape podremos activar el menú desplegable del editor (que ocupa la línea superior de la pantalla). Este nos permitirá conocer las capacidades de ne y activarlas. Podremos desplazarnos a lo largo del mismo con las flechas del cursor y activar las opciones con la tecla Intro. Al final de varios ítems del menú encontraremos atajos como ^A o <f1>. Estos representan los atajos de dichos ítems. Por ejemplo, en lugar de activar, seleccionar y ejecutar un ítem de menú - que puede llevar segundos - podremos lograrlo simplemente presionando el par de teclas indicado (fiel al estilo UNIX, el sufijo del carat ^ antecediendo un carácter representa la tecla Ctrl, mientras que el signo [ representa la tecla Alt). Podremos cerrar el menú desplegable presionando Escape nuevamente

En tanto, en la línea inferior de la pantalla de ne encontraremos normalmente la barra de status. Esta contiene cifras y caracteres que informan el estado interno de ne. Al iniciar, la misma guardará la siguiente forma:
      L:       1 C:       1  12% ia----pvu-t------@A* <unnamed>
En la medida que editamos un documento, las cifras indicadas por L: y C: corresponderán  al número de línea y columna donde se encuentra el cursor, respectivamente, mientras que el porcentaje indicado revelará aproximadamente su posición con respecto al documento. Las letras minúsculas de la barra de status representan los flags de ajustes del usuario (conmutables). En particular, i indica si está activado el modo de inserción/sobreescritura, mientras que p indica que el sistema de preferencias automáticas está activado. El * significa que el documento no ha sido salvado en disco aún. Una w podría indicar que está activo el modo de ajuste de línea (“wordwrap”).

Podremos guardar las preferencias predeterminadas del editor desde el menú Pref/Save Def Pref, que guardará las opciones en el fichero de configuración ~/.ne/.default#ap.

Una de las funciones interesantes de ne son las macros, que son muy simples. Estos nos permiten solventar acciones repetitivas de edición. Para grabar una acción de macro, presionamos Ctrl+t, luego hacemos la acción deseada, y detenemos la grabación de la macro presionando nuevamente Ctrl+t, Para reproducir una sola vez la acción podemos presionar F9, y si queremos reptetir muchas veces la macro, podremos usar el comando Macro/Play many... en el menú desplegable. Para detener una reproducción de macros, presionamos Ctrl+\.

Otras de las características menos conocidas, es la capacidad de operar en terminales remotas con muy poca velocidad, gracias a su particular manera de gestionar la pantalla y opciones (modo Turbo, FastGUI). De esta manera, podremos operar incluso a través de Telnet en enlaces seriales de muy bajos baudios, con un buen editor de pantalla.

Comandos de ne

Los atajos ante los que responde ne por defecto son bastante convencionales: 

AtajoAcción de Fichero
Ctrl+d Nuevo fichero
Ctrl+o Abrir fichero
Ctrl+s Guarda fichero
Ctrl+q Cerrar fichero
Alt+q Salir de ed
Alt+x Guardar y salir de ed
AtajoAcción de Edición
Alt+w Activa ajuste de línea (“wordwrap”)
Ctrl+b Marcar inicio de bloque
Ctrl+c Copiar
Ctrl+x Cortar
Ctrl+v Pegar
F5/Alt+u Deshacer
F6/Alt+r Rehacer
Alt+p Justifica párrafo
Ctrl+@ Marcar bloque vertical
Ctrl+w Pegar bloque vertical
Alt+y Borrar hasta final de línea
Ctrl+y Borrar línea entera
Ctrl+u Deshacer borrado de línea
Alt+o Abrir portapapeles
Alt+s Guardar portapapeles
Ctrl+f Buscar
Ctrl+r Buscar y reemplazar
Ctrl+j Ir a línea
Alt+j Ir a columna
Alt+k Pone marcador
Alt+g Ir a marcador
AtajoAcción de Movimiento
Alt+a Principio del fichero
Alt+e Final del fichero
F7 Palabra previa
F8 Palabra siguiente

ne cuenta con un completísimo manual en línea (en inglés). Para acceder a él, podremos ingresar el comando info ne.