Я хочу watch
вывод git log --oneline --graph
со всеми цветами и попробованный для адаптации решения от того, Почему мерзавец окрашивает, не появляются при использовании часов?, но это просто представляет (почти) целый вывод в оранжевом:
watch -c
$ watch -c git -c color.diff=always log --graph --oneline
Отметьте, как от первого хеша фиксации на всем печатается в оранжевом. Это - вывод watch from procps-ng 3.3.10
на Ubuntu 16.04.
$ git log --graph --oneline
Вывод с дополнительным -c color.diff=always
то же, cat -A
показывает используемые последовательности цвета ANSI:
$ git -c color.diff=always log --graph --oneline | cat -A
* ^[[33m8ccd905^[[m L
* ^[[33me4ad4f6^[[m E
* ^[[33mf427d2a^[[m U
* ^[[33me8351c8^[[m Z
* ^[[33mf06747c^[[m I
Как я могу добраться watch git log
показать цвета как git log
?
Это было , ошибка в procps-ng
(имя пакета Ubuntu procps
), зафиксировала в версии 3.3.11.
Последняя Ubuntu, LTS (16.04 Гостеприимных) все еще содержит ошибку, тогда как текущие регулярные версии (17.04 Пикантных и 17.10 Ловких) уже поставляют исправленную версию.
Комментарий egmont говорит о том, что watch
не распознает ANSI 39 (сброс только цвета переднего плана). Это ^[[39m
, как указано WJAndrea . Другие ответили, что это ошибка в procps-ng
.
В других командах git, таких как diff
, заметно, что жирный цвет работает, но любой неокрашенный текст, который следует, сохраняет предыдущий цвет, пока не появится новый жирный цвет. Причина в том, что жирные цвета указывают '^ [[1;
## m'.
Итак, мы знаем, где сосредоточиться.
Сначала я сделал быстрое регулярное выражение с sed
, чтобы заменить все цвета на жирный, и работал просто отлично. Для этого требовался только начальный жирный цвет, поскольку вывод некоторых команд git не начинался с цвета, и до первого цветового кода был начальный обычный текст.
Я тестировал во второй половине дня, и этот массивный жирный текст привлек мое внимание.
Я использую i3wm , поэтому я держу некоторые терминалы открытыми рядом. И один яркий и красочный терминал, смотрящий мой журнал мерзавцев, начинал раздражать. До сегодняшнего дня я жил с неокрашенным журналом: c
blockquote>Другая проблема заключается в том, что я жестко прописал жирный светло-серый цвет для замены неокрашенного текста: люди, использующие другие цветовые схемы, могли кричать на меня. [тысяча сто двадцать семь] 1128 Чтобы решить все, я изменил свою первоначальную идею на нечто более простое. Вместо того, чтобы выделять текст жирным шрифтом, мне просто нужно добавить
0
, чтобы сделать цветовой код действительным дляwatch
. Изменились несколько персонажей и вуаля! Цвета выглядят так, как и ожидалось, жирный текст сохраняет свое значение, а окно, висящее вокруг, чувствует себя лучше.
Я проверил производительность с огромной историей коммитов (> 90k коммитов), и есть заметная задержка в несколько миллисекунд, если вы используете флаги
1130 Но этот случай был крайним. И вам не нужно обновление 0,1 с. 3 или 4 выглядит хорошо.--graph
или--date-order
и, возможно, другие, но кажется--oneline
безопасный. Даже запрос на регистрацию только нескольких коммитов приводит к задержке, Git должен обработать всю историю, чтобы сгенерировать график.watch -n #
Мой текущий код следующий:
#!/bin/bash git -c color.ui=always "$@" | sed -r
Я сохранил в
~/bin/git-colored
с разрешением + x и его можно использовать сgit colored <git command>
Решение основного поста:
watch -c 'git colored log --oneline --graph'
Я создал gist с этим файлом, где вы можете увидеть историю кода.
TL; DR
В пакете Ubuntu есть ошибка. Однострочный код выше - это обходной путь для тех, кто не может / не хочет обновлять систему, в основном делая то, что описано в здесь .
s/\033\[([[:digit:]][[:digit:]])m/\033\[0;\\1m/g; s/\033\[m/\033\[0m/g'Я сохранил в
~/bin/git-colored
с разрешением + x и его можно использовать сgit colored <git command>
Решение основного поста:
watch -c 'git colored log --oneline --graph'
Я создал gist с этим файлом, где вы можете увидеть историю кода.
TL; DR
В пакете Ubuntu есть ошибка. Однострочный код выше - это обходной путь для тех, кто не может / не хочет обновлять систему, в основном делая то, что описано в здесь .
Быстрое обходное решение, которое я сделал, если у Вас нет procps-ng 3.3.11: передайте свой вывод мерзавца по каналу через sed "s/\x1b\[m/\x1b\[00m/"
, например, для git status
:
watch -c 'git -c color.ui=always status | sed "s/\x1b\[m/\x1b\[00m/"'
Это заменяет пустые Escape ANSI ([m
, не распознанный watch
) с обнуленными ([00m
, полностью распознанный watch
).