如何改变运营商' - '的智能运营商的行为?

时间:2012-10-05 01:35:14

标签: emacs elisp

看起来'智能操作员'次要模式非常有趣。 .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”案例一起使用?

1 个答案:

答案 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;