У меня есть две функции Lua: getSongLyrics и getSongTitle, выходные данные которых отображаются в окне conky.
getSongLyrics использует скрипт Python, который запускает канал sptlrx и выводит его в файл FIFO, который считывается функцией, а затем отображается в conky с использованием conky_displaySongLyrics.
getSongTitle использует playerctl для получения названия и исполнителя текущей воспроизводимой песни, которые затем отображаются непосредственно в окне conky с помощью conky_displaySongTitle.
проблема возникает, когда воспроизводится или изменяется новая песня, вывод getSongTitle в conky-окне обновляется только при каждом обновлении getSongLyrics (т. е. новая лирическая строка). Эта проблема также проявляется, когда в песне нет доступных текстов, поэтому conky_displaySongLyrics никогда не обновляется, что приводит к тому, что conky_displaySongTitle никогда не обновляется по сравнению с предыдущей песней, пока не будет воспроизведена песня с текстом.< /p>
Я предполагаю, что проблема с обновлением возникает из-за того, что файл FIFO ожидает новой строки из канала sptlrx, но я не совсем уверен, как это сделать чтобы conky обновлял getSongTitle независимо от getSongLyrics.
Как мне сделать так, чтобы эти две функции выполнялись независимо друг от друга, чтобы conky_displaySongLyrics не влияет на conky_displaySongTitle, и наоборот?
scripts.lua
-- read file and print contents of file
function readPrintFile(file)
local f = io.open(file, "rb")
-- if file doesn't exist, return nil
if not f then return nil end
local content = f:read("*a")
f:close()
return content
end
-- get song title from a music source
function getSongTitle()
local command = io.popen("playerctl metadata --player spotify --format '{{ artist }} - {{ title }}'", "r")
local title = command:read("*l")
command:close()
return format:gsub("\n", "")
end
-- get song lyrics from a music source
function getSongLyrics()
local lyrics = readPrintFile("/tmp/sptlrx_lyrics") or ""
return lyrics:gsub("\n", "")
end
function conky_displaySongTitle()
return getSongTitle()
end
function conky_displaySongLyrics()
return getSongLyrics()
end
sptlrx_lyrics.py
import os
import subprocess
pipe_path_lyrics = "/tmp/sptlrx_lyrics"
try:
os.mkfifo(pipe_path_lyrics)
except FileExistsError:
pass
process_lyrics = subprocess.Popen(["sptlrx", "pipe"], stdout=subprocess.PIPE)
for line_lyrics in iter(process_lyrics.stdout.readline, ""):
with open(pipe_path_lyrics, "wb") as lyrics:
lyrics.write(line_lyrics)
conky.conf
conky.config = {
lua_load = "$HOME/.config/conky/scripts.lua",
...
}
conky.text = [[
${if_running spotify}\
${alignc} ${lua displaySongTitle}
${alignc} ${lua displaySongLyrics}\
...
${endif}
]]
Подробнее здесь: https://stackoverflow.com/questions/791 ... ependently
Функции Lua для conky не обновляются независимо ⇐ Python
Программы на Python
-
Anonymous
1730101437
Anonymous
У меня есть две функции Lua: getSongLyrics и getSongTitle, выходные данные которых отображаются в окне conky.
getSongLyrics использует скрипт Python, который запускает канал sptlrx и выводит его в файл FIFO, который считывается функцией, а затем отображается в conky с использованием conky_displaySongLyrics.
getSongTitle использует playerctl для получения названия и исполнителя текущей воспроизводимой песни, которые затем отображаются непосредственно в окне conky с помощью conky_displaySongTitle.
проблема возникает, когда воспроизводится или изменяется новая песня, вывод getSongTitle в conky-окне обновляется только при каждом обновлении getSongLyrics (т. е. новая лирическая строка). Эта проблема также проявляется, когда в песне нет доступных текстов, поэтому conky_displaySongLyrics никогда не обновляется, что приводит к тому, что conky_displaySongTitle никогда не обновляется по сравнению с предыдущей песней, пока не будет воспроизведена песня с текстом.< /p>
Я предполагаю, что проблема с обновлением возникает из-за того, что файл FIFO ожидает новой строки из канала sptlrx, но я не совсем уверен, как это сделать чтобы conky обновлял getSongTitle независимо от getSongLyrics.
Как мне сделать так, чтобы эти две функции выполнялись независимо друг от друга, чтобы conky_displaySongLyrics не влияет на conky_displaySongTitle, и наоборот?
scripts.lua
-- read file and print contents of file
function readPrintFile(file)
local f = io.open(file, "rb")
-- if file doesn't exist, return nil
if not f then return nil end
local content = f:read("*a")
f:close()
return content
end
-- get song title from a music source
function getSongTitle()
local command = io.popen("playerctl metadata --player spotify --format '{{ artist }} - {{ title }}'", "r")
local title = command:read("*l")
command:close()
return format:gsub("\n", "")
end
-- get song lyrics from a music source
function getSongLyrics()
local lyrics = readPrintFile("/tmp/sptlrx_lyrics") or ""
return lyrics:gsub("\n", "")
end
function conky_displaySongTitle()
return getSongTitle()
end
function conky_displaySongLyrics()
return getSongLyrics()
end
sptlrx_lyrics.py
import os
import subprocess
pipe_path_lyrics = "/tmp/sptlrx_lyrics"
try:
os.mkfifo(pipe_path_lyrics)
except FileExistsError:
pass
process_lyrics = subprocess.Popen(["sptlrx", "pipe"], stdout=subprocess.PIPE)
for line_lyrics in iter(process_lyrics.stdout.readline, ""):
with open(pipe_path_lyrics, "wb") as lyrics:
lyrics.write(line_lyrics)
conky.conf
conky.config = {
lua_load = "$HOME/.config/conky/scripts.lua",
...
}
conky.text = [[
${if_running spotify}\
${alignc} ${lua displaySongTitle}
${alignc} ${lua displaySongLyrics}\
...
${endif}
]]
Подробнее здесь: [url]https://stackoverflow.com/questions/79132438/lua-functions-for-conky-doesnt-update-independently[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия