Отримайте шрифт під курсором у Emacs


96

Я розробляю власну власну кольорову тему, і було б дуже корисно, якби я міг отримати список шрифтів, що впливають на текст під курсором.

Щось на зразок команди show поточної області дії Textmate.

Це б позбавило мене проблем із виконанням Mx customize-face та переглядом доступних опцій, здогадуючись, який із них впливає на поточне слово, на якому я перебуваю.

Якісь ідеї?


Якщо ви шукаєте ту саму функціональність за допомогою курсору миші (якщо, наприклад, ви не можете потрапити pointна відповідний текст), див .: emacs.stackexchange.com/a/35449/13444
Снайдер,

Відповіді:


42

Ви можете визначити за 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

надрукує обличчя, знайдене в поточній точці.

(Дякую thedz за те, що вказав, що what-faceне було вбудовано.)


3
Це ігнорує обличчя, встановлені як властивості тексту. Якщо увімкнути, hl-line-modeви бачитимете лише hl-lineобличчя, а не інші обличчя. Розглянемо gist.github.com/Wilfred/f7d61b7cdf9fdbb1d11c
Вільфред Хьюз

2
Карл Фогель вказав на помилку в цьому коді в окремій відповіді : у вихідному повідомленні сказано, що воно описує обличчя за posпараметром, але зчитування обличчя фактично виконується не на, (point)а на pos.
Рорі О'Кейн,

Це не працює, замість цього ви можете використовувати "Mx descri-face".
luochen1990

2
posне є функцією; з метою зробити сниппет роботи, ви повинні замінити (pos)з posна лінії 3 і 4
cebola

172

what-cursor-position з префіксом аргументу показує обличчя під точкою, серед іншої інформації.

Комбінація клавіш - Cu Cx =

Приклад виводу (властивість 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]

11
Який викликає what-cursor-position.
viam0Zah

hmmm, іноді він викликає what-cursor-position, іноді відображає список властивостей буфера (включаючи шрифт). Якщо я отримую першу поведінку, переміщення курсору та повторення приводить до другої.
davidA

2
Я дуже щасливий, що знайшов це, за допомогою деяких невідомих комбінацій команд і натискань клавіш я мав emacsпоказати, як мені сподобалось, а як повернути його під час наступного перезапуску
Miserable Variable

2
Він показує назву шрифту в графічному інтерфейсі Emacs. На терміналі Emacs не несе відповідальності за встановлення шрифту, і тому така інформація недоступна, коли це робиться C-u C-x =в Emacs, що працює на терміналі, наприклад emacs -nw file.txt.
Фернандо Бассо

67

Mx опис-обличчя


5
Сюди також входить приємне посилання, що дає змогу негайно налаштувати обличчя під курсором
dolzenko

2
Це працює добре більшу частину часу, але іноді з причин, я не можу зрозуміти, іноді це не наводить на думку обличчя, яке я шукаю. Наприклад, у eshell, коли є колір ansi, він просто говорить "за замовчуванням".
Семюель Едвін Уорд

2
Це показує мені підказку, де я можу щось ввести. Що мені потрібно ввести, щоб описати шрифт під курсором?
Zelphir Kaltstahl

1
Це працювало для мене, щоб налаштувати шрифти блоку коду в організаційному режимі. @Zelphir, текст перед підказкою показував обличчя, принаймні в моєму випадку. Ви можете просто вдарити return. Наприклад, мій результат прочитав Describe face (default ‘org-block-background’): .
Меллорі-Ерік

8

Трей - те, що обличчя на правильному шляху. Це привело мене до електронного листа зі списку розсилки, в якому було таке:

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

Дух, забув, що він не входить у комплект з Emacs. Чи можу я вказати джерело у своїй відповіді з атрибуцією? :)
Трей Джексон,

2

У коді `what-face 'є помилка: функція приймає" pos "як аргумент, але потім не використовує його при отриманні обличчя - натомість вона використовує" (point) ", хоча повідомлення пізніше стверджує pos у справі "Без обличчя у% d".


2
Це було б краще розмістити як коментар до цієї відповіді.
Адам Спірс,

1
Ще краще, якби це було виправлення ... +1 за те, що це все одно
помітили
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.