Nhận mặt phông chữ dưới con trỏ trong Emacs


96

Tôi đang phát triển chủ đề màu tùy chỉnh của riêng mình và sẽ thực sự hữu ích nếu tôi có thể nhận được danh sách các mặt phông chữ ảnh hưởng đến văn bản dưới con trỏ.

Một cái gì đó giống như Textmate's hiển thị lệnh phạm vi hiện tại.

Điều đó sẽ giúp tôi đỡ gặp rắc rối khi thực hiện Mx tùy chỉnh khuôn mặt và xem qua các tùy chọn có sẵn, đoán xem cái nào ảnh hưởng đến từ hiện tại tôi đang sử dụng.

Bất kỳ ý tưởng?


Trong trường hợp bạn đang tìm kiếm các chức năng tương tự bằng cách sử dụng chuột con trỏ (nếu, ví dụ, bạn có thể không nhận được pointvào văn bản trong câu hỏi), xem: emacs.stackexchange.com/a/35449/13444
Braham Snyder

Câu trả lời:


42

Bạn có thể xác định what-facebằng mã này:

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

Sau đó,

M-x what-face

sẽ in mặt được tìm thấy tại điểm hiện tại.

(Cảm ơn thedz đã chỉ ra điều đó what-facekhông được tích hợp sẵn.)


3
Điều này bỏ qua các khuôn mặt được đặt làm thuộc tính văn bản. Nếu kích hoạt, hl-line-modebạn sẽ chỉ nhìn thấy hl-linedưới dạng khuôn mặt, không thấy các khuôn mặt khác. Hãy xem xét gist.github.com/Wilfred/f7d61b7cdf9fdbb1d11c
Wilfred Hughes

2
Karl Fogel đã chỉ ra một lỗi trong đoạn mã này trong một câu trả lời riêng : thông báo đầu ra cho biết nó đang mô tả khuôn mặt tại postham số, nhưng việc đọc khuôn mặt thực sự được thực hiện (point)thay vì tại pos.
Rory O'Kane

Cách này không hiệu quả, bạn có thể sử dụng "Mx description-face" để thay thế.
luochen1990

1
poskhông phải là một chức năng; để làm cho đoạn mã hoạt động, bạn nên thay thế (pos)bằng postrên dòng 3 và 4
cebola

172

what-cursor-position với một đối số tiền tố hiển thị mặt dưới điểm, trong số các thông tin khác.

Phím tắt là Cu Cx =

Đầu ra ví dụ (thuộc tính khuôn mặt được hiển thị trong đoạn cuối):

             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
Cái nào kêu gọi what-cursor-position.
viam0Zah

hmmm, đôi khi nó gọi vị trí con trỏ, đôi khi nó hiển thị danh sách các thuộc tính bộ đệm (bao gồm cả phông chữ). Nếu tôi có hành vi trước đây, việc di chuyển con trỏ và lặp lại sẽ dẫn đến hành vi sau.
davidA

2
Tôi rất hạnh phúc Tôi thấy điều này, với một số tổ hợp không rõ của các lệnh và tổ hợp phím tôi emacsđể hiển thị như thế nào tôi thích nó và đã không làm thế nào để có được nó trở lại khởi động lại tiếp theo của tôi
Biến khốn khổ

2
Nó hiển thị tên phông chữ trên Emacs GUI. Trên thiết bị đầu cuối, Emacs không chịu trách nhiệm thiết lập phông chữ và do đó thông tin như vậy không có sẵn khi một C-u C-x =trong Emacs chạy trên thiết bị đầu cuối, chẳng hạn như emacs -nw file.txt.
Fernando Basso

67

Mx mô tả-khuôn mặt


5
Điều này cũng bao gồm các liên kết tốt đẹp làm cho nó có thể để tùy chỉnh bộ mặt dưới con trỏ ngay lập tức
dolzenko

2
Điều này hầu hết đều hoạt động tốt, nhưng đôi khi vì những lý do mà tôi không thể tìm ra đôi khi nó không gợi ý khuôn mặt tôi đang tìm kiếm. Ví dụ trong eshell khi có màu ansi nó chỉ nói "mặc định".
Samuel Edwin Ward

2
Điều này cho tôi thấy một lời nhắc mà tôi có thể nhập một cái gì đó. Tôi cần nhập gì để mô tả phông chữ dưới con trỏ?
Zelphir Kaltstahl

1
Điều này giúp tôi tùy chỉnh phông chữ khối mã trong chế độ tổ chức. @Zelphir, văn bản trước lời nhắc hiển thị khuôn mặt, ít nhất là trong trường hợp của tôi. Bạn có thể chỉ cần đánh return. Ví dụ kết quả của tôi đã đọc Describe face (default ‘org-block-background’): .
Mallory-Erik

8

Trey đang đi đúng hướng. Nó dẫn tôi đến một email trên danh sách gửi thư có điều này:

(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, quên rằng nó không được đóng gói với Emacs. Tôi có thể đặt nguồn trong câu trả lời của tôi w / ghi công không? :)
Trey Jackson

2

Có một lỗi trong mã `what-face ': hàm lấy" pos "làm đối số nhưng sau đó không sử dụng nó khi lấy khuôn mặt - thay vào đó nó sử dụng" (point) ", mặc dù sau đó thông báo khẳng định là pos trong trường hợp "Không có mặt ở% d".


2
Điều này tốt hơn sẽ được đặt như một bình luận về câu trả lời đó.
Adam Spiers

1
Thậm chí tốt hơn nếu nó có một bản sửa lỗi ... +1 vì vẫn phát hiện ra nó
rath
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.