首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >找出哪个regexp导致了Emacs中的特定面孔

找出哪个regexp导致了Emacs中的特定面孔
EN

Stack Overflow用户
提问于 2013-02-01 21:15:41
回答 3查看 329关注 0票数 2

我正在尝试找出哪个正则表达式导致这个cperl-mode缓冲区中的connect高亮显示。describe-face告诉我这是一个font-lock-type-face。看过font-lock-keywords-alistfont-lock-keywords之后,我不知道这个亮点是从哪里来的。多彩的parantheses是由rainbow-delimiters-mode创建的。

有没有一个函数可以检查哪个regexp匹配,这样connect就会用这个面突出显示?

EN

回答 3

Stack Overflow用户

发布于 2013-02-02 07:56:57

我有一个本地字体锁黑客在缓冲区中记录所使用的规则。下面的补丁可能会做到这一点。一旦应用了它(并重新加载了font-lock.el),就可以(用C-u C-x =)检查要了解其字体设置的缓冲区位置上的font-lock-debug属性。

代码语言:javascript
复制
=== modified file 'lisp/font-lock.el'
--- lisp/font-lock.el   2013-01-11 23:08:55 +0000
+++ lisp/font-lock.el   2013-01-13 15:28:16 +0000
@@ -1563,6 +1611,14 @@

 ;;; Keyword regexp fontification functions.

+(defvar font-lock-debug nil)
+
+(defun font-lock-debug ()
+  (interactive)
+  (set (make-local-variable 'font-lock-debug) t)
+  (make-local-variable 'font-lock-extra-managed-props)
+  (push 'font-lock-debug font-lock-extra-managed-props))
+
 (defsubst font-lock-apply-highlight (highlight)
   "Apply HIGHLIGHT following a match.
 HIGHLIGHT should be of the form MATCH-HIGHLIGHT, see `font-lock-keywords'."
@@ -1577,13 +1633,16 @@
    (when (eq (car-safe val) 'face)
      (add-text-properties start end (cddr val))
      (setq val (cadr val)))
-   (cond
-    ((not (or val (eq override t)))
+   (if (and (not val) (not (eq override t)))
      ;; If `val' is nil, don't do anything.  It is important to do it
      ;; explicitly, because when adding nil via things like
      ;; font-lock-append-text-property, the property is actually
      ;; changed from <face> to (<face>) which is undesirable.  --Stef
-     nil)
+       nil
+     (if font-lock-debug
+         (font-lock-append-text-property start end 'font-lock-debug
+                         (list (cons matcher highlight))))
+     (cond
     ((not override)
      ;; Cannot override existing fontification.
      (or (text-property-not-all start end 'face nil)
@@ -1599,7 +1658,7 @@
      (font-lock-append-text-property start end 'face val))
     ((eq override 'keep)
      ;; Keep existing fontification.
-     (font-lock-fillin-text-property start end 'face val)))))))
+       (font-lock-fillin-text-property start end 'face val))))))))

 (defsubst font-lock-fontify-anchored-keywords (keywords limit)
   "Fontify according to KEYWORDS until LIMIT.
@@ -1621,6 +1680,7 @@
                 (min lead-start (point)))
               limit
               'font-lock-multiline t)))
+    (font-lock-append-text-property (point) limit 'font-lock-debug keywords)
     (save-match-data
       ;; Find an occurrence of `matcher' before `limit'.
       (while (and (< (point) limit)
票数 2
EN

Stack Overflow用户

发布于 2013-02-01 21:20:33

我不知道有这样的功能。正则表达式被编译为最优的,你为什么需要知道呢?

顺便说一句,显示font-lock-keyword时,除了tinue之外,还显示了字符串nect

票数 0
EN

Stack Overflow用户

发布于 2015-12-04 07:23:10

你试过font-lock studio吗?它对我来说很有用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14647135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档