看起来'智能操作员'次要模式非常有趣。 .el可以帮助程序员添加空间包含某些类型的运算符,例如将“a + b”变为“a + b”。我只是试一试。除了以下问题,它运作良好。情况就是这样。
对于' - '运算符,它可以用于'a-b'和'-1','-ENOMEM'两种情况。智能操作员涵盖了第一个用例。但是,它不适用于后者。以下是与此部分相关的代码。
(defun smart-operator-- ()
"See `smart-operator-insert'."
(interactive)
(cond ((and c-buffer-is-cc-mode (looking-back "\\- *"))
(when (looking-back "[a-zA-Z0-9_] +\\- *")
(save-excursion
(backward-char 2)
(delete-horizontal-space)))
(smart-operator-insert "-" 'middle)
(indent-according-to-mode))
(t
(smart-operator-insert "-"))))
如何修改代码以使其与“-ENOMEM”案例一起使用?
答案 0 :(得分:1)
最后,我有时间研究这个问题。在smart-operator.el中修复小问题非常有趣。对于遇到同样问题的人,请在此处粘贴补丁。
--- a/smart-operator.el 2012-11-10 16:25:27.393138909 +0900
+++ b/smart-operator.el 2012-11-10 18:22:18.281490742 +0900
@@ -307,6 +307,10 @@
(delete-horizontal-space)))
(smart-operator-insert "-" 'middle)
(indent-according-to-mode))
+ ((and c-buffer-is-cc-mode (looking-back "[*/%+(><=&^|] *"))
+ (smart-operator-insert "-" 'before))
+ ((and c-buffer-is-cc-mode (looking-back "\\(return\\) *"))
+ (smart-operator-insert "-" 'before))
(t
(smart-operator-insert "-"))))
补丁涵盖了所有这些案例。
a = -b;
a + -b;
<other binary operators>
return -ENOMEM;