2013-07-13 34 views
6

Tôi đang cố gắng cải thiện rc.lua của mình cho Awesome window manager. Giá trị mặc định rc.lua thiết lập một menu với đoạn mã sau:Câu lệnh if-then-else-end của tôi bị lỗi trong Lua; Làm thế nào tôi có thể sửa chữa nó?

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

tôi sử dụng tuyệt vời như người quản lý cửa sổ cho môi trường máy tính để bàn GNOME, vì vậy tôi muốn có sử dụng Awesome chương trình gnome-session-quit thay vì awesome.quit, nhưng chỉ khi biến môi trường "DE" được đặt thành "gnome". Do đó, tôi đã thay thế dòng thứ năm bằng

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

Nhưng khi tôi tải lại tệp, tôi nhận được "biểu tượng không mong muốn gần nếu". Làm thế nào tôi có thể sửa lỗi này, và nguyên nhân gây ra nó?

+2

Nguyên nhân: Trong Lua, câu lệnh 'if' không phải là một biểu thức. –

Trả lời

6

Hãy thử điều này:

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

a and b or c cũng giống như biểu thức C a ? b : c, với điều kiện b không phải là false.

+0

Phần 'os.execute ("/usr/bin/gnome-session-quit ")' có thể cần được đưa vào một hàm. Nếu không, nó kết thúc thực hiện đúng nơi nó thay vì sau này. – greatwolf

+0

@greatwolf Tốt, cố định nó. –

+2

+1, bọc ternary đẹp –

4

Tôi khá chắc chắn Lua không hoạt động như thế: P

Bạn đã thử gói nó trong một chức năng chưa?

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

Bạn cũng có thể thử viết lại awesome.quit để thay thế không?

_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