webdevqa.jp.net

Emacsでカーソルの下にあるフォントフェイスを取得する

私は独自のカスタムカラーテーマを開発してきましたが、カーソルの下のテキストに影響を与えるフォントフェイスのリストを取得できれば、非常に便利です。

Textmateのshow current scopeコマンドのようなもの。

これにより、M-xカスタマイズフェイスを実行し、使用可能なオプションを調べて、現在のWordに影響を与えているものを推測する手間が省けます。

何か案は?

92
thedz

次のコードでwhat-faceを定義できます。

(defun what-face (pos)
  (interactive "d")
  (let ((face (or (get-char-property (pos) 'read-face-name)
                  (get-char-property (pos) 'face))))
    (if face (message "Face: %s" face) (message "No face at %d" pos))))

その後、

M-x what-face

現在のポイントで見つかった顔を印刷します。

what-faceが組み込まれていないことを指摘してくれた thedz に感謝します。)

41
Trey Jackson

what-cursor-positionプレフィックス引数を使用すると、その他の情報の中でも、ポイントの下にある顔が表示されます。

キーボードショートカットはC-u C-x =

出力例(faceプロパティは最後の段落に示されています):

             position: 5356 of 25376 (21%), column: 4
            character: r (displayed as r) (codepoint 114, #o162, #x72)
    preferred charset: ascii (ASCII (ISO646 IRV))
code point in charset: 0x72
               syntax: w    which means: Word
             category: .:Base, L:Left-to-right (strong), a:ASCII, l:Latin, r:Roman
          buffer code: #x72
            file code: #x72 (encoded by coding system undecided-unix)
              display: by this font (glyph code)
    nil:-Apple-Monaco-medium-normal-normal-*-12-*-*-*-m-0-iso10646-1 (#x55)

Character code properties: customize what to show
  name: LATIN SMALL LETTER R
  general-category: Ll (Letter, Lowercase)
  decomposition: (114) ('r')

There are text properties here:
  face                 org-level-2
  fontified            t

[back]
164
jlf

M-x記述面

63
Yoo

Treyの顔は正しい方向に向かっています。これにより、メーリングリストで次のようなメールが送られました。

(defun what-face (pos)
    (interactive "d")
        (let ((face (or (get-char-property (point) 'read-face-name)
            (get-char-property (point) 'face))))
    (if face (message "Face: %s" face) (message "No face at %d" pos))))
8
thedz

「what-face」コードにはバグがあります。関数は引数として「pos」を使用しますが、顔を取得するときには使用しません。代わりに「(point)」を使用します。 claims「%dに顔がない」場合の位置。

2
Karl Fogel