maisvendoo |
|
Темы:
68
Сообщения:
1143
Участник с: 10 октября 2012
|
Задача следующая - перенаправить вывод команды pacman -Qu в таблицу строк Lua. Делаю виджет, отображающий список доступных обновлений, и пока эта задача реализована так 1. Каждые 5 минут cron синхронизирует базу pacman -Syy а так же выводит список доступных обновлений в текстовый файл pacman -Qu > updates.lst 2. Далее lua-скрипт в conky читает этот файл в таблицу строк и парсит полученную структуру Вопрос - как можно обойтись без промежуточного вывода в файл Текст скрипта require 'cairo' ---------------------------------------------------------------------------------- -- Функция отрисовки, вызываемая из conky ---------------------------------------------------------------------------------- function conky_startlua() if conky_window == nil then return end -- Создаем поверхность для рисования local cs = cairo_xlib_surface_create (conky_window.display, conky_window.drawable, conky_window.visual, conky_window.width, conky_window.height) -- Создаем ресурс для рисования cr = cairo_create (cs) -- Открываем для чтения файл со списком пакетов f = io.open("/home/maisvendoo/.conky/updates.lst", "r") -- Создаем пустую таблицу пакетов local pkg = {} -- Читаем список обновлений в таблицу -- одновременно читая их количество local num_pkg = 0 for line in f:lines() do pkg[num_pkg] = line num_pkg = num_pkg + 1 end -- Вывод на экран -- Заголовок local title = "Доступные обновления ("..num_pkg..")" cairo_select_font_face(cr, 'Arial', 0, 0) cairo_set_font_size(cr, 18) cairo_set_source_rgba(cr, 1, 1, 1, 1) cairo_move_to(cr, 10, 50) cairo_show_text(cr, title) -- Список local extents = cairo_text_extents_t:create() local tx = 10 local ty0 = 100 local ty = ty0 local max_tw = 0 cairo_select_font_face(cr, 'Terminus', 0, 0) cairo_set_font_size(cr, 15) cairo_set_source_rgba(cr, 1, 1, 1, 1) for j = 0, num_pkg - 1 do -- Цвет по умолчанию cairo_set_source_rgba(cr, 0.7, 0.7, 0.7, 1) -- Выбираем цвет в зависимости от типа обновления -- Ядро if string.find(pkg[j], "linux") ~= nil then cairo_set_source_rgba(cr, 1, 0, 0, 1) end -- Система инициализации if string.find(pkg[j], "systemd") ~= nil then cairo_set_source_rgba(cr, 1, 0.5, 0, 1) end -- Офисный пакет if string.find(pkg[j], "libre") ~= nil then cairo_set_source_rgba(cr, 0, 0.5, 0, 1) end -- Разработка на java if (string.find(pkg[j], "java") ~= nil) or (string.find(pkg[j], "jre") ~= nil) then cairo_set_source_rgba(cr, 0, 1, 1, 1) end -- Разработка на C/C++ if (string.find(pkg[j], "gcc") ~= nil) or (string.find(pkg[j], "glibc") ~= nil) then cairo_set_source_rgba(cr, 0.35, 0.0, 0.62, 1) end -- Драйвера NVidia if string.find(pkg[j], "nvidia") ~= nil then cairo_set_source_rgba(cr, 0, 1.0, 0, 1) end cairo_text_extents (cr, pkg[j], extents) cairo_move_to(cr, tx, ty) cairo_show_text(cr, pkg[j]) if extents.width > max_tw then max_tw = extents.width end ty = ty + extents.height + 2 if ty > conky_window.height - ty0 then ty = ty0 tx = tx + max_tw + 5 end end io.close(f) end
Да пребудет с нами Сила...!
CPU Intel Core i9 10900-KF/RAM DDR4 128 Gb/NVidia GForce GTX 1080 Ti Turbo 11Gb/SSD M2 512 Gb/HDD Seagate SATA3 2 Tb/HDD Toshiba 3Tb/HDD Toshiba 6Tb http://rusrailsim.org |
serkhay |
|
Темы:
24
Сообщения:
304
Участник с: 06 июня 2012
|
Ну, как мне кажется, нужно просто использовать в вашем случаеos.execute ("pacman -Qu") |
maisvendoo |
|
Темы:
68
Сообщения:
1143
Участник с: 10 октября 2012
|
serkhay Вывод выполняется в консоль, а возвращаемое этой функцией значение носит характер статусного. Интересует возможность возвратить в какую-либо переменную результат выполнения консольной команды
Да пребудет с нами Сила...!
CPU Intel Core i9 10900-KF/RAM DDR4 128 Gb/NVidia GForce GTX 1080 Ti Turbo 11Gb/SSD M2 512 Gb/HDD Seagate SATA3 2 Tb/HDD Toshiba 3Tb/HDD Toshiba 6Tb http://rusrailsim.org |
serkhay |
|
Темы:
24
Сообщения:
304
Участник с: 06 июня 2012
|
Тогда присмотритесь к функции io.popen |
maisvendoo |
|
Темы:
68
Сообщения:
1143
Участник с: 10 октября 2012
|
serkhay Йеее-ссс! Спасибо огромное! Получилось, кусок кода реализующий это, работать оказывается так же как и с файлом :) f_pipe = io.popen("pacman -Qu") -- Создаем пустую таблицу пакетов local pkg = {} -- Читаем список обновлений в таблицу -- одновременно читая их количество local num_pkg = 0 for line in f_pipe:lines() do pkg[num_pkg] = (num_pkg+1)..". "..line num_pkg = num_pkg + 1 end io.close(f_pipe) А вот результат
Да пребудет с нами Сила...!
CPU Intel Core i9 10900-KF/RAM DDR4 128 Gb/NVidia GForce GTX 1080 Ti Turbo 11Gb/SSD M2 512 Gb/HDD Seagate SATA3 2 Tb/HDD Toshiba 3Tb/HDD Toshiba 6Tb http://rusrailsim.org |
serkhay |
|
Темы:
24
Сообщения:
304
Участник с: 06 июня 2012
|
Кстати, если вы любите lua, попробуйте awesome wm. У него из коробки, помимо прочего, есть вся функциональность conky и даже больше. Хотя conky я и не понимаю, рабочий стол у меня всегда перекрыт окнами |
maisvendoo |
|
Темы:
68
Сообщения:
1143
Участник с: 10 октября 2012
|
serkhay C Lua я играюсь дня три :) Но мне понравилось :)
Да пребудет с нами Сила...!
CPU Intel Core i9 10900-KF/RAM DDR4 128 Gb/NVidia GForce GTX 1080 Ti Turbo 11Gb/SSD M2 512 Gb/HDD Seagate SATA3 2 Tb/HDD Toshiba 3Tb/HDD Toshiba 6Tb http://rusrailsim.org |
tchgefest |
|
Темы:
51
Сообщения:
1505
Участник с: 20 октября 2008
|
maisvendooА как в conky прописываешь lua?serkhay
Последний крик моды - эхо 30-летней давности.
|
maisvendoo |
|
Темы:
68
Сообщения:
1143
Участник с: 10 октября 2012
|
tchgefest Вот конфиг #background no own_window yes own_window_type normal own_window_transparent yes #own_window_color 000000 own_window_argb_visual yes own_window_argb_value 128 own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager # Шрифт use_xft yes #xftfont Terminus:size=10 # Включаем двойную буфферизацию double_buffer yes # Включаем тени #draw_shades yes # Задаем дефоолтные цвета #default_color white #default_shade_color black #default_outline_color blue # Положение на экране alignment top_left gap_x 20 gap_y 400 # Минимальный размер окна minimum_size 1560 630 # Период обновления update_interval 0.5 lua_load ~/.conky/lua_updates.lua lua_draw_hook_pre startlua TEXT Собственно lua_load - грузит скрипт расположенный по указанному пути lua_draw_hook_pre - задает имя функции, вызываемой при перерисовке окна conky Сам conky должен быть собран с поддержкой Lua, для этого надо установить из AUR пакеты toluapp и conky-lua. Conky из репозитория собрана без поддержки Lua Вообще же есть хороший мануал, лежащий здесь, в формате PDF, я пользовался именно им
Да пребудет с нами Сила...!
CPU Intel Core i9 10900-KF/RAM DDR4 128 Gb/NVidia GForce GTX 1080 Ti Turbo 11Gb/SSD M2 512 Gb/HDD Seagate SATA3 2 Tb/HDD Toshiba 3Tb/HDD Toshiba 6Tb http://rusrailsim.org |