💾 Archived View for gemi.dev › gemini-mailing-list › 000289.gmi captured on 2023-11-04 at 12:38:58. Gemini links have been rewritten to link to archived content

View Raw

More Information

➡️ Next capture (2023-12-28)

-=-=-=-=-=-=-

Ansi colour markup - what encoding or mime type

Luke Emmet <luke (a) marmaladefoo.com>

Hello all

My understanding is that you can use special ANSI markup/escape 
characters to indicate colours.

What is the correct mime type or encoding should be used for this?

Some pages in gemini just seem to apply it in the expectation clients 
will expect it or know how to parse it, but it is not part of the Gemini 
spec, and is a terminal thing only. It seems like sending html markup in 
the middle of a text/gemini file and expecting a client will handle it 
correctly.

Should such pages be served with a specific mime type or encoding to 
definitively indicate this?

thanks

  - Luke

Link to individual message.

colecmac@protonmail.com <colecmac (a) protonmail.com>

It's an interesting question. Personally I'd recommend against
using it very much, unless it's just for fun on one page or something.
But I would advise against using it regularly in gemlog posts or something
like that.

As for mimetype and encoding, I think sticking with text/gemini and UTF-8
is good. Above all, just don't expect clients to render it properly. Some
will and some won't.

makeworld

Link to individual message.

Petite Abeille <petite.abeille (a) gmail.com>



> On Jul 10, 2020, at 18:00, Luke Emmet <luke at marmaladefoo.com> wrote:
> 
> Should such pages be served with a specific mime type or encoding to 
definitively indicate this?

My 2?: avoid ANSI escape sequences like the plague. Just say no. Leave it 
to the terminal kamikaze.

Link to individual message.

Petite Abeille <petite.abeille (a) gmail.com>



> On Jul 10, 2020, at 18:03, colecmac at protonmail.com wrote:
> 
> Above all, just don't expect clients to render it properly. Some
> will and some won't.

Furthermore, avoid any terminal based client which merely dump raw ANSI 
escape codes at you. Like in many aspects of life, sanitization it key.

For example:
git: client prints server-sent ANSI escape codes to the terminal, allowing 
for unverified messages to potentially execute arbitrary commands
https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2018-1000021
https://public-inbox.org/git/20180205204312.GB104086 at aiede.svl.corp.google.com/

Link to individual message.

Hannu Hartikainen <hannu.hartikainen+gemini (a) gmail.com>

On Fri, 10 Jul 2020 at 19:00, Luke Emmet <luke at marmaladefoo.com> wrote:
> My understanding is that you can use special ANSI markup/escape
> characters to indicate colours.

You can, in terminals with ANSI support. Some Gemini clients might
even let ANSI sequences through, but they'd be wise to strip them for
text/gemini content.

> What is the correct mime type or encoding should be used for this?

text/x-ansi seems to be used for ANSI art. That's what
gemini://ansi.hrtk.in/ serves.

-Hannu

Link to individual message.

Case Duckworth <acdw (a) acdw.net>

On 2020-07-10 (Friday) at 11:38, Hannu Hartikainen 
<hannu.hartikainen+gemini at gmail.com> wrote:

> You can, in terminals with ANSI support. Some Gemini clients might
> even let ANSI sequences through, but they'd be wise to strip them for
> text/gemini content.

I know that with bollux at least (and I think Castor, at least last time I 
checked, though it's been a while), only the SGR parameters[1] are passed 
through. That's done automatically with less in bollux, but there are 
libraries for other languages that can apply highlighting.

Of course, I agree that ANSI escapes should be used *very* sparingly, if indeed at all.

Link to individual message.

James Tomasino <tomasino (a) lavabit.com>

On 7/10/20 4:42 PM, Case Duckworth wrote:
> Of course, I agree that ANSI escapes should be used *very* sparingly, if indeed at all.

You can also do like astrobotany and offer a "fancy" version and a regular 
one. Konpieto used to offer a "spicy" version with ansi color. I like that 
approach as it doesn't get in the way but it can be fun for those who can see the colors.

Link to individual message.

Brian Evans <b__m__e (a) mailfence.com>

My 2 cents:

Colors are really fun for those in terminal clients that support them, 
but seem to be a pain to build out for graphical clients. So expect 
failure. I really loved Konpeito's color banner and really like occasional
touches of color. However, full pages of colors tend to get weird.
Subtle is the way to go to provide a splash of fun.

My client, Bombadillo, has 'normal' and 'color' modes. In normal 
mode all escape sequences are stripped from text/gemini output. 
In color mode escape sequences dealing with color and text style 
(but not placement) are rendered as the escape sequence so that
the effect can be seen.

I advise client authors to strip escape sequences if they do not wish
to deal with color output or terminals potentially getting really
donked.

Link to individual message.

Luke Emmet <luke (a) marmaladefoo.com>


On 10-Jul-2020 17:38, Hannu Hartikainen wrote:
>> What is the correct mime type or encoding should be used for this?
> text/x-ansi seems to be used for ANSI art. That's what
> gemini://ansi.hrtk.in/ serves.

Thanks for all your replies

My reading of the situation now is as follows:

ANSI escape sequences should not be interpreted within text/gemini 
content (after all when would it stop - there could be embedded html or 
other markup that clients will become expected to interpret). Similarly 
they should not be stripped out - since how would one know they were 
there, and should be intepreted rather than just presented. |On a Gemini 
page I might say something like: "Is this the correct code to make all 
text black: \033[30m ?" But I dont want to make the rest of my page 
black by doing so

In terms of where these sequences may be interpreted or stripped out 
there seem to be 3 candidates:

1. content served as text/x-ansi - e.g. for ANSI art

2. content in a preformatted range with the label indicating it as 
text/x-ansi - we dont have a semantics or convention for this yet, but 
it would be nice, like this maybe:

 ```art;content-type=text/x-ansi

3. content served as some hybrid gemini format like text/gemini+x-ansi

I guess the general points of non-extensibility come up - would this 
become a de-facto expectation for clients to implement? Could there be 
other formats like text/gemini+html?

Best Wishes

  - Luke
|

Link to individual message.

Hannu Hartikainen <hannu.hartikainen+gemini (a) gmail.com>

On Sun, 12 Jul 2020 at 11:50, Luke Emmet <luke at marmaladefoo.com> wrote:
> ANSI escape sequences should not be interpreted within text/gemini
> content (after all when would it stop - there could be embedded html or
> other markup that clients will become expected to interpret). Similarly
> they should not be stripped out - since how would one know they were
> there, and should be intepreted rather than just presented.

IMHO if a client is outputting to an ANSI terminal, the client author
should consider what will happen with ANSI sequences. It is reasonable
to strip or escape all of them, or a subset of them, or decide to let
them through. Consider that a terminal UI is itself built with ANSI
escapes and rendering them within the page could break the UI (or
worse, emulate the UI!). Moreover, you'd need to fully parse the
sequences and emulate terminal state to implement a sandboxed version
of ANSI sequences (unless you limit to a subset, say, SGR). I learned
that when trying to render 80-column ANSI art on wider terminals
(ansi.hrtk.in does that but background colors leak).

Similarly, if I was writing a Gemini-over-HTML proxy I'd certainly
escape all HTML tags and entities. First, it makes sense to show the
content to the user instead of interpreting it as control sequences.
Second, I've learned on the web that rendering any user-supplied
content without sanitizing will result in a disaster.

Gemini is still small and friendly, but when designing software it's
smart to account for bad actors.

-Hannu

PS. I just added yet another ANSI streaming server,
gemini://asciinema.hrtk.in/ for playing back asciinema.org recordings.
Probably only useful as a tech demo or a client test.

Link to individual message.

---

Previous Thread: Debugging TLS connections with Wireshark?

Next Thread: [ANN] Gemini Wiki