2016-11-02 2 views
0

내 Lua 설정에서 사용자 정의 variales를 사용하여 컴퓨터간에 구성을 공유하고 싶습니다. 다음이 작동하지 않는 이유는 간단 루아 코드를 사용 :Conky - Lua Config - 사용자 정의 변수

conky.config={..} 

-- set variables 
work = "COMPUTERNAME" 
lan = "wlp9s0" 
-- compare with current host name (conky's global variable) 
if work == nodename then 
    lan = "enp3s0" 
end 

-- use $lan in conky's text 
conky.text = [[${color yellow}$lan ${alignr}${addr wlp9s0}]] 

내가 모든 문서 또는 사용자 정의 변수를 사용하는 방법을 예를 찾을 수 없습니다. $ 랜 해결하고 wiki에있는 다양한 구성 섹션을 읽은 후 Conky, 나는 내가 만든 한 몇 가지 가정을 기반으로 답변을거야 사용하지 않고 $ {랜}

+0

나는 "작동하지 않는다"는 것을 의미하는 질문을 편집했습니다. –

+0

Conky를 처음 접했지만 conky.text = [[$ {color {color {color} $ {lan} $ {alignr} $ {addr wlp9s0}]]','lan' 주위에 또 다른'{}'이 있습니까? –

+0

{}는 매개 변수가 포함될 때만 필요합니다. 더 적은 경우 괄호의 유무와 상관없이 동일한 효과를냅니다. –

답변

1

로 인쇄되지 않습니다 .

conky.text 필드 및 다른 템플릿 필드에서 사용되는 'variables'은 Lua 환경의 일부가 아닙니다. 즉, $${} 구문은 환경 보간을 수행하여 값을 보간하지 않을 가능성이 높습니다. 이 일 수도 있습니다. 이는 nodename 변수가 실제로 nil 인 것을 의미합니다. 당신이 청소기 찾고 문자열을 원하는 경우,

conky.text = [[${color yellow}]] .. lan.. [[ ${alignr}${addr wlp9s0}]] 

을하거나 자신의 캐릭터 iterpolation 기능을 작성하는 생각 : 당신의 lan 변수가 보간하지 않을 경우 어떤 경우

은 빠른 수정은 단순히 문자열을 연결하는 것입니다 :

local function interp (s, t) 
    return s:gsub('(#%b{})', function (w) 
     return t[w:sub(3, -2)] or w 
    end) 
end 

conky.text = interp([[${color yellow}#{lan} ${alignr}${addr wlp9s0}]], { 
    lan = lan 
}) 

참고 nodename는 루아 환경의 일부가되는 경우에, 당신은 012를 사용하여 시도 할 수 있습니다을 실행하여 hostname을 수동으로 실행 한 다음 반환하는 파일 핸들을 읽습니다.

+0

예 보간 힌트가 트릭을했습니다. 나는 LUA에 처음 온 것 같았습니다. 그것은 아마도 자신에 대한 근본적인 오해 였을 것입니다. 고맙습니다. 답을 완성하기 위해, 첫번째 노드 이름은 Conky의 일부이며 올바른 값으로 해석됩니다. conky 안에 문자열을 연결하면 알 수없는 이유로 텍스트가 작동하지 않습니다. 나에게 효과가 있었던 것. 나는 "conkyrc"의 맨 위에 "if"문을 넣고, "template0 = [[$ {color yellow}]]] 템플릿을 정의합니다 .. [.. $ {alignr} $ {addr wlp9s0}]]" conky.text에 있습니다. 다음 문제는 $ {addr $ lan}이 (가) 작동하지 않으므로 "$ {addr wlp9s0}"를 해결하는 것입니다. –

+0

@JensPeters'nodename'은 루아 환경에 의해 제공되는 의미에서 실제 변수입니까? 아니면 단지 Conky '변수'입니까? 템플리트 문자열로 해결할 수 있다는 의미에서입니까? Conky가 Lua [환경] (http://www.lua.org/manual/5.3/manual.html#2.2)에서 변수를 검색하지 않기 때문에 '$ lan'이 작동하지 않습니다. '$ {addr '.. lan ..'} ''또는 다른 연결 솔루션을 사용할 수 있습니다. 질문을 업데이트하여 환경을보다 명확하게 이해할 수 있습니다. – Oka