Добавление строки в историю zsh

Вот одно из возможных решений:

alias ca='cd $(find. -maxdepth 1 -type d -printf "%T@ %p\n" | sort -n | tail -1 | cut -d" " -f2-)'

Но у него есть следующие проблемы:

  • Использование вывода непосредственно из findбез использования чего-то вроде print0, что приводит к неправильной обработке каталогов с пробелами в имени.
  • Ввод ., если это последний измененный каталог, вместо одного из каталогов в ..
3
30.04.2020, 14:23
1 ответ

Я обнаружил, что использование fc -R =(print text)вместо print -s textодинаково работает в виджете zleи вне его, так что это может быть обходным решением для вас.

Глядя на код zsh 5.8, я обнаружил, чтоfc -Rсообщает zle о добавлении новой записи в историю, когда обнаруживает, что zle активен , аprint -sнет .

Этот патч (для текущей git-головы по состоянию на 2020 год -05 -02T22 :20+01 :00 )кажется исправляет это:

diff --git a/Src/builtin.c b/Src/builtin.c
index 3dab3f9b4..551653508 100644
--- a/Src/builtin.c
+++ b/Src/builtin.c
@@ -4918,6 +4918,8 @@ bin_print(char *name, char **args, Options ops, int func)
        ent->stim = ent->ftim = time(NULL);
        ent->node.flags = 0;
        addhistnode(histtab, ent->node.nam, ent);
+       if (zleactive)
+           zleentry(ZLE_CMD_SET_HIST_LINE, curhist);
        unqueue_signals();
        return 0;
    }

Не уверен, что это правильное решение. Я отправлю этоzsh-workers@zsh.org(сделано сейчас).

1
28.04.2021, 23:17

Теги

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