日志文件 ansi-color-apply-on-region 保存问题

打开一个日志文件,显示为

  e[1me[35m (9.6ms)e[0m  e[1me[34m

使用

(defun display-ansi-colors ()
 (interactive)
 (let ((inhibit-read-only t)) 
  (ansi-color-apply-on-region (point-min) (point-max))))

后正常显示日志颜色。

但是同时也生成了一个修改后的备份(原文件是read-only-mode),以至于kill 日志等操作都要提示是否保存该备份。

有没有办法不生成或者默认帮忙杀掉该修改后的文件?

ansi-color-apply-on-region 会修改文件的内容,关闭修改过的文件,自然就需要你决定是否需要保存。

如果你不想修改文件的内容,可以自己想办法写个不会修改文件的 ansi-color-apply-on-region(应该是可以的,不过我不清楚怎么实现)。

一个比较容易想到的 work-around 就是用一个临时的 Buffer 显示文件的内容,这样修不修改都无所谓。

(defun my-view-file (file)
  "查看包含 Escape 序列的文件."
  (interactive "fFile: ")
  (with-current-buffer (get-buffer-create (format "*View %s*" file))
    (read-only-mode -1)
    (erase-buffer)
    (insert-file-contents file)
    (ansi-color-apply-on-region (point-min) (point-max))
    (read-only-mode)
    (switch-to-buffer (current-buffer))))

另一个 work-around 就是把当前 Buffer 和文件的关联取消掉,差不多就相当于用一个临时的 Buffer。

(defun my-display-ansi-colors ()
  (interactive)
  (let ((inhibit-read-only t)) 
    (ansi-color-apply-on-region (point-min) (point-max))
    (set-visited-file-name nil)))
2 个赞

:+1: 学到老活到老