Как можно обеспечить цвет для завершения вкладки в tcsh?

( Перекрестно размещено на unix.stackexchange.com)

Этот вопрос и ответ учат нас, как вводить цвет в подсказки tcsh.

Эта веб-страница хорошо объясняет, как получить цвет в любой выходной echo команда:

> echo \\e[1\;30mBLACK\\e[0m
BLACK
> echo '\e[1;30mBLACK\e[0m'
BLACK

Слово "ЧЕРНЫЙ" в приведенном выше примере напечатано черным (или темно-серым) цветом переднего плана (в зависимости от общей цветовой схемы).

Теперь я хотел бы представить это в [TAB] функция автозаполнения команды tcsh, Я старался:

complete testcmd 'p/*/`echo '"'"'\e[1;30mf834fef\e[0m'"'"'`/'

И я получаю:

> testcmd [TAB]
> testcmd ^[\[1\;30mf834fef^[\[0m

Очевидно, персонажи теряют свое особое значение. Надеюсь, я просто не получил права на побег. Но я попробовал несколько других способов. Так что любая помощь приветствуется.

Реальный вариант использования состоит в том, что у меня есть завершение команды, которое предлагает три различных типа дополнений, и я хотел бы визуально различать типы. Также альтернативы вычисляются внешней командой. Вот почему мне нужно завершение для использования обратных галочек с внешней командой, такой как echo, Меня не волнуют детали этой команды. Если вы заставите его работать каким-либо образом с tcsh "s complete команда, я, вероятно, смогу адаптироваться (думая, perl -pe фантики и тому подобное).

Причина, по которой я считаю, что это должно работать как-то, заключается в том, что сам tcsh предлагает завершение цветной команды, если вы, например, набираете ls [TAB], Это работает правильно в моей настройке. Также вы можете использовать ls -1F внутри автодополнения и цветов, которые ls выходы также передаются по конвейеру. Примером может быть:

complete testcmd 'p/*/`ls -1F`/'

Обновление: как указывает пользователь Mavin, цвет ls в этом примере действительно не передано. Цвета ls будут потеряны, но автоматическое завершение может повторно применить цвета в соответствии с переменной LS_COLOURS на основе подсказок, таких как / а также * маркерные окончания как добавленные ls. Это можно проверить, выполнив

complete testcmd 'p/*/`ls --color -1`/'

который не в состоянии обеспечить цвет, и обеспечивает только искаженный вывод. (Буквально передает через последовательности символов выхода)

Я на tcsh версия 6.13.00

Есть идеи? Указатели?

3 ответа

Решение

В вашем примере complete testcmd 'p/*/ls -1F / ', цвета не проходят через ls, Вы обнаружите, что вы получаете цвет здесь, даже если вы установите ls производить монохромный вывод, но не, если вы выключите -F, То, что происходит, - то, что tcsh делает свою собственную раскраску, основанную на символах, добавленных в конец каждого имени файла ls -F, Например:

complete testcmd 'p%*%`echo dir/ symlink@ device# socket=`%'

Вы можете использовать это в вашем генераторе завершения, например,

complete testcmd 'p/*/`echo foo bar | perl -lane '"'"'print join " ", map { $_. "%" } @F'"'"'`/'

Загвоздка в том, что вы получите эти символы в завершенной командной строке, и вам придется каждый раз вручную возвращаться назад.

tcsh будет окрашивать имена файлов на основе их суффикса, в зависимости от $LS_COLORS переменная окружения (например, показать все *.gz файлы в красном). Вы можете предварительно рассчитать список возможных дополнений, разместить их все в $LS_COLORS, а затем настройте фиктивные файлы для завершения использования. Если вы используете precmd Кроме того, вы можете автоматически пересчитывать завершения каждый раз, когда отображается подсказка.

complete testcmd "p#*#F:$HOME/.cache/testcmd-completions#"
alias prep-testcmd "setenv LS_COLORS '*red=01;31:*green=01;32:' && rm -r ~/.cache/testcmd-completions && mkdir -p ~/.cache/testcmd-completions && touch ~/.cache/testcmd-completions/red ~/.cache/testcmd-completions/green"
alias precmd prep-testcmd

Кроме того: было бы неплохо использовать это с завершением в стиле ``, а не с завершением в стиле F; таким образом, вам не нужно будет создавать фиктивные файлы. Тем не менее, я попробовал это в tcsh 6.17, и это не сработало.

У этого вопроса есть обновленный пример завершения git tcsh, в котором используется хитрость, которую мавин указал в своем ответе здесь.

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