Git пейджер менше, але що викликає забарвлення на виході?


18

lessСам по собі не здатний робити виділення синтаксису відповідно до цієї теми .

Однак, git diffдобре показує кольоровий вихід у меншій мірі, його пейджер за замовчуванням. Коли я перенаправляю вихід git diffу файл, жодних кольорових послідовностей не видно.

Чи git diffзнає, куди він надсилається, і форматує висновок відповідно? Як би це зробити?


Я щойно помітив, що git забарвлює diffвихід (наприклад git diff), однак він не знає, як виділити синтаксис взагалі. напр

git show 415fec6:log.tex

не вмикає жоден синтаксис, подібний TeX.


Читаючи gitджерела, я знайшов такі підказки

в diff.h:

int use_color;

Раніше я мав на увазі підсвічування синтаксису , але це було не правильно. Я маю на увазі забарвлення виводу, див

Приклад кольорового виводу


1
Чи є у вас справжнє підсвічування синтаксису, або просто червоний та зелений колір для видалених та доданих ліній?
Paŭlo Ebermann

BTW: щоб отримати git забарвлення менше: git diff --color=always | less -r (або less -Rдля ANSI). BTW: для інших команд, які за замовчуванням git diffне git -p some_git_command
пакутують

Відповіді:


18

Git використовує isatty()для перевірки того, чи є stdout tty: це використовується для того, щоб перевірити, чи повинен бути використаний пейджер ( pager.c ), а також кольори ( color.c ).


чудові терміни, я теж щойно знайшов!
Себастьян

11

Запуск:

git diff --color=always > output

показує кольори втечі.

Чорт , я знайшов його в git«S color.cфайлу:

static int check_auto_color(void)                                           
{                                                                           
  if (color_stdout_is_tty < 0)                                              
    color_stdout_is_tty = isatty(1);                                        
  if (color_stdout_is_tty || (pager_in_use() && pager_use_color)) {         
    char *term = getenv("TERM");                                            
    if (term && strcmp(term, "dumb"))                                       
      return 1;                                                             
  }                                                                         
  return 0;                                                                 
}  

3

lessможе підтримувати колір за допомогою -r --raw-control-charsта-R --RAW-CONTROL-CHARS

Ви можете використовувати пітони, pygmentizeщоб зробити підсвічування та нанести на неї трубу.

Щоб поєднати все це, налаштуйте менш фільтр, як описано на суперпользователе


посилання справді цікава, дякую. Чи знаєте ви, чи gitнасправді використовується пігментізація? Тому що це не вказано як залежність.
Себастьян

btw, коли я запускаю git diffдочірній lessпроцес, жоден варіант не додається (ні -Rані -r). Однак я не знаю, чи git називає це по-особливому, і, отже, аргументи не видно в htop.
Себастьян

gitвиводить кольоровий код втечі, це сам. Це також написано, cтому додавання Python було б величезною залежністю. Це може бути в змозі контролювати lessчерез навколишнє середовище
Метт,

1
можливо через LESSenv var?
Метт

3
Так, у середовище додано LESS = FRX (див. Pager.c ).
ysdx
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.