Что не так с этим PS1-Prompt?

404
Tim Hilt

Я разрабатывал PS1-Prompt, чтобы он напоминал iPython-Prompt следующим образом:

PS1FIRSTLINE="\[\n\][\t] \[\e[1m\e[38;5;196m\]\u@\H\[\e[0m\] in \[\e[1m\e[38;5;196m\]\w\[\e[0m" PS1SECONDLINE="\n\e[92m\]In [\[\e[1m\]\#\[\e[0m\]] \$ " PS1="$PS1FIRSTLINE$PS1SECONDLINE" 

Что не так с этим PS1-Prompt?

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

Я думаю, что это проблема с моим способом избежать цветов с \e[ ... ]помощью bash или suckless-терминала, который я использую.

Кто-нибудь может мне помочь?

2

1 ответ на вопрос

0
Kamil Maciorowski

Сначала посмотри на мой ответ .

Не сразу понятно, \nследует ли считать печатью или не печатью, или же разделение такое же, как и для печати, и для печати (как в случае печатных символов ASCII ).

Однако, когда дело доходит до PS1, я бы сказал, что это \nследует называть «печатью», потому что это влияет на размер приглашения, и вот что здесь имеет значение. Вы должны поставить оба случая \nснаружи \[ \].

Первый \nявно внутри \[ \]. Второй (в начале PS1SECONDLINE) выглядит так, как будто это не на первый взгляд, но так же. Существует непревзойденное \[в PS1FIRSTLINEи когда все PS1создается соответствующий \]приходит от PS1SECONDLINE.

Это ваши переменные с соответствующими изменениями, которые \nвыходят за пределы \[ \]:

PS1FIRSTLINE="\n[\t] \[\e[1m\e[38;5;196m\]\u@\H\[\e[0m\] in \[\e[1m\e[38;5;196m\]\w\[\e[0m\]" # ^^ deleted embracing \[ \] added closing ^^ PS1SECONDLINE="\n\[\e[92m\]In [\[\e[1m\]\#\[\e[0m\]] \$ " # ^^ added opening PS1="$PS1FIRSTLINE$PS1SECONDLINE" 

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