match-* 功能不正常?
match-* functions not behaving?
我正在尝试编写一个 elisp 函数,根据输入将 Python 测试函数标记为绿色或红色。这些论点是不言自明的。导航部分有效,但 put-text-property
部分什么都不做。我试过 eval
-ing match-*
函数,但我无法理解 return 值。它们似乎也 return 不同的东西,这取决于我 eval
在哪个缓冲区。
这个的基本要点是从 rainbow-mode.el 的相关部分借来的,并且在那里它完美地工作。
put-text-property
调用有什么问题?相关地,我可以做些什么来调试它并了解更多信息?
(defun snake-decorate-test (file class func status)
; FIXME: Path hardcoded while developing.
(find-file (format "/home/thiderman/git/piper/%s" file))
(beginning-of-buffer)
(re-search-forward (format "^class %s(" class) nil t)
(re-search-forward (format "^ def \(%s\)(" func) nil t)
(put-text-property
(match-beginning 1) (match-end 1)
'face `((:background ,(if (s-equals? status ".")
"#007200" "#720000")))))```
那个缓冲区是字体锁定的吗?如果是这样,请尝试使用 font-lock-face
而不是 face
作为文本 属性。字体锁定是贪婪的 - 它会清除(覆盖)您添加的任何 face
突出显示。
你试过调试吗?
一个。您是否在您认为代码应该突出显示的字符上使用了 C-u C-x =
?你可能会发现它确实有你试图给它的 face
属性,但字体锁定覆盖了突出显示(见#1)。
b。使用 M-x debug-on-entry snake-decorate-test
然后使用 d
遍历该函数(偶尔使用 c
以跳过一个步骤)。随时使用 e
来评估任何 sexp 并查看 return 值。
c。或者,添加对 message
的调用以打印出您要检查的中间状态,这样您就可以看到发生了什么。例如,向自己展示 (match-beginning 1)
的真实情况,看看它是否如您所愿。
我正在尝试编写一个 elisp 函数,根据输入将 Python 测试函数标记为绿色或红色。这些论点是不言自明的。导航部分有效,但 put-text-property
部分什么都不做。我试过 eval
-ing match-*
函数,但我无法理解 return 值。它们似乎也 return 不同的东西,这取决于我 eval
在哪个缓冲区。
这个的基本要点是从 rainbow-mode.el 的相关部分借来的,并且在那里它完美地工作。
put-text-property
调用有什么问题?相关地,我可以做些什么来调试它并了解更多信息?
(defun snake-decorate-test (file class func status)
; FIXME: Path hardcoded while developing.
(find-file (format "/home/thiderman/git/piper/%s" file))
(beginning-of-buffer)
(re-search-forward (format "^class %s(" class) nil t)
(re-search-forward (format "^ def \(%s\)(" func) nil t)
(put-text-property
(match-beginning 1) (match-end 1)
'face `((:background ,(if (s-equals? status ".")
"#007200" "#720000")))))```
那个缓冲区是字体锁定的吗?如果是这样,请尝试使用
font-lock-face
而不是face
作为文本 属性。字体锁定是贪婪的 - 它会清除(覆盖)您添加的任何face
突出显示。你试过调试吗?
一个。您是否在您认为代码应该突出显示的字符上使用了
C-u C-x =
?你可能会发现它确实有你试图给它的face
属性,但字体锁定覆盖了突出显示(见#1)。b。使用
M-x debug-on-entry snake-decorate-test
然后使用d
遍历该函数(偶尔使用c
以跳过一个步骤)。随时使用e
来评估任何 sexp 并查看 return 值。c。或者,添加对
message
的调用以打印出您要检查的中间状态,这样您就可以看到发生了什么。例如,向自己展示(match-beginning 1)
的真实情况,看看它是否如您所愿。