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.
- Problema:* _mancano sia ^H che ^I e mi sembra giusto ma non c'è un ^V per inserirli nel testo quindi vengono utilizzati solo per gli eventi testuali come %H e %I._
In ultimo il ^O starebbe per Original (default) e quindi, anche per un eventuale inserimento diretto, cambio Normal.
- Riassumendo* Hexchat ha i comandi diretti: ^B, ^U, ^R, ^K (FG,BG) e ^O.
I caratteri riconosciuti dopo ^Format, seguiti dalla relativa traduzione IRC, sono:
- B*) ^B bold
- U*) ^_ underline
- R*) ^V reverse
- O*) ^O original, azzera tutto
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 primi quattro dovrebbero essere comandi diretti.*
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