Asciinema: Захватить оригинальные цвета терминала

Созданный на 8 авг. 2012  ·  25Комментарии  ·  Источник: asciinema/asciinema

вы можете получить цвета с помощью некоторых кодов консоли .. я написал пример здесь https://github.com/oblique/configs/blob/master/.zsh.d/get_term_rgb_color.py
screen, tmux и виртуальная консоль не поддерживают эту операцию.

feature request help wanted

Самый полезный комментарий

@timofonic, пожалуйста, никогда больше не упоминайте буквально всех, кто был в контакте с репозиторием. Я здесь даже не соавтор, и у меня не было бы для вас «новостей».

Кстати, если бы у кого-то были «новости» по этому поводу - или по двум другим проблемам, о которых вы упомянули меня и многих других - это было бы размещено здесь либо в виде комментария, либо в виде запроса на перенос, закрывающего эту проблему. Если вы не видите ничего, имеющего отношение к проблеме, предположите, что для вас «нет новостей».

Все 25 Комментарий

также некоторые программы могут изменять там цвета, например cmatrixreloaded
это пример того, как они это делают https://github.com/oblique/configs/blob/master/.zshrc#L160
на самом деле вижу мои функции ncmpcpp () и wicd-curses ()

Я пробовал ваш сценарий, но получаю следующую ошибку:

~ % 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)

скрипт работает на python3.

для python2 измените строку на:
os.write (fd, "\ 033] 4;% d;? \ 033 \"% int (x))

Некоторое время я думал о чём-то вроде этого. Спасибо за это.
К сожалению, это работает только под (u) rxvt и xterm. На gnome-terminal, screen, tmux этого нет. Так что толку от этого не будет. Если есть другой (или дополнительный) способ получить эту информацию, я буду счастлив использовать его.
Или, может быть, есть способ получить только информацию «мы находимся под терминалом light fg / dark bg или под темным fg / light bg».

Я не разбирался в этом ... но, может быть, что-то отсюда ? (изначально формируют этот ответ stackoverflow )

Он работает в gnome-terminal, но не в консоле.
Я постараюсь найти любой другой способ.

Я обнаружил, что с помощью tmux вы можете пересылать коды консоли на терминал, и я изменил свой скрипт https://github.com/oblique/configs/blob/master/.zsh.d/get_term_rgb_color.py
С экраном у меня не получилось.
Если у вас есть какие либо вопросы, пожалуйста спрашивайте.

Извините, я забыл внести свои изменения в функции ncmpcpp () и wicd-curses (), теперь он обновлен.

Я только что проверил его под urxvt, xterm, gnome-terminal и tmux. Только под gnome-terminal не работает.
Как вы думаете, может ли это работать и на каком-нибудь терминале OSX, таком как Terminal.app или ITerm2?

На данный момент я немного реорганизую регистратор (здесь: https://github.com/sickill/ascii.io-cli/tree/split). Когда я закончу рефакторинг, я попробую использовать код, который вы здесь предоставили.

Спасибо!

Я не знаю о Terminal.app или ITerm2, если они поддерживают изменение цвета, это будет работать ..

Я также нашел это для справки: https://github.com/dranjan/termcolors
Не уверен, что это дает нам что-то большее, чем код @oblique .

Похоже, что https://github.com/dranjan/termcolors зависит от select.poll , который, похоже, не работает в OSX.

Поцарапайте это, я был неправ. @ sigmavirus24 выяснил, что возникла проблема с передачей инструментом -1 * 2 в качестве значения тайм-аута вместо -1. Требуется дополнительное расследование ... но это может сработать.

Также обратите внимание, что когда я пробовал это на OSX + iTerm2, он на самом деле не улавливал термины цвета должным образом. Таким образом, даже с этим фиксированным, он все еще не самый оптимальный, поскольку базовый API C, который использует termcolors ( select / select.poll ), не так гибок, как другие варианты * nix, которые будут принимать любые отрицательные ценить.

Я работал над этим с @ sigmavirus24 и придумал следующее: https://gist.github.com/joshuarh/7904813. Следующее еще необходимо сделать / проверить:

  1. Отправить информацию о цвете на сервер
  2. Удалить цвета по умолчанию? или использовать их как запасной вариант?
  3. Убедитесь, что цвета фона / переднего плана правильные. Здесь мы используем «магические числа», но я думаю, что они постоянны, по крайней мере, для цветовых схем xresources / xdefaults.
  4. Убедитесь, что веб-плеер может обрабатывать то, что записано.

    • Я думал, что читал, что плеер, который использует сайт, совместим с vt100 или что-то в этом роде. Так можем ли мы отправить ему escape-коды, и он будет «просто работать»? Или нам нужно сначала преобразовать цвета в шестнадцатеричный? Если последнее, то у нас есть над чем поработать. Я знаю, что некоторые цвета выложены прямо там с информацией rgb, так что это несложно проанализировать, но мой на urxvt выглядит так: '\x1b[30m' , поэтому я не уверен, как преобразовать это во что-то, что мы можно использовать в Интернете.

  5. Протестируйте его в различных терминалах. Я знаю, что некоторые другие решения не работали на различных терминалах (на основе VTE, Terminal.app, iTerm, rxvt и т. Д.), Поэтому мы должны убедиться, что это работает, прежде чем его интенсивно использовать.

Получить цветовую схему терминала непросто. Вместо этого, можем ли мы позволить пользователю указывать свою цветовую схему в файле JSON? Если реализация будет достаточно общей, будет легко переключиться на любую новую технику для захвата цветов терминала, которые мы обнаружим позже.

Это кажется непростым, но я не уверен, что это невыполнимо. Я думаю, мы можем записать escape-коды, нам просто нужно преобразовать их обратно в цвета xterm.

OTOH, если мы позволим пользователям указывать, какие цвета они хотят, это приведет к появлению интересных возможных функций и ошибок. Мы могли бы позволить людям выбирать, какую схему они хотят видеть при просмотре, но в зависимости от записанных цветов переднего плана это могло быть проблемой (например, вот тема по умолчанию с солнечными цветами переднего плана в резервном режиме: https: // asciinema .org / a / 2214).

На самом деле я имел в виду, что загрузчик должен указывать цветовую схему. В остальном я не знаю и не могу судить.

@losingkeys мы уже записываем коды цвета

@losingkeys Разрешить пользователю указывать свою цветовую схему (скажем, в формате .Xresources) - это легко, и я подумываю сделать именно это. Поэтому, если вы используете солнечную или какую-то другую тему терминала, которая полностью меняет значение каждого цвета, это будет решением для неправильных цветов.

@mrabault идеальным решением было бы использовать регистратор для обнаружения и загрузки схемы терминала, да. Но мы не нашли (пока!) Достаточно хорошего решения, которое бы работало с большинством эмуляторов терминала в разных ОС.

Достигнут ли прогресс в этом отношении, например, на ветке на ходу?
Можно ли запросить цвета xrdb ? Это может автоматически подобрать настраиваемую тему (например, соляризованную).

@blueyed пока нет прогресса.

Запрос xrdb имеет смысл только для xterm / rxvt / other-terminal-using-x-resources. Люди используют термины, основанные на libvte (Gnome Terminal, XFCE Terminal, Terminator, ...), а также терминалы, отличные от Linux (iTerm, Terminal.app в OS X).

@blueyed btw , вы можете изменить тему для своих asciicast, либо для всей учетной записи (на странице настроек вашей учетной записи), либо для asciicast (на странице редактирования asciicast). Например, это ваш asciicast в солнечной темноте: https://asciinema.org/a/13855?theme=solarized-dark

Это было бы убийственной функцией!

Мы обсуждаем версию 2 формата asciicast в # 196, и я думаю, что добавление необязательного объекта colors в метаданные, содержащего текст переднего плана / цвет фона и палитру для всех 8 (16) цветов, было бы неплохим. добавление. Как сказал @mrabault , мы можем использовать и обновлять метод получения цветов, пока представление палитры в JSON остается таким же / совместимым с веб-плеером.

Что касается самой техники, то эта проблема очень старая, и связанных решений, похоже, больше нет. Мне нужно было что-то, что работает на всех платформах, и я не решался остановиться на не 100% рабочем решении. Теперь я думаю, что лучше просто поддерживать то, что мы можем сейчас, рассматривать палитру colors как необязательную и возвращаться к теме игрока по умолчанию, если она не в JSON (по любой причине).

Кто-нибудь, кто работает над Python 3.3+?

@timofonic, пожалуйста, никогда больше не упоминайте буквально всех, кто был в контакте с репозиторием. Я здесь даже не соавтор, и у меня не было бы для вас «новостей».

Кстати, если бы у кого-то были «новости» по этому поводу - или по двум другим проблемам, о которых вы упомянули меня и многих других - это было бы размещено здесь либо в виде комментария, либо в виде запроса на перенос, закрывающего эту проблему. Если вы не видите ничего, имеющего отношение к проблеме, предположите, что для вас «нет новостей».

@timofonic умереть в аду

Была ли эта страница полезной?
0 / 5 - 0 рейтинги