我想在emacs中查看(和/或编辑)彩色文本,比如ls -l --color=always、tree...或其他输出。
我所引用的文本存在于文件中。当我在emacs中打开该文件时,我希望能够看到它的颜色,或者切换它以显示ANSI (SGR)转义序列。
ansi-color.el似乎是我所需要的,但我还无法让它对ANSi转义序列进行任何着色,但我确实看到了单个控制字节的蓝色-粗体(例如。^A和^[).我不确定这是否是ansi-color的一个特性,但我认为是的。
根据安西-颜色.艾尔。注释的说法,它可以处理字符串和区域,但即使这样似乎也不起作用。例如,函数ansi-color-apply-on-region不能被M-x识别。上面写着“不匹配”
我已经将(require 'ansi-color)添加到我的.emacs文件中,甚至添加了(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)。当emacs开始时,我没有收到任何错误或警告,所以我被卡住了。
如何使标准函数工作,以及如何使其在打开名称以.col为后缀的文件时自动应用?
发布于 2011-08-26 16:51:12
我认为你缺少的是interactive表单。Emacs是如何区分被其他函数调用的函数和被用户直接调用的函数的。参见Emacs简介节点
现在,如果您阅读ansi-color-apply-on-region的定义,您会发现它不是为交互式使用而设计的。"ansi-color“设计用于过滤comint输出。然而,为它制作一个交互式包装是很容易的。
(defun ansi-color-apply-on-region-int (beg end)
"interactive version of func"
(interactive "r")
(ansi-color-apply-on-region beg end))下一步是要打开.col扩展的ansi颜色。您可以添加一个钩子功能到任何您想要使用的主要模式来编辑这些文件。只要打开主模式,该函数就会运行,因此您必须添加一个检查文件后缀的选项。
或者,您可以基于“基本”模式黑出一个快速派生模式。
(define-derived-mode fundamental-ansi-mode fundamental-mode "fundamental ansi"
"Fundamental mode that understands ansi colors."
(require 'ansi-color)
(ansi-color-apply-on-region (point-min) (point-max)))把它和那个分机联系起来。
(setq auto-mode-alist
(cons '("\\.col\\'" . fundamental-ansi-mode) auto-mode-alist))发布于 2011-08-26 17:11:03
下面的解决方案允许读取(而不是保存)包含ANSI颜色序列的文件。文件名必须有一个.txt扩展名。
将库tty格式放在~/.emacs.d/site-lisp/中,然后将这些行添加到~/.emacs init文件中。
(add-to-list 'load-path "~/.emacs.d/site-lisp/")
(require 'tty-format)
(add-hook 'find-file-hooks 'tty-format-guess)发布于 2016-05-12 17:15:52
非常感谢@enzotib的解决方案!
作为解决方案的一个补充,这里有一种方法可以使用户显式地调用它:
;; M-x display-ansi-colors to explicitly decode ANSI color escape sequences
(defun display-ansi-colors ()
(interactive)
(format-decode-buffer 'ansi-colors))并自动处理*.txt或README以外的其他文件:
;; decode ANSI color escape sequences for .log files
(add-to-list 'auto-mode-alist '("\\.log\\'" . display-ansi-colors))这样,您可以在不改变原始文件的情况下用颜色替换转义序列,这与使用ansi-color-apply-on-region的解决方案不同。
https://unix.stackexchange.com/questions/19494
复制相似问题