Włączyłem korektę (nie nazwałbym tego autokorekcją konkretnie z powodu tego problemu) w zsh, włączając ją setopt correct
w moim .zshrc
.
Teraz, kiedy piszę dtae
w terminalu, otrzymuję:
dtae
zsh: correct 'dtae' to 'date' [nyae]? y
Tue Mar 31 11:39:31 CEST 2015
W tym miejscu chciałbym, aby zsh pamiętał moją decyzję. Następnym razem, gdy piszę dtae
, powinien automatycznie skorygować na date
[1]. Jednak tak się nie dzieje, a zsh ponownie pyta mnie, co mam zrobić:
dtae
zsh: correct 'dtae' to 'date' [nyae]?
[1] Oczywiście, chyba że w tym czasie istnieje rzeczywiste dtae
polecenie lub alias.
Aktualizacja:
Udało mi się zmodyfikować kod źródłowy zsh (plik utils.c
, funkcja spckword
), aby utworzyć niestandardowy plik zawierający aliasy utworzone automatycznie przy wywołaniu „poprawnej” funkcjonalności zsh:
oryginalny:
if (x == 'y' || x == ' ' || x == '\t')
{
*s = dupstring(best);
if (hist)
hwrep(best);
}
zmodyfikowano:
if (x == 'y' || x == ' ' || x == '\t')
{
char *aliaspath = getenv("HOME");
strcat(aliaspath, "/.zsh_correct_aliases");
FILE *out = fopen(aliaspath, "ab+");
fprintf(out, "alias %s=\'", *s);
*s = dupstring(best);
fprintf(out, "%s\'\n", *s);
fclose(out);
if (hist)
hwrep(best);
}
Po uruchomieniu dtae
do pliku dodaje się następujący wiersz ~/.zsh_correct_aliases
:
alias dtae='date'
Nie wiem jednak, jak uzyskać dostęp do nowo zmodyfikowanego ~/.zsh_correct_aliases
pliku w miejscu.
dtae
istnieje, a następnie przywrócony, jeśli / kiedy dtae
nie jest już zdefiniowany.
command_not_found_handler
podczas analizy zamiast w czasie wykonywania), a następnie zaimplementować logikę w kodzie Zsh.
dtae
pojawieniu się spawnu, czy tylko tymczasowo wyłączona?