1

'smart-operator'マイナーモードは非常に興味深いようです。.elは、cプログラマーが「a+b」を「a+b」に変えるなど、ある種の演算子を含むスペースを追加するのに役立ちます。私はちょうどそれにショットを与えました。次の問題を除いて、それはうまくいきます。これが状況です。

'-'演算子に関しては、'a --b'と'-1'、'-ENOMEM'の両方の場合に使用できます。Smart-operatorは、最初のユースケースをカバーしています。ただし、後者では機能しません。この部分に関連するコードは次のとおりです。

(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'の場合に機能するようにコードを変更するにはどうすればよいですか?

4

1 に答える 1

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;
于 2012-11-10T09:25:31.143 に答える