zsh: обновить приглашение после запуска виджета zle - PullRequest
0 голосов
/ 14 сентября 2018

У меня определен следующий виджет

function cdd()
{
    cd /
}
zle -N cdd{,}
bindkey "^R" cdd

После нажатия комбинации клавиш cwd уже изменяется, но подсказка терминала не обновляется. Пример, после этого ()

~/tmp/todelete$ | # press key ^R  here; "~$" is the prompt; "|" denotes cursor

терминал остается без изменений. Если я тогда наберу ls -ld ., он покажет

~/tmp/todelete$ ls -ld .
dr-xr-xr-x 23 root root 4096 Sep 14 07:52 ./

/$ |

, что означает, что cwd во время работы ll уже /.

Это очень запутанно и может привести к серьезным ошибкам. (например, если после нажатия ^R я был прерван, чтобы покинуть свой стол и затем вернуться, я мог бы забыть, что я сделал)

Как разрешить терминалу перерисовывать подсказку после нажатия клавиши? Есть ли zle функция для этого?

1 Ответ

0 голосов
/ 16 сентября 2018

reset-prompt может спасти:

function cdd()
{
    cd /
    zle reset-prompt # XXX: added
}

reset-prompt

Принудительное повторное развертывание подсказок в левой и правой частях экрана, а затем повторное отображение буфера редактирования. Это отражает изменения как самих переменных приглашения, так и изменения в расширении значений (например, изменения во времени или каталоге или изменения значений переменных, на которые ссылается приглашение).

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

--- zshzle (1), запрос на сброс, Разное, Виджеты, редактор командной строки zsh

...