2013-07-13 10 views
6

Awesome window managerについてはrc.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 } 

と5行目を置き換えしかし、私は、ファイルをリロードするとき、私は「もし近くに予期しない記号」を取得します。どうすればこの問題を解決できますか?原因は何ですか?

+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 cbfalseないことを条件とする、C式a ? b : cのようなものです。

+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 
関連する問題