我喜欢在我的lisp缓冲区中将lambda
字体锁定到λ
。
我这样做:
(defvar keyword-lambda
'(("(\\(lambda\\)\\>"
(0 (prog1 () (compose-region
(match-beginning 1)
(match-end 1) ?λ))))))
(font-lock-add-keywords 'emacs-lisp-mode keyword-lambda)
符号lambda
的字符宽度变为1,indent-sexp
尊重它,
但似乎不是在临时缓冲区。在elisp缓冲区中使用 C-u C-x C-e 进行验证:
(insert
"\n"
(with-temp-buffer
(emacs-lisp-mode)
(insert "(lambda () (interactive)\n (foo))")
(goto-char (point-min))
(indent-sexp)
(buffer-substring-no-properties
(point-min)
(point-max))))
代码缩进是:
(λ () (interactive)
(foo))
这是缩进,好像λ
是5个字符宽。
有解决方法吗?
答案 0 :(得分:1)
font-lock-add-keywords
用于装饰lambda
,并附上一个简短的说明"将其显示为λ
"。
但是没有应用font-lock的方式"因为文本被插入缓冲区"。相反,它应用了#34;文本插入缓冲区之后和显示之前的某个时间",其中发生的确切时间取决于各种因素和配置。此外,在临时缓冲区中禁用了font-lock。
所有这些意味着您需要在致电indent-sexp
之前强制使用font-lock来执行此操作,例如:致电font-lock-ensure
。