(setq python-shell-interpreter "jupyter"
python-shell-interpreter-args "console --simple-prompt")
python 项目里按以上设置,启动一个 jupyter console,跑出错之后,如下所示, 错误代码前景色一片黄,由于主题是深色,文字一般就是浅色,和黄色混在一起看不清,同时发现此黄色不随着主题的改变而改变。
请问怎么找出这个高亮对应的参数进行修改?
(setq python-shell-interpreter "jupyter"
python-shell-interpreter-args "console --simple-prompt")
python 项目里按以上设置,启动一个 jupyter console,跑出错之后,如下所示, 错误代码前景色一片黄,由于主题是深色,文字一般就是浅色,和黄色混在一起看不清,同时发现此黄色不随着主题的改变而改变。
请问怎么找出这个高亮对应的参数进行修改?
感谢,我用 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
(跨楼引用我也不清楚,但给的链接能直接跳转到另外主题的楼层)
建议修改标题:
- python shell 里 error 代码段的颜色设置
+ 如何设置 python shell 里 error 代码段的颜色?
好的,标题已修改,另把 python shell 改成 jupyter shell,因为发现用原生 python shell 报的错不是这种格式。
简单看了下 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 ,会不会是你在哪里设置的?
感谢,搜了一下发现这应该是 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 里也差不多(根据调色板的设置,色调有所差异)