如何设置 jupyter shell 里 error 代码段的颜色?

(setq python-shell-interpreter "jupyter"
      python-shell-interpreter-args "console --simple-prompt")

python 项目里按以上设置,启动一个 jupyter console,跑出错之后,如下所示, 错误代码前景色一片黄,由于主题是深色,文字一般就是浅色,和黄色混在一起看不清,同时发现此黄色不随着主题的改变而改变。

请问怎么找出这个高亮对应的参数进行修改?

https://emacs-china.org/t/emacs-q/21671/9?u=whatacold

参考这个,M-x describe-char 可以找到线索。(跨楼怎么引用呀)

感谢,我用 emacs -q 启动后, 加载执行以下配置

(setq python-shell-interpreter "jupyter"
      python-shell-interpreter-args "console --simple-prompt"
      python-shell-prompt-detect-failure-warning nil)
(setq python-shell-completion-native-enable nil)
(load-theme 'tango-dark)
(run-python)

然后在 jupyter shell 里触发了类似的错误,比如执行 (lambda x:x)(), 提示函数调用少了参数,果然黄色又出现了, 我参考 EmacsWiki: Face 执行 C-u C-x = 显示光标所在位置的 face, 打印出了:

There is an overlay here:
 From 433 to 434
  evaporate            t
  face                 (background-color . "#fce94f")
  insert-behind-hooks  (ansi-color-freeze-overlay)
  modification-hooks   (ansi-color-freeze-overlay)


There are text properties here:
  field                output
  fontified            t
  front-sticky         (field inhibit-line-move-field-capture)
  inhibit-line-move-field-capture t
  rear-nonsticky       t

(background-color . “#fce94f”) 这个就是那片黄色🟨, 问题找到了

但我不懂怎么改 overlay(比如能否设置黄色高亮部分文字的颜色用反色,比如问题描述的图片里,光标 block 是黄色的,但光标下的文字会自动变黑色, 求大佬指导。

emacs 源码里对应的代码应该是这个 emacs/ansi-color.el at 329ec11b0fa725cf5e76d2b73ad7f1d19595466e · emacs-mirror/emacs · GitHub

(跨楼引用我也不清楚,但给的链接能直接跳转到另外主题的楼层)

1 个赞

建议修改标题:

- python shell 里 error 代码段的颜色设置
+ 如何设置 python shell 里 error 代码段的颜色?

好的,标题已修改,另把 python shell 改成 jupyter shell,因为发现用原生 python shell 报的错不是这种格式。

1 个赞

简单看了下 overlay https://www.gnu.org/software/emacs/manual/html_node/elisp/Overlay-Properties.html#index-face-_0028overlay-property_0029 (见 color 这个 property ),因为你这里是写死的,所以不好定制;如果是一个 face symbol ,那就很好改了(没记错的话各种主题就是给各种 face 指定值)。

另外,在 github 源码中并没有看到 fce94f ,会不会是你在哪里设置的?

1 个赞

感谢,搜了一下发现这应该是 jupyter/ipython 本身的问题,emacs 只是读取了 jupyter 返回的文本信息, 里面包括 ansi 文本显示的控制符号,然后就按这个颜色显示出来了,参考以下 issue

我在终端跑 jupyter/ipython 也是一样的,而且确实是 ipython8 才有,另一个虚拟环境下是 ipython7,就不会有这种高亮。

根据里面的讨论,可以到 python 虚拟环境的路径下去搜一个叫做 Ipython/core/ultratb.py 的文件,搜索 Terminal256Formatter 关键字,把上面一行

style = stack_data.style_with_executing_node(style, "bg:ansiyellow") 改成别的,然后再开 ipython/jupyter console 就可以了。

比如:

style = stack_data.style_with_executing_node(style, "bold underline")

效果如下:

style = stack_data.style_with_executing_node(style, "bg:ansired") 效果:

这个是终端里运行的效果,emacs 里也差不多(根据调色板的设置,色调有所差异)