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?


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


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]

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


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

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".


2
Ini akan lebih baik ditempatkan sebagai komentar atas jawaban itu.
Adam Spiers

1
Bahkan lebih baik jika ada perbaikan ... +1 untuk mengetahuinya
rath
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.