在新的 Emacs 24.3 中调整术语面

Posted

技术标签:

【中文标题】在新的 Emacs 24.3 中调整术语面【英文标题】:Adjusting term faces in the new Emacs 24.3 【发布时间】:2013-03-17 16:23:25 【问题描述】:

如何调整新 Emacs 中的 term 面以获得与 ansi-term-color-vector 相同的控制?

Emacs 24.3 中的new features 之一似乎是它改进了控制term 缓冲区面的机制,即:

变量 term-default-fg-colorterm-default-bg-color 现在是 已弃用,取而代之的是可定制的面孔term

您可以通过以下方式自定义如何显示 ANSI 终端颜色和样式 自定义对应的term-color-COLORterm-color-underlineterm-color-bold 面孔。

来自 Mastering Emacs 的 Mickey comments the following:

如果您像我一样自定义 ansi-color-names-vector 以更改 默认术语颜色我建议您现在切换到使用面孔。这 好消息是,您可以,应该渴望,改变的不仅仅是 每种 ANSI 颜色的颜色:没有什么能阻止你强迫 某些颜色的不同字体

和 Mickey 一样,我也使用 ansi-color-names-vector 来确保我的 term 缓冲区的颜色在深色主题上看起来很好(例如 tango-dark

(setq ansi-term-color-vector [unspecified “black” “red3” “lime green” “yellow3” “DeepSkyBlue?3” “magenta3” “cyan3” “white”])

但这现在会导致错误:

"error in process filter: Invalid face; unspecified" 

为了尝试使用新面孔term,当我转到M-x describe-face term 时,我看到以下内容:

[] Font Family
[] Font Foundry
[] Width
[] Height
[] Weight
[] Slant
[] Underline
[] Overline
[] Strike-through
[] Box around text
[] Inverse-video
[] Foreground
[] Background
[] Stipple
[x]  Inherit

但是如何调整这些设置以获得与使用ansi-term-color-vector 相同的效果?

更新

我仍然无法修复颜色。这是我为M-x customize-theme tango-dark 获得的菜单:

以下是终端中难以看到的颜色/面孔之一的示例:

【问题讨论】:

【参考方案1】:

在 Emacs 24.3 中,您需要调整以下面:

   ;; term
   `(term-color-black ((t (:foreground ,zenburn-bg
                                       :background ,zenburn-bg-1))))
   `(term-color-red ((t (:foreground ,zenburn-red-2
                                       :background ,zenburn-red-4))))
   `(term-color-green ((t (:foreground ,zenburn-green
                                       :background ,zenburn-green+2))))
   `(term-color-yellow ((t (:foreground ,zenburn-orange
                                       :background ,zenburn-yellow))))
   `(term-color-blue ((t (:foreground ,zenburn-blue-1
                                      :background ,zenburn-blue-4))))
   `(term-color-magenta ((t (:foreground ,zenburn-magenta
                                         :background ,zenburn-red))))
   `(term-color-cyan ((t (:foreground ,zenburn-cyan
                                       :background ,zenburn-blue))))
   `(term-color-white ((t (:foreground ,zenburn-fg
                                       :background ,zenburn-fg-1))))
   '(term-default-fg-color ((t (:inherit term-color-white))))
   '(term-default-bg-color ((t (:inherit term-color-black))))

此代码来自最新版本的Zenburn。 个人觉得自定义人脸的新方法是对使用模糊向量的改进。

【讨论】:

谢谢。关于如何为tango-dark 之类的主题执行此操作的任何想法或指示? (即如何找出我的主题支持的不同颜色?例如zenburn-bg-1等,但对于tango-dark 只需执行M-x describe-theme tango-dark 并查看tango-dark-theme.el 中的颜色定义。 谢谢@Bodzhidar。我相信你是对的,我可以按照你的步骤来解决这个问题,但不幸的是我不知道如何使它适用于tango-dark。看起来tango-dark 已经将ansi-color-names-vector 设置为tango-dark.el 中的一组给定颜色(请参见此处的代码:http://fossies.org/unix/misc/emacs-24.3.tar.gz:a/emacs-24.3/etc/themes/tango-dark-theme.el)。此外,当我查找 M-x describe-theme tango-tark 时,这些颜色看起来不错(请参阅我在 OP 中发布的图像),但由于某种原因,它们在终端中效果不佳。 我不明白的另一件事是为什么您在 zenburn 中的背景颜色(您在上面定义的那些)对于每个 term-color 都不同(不应该将它们设置为继承终端?) 对于每种颜色,您需要一个较浅的前景版本和一个较暗的背景版本。这就是在 term.el 中定义面孔的方式(这不是我为 zenburn 发明的东西)本身。没有任何术语实际上直接使用这些面孔,它们只是用于派生其他面孔。【参考方案2】:

这在 Emacs 24.3.1 中为我设置了 term 和 ansi-term 的颜色。只需将颜色更改为您喜欢的值(相应调整背景)。

;; term
(defface term-color-black 
  '((t (:foreground "#3f3f3f" :background "#272822"))) 
  "Unhelpful docstring.")
(defface term-color-red
  '((t (:foreground "#cc9393" :background "#272822"))) 
  "Unhelpful docstring.")
(defface term-color-green
  '((t (:foreground "#7f9f7f" :background "#272822"))) 
  "Unhelpful docstring.")
(defface term-color-yellow
  '((t (:foreground "#f0dfaf" :background "#272822"))) 
  "Unhelpful docstring.")
(defface term-color-blue 
  '((t (:foreground "#6d85ba" :background "#272822"))) 
  "Unhelpful docstring.")
(defface term-color-magenta 
  '((t (:foreground "#dc8cc3" :background "#272822"))) 
  "Unhelpful docstring.")
(defface term-color-cyan
  '((t (:foreground "#93e0e3" :background "#272822"))) 
  "Unhelpful docstring.")
(defface term-color-white
  '((t (:foreground "#dcdccc" :background "#272822"))) 
  "Unhelpful docstring.")
'(term-default-fg-color ((t (:inherit term-color-white))))
'(term-default-bg-color ((t (:inherit term-color-black))))

;; ansi-term colors
(setq ansi-term-color-vector
  [term term-color-black term-color-red term-color-green term-color-yellow 
    term-color-blue term-color-magenta term-color-cyan term-color-white])

【讨论】:

【参考方案3】:

我建议 M-x customize-group RET term RET 作为自定义这些颜色的最简单入口点。

【讨论】:

以上是关于在新的 Emacs 24.3 中调整术语面的主要内容,如果未能解决你的问题,请参考以下文章

使用 Ctrl 键和鼠标滚动调整 Emacs 字体大小

怎样设置pdf文件的分辨率?

Angular:mat-sidenav 在调整大小时忽略自动调整大小或模式

使用emacs org-mode,如何在项目中发布未更改的文件?

PHP 文件上传:调整图像大小并在新画布上重新定位

r 在甲基化年龄分析的背景下,展示拦截术语如何从抽样方法中调整估计偏差