2009-10-01 65 views
0

聯定義我使用的actionscript-mode-connors.el功能。Emacs的ActionScript 3的縮進在emacs的縮進ActionScript 3代碼在arglist中

我有大多數事情想通了,但有一件事困擾我的是,當我使用內聯閉包作爲函數參數,函數內部的縮進被搞砸了。

例如:

var foo:int = some_function(
    bar, 
    baz, 
    function():void { 
           return qux(); 
          }, 
    zap); 

我想返回qux()從函數聲明一個縮進上一行,而不是從開括號一個縮進。 「酒吧」的壓痕使用過於搞砸了,但我固定的,與

(add-hook 'actionscript-mode-hook 
     (lambda() 
     (c-set-offset 'arglist-intro '+) 
     (c-set-offset 'arglist-close 0))) 

通常在這裏我會用抄送銫找出我需要改變什麼語法符號,而是對問題的「返回qux ()」行的是,語法上下文是

((arglist-cont-nonempty 731 758) (brace-list-intro 731)) 

其中那些標號指代‘some_function’線。 'arglist-cont-nonempty'看起來像是一個錯誤,它看起來應該是'arglist-cont',因爲在該行的open paren之後沒有任何東西。我無法更改'arglist-cont-nonempty'的縮進,因爲這會影響open paren不會結束'some_function'的行。

我該如何解決這個問題?

回答

1

如何間接的答案嗎?看起來好像你對C壓痕機器感覺很舒服。您可能需要使用圍繞'c-guess-basic-syntax的建議來識別特定配置,並將其修改爲您認爲最適合該情況的內容。

如果你看看這個答案的indentation customization for comments,我基本上是做同樣的事情,只是在壓痕點。

關於你提到的具體問題,我無法重現你有相同的故障,我的縮進的代碼塊(在'actionscript-mode與兩個變化)看起來像:

var foo:int = some_function(
    bar, 
    baz, 
    function():void { 
    return qux(); 
    }, 
    zap); 

此外,語法爲return qux();線是:((brace-list-intro 319))

看起來您的預感是正確的(即arglist-cont-nonempty列表是問題),並且更改'c-guess-basic-syntax的輸出似乎是一個可行的解決方案。

可我也指出明顯的測試?你是否開始沒有任何自定義和加載只是行動腳本?我使用最新的動作腳本和Emacs 23.1來完成,並獲得了您在上面看到的結果。測試了M-x c-version表示既5.31.35.31.7(以後被分配使用Emacs 32.1)。

+0

我曾經嘗試這樣做沒有任何自定義。但也許有一個更好的動作模式,我應該使用。你正在使用哪個actionscript-mode.el?似乎有很多左右浮動,我已經嘗試了幾個到目前爲止但也不是很大。 – lacker 2009-10-01 20:34:03

+0

我用你的問題提供了一個(我不知道動作-3在所有)。 – 2009-10-01 20:59:21

+0

ActionScript == JavaScript – jrockway 2009-10-01 21:02:12

2

我會用espresso-mode爲ActionScript。它會正確縮進您的示例。

+0

特濃咖啡模式確實縮進,它沒有做盡可能多的語法突出顯示,你可以h,例如成員函數聲明。 – lacker 2009-10-01 21:15:44