Włączyłem korektę (nie nazwałbym tego autokorekcją konkretnie z powodu tego problemu) w zsh, włączając ją setopt correctw moim .zshrc.
Teraz, kiedy piszę dtaew 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 dtaepolecenie 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 dtaedo 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_aliasespliku w miejscu.
dtaeistnieje, a następnie przywrócony, jeśli / kiedy dtaenie jest już zdefiniowany.
command_not_found_handlerpodczas analizy zamiast w czasie wykonywania), a następnie zaimplementować logikę w kodzie Zsh.
dtaepojawieniu się spawnu, czy tylko tymczasowo wyłączona?