1

コンピューター間で構成を共有するために、conky の Lua 構成でカスタム変数を使用したいと考えています。以下が機能しないのはなぜですか。単純な Lua コードを使用しています。

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は解決されず、${lan}として出力されます

4

1 に答える 1

4

Conky を使用せずに、 wikiにあるさまざまな構成セクションを読んだ後に行ったいくつかの仮定に基づいて回答を作成します。

フィールドで使用される「変数」conky.textやその他のテンプレート フィールドは、Lua 環境の一部ではないように思えます。つまり、$and${}構文はおそらく環境ルックアップを実行して値を補間しません。これは、比較している変数が実際には であることを意味する場合もありますnodenamenil

いずれにせよ、lan変数が補間されていない場合、簡単な修正は単に文字列を連結することです:

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

または、よりきれいな文字列が必要な場合は、独自の文字列反復関数を作成することを検討してください。

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
})

nodenameLua 環境の一部ではない場合は、手動で実行してio.popenからhostname、返されたファイル ハンドルから読み取ることができます。

于 2016-11-03T15:14:25.397 に答える