次の機能
function test_hist() {
print -s "This is a test"
}
zle -N test_hist
bindkey '^X^T' test_hist
This is a test
zsh-historyに文字列を追加します。
と入力して関数を明示的に呼び出すと、文字test_hist
列は即座に履歴に追加されますが、ctrl-x ctrl-tを押してバインドされたキーを介して呼び出すと、文字列は記録の途中にすぐに追加されません。履歴でこれを表示するには、別のコマンドを実行する必要があります。
なぜこれが起こり、どのように解決できますか?
答え1
fc -R =(print text)
in place を使用すると、print -s text
widgetの内部と外部で一貫して動作することがわかっ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;
}
しかし、これが正しい解決策であるかどうかはわかりません。[email protected]
(へ)提出いたします。今完了)。