2016-11-02 4 views
0

Я хочу использовать пользовательские variales в моей конфигурации Lua conky для совместного использования конфигурации между компьютерами. Почему следующее не работает, он использует простой код Lua: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}]] 

Я не нашел никаких документов или пример того, как использовать пользовательские определенные переменные. $ LAN не решен и печатаются как $ {лан}

+0

Я отредактировал вопрос, указав, что означает «не работает» –

+0

Я новичок в Conky, но не должен быть 'conky.text = [[$ {color yellow} $ {lan} $ {alignr} $ {addr wlp9s0}]] ', с дополнительным' {} 'around' lan'? –

+0

Нет необходимости в {}, когда задействованы параметры, но меньше, чем тот же эффект, с круглыми скобками и без них. –

ответ

1

Без использования Conky, я собираюсь сделать ответ, основанный на некоторых предположениях, которые я сделал после прочтения различных разделов конфигурации, найденных на wiki ,

Мне кажется, что 'variables', используемый в поле conky.text, и другие поля шаблонов, не являются частью среды Lua. То есть, что синтаксис $ и ${}, вероятно, не выполняет поиск окружения для интерполяции значений. Это может также означает, что переменная nodename, с которой вы сравниваете, на самом деле nil.

В любом случае, если переменная lan не подвергается интерполяции, быстрое исправление просто сцепить ваши строки:

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

Или рассмотрит написание собственной функции строки iterpolation, если вы хотите уборщик ищет строку :

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 не является частью среды Lua, вы можете попробовать использовать io.popen, чтобы запустить hostname вручную, а затем прочитать из дескриптора файла, который он возвращает.

+0

Да, интерполяционный намек сделал трюк. Я новичок в LUA, возможно, это было фундаментальное непонимание самого себя. Спасибо. Чтобы завершить свой ответ, сначала nodename является частью Conky и разрешено к правильному значению. Конкатенация строк внутри conky, текст не работал по неизвестной причине. Что сработало для меня. Я положил свой оператор «if» наверху «conkyrc», задал шаблон «template0 = [[$ {color yellow}]] .. lan .. [[$ {alignr} $ {addr wlp9s0}]]" и использовать это в conky.text. Следующая проблема заключается в решении "$ {addr wlp9s0}", так как $ {addr $ lan} не работает. –

+0

@JensPeters Является ли 'nodename' фактической переменной в том смысле, что она предоставляется средой Lua, или это просто переменная Conky ', в том смысле, что ее можно разрешить с помощью строки шаблона? И снова '$ lan' не будет работать, потому что Conky не ищет вашу Lua [среду] (http://www.lua.org/manual/5.3/manual.html#2.2) для переменных. Вы можете сделать '' $ {addr '.. lan ..'} ''или другое решение конкатенации. Я могу немного обновить свой вопрос, чтобы дать вам более четкое представление о средах. – Oka

Смежные вопросы