zsh履歴に文字列を追加する

zsh履歴に文字列を追加する

次の機能

function test_hist() {
    print -s "This is a test"
}
zle -N test_hist
bindkey '^X^T' test_hist

This is a testzsh-historyに文字列を追加します。

と入力して関数を明示的に呼び出すと、文字test_hist列は即座に履歴に追加されますが、ctrl-x ctrl-tを押してバインドされたキーを介して呼び出すと、文字列は記録の途中にすぐに追加されません。履歴でこれを表示するには、別のコマンドを実行する必要があります。

なぜこれが起こり、どのように解決できますか?

答え1

fc -R =(print text)in place を使用すると、print -s textwidgetの内部と外部で一貫して動作することがわかっzleたので、これが回避策になる可能性があります。

zsh 5.8のコードを見ながらfc -Rzleが有効になっていることを検出すると、新しい履歴エントリが追加されたことを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](へ)提出いたします。今完了)。

関連情報