如何从叠加下获得面部?

时间:2012-10-08 11:49:09

标签: emacs elisp overlay emacs-faces

情况就是这样:我需要在点边界下检索面部,但是如果我使用高亮当前线模式,那个面部会覆盖我感兴趣的面部。

face-at-point(get-char-property (point) 'face)只会给我列表中的第一张脸,它将是当前行叠加层中的第一张脸。如何获得潜在的面孔?

编辑:

这或多或少是我最终做的事情:

(defun haxe-face-at-point ()
  "This is like `face-at-point' except we will only look for faces
which are relevant to haxe-mode. This will also look under overlays
created by minor modes like ispel or highlight current line."
  (interactive)
  (let ((props (text-properties-at (point))))
    (catch 't
      (while props
        (when (eql (car props) 'face)
          (throw 't
                 (when (member (cadr props)
                               '(font-lock-string-face
                                 font-lock-keyword-face
                                 font-lock-variable-name-face
                                 font-lock-comment-face
                                 font-lock-preprocessor-face
                                 font-lock-type-face
                                 default))
                   (cadr props))))
        (setq props (cdr props))))))

我只需要知道是否有其中一个列表。

1 个答案:

答案 0 :(得分:3)

遗憾的是,没有为Elisp代码提供良好的设施。我能为您提供的最好效果是使用overlays-at,然后循环显示结果,使用overlay-get查看哪些叠加层指定了face,最后使用get-text-property来获取text-properties指定的face(如果有的话)。显示引擎结合了所有这些。