2009-08-07 8 views
76

J'ai développé mon propre thème de couleurs personnalisées, et je serais très utile si je pouvais obtenir une liste de polices de caractères affectant le texte sous le curseur.Obtenir la police sous le curseur dans Emacs

Quelque chose comme la commande de portée actuelle de Textmate. Cela me sauverait la peine de faire M-x personnaliser-face et de regarder à travers les options disponibles, devinant lequel affecte le mot que je suis en cours.

Des idées?

+0

/a/35449/13444 –

Répondre

36

Vous pouvez définir what-face avec ce code:

(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)))) 

Après cela,

M-x what-face 

imprimera le visage découvert au point courant.

(Merci à thedz de remarquer que what-face n'a pas été construit en.)

+7

Je préfère la réponse de jlf parce qu'elle utilise une commande intégrée. –

+2

Ceci ignore les faces définies comme propriétés de texte. Si vous activez 'hl-line-mode' vous ne verrez que' hl-line' comme visage, pas les autres faces. Considérez https://gist.github.com/Wilfred/f7d61b7cdf9fdbb1d11c –

+0

[Karl Fogel] (http://stackoverflow.com/users/247145/karl-fogel) a signalé un bug dans ce code [dans une réponse séparée] (http://stackoverflow.com/a/20844370/578288): le message de sortie dit qu'il décrit le visage au paramètre 'pos', mais la lecture du visage est en fait faite à' (point) 'plutôt qu'à' pos '. –

8

Trey est ce que le visage est sur la bonne voie. Il m'a conduit à un e-mail sur une liste de diffusion qui avait ceci:

(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)))) 
+0

Duh, j'ai oublié qu'il n'était pas livré avec Emacs. Puis-je mettre la source dans ma réponse w/attribution? :) –

+0

Allez-y - je vais vous donner un crédit de réponse, aussi. – thedz

135

what-cursor-position avec un argument préfixe montre le visage au point, entre autres informations.

raccourci clavier est Cu Cx =

Exemple de sortie (la propriété du visage est indiquée dans le dernier paragraphe):

   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] 
+9

Qui appelle 'what-cursor-position'. –

+0

exactement ce que je cherchais, merci –

+0

hmmm, parfois il invoque what-cursor-position, parfois il affiche une liste de propriétés du tampon (y compris la police). Si je reçois le comportement précédent, déplacer le curseur et répéter le fait apparaître le dernier. – meowsqueak

51

Mx décrire face

+4

Cela inclut également le joli lien permettant de personnaliser le visage sous le curseur immédiatement – dolzenko

+1

Cela fonctionne bien la plupart du temps, mais parfois pour des raisons que je ne peux pas comprendre parfois, il ne suggère pas le visage que je cherche. Par exemple, dans eshell quand il y a une couleur ansi, on dit juste "default". –

+1

Cela me montre une invite où je peux entrer quelque chose. De quoi aurais-je besoin pour entrer, afin de décrire la police sous le curseur? – Zelphir

2

Il y a un bug dans le code "what-face": la fonction prend "pos" comme un argument mais ne l'utilise pas lors de l'obtention du visage - à la place il utilise "(point)", même si le message postérieurement revendique pos in le cas "No face at% d". Si vous cherchez la même fonctionnalité en utilisant le curseur ** mouse ** (si, par exemple, vous ne pouvez pas obtenir le point sur le texte en question), voir: https://emacs.stackexchange.com

+2

Ce serait mieux placé comme un commentaire sur cette réponse. –

+1

Encore mieux s'il y avait un correctif ... +1 pour le repérer de toute façon – rath

Questions connexes