Asciinema: Capture cores terminais originais

Criado em 8 ago. 2012  ·  25Comentários  ·  Fonte: asciinema/asciinema

você pode obter as cores com alguns códigos de console .. escrevi um exemplo aqui https://github.com/oblique/configs/blob/master/.zsh.d/get_term_rgb_color.py
screen, tmux e console virtual não suportam esta operação.

feature request help wanted

Comentários muito úteis

@timofonic por favor, nunca mais mencione literalmente todos que estiveram em contato com um repositório. Eu nem mesmo sou um contribuidor aqui e não teria nenhuma "notícia" para você.

Como um aparte, se alguém tivesse "notícias" sobre este - ou os outros 2 problemas que você mencionou e muitos outros - teria sido postado aqui como um comentário ou uma solicitação de pull que fecha este problema. Se você não vir nada relevante para o problema, suponha que "não há notícias" para você.

Todos 25 comentários

também alguns programas podem alterar suas cores, por exemplo cmatrixreloaded
este é um exemplo de como eles fazem isso https://github.com/oblique/configs/blob/master/.zshrc#L160
realmente ver minhas funções ncmpcpp () e wicd-curses ()

Tentei seu script, mas recebo o seguinte erro:

~ % get_term_rgb_color.py 1
Traceback (most recent call last):
  File "/home/kill/bin/get_term_rgb_color.py", line 30, in <module>
    os.write(fd, bytes("\033]4;%d;?\033\\" % int(x), "UTF-8"))
TypeError: str() takes at most 1 argument (2 given)

o script funciona em python3.

para python2, altere a linha para:
os.write (fd, "\ 033] 4;% d;? \ 033 \"% int (x))

Eu estive pensando sobre coisas assim por algum tempo. Obrigado por trazer isso à tona.
Infelizmente, isso funciona apenas em (u) rxvt e xterm. No gnome-terminal, screen, tmux isso não acontece. Portanto, não seria muito útil. Se houver outra maneira (ou adicional) de obter essas informações, ficarei feliz em usá-la.
Ou talvez haja alguma maneira de obter apenas a informação "estamos sob o terminal fg claro / bg escuro ou sob fg escuro / bg claro".

Eu não olhei para isso ... mas talvez algo daqui ? (originalmente forma esta resposta stackoverflow )

Ele funciona no gnome-terminal, mas não no konsole.
Vou tentar encontrar outra maneira.

Descobri que com o tmux você pode encaminhar códigos de console para o terminal e modifiquei meu script https://github.com/oblique/configs/blob/master/.zsh.d/get_term_rgb_color.py
Não consegui fazer com tela.
Se você tem alguma dúvida, por favor, pergunte.

Desculpe, esqueci de enviar minhas alterações nas funções ncmpcpp () e wicd-curses (), agora está atualizado.

Acabei de verificar em urxvt, xterm, gnome-terminal e tmux. Apenas no gnome-terminal não está funcionando.
Você acha que isso também pode funcionar em algum terminal OSX como Terminal.app ou ITerm2?

No momento, estou refatorando um pouco o gravador (aqui: https://github.com/sickill/ascii.io-cli/tree/split). Assim que terminar a refatoração, tentarei usar o código que você forneceu aqui.

Obrigado!

Não sei sobre Terminal.app ou ITerm2, se eles suportam mudança de cor vai funcionar ..

Apenas para referência, também encontrei este: https://github.com/dranjan/termcolors
Não tenho certeza se isso nos dá algo mais do que o código de @oblique .

Parece que https://github.com/dranjan/termcolors depende de select.poll , que não parece funcionar no OSX.

Esqueça isso, eu estava errado. @ sigmavirus24 descobriu que havia um problema com a ferramenta passando -1 * 2 como um valor de tempo limite em vez de apenas -1. Mais investigação necessária ... mas isso pode acabar funcionando.

Observe também que, quando tentei isso no OSX + iTerm2, ele não pegou o termo cores corretamente. Portanto, mesmo com isso corrigido, ainda não é o mais ideal, já que a API C subjacente que o termcolors usa ( select / select.poll ) não é tão flexível quanto os outros sabores * nix que aceitarão qualquer tipo de negativo valor.

Então, trabalhei nisso com @ sigmavirus24 e cheguei a isso: https://gist.github.com/joshuarh/7904813. O seguinte ainda precisa ser feito / verificado:

  1. Envie a informação de cor para o servidor
  2. Remover as cores padrão? ou usá-los como um substituto?
  3. Certifique-se de que as cores de fundo / primeiro plano estão corretas. Estamos usando "números mágicos" aqui, mas acho que eles são constantes, pelo menos para xresources / xdefaults colorschemes.
  4. Certifique-se de que o web player pode controlar o que está gravado.

    • Achei que li que o player que o site usa é compatível com vt100 ou algo parecido. Então, podemos enviar códigos de escape e fazer com que "simplesmente funcione"? Ou precisamos primeiro converter as cores em hexadecimais? Se for o último, então temos algum trabalho a fazer. Eu sei que algumas cores estão dispostas com a informação rgb ali, então não é difícil de analisar, mas as minhas em urxvt são assim: '\x1b[30m' , então não tenho certeza de como converter isso para algo que pode usar na web.

  5. Teste-o em vários terminais. Eu sei que algumas das outras soluções não funcionaram em vários terminais (baseados em VTE, Terminal.app, iTerm, rxvt, etc), então devemos nos certificar de que isso funcione antes de usá-lo pesadamente.

Não parece fácil obter o esquema de cores do terminal. Em vez disso, poderíamos permitir que o usuário especifique seu esquema de cores em um arquivo JSON? Se a implementação for feita genericamente o suficiente, será muito fácil mudar para qualquer nova técnica para capturar as cores do terminal que descobriremos mais tarde.

Não parece fácil, mas não estou convencido de que não seja possível. Acho que podemos gravar os códigos de escape, só precisamos convertê-los de volta para as cores xterm.

OTOH, se permitíssemos aos usuários especificar quais cores eles queriam, isso traz possíveis recursos e bugs interessantes. Poderíamos deixar as pessoas escolherem qual esquema desejam ver durante a navegação, mas dependendo das cores de primeiro plano que foram gravadas, isso pode ser um problema (por exemplo, aqui está o tema padrão com cores de primeiro plano solarizadas no modo fallback: https: // asciinema .org / a / 2214).

O que eu realmente quis dizer é que caberia ao uploader especificar o esquema de cores. Quanto ao resto, não sei e nem estou em condições de julgar.

@losingkeys já ESTAMOS gravando os códigos de cor de escape. O fato é que eles são apenas números únicos, como 1, 2 ou 3. Eles significam vermelho, verde e amarelo. E assim por diante. As pessoas usam esquemas de cores diferentes em seus terminais, mas a maioria dos esquemas é próxima às cores xterm "originais", então parece "ok" na maioria dos casos.

@losingkeys Permitir que o usuário especifique seu esquema de cores (digamos no formato .Xresources) é uma coisa fácil de fazer e estou pensando em fazer exatamente isso. Portanto, se você usar solarizado ou algum outro tema de terminal que altere completamente o significado de cada cor, será uma solução para as cores erradas.

@mrabault a solução ideal seria usar o gravador para detectar e fazer upload do esquema do terminal, sim. Mas não encontramos (ainda!) Uma solução boa o suficiente que funcionasse para a maioria dos emuladores de terminal em diferentes sistemas operacionais.

Houve progresso nesse sentido, por exemplo, no ramal em movimento?
Consultar xrdb para cores seria uma opção? Isso pode pegar um tema personalizado (por exemplo, solarizado) automaticamente.

@blueyed nenhum progresso até agora.

Consultar xrdb só faria sentido para xterm / rxvt / other-terminal-using-x-resources. As pessoas também usam termos baseados em libvte (Terminal Gnome, Terminal XFCE, Terminator, ...) e terminais não Linux (iTerm, Terminal.app no ​​OS X).

@blueyed btw, você pode alterar um tema para seu asciicast, seja em toda a conta (na página de configurações de sua conta) ou por asciicast (na página de edição do asciicast). Por exemplo, este é o seu ascicast no escuro solarizado: https://asciinema.org/a/13855?theme=solarized-dark

Este seria um recurso matador!

Estamos discutindo a versão 2 do formato asciicast em # 196, e eu acho que adicionar colors objeto opcional aos metadados, contendo a cor de primeiro plano / fundo do texto e a paleta para todas as 8 (16) cores seria uma boa Adição. Como disse @mrabault , podemos utilizar e atualizar uma técnica de obtenção das cores, desde que a representação da paleta em JSON permaneça a mesma / compatível com o reprodutor web.

Quanto à técnica real, este problema é muito antigo e as soluções vinculadas parecem ter desaparecido. Eu queria algo que funcionasse em todas as plataformas e estava hesitando em optar por uma solução que não funcionasse 100%. Agora eu acho que é melhor apenas apoiar o que podemos agora, tratar a paleta colors como opcional e retornar ao tema padrão do player quando não estiver em JSON (por qualquer motivo).

Alguém com algo funcionando no Python 3.3+?

@timofonic por favor, nunca mais mencione literalmente todos que estiveram em contato com um repositório. Eu nem mesmo sou um contribuidor aqui e não teria nenhuma "notícia" para você.

Como um aparte, se alguém tivesse "notícias" sobre este - ou os outros 2 problemas que você mencionou e muitos outros - teria sido postado aqui como um comentário ou uma solicitação de pull que fecha este problema. Se você não vir nada relevante para o problema, suponha que "não há notícias" para você.

@timofonic morrer no inferno

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

Bux42 picture Bux42  ·  9Comentários

lukehinds picture lukehinds  ·  5Comentários

redaxmedia picture redaxmedia  ·  3Comentários

yuvalif picture yuvalif  ·  10Comentários

deeplook picture deeplook  ·  10Comentários