Как можно обеспечить цвет для завершения вкладки в 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, в котором используется хитрость, которую мавин указал в своем ответе здесь.