2012-10-05 95 views
1

看起來'智能運營商'次要模式非常有趣。 .el可以幫助c程序員添加空間以支持某些類型的運算符,例如將'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

我與c/c + +和java。這不是我的情況。但是,謝謝你們,wvxvw。 – jcadam

回答

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; 
+0

你是否遇到過任何未由此處理的邊緣情況?我正在研究一個相關的次要模式([electric-operator](https://github.com/davidshepherd7/electric-operator)),並且我想盡可能地處理儘可能多的情況。 – dshepherd

+0

不,這是爲了讓smart-operator.el只爲我工作。這遠遠不夠完美。我發現smarter-operator.el在許多常見的情況下做得不好。感謝您指出'電動操作員'。我想檢查一下。 – jcadam