`watch git log` с правильными цветами

Для более общего решения вы можете использовать apt-cache policy, например :

$ apt-cache policy google-chrome-stable
google-chrome-stable:
  Installed: 36.0.1985.125-1
  Candidate: 36.0.1985.125-1

Это будет работать со всем программным обеспечением, установленным через диспетчер пакетов.

1
задан 22 October 2017 в 19:42

6 ответов

Это была ошибка в procps-ng (имя пакета Ubuntu procps), исправленная в версии 3.3.11.

В последнем Ubuntu LTS (16.04 Xenial) все еще содержится ошибка, тогда как текущие регулярные версии (17.04 Zesty и 17.10 Artful) уже отправили исправленную версию.

3
ответ дан 22 May 2018 в 17:17
  • 1
    Я нашел обходной путь, можно установить цвета с помощью опции --pretty: watch -c 'git log --graph --pretty="%C(yellow bold)%h %C(white)%s%C(nobold)"'. Это напечатает хеш фиксации желтым желтым цветом, а объект фиксации выделен жирным белым, к сожалению, для каждой строки вместо первого - это лучше, чем никакой раскраски. – dessert 23 October 2017 в 14:22
  • 2
    @dessert Я предпочел бы исправить, чем ввести обходное решение: я просто скомпилировал procps из git и место watch под моим ~/bin. – egmont 23 October 2017 в 15:58
  • 3
    О, я не думал о замене watch, это очень хорошая идея. Я только что увидел, что пакет предоставляет кучу довольно элементарных команд, с которыми нужно действительно не обходиться и отказаться от обновления из-за этого - спасибо! – dessert 23 October 2017 в 16:09
  • 4
    Я только что обновил watch и попробовал, но он все еще работает неправильно! git log показывает, что первая строка выделена жирным шрифтом, watch - нет. Это еще одна цветовая последовательность watch не понимает (пока)? – dessert 23 October 2017 в 17:11
  • 5
    Выбранные выше escape-последовательности переключаются на желтый (часто коричневый) (^[[33m), но не полужирный. git часто выполняет разные действия в зависимости от того, является ли его вывод терминалом. Сравните внешний вид watch -c git ... с теми же параметрами git в git ... | cat (это заставляет его стандартный вывод не быть терминалом). Если они делают то же самое, т. Е. Прокладка через cat не приводит к желаемому результату, вы должны осмотреться в конфигурации git. – egmont 23 October 2017 в 21:55

Это была ошибка в procps-ng (имя пакета Ubuntu procps), исправленная в версии 3.3.11.

В последнем Ubuntu LTS (16.04 Xenial) все еще содержится ошибка, тогда как текущие регулярные версии (17.04 Zesty и 17.10 Artful) уже отправили исправленную версию.

3
ответ дан 18 July 2018 в 04:51

Это была ошибка в procps-ng (имя пакета Ubuntu procps), исправленная в версии 3.3.11.

В последнем Ubuntu LTS (16.04 Xenial) все еще содержится ошибка, тогда как текущие регулярные версии (17.04 Zesty и 17.10 Artful) уже отправили исправленную версию.

3
ответ дан 24 July 2018 в 18:10

Комментарий egmont говорит о том, что watch не распознает ANSI 39 (сбросьте только цвет переднего плана). Это ^[[39m, как указано WJAndrea. Другие ответили, что это ошибка в procps-ng.

В других командах git, таких как diff, заметно, что жирные цвета работают, но любой неокрашенный текст, который следует за ним, сохраняет предыдущий цвет, пока появляется новый полужирный цвет. Причина в том, что жирные цвета указывают «^ [[1; ## m».

Итак, мы знали, где сосредоточиться.

Сначала я сделал быстрое регулярное выражение с sed чтобы заменить все цвета на полужирный, и работал отлично. Он просто требовал главного жирного цвета, потому что какой-то вывод git-команд не начинался цветным, а начальный регулярный текст до первого цветового кода.

Я тестировал в этот день, и этот массивный полужирный текст принимался мое внимание.

Я использую i3wm, поэтому я держу несколько терминалов, открытых бок о бок. И один яркий и красочный терминал, наблюдающий за моим git-журналом, начинал раздражать. До сегодняшнего дня я жил с неокрашенным журналом: c

Еще одна проблема заключается в том, что я жестко закодировал полужирный светло-серый цвет, чтобы заменить неокрашенный текст: люди, использующие другие цветовые схемы, могли кричать на меня. [!d10 ]

Чтобы решить все, я изменил свою первоначальную идею на что-то более простое. Вместо смещения текста мне просто нужно добавить 0, чтобы сделать цветовой код действительным для watch. Изменено несколько персонажей и вуаля! Цвета выглядят так, как ожидалось, жирные тексты сохраняют свое значение, и окно, висящее вокруг, чувствует себя лучше.

Я тестировал производительность с огромной историей фиксации (> 90 тыс. Комет), и наблюдается заметная задержка некоторых миллисекунды, если вы используете флаги --graph или --date-order и, возможно, другие, но --oneline кажется безопасным. Даже просить записать только несколько коммитов дает задержку, Git должен обработать всю историю для генерации графика.

Но этот случай был экстремальным. И вам не нужно обновление 0.1s. 3 или 4 выглядит хорошо. watch -n #

Мой текущий код следующий:

#!/bin/bash
git -c color.ui=always "$@" | sed -r $'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'

Я создал файл egmont с этим файлом, где вы можете увидеть историю кода.

TL; DR

В пакете Ubuntu есть ошибка. Однострочный код выше - это обходной путь для тех, кто не может / не хочет обновлять систему, в основном делая то, что здесь.

-1
ответ дан 22 May 2018 в 17:17
  • 1
    «ANSI 39» означает ^[[39m – wjandrea 18 January 2018 в 04:59
  • 2
    О, я вижу .. он сбрасывает только цвет переднего плана. Но в моем регулярном выражении я использую ^[[0m, который сбрасывает все атрибуты. Это, похоже, не проблема, не так ли? – Aryel Góis 18 January 2018 в 06:18

Комментарий egmont говорит о том, что watch не распознает ANSI 39 (сбросьте только цвет переднего плана). Это ^[[39m, как указано WJAndrea. Другие ответили, что это ошибка в procps-ng.

В других командах git, таких как diff, заметно, что жирные цвета работают, но любой неокрашенный текст, который следует за ним, сохраняет предыдущий цвет, пока появляется новый полужирный цвет. Причина в том, что жирные цвета указывают «^ [[1; ## m».

Итак, мы знали, где сосредоточиться.

Сначала я сделал быстрое регулярное выражение с sed чтобы заменить все цвета на полужирный, и работал отлично. Он просто требовал главного жирного цвета, потому что какой-то вывод git-команд не начинался цветным, а начальный регулярный текст до первого цветового кода.

Я тестировал в этот день, и этот массивный полужирный текст принимался мое внимание.

Я использую i3wm, поэтому я держу несколько терминалов, открытых бок о бок. И один яркий и красочный терминал, наблюдающий за моим git-журналом, начинал раздражать. До сегодняшнего дня я жил с неокрашенным журналом: c

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

Чтобы решить все, я изменил свою первоначальную идею на что-то более простое. Вместо смещения текста мне просто нужно добавить 0, чтобы сделать цветовой код действительным для watch. Изменено несколько персонажей и вуаля! Цвета выглядят так, как ожидалось, жирные тексты сохраняют свое значение, и окно, висящее вокруг, чувствует себя лучше.

Я тестировал производительность с огромной историей фиксации (> 90 тыс. Комет), и наблюдается заметная задержка некоторых миллисекунды, если вы используете флаги --graph или --date-order и, возможно, другие, но --oneline кажется безопасным. Даже просить записать только несколько коммитов дает задержку, Git должен обработать всю историю для генерации графика.

Но этот случай был экстремальным. И вам не нужно обновление 0.1s. 3 или 4 выглядит хорошо. watch -n #

Мой текущий код следующий:

#!/bin/bash git -c color.ui=always "$@" | sed -r $'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'

Я создал файл egmont с этим файлом, где вы можете увидеть историю кода.

TL; DR

В пакете Ubuntu есть ошибка. Однострочный код выше - это обходной путь для тех, кто не может / не хочет обновлять систему, в основном делая то, что здесь.

-1
ответ дан 18 July 2018 в 04:51

Комментарий egmont говорит о том, что watch не распознает ANSI 39 (сбросьте только цвет переднего плана). Это ^[[39m, как указано WJAndrea. Другие ответили, что это ошибка в procps-ng.

В других командах git, таких как diff, заметно, что жирные цвета работают, но любой неокрашенный текст, который следует за ним, сохраняет предыдущий цвет, пока появляется новый полужирный цвет. Причина в том, что жирные цвета указывают «^ [[1; ## m».

Итак, мы знали, где сосредоточиться.

Сначала я сделал быстрое регулярное выражение с sed чтобы заменить все цвета на полужирный, и работал отлично. Он просто требовал главного жирного цвета, потому что какой-то вывод git-команд не начинался цветным, а начальный регулярный текст до первого цветового кода.

Я тестировал в этот день, и этот массивный полужирный текст принимался мое внимание.

Я использую i3wm, поэтому я держу несколько терминалов, открытых бок о бок. И один яркий и красочный терминал, наблюдающий за моим git-журналом, начинал раздражать. До сегодняшнего дня я жил с неокрашенным журналом: c

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

Чтобы решить все, я изменил свою первоначальную идею на что-то более простое. Вместо смещения текста мне просто нужно добавить 0, чтобы сделать цветовой код действительным для watch. Изменено несколько персонажей и вуаля! Цвета выглядят так, как ожидалось, жирные тексты сохраняют свое значение, и окно, висящее вокруг, чувствует себя лучше.

Я тестировал производительность с огромной историей фиксации (> 90 тыс. Комет), и наблюдается заметная задержка некоторых миллисекунды, если вы используете флаги --graph или --date-order и, возможно, другие, но --oneline кажется безопасным. Даже просить записать только несколько коммитов дает задержку, Git должен обработать всю историю для генерации графика.

Но этот случай был экстремальным. И вам не нужно обновление 0.1s. 3 или 4 выглядит хорошо. watch -n #

Мой текущий код следующий:

#!/bin/bash git -c color.ui=always "$@" | sed -r $'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'

Я создал файл egmont с этим файлом, где вы можете увидеть историю кода.

TL; DR

В пакете Ubuntu есть ошибка. Однострочный код выше - это обходной путь для тех, кто не может / не хочет обновлять систему, в основном делая то, что здесь.

-1
ответ дан 24 July 2018 в 18:10
  • 1
    «ANSI 39» означает ^[[39m – wjandrea 18 January 2018 в 04:59
  • 2
    О, я вижу .. он сбрасывает только цвет переднего плана. Но в моем регулярном выражении я использую ^[[0m, который сбрасывает все атрибуты. Это, похоже, не проблема, не так ли? – Aryel Góis 18 January 2018 в 06:18

Другие вопросы по тегам:

Похожие вопросы: