Отримайте шрифт під курсором у 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.