[О блоге] [наверх] [пред] [2022-02-14 14:33:19+03:00] [398f6985b90366c4fc0c2cc536922f681020109f]
Темы: [tip][zsh]

zsh 5.8.1, zsh-autosuggestions и history-incremental-pattern

http://www.git.stargrave.org/?p=dotfiles.git;a=commitdiff;h=5e2205df9515fe28781e91896733a26d3441722f
Пока игрался с PS1 (6ea149598ae74304104b558b8e0024acf2c3b01a), то перед
сном обнаружил, что инкрементальный поиск по истории не работает. Точнее
не работает моя быстрая инициализация онного:

    beginning-history-incremental-pattern-search-backward() {
        zle history-incremental-pattern-search-backward ${BUFFER:gs/ /*/}
    }
    zle -N beginning-history-incremental-pattern-search-backward
    bindkey "^[[1;2A" beginning-history-incremental-pattern-search-backward

Когда я набрал "mu suck", нажал Shift-Up, то ожидаю что включится
инкрементальный поиск с уже вставленным "mu*suck" текстом. Вот последнее
действие упорно не выполняется.

Подумал что сломал PS1 как-то. Откатил. Не помогло. Вспомнил что обновил
zsh как-раз заодно с 5.8 до 5.8.1. Откатил до 5.8 -- помогло. Ну
очевидно что бага в zsh. Полез в их репозиторий смотреть diff между
релизами. Ничего подозрительного или странного, никаких обратно
несовместимых изменений.

Пока возился с этим, заметил что autosuggestions не всегда отображают
suggestion текст разукрашенным -- текст есть, но без применения стиля.
Явно и autosuggestions как будто сломался. Полез смотреть -- а у меня
явный checkout его предыдущей версии сделан. Хотя в более новой явно
сказано о поддержке zsh 5.8. Обновил autosuggestions, хотя и не помню
почему откатывал. Подсветка починилась, но инкрементальная история нет.
Вставляю print $BUFFER в функе -- всё имеется, всё на месте, явно беда с
zle вызовом.

Отключаю autosuggestions -- поиск по истории работает. Хотя бы понял что
беда именно с этим плагином. Пошёл смотреть его исходный код на тему
особенностей с поиском по истории, смутно понимая как он вообще устроен.
Благо что в начале плагина есть массивы с перечислениями всяких widget-ов
и что с ними надо как-то особо обходится. И в некоторых как-раз
перечислены widget-ы связанные с поиском по истории, но не инкрементальной.
Добавил их в ZSH_AUTOSUGGEST_IGNORE_WIDGETS -- всё заработало!

Сегодня заметил что как-будто пропускаются некоторые нажатия up/down при
поиске по истории. Действительно, чуть ли не каждый раз по два раза
приходится нажимать. Когда я смотрел README autosuggestions плагина, то
мне сразу не понравились фразы про асинхронную работу плагина. И оно
включено по умолчанию. Отключил -- решило проблему.

Обновление одного софта на минорнейшую версию, повлекло то, что другой
софт ломает третий :-). Позже смотрел на bugtracker autosuggestions и
там похожие проблемы наблюдались регулярно с widget-ами. Но, не смотря
на его странное качество (или по другому просто без хаков не выйдет его
сделать?), он über-полезнейший и must-have в моём арсенале!

    [оставить комментарий]