wader / ansisvg

Convert ANSI to SVG
MIT License
89 stars 9 forks source link

Colors are not picked up when content is from clipboard instead of pipe #8

Closed patrislav1 closed 11 months ago

patrislav1 commented 11 months ago

Steps to reproduce:

$ cowsay Hello ANSI | lolcat -f -S 1 > ansi-piped.txt
$ cowsay Hello ANSI | lolcat -f -S 1
$ # Copy output from above via kitty copy_ansi_to_clipboard and save it to ansi-copied.txt
$ cat ansi-piped.txt | ansisvg > ansi-piped.svg 
$ cat ansi-copied.txt | ansisvg > ansi-copied.svg

Expected: ansi-piped/copied.svg should look the same

Observed: ansi-copied.svg misses the coloring and adds some undecoded ESC sequence at the top. ansi-piped.txt ansi-copied.txt ansi-piped ansi-copied

patrislav1 commented 11 months ago

Note that in both cases, also the rear hoof is missing (compared to the terminal output): image

wader commented 11 months ago

Hey try https://github.com/wader/ansisvg/pull/9. But not sure i follow about the missing rear hoof? :) is there some difference between the | | rear hoofs in the screenshots above?

wader commented 11 months ago

Merged #9 and #7 so you can test master now with both fixes

patrislav1 commented 11 months ago

Thank you. The hoof problem appears to be limited to Firefox. Chromium and Safari render it correctly. image

wader commented 11 months ago

Strange, can you try https://raw.githubusercontent.com/wader/ansisvg/master/ansitosvg/testdata/cowsay-osc-colon-color.ansi.svg

Looks like this with firefox 120.0.1 on macos for me

Screenshot 2023-12-05 at 10 09 26

patrislav1 commented 11 months ago

Looks basically the same here image

wader commented 11 months ago

Huh ok so maybe the OSC skipping fixed it? the one that was broken above was that ansi-copied.txt or ansi-piped.txt?

wader commented 11 months ago

Screenshot 2023-12-05 at 10 17 06

wader commented 11 months ago

(ffcat will end up using inkscape png export)

patrislav1 commented 11 months ago

Huh ok so maybe the OSC skipping fixed it? the one that was broken above was that ansi-copied.txt or ansi-piped.txt?

Both were broken on Firefox ;) not sure why the OSC skipping fixed the latter, since it shouldn't contain OSC sequences.

wader commented 11 months ago

Yeap weird, should be unrelated. But what verison of ansisvg was that? some version of #7? feels more likely a newer version of that one fixed it

patrislav1 commented 11 months ago

It was the better-select branch that produced this error. The current master branch doesn't anymore. So we can probably consider it fixed (even though we don't understand it :innocent:)?

wader commented 11 months ago

Mm guess so. That was not with also the old consolidate text patch? that one i could probably have messed so that the last character was missing :)

Anyways so now your kitty keybinding workflow work as intended? also a bit curious what you use ansisvg for? i've mostly used to produce demo screenshots for markdown and for presentations

patrislav1 commented 11 months ago

Mm guess so. That was not with also the old consolidate text patch? that one i could probably have messed so that the last character was missing :)

No it was created with the version that just uses tspan instead of text, so no actual consolidation there. And note it was not just "last character missing", but "last character missing but only on Firefox" :-)

Anyways so now your kitty keybinding workflow work as intended?

Will test later and let u know, thanks.

also a bit curious what you use ansisvg for? i've mostly used to produce demo screenshots for markdown and for presentations

I also intend to use it for markdown documentation. I used HTML copies of console text (earlier, with GNOME terminal, the "copy as HTML" feature - now, with kitty, the ansi-clipboard feature coupled to ansi2html). HTML works great when writing emails, but it is less than optimal for markdown since 1) it clutters the actual markdown document and 2) markdown viewers can just ignore it at their whim (Gitlab for instance shows the monospace but ignores colors etc.) I'd hope that both these issues are fixed with SVG since it's not inline but included as a separate file, and it's supposed to be a standard graphic format that looks the same regardless of viewer (in theory :smile:) As added bonus, I can load the file in inkscape and add captions, markings etc.

wader commented 11 months ago

No it was created with the version that just uses tspan instead of text, so no actual consolidation there. And note it was not just "last character missing", but "last character missing but only on Firefox" :-)

Ok! sorry for being confused, i blame it's early here!

Will test later and let u know, thanks.

👍

I also intend to use it for markdown documentation. I used HTML copies of console text (earlier, with GNOME terminal, the "copy as HTML" feature - now, with kitty, the ansi-clipboard feature coupled to ansi2html). HTML works great when writing emails, but it is less than optimal for markdown since 1) it clutters the actual markdown document and 2) markdown viewers can just ignore it at their whim (Gitlab for instance shows the monospace but ignores colors etc.) I'd hope that both these issues are fixed with SVG since it's not inline but included as a separate file, and it's supposed to be a standard graphic format that looks the same regardless of viewer (in theory 😄) As added bonus, I can load the file in inkscape and add captions, markings etc.

I see. One annoying thing with SVG is that when used as an image in a HTML and markdown you usually can't select text in the SVG :( but i hope it works out for your use case. Let me know if you use it for something that is public! fun to see

Yes after working on ansisvg my illusion of SVG being a graphics format that should look the same everywhere have sadly been a bit shattered a bit :) but now knowing how it actually works it's kind of inevitable that font will be difficult. I guess converting fonts to some simpler svg primitives is probably needed to be even more portable.

BTW will think about and have a look at #4 later this week

wader commented 11 months ago

@patrislav1 had time to test kitty keybinding?

patrislav1 commented 11 months ago

Yes, this works much better now, thank you.

There are still some weird edge cases where colors are not translated properly, but this only affects my zsh powerline prompt and doesn't appear to be related to this issue. So I think this issue can be closed

Screenshot from 2023-12-13 18-02-08 Screenshot from 2023-12-13 18-03-34

patrislav1 commented 11 months ago

Let me know if you use it for something that is public! fun to see

I work at a research institute that does a lot of publishing (code, papers, presentations...) so it's actually quite likely that I'll publish stuff generated by your tool, sooner or later! Will keep you posted

wader commented 11 months ago

Yes, this works much better now, thank you.

👍

There are still some weird edge cases where colors are not translated properly, but this only affects my zsh powerline prompt and doesn't appear to be related to this issue. So I think this issue can be closed

You mean some of the "arrows" looks wrong? strange that some of them are correct but not others. I can try reproduce it, or can you post the ansi input? have a feeling it's something not too tricky to fix.

wader commented 11 months ago

I work at a research institute that does a lot of publishing (code, papers, presentations...) so it's actually quite likely that I'll publish stuff generated by your tool, sooner or later! Will keep you posted

Oh elementary physics? i'm a sucker for reading about particle accelerators so happy to see it's being useful at such places!

patrislav1 commented 11 months ago

I can try reproduce it, or can you post the ansi input?

I’ll gather some data and open a separate issue. I also noted that the filled background position is off, making the arrows look misaligned. Will try to fix the positions when time permits.

wader commented 11 months ago

Managed to produce some ansi output from a powerline shell and fixed some things #16 #17. Try it out and open an issue if there is still something that looks strange.