Вот одно из возможных решений:
alias ca='cd $(find. -maxdepth 1 -type d -printf "%T@ %p\n" | sort -n | tail -1 | cut -d" " -f2-)'
Но у него есть следующие проблемы:
find
без использования чего-то вроде print0
, что приводит к неправильной обработке каталогов с пробелами в имени. .
, если это последний измененный каталог, вместо одного из каталогов в .
. Я обнаружил, что использование 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
(сделано сейчас).