2009-08-07 12 views
76

He estado desarrollando mi propio tema de color personalizado, y sería realmente útil si pudiera obtener una lista de caras de fuente que afectan el texto bajo el cursor.Obtener cara de fuente bajo el cursor en Emacs

Algo así como el comando de alcance actual del show de Textmate.

Eso me ahorraría la molestia de hacer M-x personalizar cara y mirar a través de las opciones disponibles, adivinando cuál afecta la palabra actual en la que estoy.

¿Alguna idea?

+0

En caso de que esté buscando la misma funcionalidad con el cursor ** mouse ** (si, por ejemplo, no puede obtener 'punto' en el texto en cuestión), consulte: https://emacs.stackexchange.com/a/35449/13444 –

Respuesta

36

Puede definir what-face con este código:

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

Después de eso,

M-x what-face 

imprimirá la cara que se encuentra en el punto actual.

(Gracias a thedz por señalar que what-face no se construyó en.)

+7

Prefiero la respuesta de jlf porque usa un comando incorporado. –

+2

Esto ignora las caras establecidas como propiedades de texto. Si habilita 'hl-line-mode', solo verá' hl-line' como la cara, no las otras caras. Considere https://gist.github.com/Wilfred/f7d61b7cdf9fdbb1d11c –

+0

[Karl Fogel] (http://stackoverflow.com/users/247145/karl-fogel) señaló un error en este código [en una respuesta separada] (http://stackoverflow.com/a/20844370/578288): el mensaje de salida dice que está describiendo la cara en el parámetro 'pos', pero la lectura de la cara se hace en' (point) 'en lugar de' pos '. –

8

de lo cara está en el camino correcto Trey. Me llevó a un correo electrónico en una lista de correo que tenía esto:

(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, olvidé que no estaba incluido con Emacs. ¿Puedo poner la fuente en mi respuesta con atribución? :) –

+0

Adelante - También te daré crédito para responder. – thedz

135

what-cursor-position con un argumento prefijo muestra la cara en el punto, entre otra información.

atajo de teclado es Cu Cx =

Ejemplo de salida (la propiedad cara se muestra en el último párrafo):

   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

que invoca 'what-cursor-position'. –

+0

exactamente lo que estaba buscando, gracias –

+0

hmmm, a veces invoca what-cursor-position, a veces muestra una lista de propiedades de buffer (incluida la fuente). Si obtengo el comportamiento anterior, mover el cursor y repetir trae el último. – meowsqueak

51

Mx describe-cara

+4

Esto también incluye el bonito enlace que permite personalizar la cara debajo del cursor inmediatamente – dolzenko

+1

Esto funciona bien la mayor parte del tiempo, pero a veces por razones que no puedo entender, a veces no sugiere la cara que estoy buscando. Por ejemplo, en eshell cuando hay color ansi, simplemente dice "predeterminado". –

+1

Esto me muestra un mensaje donde puedo ingresar algo. ¿Qué necesitaría ingresar para describir la fuente debajo del cursor? – Zelphir

2

Hay un error en el código `what-face ': la función toma" pos "como argumento pero luego no la usa cuando obtiene la cara, sino que usa" (punto) ", aunque el mensaje posterior afirma pos en el caso "Sin rostro en% d".

+2

Esto sería mejor colocarlo como comentario en esa respuesta. –

+1

Mejor aún si tuviera una solución ... +1 para detectarlo de todos modos – rath

Cuestiones relacionadas