Magit:pre-commit钩子报错时自动展示输出并保留颜色的方法
解决Magit中pre-commit钩子的自动错误提示与颜色保留问题
一、自动弹出错误缓冲区
当pre-commit钩子检查失败时,可通过Magit的进程钩子实现自动触发缓冲区显示,甚至创建专用错误缓冲区:
自动弹出Magit进程缓冲区
将以下Elisp代码添加到你的Emacs配置文件(如~/.emacs.d/init.el):(defun my-magit-show-pre-commit-errors () (when (string-match-p "pre-commit" (magit-process-name)) (magit-process-buffer))) (add-hook 'magit-process-failed-hook #'my-magit-show-pre-commit-errors)这段代码会在Magit进程失败时,检查进程名称是否包含
pre-commit,若是则自动打开对应进程缓冲区。创建专用错误缓冲区(推荐)
若想将pre-commit错误输出单独放到专用缓冲区,可使用以下函数:(defun my-magit-show-pre-commit-errors-in-dedicated-buffer () (when (string-match-p "pre-commit" (magit-process-name)) (let* ((proc (magit-process-current)) (output (with-current-buffer (process-buffer proc) (buffer-string))) (buf (get-buffer-create "*pre-commit Errors*"))) (with-current-buffer buf (erase-buffer) (insert output) (ansi-color-apply-on-region (point-min) (point-max)) (special-mode)) (switch-to-buffer-other-window buf)))) (add-hook 'magit-process-failed-hook #'my-magit-show-pre-commit-errors-in-dedicated-buffer)该函数会提取pre-commit输出,创建
*pre-commit Errors*缓冲区,应用ANSI颜色后在新窗口打开。
二、保留pre-commit输出的颜色
pre-commit默认仅在交互式终端输出颜色,需两步设置让Magit进程缓冲区保留彩色输出:
强制pre-commit输出颜色
在Emacs中设置环境变量,让pre-commit始终输出ANSI颜色代码:(setenv "PRE_COMMIT_COLOR" "always")也可直接在
.pre-commit-config.yaml中添加全局配置:# 强制颜色输出 args: ["--color=always"]让Magit进程缓冲区解析ANSI颜色
开启Magit进程缓冲区的ANSI颜色支持,添加以下代码到配置:(add-hook 'magit-process-mode-hook #'ansi-color-for-comint-mode-on)此后进程缓冲区会自动解析pre-commit输出中的颜色代码,显示正确的彩色内容。
内容的提问来源于stack exchange,提问作者Matteo Gamboz
相关产品推荐
相关产品推荐

