Recentemente, há um repositório github popular chamado lsix , e está usando gráficos sixel para exibir imagens dentro de um terminal. Atualmente estou usando o rxvt-unicode como meu emulador de terminal, mas parece não funcionar bem com o sixel.
Alguém sabe como fazê-lo suportar sixel?
(Estou usando o Ubuntu 18.04 LTS FYI)
Além de usar o fork rxvt-unicode-sixel , pode ser possível implementar o sixel escrevendo uma extensão perl. A documentação para isso está na página de manual do urxvtperl(3) . Eu não sei muito sobre sixel, mas imagino que seja uma questão de:
interceptando as sequências de escape do sixel, interpretando-as e não deixando-as passar para o interpretador de sequências de escape principal. Você pode substituir a sequência por caracteres de nova linha para deslocar o número correto de linhas para caber na altura da imagem, talvez dimensionado para caber na largura.
desenhando a imagem. Você pode obter o ID de janela correto por meio da API que o urxvt fornece às extensões e usar funções xlib ou xcb regulares para desenhar a imagem, se necessário.
atente para eventos como rolagem para redesenhar a imagem conforme necessário.
Vejo muitas possibilidades aqui que podem ser configuráveis, embora não saiba se existem padrões nas implementações do sixel. Por exemplo, o que acontece com as imagens ao redimensionar um terminal? É recortado? É dimensionado? apenas na criação ou em cada redimensionamento também? o que acontece quando o cursor é movido sobre a imagem e se escreve o suficiente para que o texto seja quebrado? o que acontece com a imagem e o texto embrulhado quando você redimensiona? etc.
Acho que o ideal seria inicialmente desenhá-lo na escala do que há de menor entre a largura do terminal e o tamanho da imagem, e definir isso como o tamanho máximo da imagem. Redimensione a imagem no redimensionamento do terminal, respeitando o tamanho máximo definido. Com relação ao texto desenhado sobre ele, pode ser um pouco complicado manter esse texto sobre a imagem ao redesenhar a imagem...
Desculpe, parece que fiquei um pouco animado e saí do escopo da sua resposta. Meio que gostaria de ter tempo para trabalhar nisso.
EDIT: Para responder ao ceticismo nos comentários sobre a capacidade de trabalhar com pixels de uma extensão urxvt perl, aqui está uma prova de conceito. Ele define um pixel de cor branca na coordenada (10, 10) do canto superior esquerdo:
Para instalar esta extensão, coloque-a em
~/.urxvt/ext/sixel-proof-of-concept
, adicione-a a ~/.Xresources (ou ~/.Xdefaults se você usar isso) adicionando a linhaURxvt.perl-ext-common: sixel-proof-of-concept
, carregue-a fazendoxrdb ~/.Xresources
, e certifique-se de ter oX11::Protocol
módulo perl instalado.