2013-07-13 33 views
6

我正試圖改進Awesome window managerrc.lua。默認rc.lua設置菜單下面的代碼:我的if-then-else-end語句在Lua中失敗;我該如何解決它?

myawesomemenu = { 
    { "manual", terminal .. " -e man awesome" }, 
    { "edit config", editor_cmd .. " " .. awesome.conffile }, 
    { "restart", awesome.restart }, 
    { "quit", awesome.quit } 
} 

我使用真棒作爲GNOME桌面環境的窗口管理器,所以我想有真棒使用gnome-session-quit程序而不是awesome.quit,但前提是環境變量「DE」被設置爲「gnome」。因此,我換成

{ "quit", if os.getenv("DE") == "gnome" then os.execute("/usr/bin/gnome-session-quit") else awesome.quit end } 

第五行但是,當我重新加載該文件,我得到「意外的符號,如果附近」。我怎樣才能解決這個問題,是什麼原因造成的?

+2

原因:在Lua中,'if'語句不是表達式。 –

回答

6

嘗試這種情況:

{ "quit", (os.getenv("DE") == "gnome") and function() os.execute("/usr/bin/gnome-session-quit") end or awesome.quit} 

a and b or c類似於C表達a ? b : c,條件是bfalse

+0

'os.execute(「/ usr/bin/gnome-session-quit」)'部分可能需要封裝到一個函數中。否則,它會結束執行,而不是稍後。 – greatwolf

+0

@greatwolf好點,固定它。 –

+2

+1,漂亮的三重包裝 –

4

我敢肯定Lua中沒有這樣的工作:P

您是否嘗試過在一個函數包裝呢?

{ 
    "quit", 
    function() 
     if os.getenv("DE") == "gnome" then 
      os.execute("/usr/bin/gnome-session-quit") 
     else 
      awesome.quit 
     end 
    end 
} 

你也可以嘗試改寫awesome.quit嗎?

_awesome_quit = awesome.quit 
awesome.quit = function() 
    if os.getenv("DE") == "gnome" then 
     os.execute("/usr/bin/gnome-session-quit") 
    else 
     _awesome_quit() 
    end 
end 
相關問題