Dapatkan tampilan font di bawah kursor di Emacs

96

Saya telah mengembangkan tema warna kustom saya sendiri, dan akan sangat berguna jika saya bisa mendapatkan daftar font-face yang memengaruhi teks di bawah kursor.

Sesuatu seperti perintah show current scope dari Textmate.

Itu akan menyelamatkan saya dari masalah dalam melakukan Mx menyesuaikan wajah dan melihat-lihat opsi yang tersedia, menebak mana yang mempengaruhi kata saya saat ini.

Ada ide?

thedz
sumber
Jika Anda mencari fungsionalitas yang sama dengan menggunakan kursor mouse (jika, misalnya, Anda tidak bisa mendapatkan pointteks yang dimaksud), lihat: emacs.stackexchange.com/a/35449/13444
Braham Snyder

Jawaban:

42

Anda dapat menentukan what-facedengan kode ini:

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

Setelah itu,

M-x what-face

akan mencetak wajah yang ditemukan pada titik saat ini.

(Terima kasih kepada thedz karena telah menunjukkan bahwa what-faceitu tidak ada di dalamnya .)

Trey Jackson
sumber
3
Ini mengabaikan set wajah sebagai properti teks. Jika memungkinkan hl-line-modeAnda hanya akan melihat hl-linesebagai wajah, bukan wajah lainnya. Pertimbangkan gist.github.com/Wilfred/f7d61b7cdf9fdbb1d11c
Wilfred Hughes
2
Karl Fogel menunjukkan bug dalam kode ini dalam jawaban terpisah : pesan keluaran mengatakan itu menggambarkan wajah pada posparameter, tetapi pembacaan wajah sebenarnya dilakukan (point)bukan pada pos.
Rory O'Kane
1
Ini tidak berhasil, Anda dapat menggunakan "Mx description-face" sebagai gantinya.
luochen1990
2
posbukanlah sebuah fungsi; agar cuplikan berfungsi, Anda harus mengganti (pos)dengan posbaris 3 dan 4
cebola
173

what-cursor-position dengan argumen awalan menunjukkan wajah di bawah titik, di antara informasi lainnya.

Pintasan keyboard adalah Cu Cx =

Contoh keluaran (properti wajah ditampilkan di paragraf terakhir):

             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]
jlf
sumber
11
Yang memanggil what-cursor-position.
viam0Zah
hmmm, terkadang memanggil what-cursor-position, terkadang menampilkan daftar properti buffer (termasuk font). Jika saya mendapatkan perilaku sebelumnya, memindahkan kursor dan mengulangi perilaku yang terakhir.
davidA
2
Saya sangat senang saya menemukan ini, dengan beberapa kombinasi perintah dan penekanan tombol yang tidak diketahui saya harus emacsmenunjukkan betapa saya menyukainya dan tidak bagaimana mendapatkannya kembali di restart saya berikutnya
Variabel Miserable
2
Ini menunjukkan nama font pada Emacs GUI. Di terminal, Emacs tidak bertanggung jawab untuk mengatur fonta dan oleh karena itu informasi semacam itu tidak tersedia ketika seseorang melakukannya C-u C-x =di Emacs yang berjalan di terminal, seperti emacs -nw file.txt.
Fernando Basso
68

Mx mendeskripsikan wajah

Yoo
sumber
5
Ini juga termasuk tautan yang bagus sehingga memungkinkan untuk menyesuaikan wajah di bawah kursor dengan segera
dolzenko
2
Ini berfungsi dengan baik sebagian besar waktu, tetapi terkadang karena alasan saya tidak tahu terkadang itu tidak menunjukkan wajah yang saya cari. Misalnya di eshell ketika ada warna ansi hanya mengatakan "default".
Samuel Edwin Ward
2
Ini menunjukkan kepada saya prompt di mana saya bisa memasukkan sesuatu. Apa yang harus saya masukkan, untuk mendeskripsikan font di bawah kursor?
Zelphir Kaltstahl
1
Ini berhasil bagi saya untuk menyesuaikan font blok kode dalam mode-org. @Zelphir, teks sebelum perintah menunjukkan wajah, setidaknya dalam kasus saya. Anda mungkin saja memukul return. Misalnya hasil saya dibaca Describe face (default ‘org-block-background’): .
Mallory-Erik
8

Wajah Trey ada di jalur yang benar. Itu membawa saya ke email di milis yang memiliki ini:

(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))))
thedz
sumber
Duh, lupa itu tidak dibundel dengan Emacs. Bolehkah saya mencantumkan sumber dalam jawaban saya dengan atribusi? :)
Trey Jackson
2

Ada bug dalam kode 'what-face': fungsi mengambil "pos" sebagai argumen tetapi kemudian tidak menggunakannya saat mendapatkan wajah - sebaliknya menggunakan "(titik)", meskipun pesan tersebut kemudian mengklaim pos dalam kasus "Tanpa wajah di% d".

Karl Fogel
sumber
2
Ini akan lebih baik ditempatkan sebagai komentar atas jawaban itu.
Adam Spiers
1
Bahkan lebih baik jika ada perbaikan ... +1 untuk mengetahuinya
rath