Emacs 更改公共Lisp REPL中文本的颜色

Emacs 更改公共Lisp REPL中文本的颜色,emacs,colors,common-lisp,Emacs,Colors,Common Lisp,我想控制在Common Lisp中显示的文本的颜色。 类似于以下伪代码: (print-color (:red "hello") (:blue "world")) 有什么办法可以做到这一点吗?我使用SBCL,我的repl在emacs中。 谢谢 您可以使用打印彩色文本: (format t "~c[31mabc~c[0m~%" #\ESC #\ESC) ; this prints a red "abc" for most modern terminals 我不确定这是否适用于slime,尽管。

我想控制在Common Lisp中显示的文本的颜色。 类似于以下伪代码:

(print-color (:red "hello") (:blue "world"))
有什么办法可以做到这一点吗?我使用SBCL,我的repl在emacs中。 谢谢

您可以使用打印彩色文本:

(format t "~c[31mabc~c[0m~%" #\ESC #\ESC) ; this prints a red "abc" for most modern terminals

我不确定这是否适用于slime,尽管。

要启用ANSI颜色转义序列,请加载包-但由于存在错误,您可能必须在repl缓冲区中使用
m-x slime repl ANSI颜色模式RET
。从各种废弃的童车版本中提取精华,在

(defun color-text (string color); ANSI escape code 
 (let((color
  (cond
    ((string= color "red") "31")
    ((string= color "green") "32")
    ((string= color "yellow") "33")
    ((string= color "white") "37")
    ((string= color "bright blue") "94")
    ((string= color "bright yellow") "93")
    ((string= color "bright cyan") "96")
    ((string= color "bright magneta") "95")
    (t "90")
 )))  
  (format t (concatenate 'string "~c[" color "m" ) #\ESC )
   (eval(read-from-string string))
  (format t (concatenate 'string "~c[" color "m~c[0m"  ) #\ESC #\ESC))
); (color-text "(format t \"~a\" \"ADASDASDASDA dsfsdf\")" "red")
slime-repl-ansi-color.el

(require 'ansi-color)
(require 'slime)

(define-minor-mode slime-repl-ansi-color-mode
  "Process ANSI colors in Lisp output."
  nil
  :lighter " SlimeANSI")

(define-slime-contrib slime-repl-ansi-color
  "Turn on ANSI colors in REPL output"
  (:authors "Max Mikhanosha")
  (:license "GPL")
  (:slime-dependencies slime-repl)
  (:on-load
   (add-hook 'slime-repl-mode-hook 'slime-repl-ansi-color-mode)))

(defadvice slime-repl-emit (around slime-repl-ansi-colorize activate compile)
  "Process ANSI colors in the Lisp output."
  (with-current-buffer (slime-output-buffer)
    (let ((start slime-output-start))
      (setq ad-return-value ad-do-it)
      (when slime-repl-ansi-color-mode
        (ansi-color-apply-on-region start slime-output-end)))))

(provide 'slime-repl-ansi-color)
.emacs
init文件中

(add-to-list 'slime-contribs 'slime-repl-ansi-color)
应该启用slime repl表达式

(format t "~c[31mRed~:*~c[32mGreen~:*~c[34mBlue~:*~c[mPlain~%" (code-char 27))
产生彩色输出。试一试

(ql:quickload :cl-ansi-text)

(cl-ansi-text:with-color (:green :style :background)
  (cl-ansi-text:with-color (:yellow :effect :bright)
    (princ " Yellow on Green ")))

(princ (cl-ansi-text:green
        (cl-ansi-text:yellow " Yellow on Green " :effect :bright)
        :style :background))

我认为粘液划痕缓冲液已经有了着色,这不是一个替代方案吗?REPL中的某些面具有与语言语义无关的含义(用于调用某些SLIME函数进行内省/反射),因此我不会急于更改它们。@wvxvw SLIME scratch缓冲区是什么?这与emacs中的暂存缓冲区不同吗?如果是,我如何调用它?我想控制repl中颜色的原因是为了帮助我测试我的程序-我正在做一个棋盘游戏。M-x slime scratch@Baggers我肯定错过了一些明显的东西,但你的链接没有告诉我如何安装该软件包slime scratch,谷歌搜索是没有帮助的。我不知道粘液划痕对颜色有什么帮助,但如果你安装了粘液划痕,那么你已经有粘液划痕了。如果您不使用emacs和slime,那么它就不能单独安装。如果您想了解如何安装slime和emacs,请看这里:请注意,虽然这是关于lisp开发的,但我不知道slime scratch与彩色输出的关系如何。slime scratch在slime中不起作用,但在comint模式下的
*低级lisp*
缓冲区中起作用。如果slime repl模式是从comint模式派生出来的(应该是这样),那么它将在没有复制、重新发明和功能滞后的情况下工作,例如下面描述的
slime repl ansi color
功能。