Gemini line editor

2024-06-03 ~roberto_vpt@gemlog.blue

Recentemente ho scritto a proposito di messaggi o commenti inviati via gemini input e ultimamente sulla possibilità di adottare gli stili di testo da IRC.

Servono un potenziamento della capacita del client e una convenzione riconosciuta dal server che comunque deve memorizzare anche il CN dell'utente con la possibilità di gestire una scala di permessi, per esempio:

0:Bloccato, 1:ospite, 2:utente, 3:membro, 4:admin.

Dei permessi scriverò in seguito perché ora non ho un progetto che possa arrivare oltre al certificato client valido.

Per ora vediamo il solo line editor

Partiamo dal presupposto che il server, in base alla convenzione, sappia cosa fare dell'input utente.

Il line editor deve essere capace di introdurre i codici di stile IRC ed il line feed Gemini per l'input multi linea.

Mi serviva un codice tasto per l'introduzione guidata dei ctrls effettivi

Considerando il ^V non adatto perché spesso usato per page down e in fondo si chiama "verbatim", ho cercato ancora.

Tra i codici tasto meno usati ci sono ^B e ^F ed anche da terminale android sono forniti come tasti o sulla tastiera o sulla app terminale.

Quindi nell'editor di linea uso ^B come **bold** inserito direttamente e ^F come comando "format" che accetta un carattere successivo per costruire ed introdurre i codici IRC.

Già che ci sono metto ^X come "kill line" al posto di ^U che diviene _underline_, introdotto nel testo come ^_.

Anche ^I, ^R e ^O sono usabili direttamente nei client IRC e se riesco li uso.

In irssi perfino ^C è usabile direttamente ma lasciamo perdere.

In weechat ^C è il prefisso per gli altri codici.

2024-06-04 AGGIORNAMENTO

Ho scoperto in xchat|hexchat un ulteriore carattere, il ^H con funzione "Hide", che credo sostituisca l'uso comune di mettere BG e FG allo stesso colore.

Inoltre un client monocromatico potrebbe usare una serie di asterischi in modo soddisfacente.

In ultimo il ^O starebbe per Original (default) e quindi, anche per un eventuale inserimento diretto, cambio Normal.

I caratteri riconosciuti dopo ^Format, seguiti dalla relativa traduzione IRC, sono:

C) ^C colore decimale

I) ^] italic

H) ^H hide, BG=FG o visualizza asterischi

S) ^^ strikethrough

M) ^Q monospace

D) ^D colore esadecimale (poco usato, meglio evitare)

I caratteri di formattazione riconosciuti sono:

L) ^J LF, nell'input multi linea Gemini

F) ^L FF un linefeed che forza la lettura per pagine (sarà quasi sempre ignorato)

K) ^K break va a capo nello stile della linea.

_Per evitare ogni problema la lettera è accettata anche in minuscolo e come control._

Parte grafica

Nell'editor i ctrls riconosciuti sono visualizzati come le lettere precedenti in inverse.

Nel render sono tradotti in codici ANSI o nei corrispondenti comandi dell'interfaccia usata.

Per semplicità metto una palette utente di dieci colori solo in input

Il riconoscimento dei colori IRC deve essere completo ma possiamo semplificare l'inserimento dei più usati.

Prevedendo sempre il colore di sfondo si risolvono problemi di visualizzazione.

[0-9]) indice nella palette, composta dai 99 colori IRC, "FG,BG" in decimale a cui si antepone il ^C.

PALETTE IRC

0: 14,14 Secret

1: 04,15 Red

2: 03,15 Green

3: 07,15 Orange

4: 06,15 Purple

5: 01,19 Mark

6: 01,04 Danger

7: 01,07 Warning

8: 04,08 Caution

9: 00,12 Info

COLORI IRC RGB

I primi 16 colori IRC, VGA/XP/ANSI, vanno inseriti come RGB.

Gli altri si potrebbero inserire con il corrispondente indice ANSI ma comunque servono due stringhe, una per FG e una per BG, ed a questo punto è meglio fare una unica tabella RGB.

VGA/XP/ANSI

00 #FFFFFF White

01 #000000 Black

02 #00007F Blue

03 #009300 Green

04 #FF0000 Light Red

05 #7F0000 Brown

06 #9C009C Purple

07 #FC7F00 Orange

08 #FFFF00 Yellow

09 #00FC00 Light Green

10 #009393 Cyan

11 #00FFFF Light Cyan

12 #0000FC Light Blue

13 #FF00FF Magenta

14 #7F7F7F Grey

15 #D2D2D2 Light Grey

Tralascio il resto della tabella.

TBC