Могу ли я выделить текущую строку приглашения в Zsh?

8

Можно ли выделить (установить цвет фона) всю строку приглашения в zsh? В моем конфиге emacs у меня есть строка, на которой курсор сидит немного другого цвета с фоном окна, что является отличным визуальным помощником. Мне интересно, возможно ли сделать то же самое в моем терминале / zsh, чтобы он эффективно "рисовал линию" под всем, что было запущено.

Я попытался установить PROMPT='%{$bg[grey]%}# 'в моем, .zshrcно подсветка распространяется только на то, что я печатаю, а не на край терминала.

Возможно ли то, что я пытаюсь достичь?

Филипп Б. Олдем
источник

Ответы:

1

Попробуйте установить RPROMPT для пробелов. Количество пробелов должно быть шириной терминала (минус #и другие символы.)

Крис Уоррик
источник
1
Вы можете указать точную команду?
kirill_igum
1

Вы можете сделать все, что захотите, с помощью строки подсказки * - проблемный аспект заключается в том, чтобы заставить его отменить это позже. Я предполагаю, что вы не хотите, чтобы каждая строка, в которой когда-либо отображался запрос, отображалась в ваших светлых тонах.

После этого почти легче удалить строку, но тогда у вас нет команды. Может быть, удалить приглашение, а затем повторить команду (с псевдо-подсказкой, как $). Вы могли бы, чтобы подсказка начиналась с последовательности сохранения курсора ANSI ESC [s, затем при ее precmdвосстановлении ESC [uи очистке всего после курсора ESC [0J, а затем выводила команду (я не помню, как получить команду изнутри precmd).

* Это неполный ответ, я не знаю, как заставить команду выделить другой цвет фона.

Random832
источник
1

Если я перейду greyна white, твой пример на самом деле работает для меня.

Какой терминал вы используете? Возможно, он обрабатывает стирание цвета фона по-разному?

Вот несколько альтернатив, чтобы попробовать:

Дайте всю строку подсказки серым фоном:

setopt promptsubst
preexec() {
    tput sgr0
}
PS1="$(tput setab 7)# "

(должен быть таким же, как ваш пример, но по-другому).

Напечатайте строку перед подсказкой:

precmd() {
    tput smul
    for ((n=0; n<COLUMNS; n++)) { printf " "; }
    printf "\n"
}
preexec() {
    tput sgr0
}

(Если вы измените значение "\n"на "\r", оно должно подчеркнуть текущую строку, но, похоже, это не сработает. Я думаю, zsh стирает текущую строку при печати приглашения, что и привело меня к первому решению.)

Сделайте команды (т.е. все, что вы вводите) жирным шрифтом:

setopt promptsubst
preexec() {
    tput sgr0
}
PS1="# $(tput bold)"
Mikel
источник