3

状況は次のとおりです。顔のアンダーポイント境界を取得する必要がありますが、highlight-current-lineモードを使用すると、その顔が関心のある顔にオーバーレイされます。

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つがあるかどうかを調べる必要があるだけでした。

4

1 に答える 1

4

悲しいことに、そのためのElispコードに提供される優れた機能はありません。私が提供できる最善の方法は、をoverlays-at使用して結果をループし、を使用overlay-getしてオーバーレイのどれがaを指定しているかを確認しface、最後にを使用してtext-properties(存在する場合)で指定されたものget-text-propertyを取得することです。faceディスプレイエンジンはそれらすべてを組み合わせたものです。

于 2012-10-08T14:31:28.023 に答える