在Emacs中使用PHP代码和HTML标记编辑PHP文件时,我会继续收到警告:
Warning (php-indent):
Indentation fails badly with mixed HTML and PHP.
Look for an Emacs Lisp library that supports "multiple
major modes" like mumamo, mmm-mode or multi-mode.
弹出我wiindow的底部,占据了我编辑屏幕的一半。我怎么关掉这个?
我知道你可以添加各种“附加组件”和模式,使Emacs格式化PHP + HTML,但我只想关闭警告。我怎么能这样做?
编辑:
以下是php-mode.el
文件的一部分,其中上述错误似乎来自:
(defvar php-completion-table nil
"Obarray of tag names defined in current tags table and functions know to PHP.")
(defvar php-warned-bad-indent nil)
(make-variable-buffer-local 'php-warned-bad-indent)
;; Do it but tell it is not good if html tags in buffer.
(defun php-check-html-for-indentation ()
(let ((html-tag-re "</?\\sw+.*?>")
(here (point)))
(if (not (or (re-search-forward html-tag-re (line-end-position) t)
(re-search-backward html-tag-re (line-beginning-position) t)))
t
(goto-char here)
(setq php-warned-bad-indent t)
(lwarn 'php-indent :warning
"\n\t%s\n\t%s\n\t%s\n"
"Indentation fails badly with mixed HTML and PHP."
"Look for an Emacs Lisp library that supports \"multiple"
"major modes\" like mumamo, mmm-mode or multi-mode.")
nil)))
(defun php-cautious-indent-region (start end &optional quiet)
(if (or php-warned-bad-indent
(php-check-html-for-indentation))
(funcall 'c-indent-region start end quiet)))
(defun php-cautious-indent-line ()
(if (or php-warned-bad-indent
(php-check-html-for-indentation))
(funcall 'c-indent-line)))
答案 0 :(得分:2)
获取Emacs源代码,我在任何地方都找不到该消息。它可能来自您从init文件加载的其他一些代码。
检查您加载的库 - grep
以获取消息。这将让您了解如何禁止消息。这取决于它是如何创建的等。
例如,您可以建议(defadvice
)发出消息的函数,但您可能必须使用建议来替换不发出消息的类似代码来替换函数的代码。
但首先找到罪魁祸首代码。可能有一种简单的方法来禁止消息,例如用户选项。
更新---
好的,发出警告的函数是lwarn
。您可以立即自定义选项warning-minimum-level
和warning-minimum-log-level
,以禁止警告。但这也会抑制同级别的其他警告。
调用lwarn
的函数是php-check-html-for-indentation
,并且无条件地调用它。
在代码中搜索对php-check-html-for-indentation
的调用,以查看是否可以有条件地调用该函数。幸运的是,您可以设置或更改一个条件(可能甚至是用户选项),以阻止php-check-html-for-indentation
被调用。
如果禁止php-check-html-for-indentation
不是正确的事情,因为它除了警告之外还有其他的东西,那么你最好的方法是建议php-check-html-for-indentation
,基本上重新定义它,但没有调用lwarn
。为此,defadvice
php-check-html-for-indentation
lwarn
会重复使用原始定义,但不会调用ad-do-it
且没有任何Advising Functions
。请参阅Elisp手册,节点Around Advice
和{{1}}。
答案 1 :(得分:1)
两个函数中都有一个条件调用它。转到.emacs
文件并添加以下行:
(setq php-mode-warn-if-mumamo-off nil)
这应该照顾你的问题: - )
答案 2 :(得分:0)
从你那么有用的代码片段借用一行,我把
(setq php-warned-bad-indent t)
在我的.emacs文件中。经过测试并为我工作。
(我不敢相信我刚发布了一个涉及Lisp的答案。)