zsh manipuladores como command_not_found_handler ()

1

Eu gostaria de formatar a saída do zsh.

por exemplo, para funções não encontradas, tenho agora:

function command_not_found_handler(){echo $fg[red]"3[4m???3[0m"$fg[red]" Command \"$1\" not found."}

que retorna texto vermelho e sublinhado ??? .

Eu fiz isso para o command_not_found_handler e gostaria de aplicar a mesma lógica a outra saída de erro, por exemplo:

zsh: bad pattern: echo[

e

zsh: correct 'ehco' to 'echo' [nyae]?

ainda não consigo encontrar os nomes dos manipuladores corretos. Eles ainda existem como manipuladores? Se não há uma abordagem mais geral para alterar o aviso / erro / saída de informações em zsh?

Uma abordagem mais geral seria legal, de modo que os erros de outros programas também ficassem no mesmo formato. por exemplo,

cd: no such file or directory: no/dir

talvez modifique a saída de erro padrão (não sei se isso faz sentido, estou muito cansado ...)

    
por romeovs 04.11.2011 / 01:46

1 resposta

1

Ok, eu descobri a mim mesmo.

Usando o script c aqui , e modificando um pouco, consegui o que precisava.

A modificação que participou foi a seguinte: porque eu queria o ??? sublinhado na frente de cada erro, mudei o loop na linha 107 para imprimir ??? antes de percorrer o restante do erro. Isso foi assim:

 if (buffer[0] == 27)
     dontcol = 1;
 if (buffer[0] == '\n')
     dontcol = 0;
 if (!dontcol)
     fputs(begstr, stdout);
     fputs("
 if (buffer[0] == 27)
     dontcol = 1;
 if (buffer[0] == '\n')
     dontcol = 0;
 if (!dontcol)
     fputs(begstr, stdout);
     fputs("%pre%33[4m??? 3[0m", stdout);     
     putchar(buffer[0]);
 if (!dontcol)
     fputs(endstr, stdout);
for (i = 1; i < n; i++)
{
              if (buffer[i] == 27)
                dontcol = 1;
              if (buffer[i] == '\n')
                dontcol = 0;
              if (!dontcol)
                fputs(begstr, stdout);
              putchar(buffer[i]);
              if (!dontcol)
                fputs(endstr, stdout);
} 
33[4m??? 3[0m", stdout); putchar(buffer[0]); if (!dontcol) fputs(endstr, stdout); for (i = 1; i < n; i++) { if (buffer[i] == 27) dontcol = 1; if (buffer[i] == '\n') dontcol = 0; if (!dontcol) fputs(begstr, stdout); putchar(buffer[i]); if (!dontcol) fputs(endstr, stdout); }
    
por 04.11.2011 / 20:05

Tags