zsh 处理程序,例如 command_not_found_handler()

zsh 处理程序,例如 command_not_found_handler()

我想格式化 zsh 输出。

例如,对于未找到的函数我现在有:

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

返回红色文本和下划线???

我为此做了这件事command_not_found_handler,并希望将相同的逻辑应用于其他错误输出,例如:

zsh: bad pattern: echo[

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

但我似乎找不到正确的处理程序的名称。它们真的存在吗?如果没有,是否有更通用的方法来更改 zsh 中的警告/错误/信息输出?

一个更通用的方法会更好,这样来自其他程序的错误也会得到相同的格式。例如

cd: no such file or directory: no/dir

也许修改标准错误输出(我不知道这是否有意义,我真的很累......)

答案1

好的,我自己发现了。

使用 c 脚本这里,并对其进行了一些修改,我得到了我需要的东西。

修改如下:因为我想???在每个错误前面加下划线,所以我将第 107 行的循环改为打印 ???,然后再循环其余错误。如下所示:

 if (buffer[0] == 27)
     dontcol = 1;
 if (buffer[0] == '\n')
     dontcol = 0;
 if (!dontcol)
     fputs(begstr, stdout);
     fputs("\0033[4m??? \033[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);
} 

相关内容