รับหน้าแบบอักษรภายใต้เคอร์เซอร์ใน Emacs


97

ฉันได้พัฒนาชุดรูปแบบสีที่กำหนดเองและจะมีประโยชน์มากหากฉันสามารถหารายการใบหน้าแบบอักษรที่มีผลต่อข้อความใต้เคอร์เซอร์ได้

บางอย่างเช่นคำสั่งแสดงขอบเขตปัจจุบันของ Textmate

นั่นจะช่วยให้ฉันไม่ต้องกังวลกับการปรับแต่งใบหน้าของ Mx และดูตัวเลือกที่มีอยู่โดยเดาว่าอันไหนมีผลต่อคำปัจจุบันที่ฉันใช้อยู่

ความคิดใด ๆ ?


ในกรณีที่คุณกำลังมองหาฟังก์ชันการทำงานเดียวกันโดยใช้เคอร์เซอร์ของเมาส์ (หากคุณไม่สามารถเข้าถึงpointข้อความที่เป็นปัญหาได้) โปรดดูที่: emacs.stackexchange.com/a/35449/13444
Braham Snyder

คำตอบ:


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
Wilfred Hughes

2
Karl Fogelชี้ให้เห็นข้อผิดพลาดในรหัสนี้ในคำตอบแยกต่างหาก : ข้อความที่ส่งออกบอกว่ากำลังอธิบายใบหน้าที่posพารามิเตอร์ แต่การอ่านใบหน้านั้นทำ(point)ที่pos.
Rory O'Kane

1
วิธีนี้ใช้ไม่ได้ผลคุณสามารถใช้ "Mx อธิบายใบหน้า" แทนได้
luochen1990

2
posไม่ใช่ฟังก์ชัน เพื่อให้ตัวอย่างข้อมูลใช้งานได้คุณควรแทนที่(pos)ด้วยposบรรทัดที่ 3 และ 4
cebola

176

what-cursor-position ด้วยอาร์กิวเมนต์คำนำหน้าจะแสดงใบหน้าที่อยู่ภายใต้จุดรวมถึงข้อมูลอื่น ๆ

แป้นพิมพ์ลัดคือCu Cx =

ตัวอย่างผลลัพธ์ (คุณสมบัติใบหน้าแสดงในย่อหน้าสุดท้าย):

             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

อืมบางครั้งมันจะเรียกใช้ตำแหน่งเคอร์เซอร์อะไรบางครั้งมันจะแสดงรายการคุณสมบัติบัฟเฟอร์ (รวมถึงฟอนต์) หากฉันได้รับพฤติกรรมเดิมการเลื่อนเคอร์เซอร์และการทำซ้ำจะทำให้เกิดขึ้นในภายหลัง
davidA

2
ฉันมีความสุขมากที่ได้พบสิ่งนี้ด้วยการผสมผสานของคำสั่งและการกดแป้นพิมพ์ที่ไม่รู้จักฉันemacsต้องแสดงว่าฉันชอบมันอย่างไรและไม่สามารถนำกลับมาได้ในการรีสตาร์ทครั้งต่อไป
Miserable Variable

2
มันแสดงชื่อฟอนต์บน Emacs GUI ใน terminal, Emacs จะไม่รับผิดชอบสำหรับการตั้งค่าแบบอักษรและข้อมูลดังกล่าวจึงไม่สามารถใช้ได้เมื่อใครไม่C-u C-x =อยู่ใน Emacs emacs -nw file.txtทำงานบนขั้วเช่น
Fernando Basso

68

Mx อธิบายใบหน้า


5
นอกจากนี้ยังรวมถึงลิงค์ที่ดีทำให้สามารถปรับแต่งใบหน้าภายใต้เคอร์เซอร์ได้ทันที
dolzenko

2
วิธีนี้ใช้ได้ดีเกือบตลอดเวลา แต่บางครั้งด้วยเหตุผลที่ฉันคิดไม่ออกบางครั้งมันก็ไม่ได้บ่งบอกถึงใบหน้าที่ฉันกำลังมองหา ตัวอย่างเช่นใน eshell เมื่อมีสี ansi ก็จะเขียนว่า "default"
Samuel Edwin Ward

2
นี่แสดงข้อความแจ้งที่ฉันสามารถป้อนบางสิ่งได้ ฉันต้องป้อนอะไรเพื่ออธิบายฟอนต์ใต้เคอร์เซอร์
Zelphir Kaltstahl

1
สิ่งนี้ใช้ได้ผลสำหรับฉันในการปรับแต่งแบบอักษรบล็อกโค้ดในโหมดองค์กร @ Zelphir ข้อความก่อนพรอมต์แสดงใบหน้าอย่างน้อยที่สุดในกรณีของฉัน returnคุณก็อาจตี Describe face (default ‘org-block-background’): ตัวอย่างเช่นผลของฉันอ่าน
Mallory-Erik

8

ใบหน้าของ Trey มาถูกทางแล้ว มันนำฉันไปสู่อีเมลในรายชื่อส่งเมลที่มีสิ่งนี้:

(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 ฉันจะใส่แหล่งที่มาในคำตอบ w / การระบุแหล่งที่มาได้ไหม :)
Trey Jackson

2

มีข้อบกพร่องในโค้ด `` what-face ': ฟังก์ชันนี้ใช้ "pos" เป็นอาร์กิวเมนต์ แต่ไม่ได้ใช้เมื่อได้รับใบหน้า แต่จะใช้ "(point)" แทนแม้ว่าข้อความจะอ้างว่า pos ในภายหลังก็ตามในกรณี "No face at% d"


2
สิ่งนี้จะดีกว่าในการแสดงความคิดเห็นในคำตอบนั้น
Adam Spires

1
จะดีกว่าถ้ามันมีการแก้ไข ... +1 สำหรับการจำมันต่อไป
รา ธ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.