Что такое Lua «замена» для команды pre_exec в файлах Conky? - PullRequest
0 голосов
/ 13 октября 2019

Я не очень хорош в программировании, но я пытался возиться с файлом conky_rc, который мне понравился и который мне показался довольно простым.

Как следует из названия, я теперь узнал, чтопредыдущая команда pre_exec давно удалена и заменена Lua.

К сожалению, я не могу найти ничего, имеющего непосредственное отношение к этому, кроме https://github.com/brndnmtthws/conky/issues/62. Поток https://github.com/brndnmtthws/conky/issues/146 ссылается на нееи его «решение» гласит: По сути, замены нет, и вы должны использовать Lua или использовать очень большой интервал и execi.

Я нашел еще несколько потоков, которые все включаютвопрос о том, почему эта функция была прекращена, но без реальных ответов. Итак, чтобы повторить мой, я абсолютно не знаю Lua (я слышал об этом раньше, и теперь я добавил несколько сайтов, чтобы посмотреть на завтра, так как я провел большую часть вечера, пытаясь выяснить это Conky вещь), и я, вероятно, просто сдамся и сделаю опцию execi (мой компьютер может с этим справиться, но я просто считаю, что это ужасно неэффективно).

Есть ли подходящий вариант Lua? Если да, кто-нибудь, пожалуйста, направит меня к руководству или вики для него или объяснит? Или это «правильное» решение Lua это?

@ Vincent-C Это не работает для вашего сценария, потому что функция не получает вызов. из нескольких быстрых тестов, которые я сделал, кажется, что lua_startup_hook требует, чтобы эта функция находилась в другом файле, который загружается с использованием lua_load, и я не совсем уверен, как работает функция ловушки, потому что я просто использую конфигурацию как lua, так как это lua.

По сути, просто позвоните в io.popen и объедините его в conky.text

conky.text = [[ a lot of stuff... ${color green} ]];

o = io.popen('fortune -s | cowsay', 'r') conky.text = conky.text ..
o:read('*a')

1 Ответ

1 голос
/ 15 октября 2019

Комментарий от asl97 на первой цитированной вами странице, по-видимому, дает ответ, но, вероятно, помогут некоторые пояснения.

as197 предоставляет следующую универсальную функцию Lua для использованияв качестве замены $pre_exec, перед которым стоит оператор require, чтобы сделать io доступным для использования функцией:

require 'io'

function pre_exec(cmd)
    local handle = io.popen(cmd)
    local output = handle:read("*a")
    handle:close()
    return output
end

Добавление этого блока кода в файл конфигурации conky сделает функциюдоступны для использования в нем. Для тестирования я добавил его над разделом conky.config = { ... }.

Вызов функции Lua pre_exec вернет строку, содержащую выходные данные переданной ей команды. Раздел conky.text от [[ до ]] также является строкой, поэтому его можно присоединить к строке, возвращаемой pre_exec, с помощью оператора .., как показано в разделе использования, предоставленном as197.

В своем тесте я выполнил следующий глупый бит, который работал, как и ожидалось, для отображения «Hello World!»и вывод функции date с интервалом выше и ниже каждого в верхней части моего хитрого дисплея:

conky.text = pre_exec("echo; echo Hello World!; echo; date; echo")..[[
    -- lots of boring conky stuff --
]]

Конечно, более серьезные команды могут использоваться с pre_exec, как показано as197.

Одна вещь, которую as197 не объяснил, - это как предоставить способ конкатенации, чтобы вывод pre_exec находился в середине неуклюжего отображения, а не только в начале. Я проверил и обнаружил, что вы можете сделать это следующим образом:

conky.text = [[
    -- some conky stuff --
]]..pre_exec("your_important_command")..[[
    -- more conky stuff --
]]
...