2009-08-07 30 views
76

Tôi đã phát triển chủ đề màu sắc tùy chỉnh của riêng tôi, và nó muốn được thực sự hữu ích nếu tôi có thể có được một danh sách các font-mặt ảnh hưởng đến văn bản dưới con trỏ.Nhận mặt chữ dưới con trỏ trong Emacs

Cái gì đó như lệnh show phạm vi hiện Textmate của.

Điều đó sẽ tiết kiệm cho tôi những rắc rối của việc M-x tùy chỉnh đối mặt và nhìn qua các tùy chọn có sẵn, đoán mà tại đó một ảnh hưởng từ hiện tại tôi đang trên.

Bất kỳ ý tưởng nào?

+0

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 'point' vào văn bản trong câu hỏi), xem: https://emacs.stackexchange.com/a/35449/13444 –

Trả lời

36

Bạn có thể xác định what-face với 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 tìm thấy tại thời điểm hiện tại.

(Nhờ thedz đã chỉ ra rằng what-face không được xây dựng trong.)

+7

Tôi thích câu trả lời của jlf hơn vì nó sử dụng lệnh tích hợp. –

+2

Đ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 bật 'hl-line-mode', bạn sẽ chỉ thấy' hl-line' là khuôn mặt chứ không phải các khuôn mặt khác. Hãy xem xét https://gist.github.com/Wilfred/f7d61b7cdf9fdbb1d11c –

+0

[Karl Fogel] (http://stackoverflow.com/users/247145/karl-fogel) chỉ ra một lỗi trong mã này [trong một câu trả lời riêng biệt] (http://stackoverflow.com/a/20844370/578288): thông báo đầu ra cho biết nó mô tả khuôn mặt ở tham số 'pos', nhưng việc đọc khuôn mặt thực sự được thực hiện tại' (điểm) 'thay vì tại' pos '. –

8

Trey của những gì khuôn mặt đ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)))) 
+0

Duh, quên nó không được gói với Emacs. Tôi có thể đưa nguồn vào câu trả lời của tôi với phân bổ không? :) –

+0

Đi cho nó - Tôi sẽ cung cấp cho bạn tín dụng trả lời, quá. – thedz

135

what-cursor-position với đố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à Củ Cx =

đầu ra Ví dụ (thuộc tính mặt được thể hiện trong đoạn cuối cùng):

   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] 
+9

Lệnh này gọi 'con trỏ-vị trí'. –

+0

chính xác những gì tôi đang tìm kiếm, nhờ –

+0

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 nhận được hành vi trước đây, di chuyển con trỏ và lặp lại sẽ hiển thị sau. – meowsqueak

51

Mx mô tả đối mặt

+4

Đ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 khuôn mặt dưới con trỏ ngay lập tức – dolzenko

+1

Điều này làm việc tốt hầu hết thời gian, nhưng đôi khi vì lý do 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". –

+1

Điều này hiển thị cho tôi lời nhắc nơi tôi có thể nhập nội dung nào đó. Tôi cần phải nhập gì, để mô tả phông chữ dưới con trỏ? – Zelphir

2

Có một lỗi trong 'gì đối mặt' mã: chức năng mất 'pos' như một cuộc tranh cãi nhưng sau đó không sử dụng nó khi nhận được khuôn mặt - thay vào đó nó sử dụng '(điểm)', mặc dù được thông báo sau tuyên bố pos trong trường hợp "Không có mặt tại% d".

+2

Điều này sẽ được đặt tốt hơn làm nhận xét về câu trả lời đó. –

+1

Thậm chí tốt hơn nếu nó đã được sửa chữa ... +1 để phát hiện nó – rath

Các vấn đề liên quan