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]( 에) 제출하겠습니다 .지금 완료).

관련 정보