【问题标题】:Changing text appearance in Emacs: overlays work, text properties don't更改 Emacs 中的文本外观:覆盖有效,文本属性无效
【发布时间】:2010-02-11 04:28:21
【问题描述】:

我今天一直在尝试 Emacs 中的文本属性。如果我将光标放在带有一些文本的行上,然后使用M-: 执行以下代码,则该行会以粗体重新显示。

(overlay-put
 (make-overlay
  (line-beginning-position)
  (line-end-position))
 'face 'bold)

但是,如果我用(remove-overlays) 清除覆盖并执行以下代码,则什么都不会发生(除了单词“nil”出现在迷你缓冲区中)。

(put-text-property
 (line-beginning-position)
 (line-end-position)
 'face 'bold)

根据我目前收集到的信息,我希望这两个 sn-ps 应该产生相同的视觉效果。为什么不呢?

【问题讨论】:

  • 在 Emacs 23.1 上为我工作,在基本模式和文本模式下的缓冲区中都有文本。
  • 22.1.50 不是官方版本,我会尝试从homepage.mac.com/zenitani/emacs-e.html 获取官方版本
  • 我下载安装了正式版,也出现了同样的问题。但无论如何,我偶然得到了答案。我打开了一个新的空缓冲区并输入了一些随机的乱码,并在那里设置文本属性。我最初尝试所有实验的缓冲区是 xml 模式(或 sgml 模式,等等)。所以至少我现在可以应用文本属性,但对我来说,某些模式如何(以及为什么)可以抵消 put-text-property 对我来说仍然是个谜。

标签: emacs overlays


【解决方案1】:

font-lock-mode 开启时,face 属性将被覆盖。改用font-lock-face

(放置文本属性 (行起始位置) (行结束位置) 'font-lock-face'粗体)

【讨论】:

    【解决方案2】:

    ansi-color.el -- “然而,在 Emacs 中,事情有点 不同:当字体锁定在缓冲区中处于活动状态时,您不能简单地添加 面对缓冲区的文本属性。字体锁定将删除面部 使用 'font-lock-unfontify-region-function' 的文本属性。如果你想 将“ansi-color-apply”返回的字符串插入此类缓冲区, 您必须将 'font-lock-unfontify-region-function' 设置为 `ansi-color-unfontify-region'。此功能不会删除所有面部 文本属性无条件。它将保留面部文本属性 如果设置了属性“ansi-color”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-01
      • 2014-04-17
      • 2019-02-25
      • 2010-10-27
      • 1970-01-01
      • 1970-01-01
      • 2018-07-07
      相关资源
      最近更新 更多