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