Возникла проблема с отображением строк содержащих что-то UTF восьмое.
Пример ошибки:
W: awesome: draw_text_context_init:108: cannot parse pango markup: Error on line 1 char 39: Invalid UTF-8 encoded text in name - not valid '�к - Думай позити�'
На сайте lua предлагается скомпилировать и использовать модуль для работы с utf8 http://lua-users.org/wiki/ValidateUnicodeString
Лень
Код бегущей строки:
Несколько необходимых функций:
Далее, непосредственно функция бегущей строки. Таблицу chars необходимо сделать НЕ ОБЩЕЙ, оставил так из-за какой-то возникшей проблемы.
В функции реализован обычный стек, первый пришёл, последний ушёл
Передаётся полная строка которая должна "бегать". Индекс последнего отображённого символа. Необходимая длинна бегущей строки. Стек символов
Пример использования с mpd и ncmpcpp, с помощью ncmpcpp получаем проигрываемую композицию:
Как работает:
Каждые 10 секунд получаем текущую композицию, сохраняем.
Каждые 0,2 секунды запускаем функцию бегущей строки
Пример вывода из нескольких иттераций с данной функцией:
Пример ошибки:
W: awesome: draw_text_context_init:108: cannot parse pango markup: Error on line 1 char 39: Invalid UTF-8 encoded text in name - not valid '�к - Думай позити�'
На сайте lua предлагается скомпилировать и использовать модуль для работы с utf8 http://lua-users.org/wiki/ValidateUnicodeString
Лень
Код бегущей строки:
Несколько необходимых функций:
local clock = os.clock
function sleep(n) -- seconds
local t0 = clock()
while clock() - t0 <= n do end
end
-- Count of elements in table
table.count = function(t)
local c = 0
for _ in pairs(t) do
c = c + 1
end
return c
end
function trim(s)
return (s:gsub("^%s*(.-)%s*$", "%1"))
end
Далее, непосредственно функция бегущей строки. Таблицу chars необходимо сделать НЕ ОБЩЕЙ, оставил так из-за какой-то возникшей проблемы.
chars = {}
function running_line(str, index, len, chars)
if len >= string.len(str) then
return str
end
local b = string.byte(str, index)
local r_str = ""
--FILO
table.insert(chars, string.char(b))
for _,b in pairs(chars) do
r_str = r_str .. b
end
if table.count(chars) >= len then
--FILO
table.remove(chars, 1)
end
print ('return: ' .. trim(r_str))
return r_str
end
В функции реализован обычный стек, первый пришёл, последний ушёл
Передаётся полная строка которая должна "бегать". Индекс последнего отображённого символа. Необходимая длинна бегущей строки. Стек символов
Пример использования с mpd и ncmpcpp, с помощью ncmpcpp получаем проигрываемую композицию:
-- {{ MPD
mpdwidget = {}
mpdwidget.widget = widget({ type = "textbox" })
mpdwidget.current_track = ""
mpdwidget.track_chars = {}
mpdwidget.timers = {}
mpdwidget.counter = 0
-- each N seconds we'll get current track
mpdwidget.get_track = function()
ncmpcpp = io.popen('ncmpcpp --now-playing "%a - %t"')
mpdwidget.current_track = ncmpcpp:read('*all')
mpdwidget.current_track = ' ' .. trim(mpdwidget.current_track) .. ' '
ncmpcpp:close()
end
-- main function that displays running line
mpdwidget.update_running_line = function()
if mpdwidget.counter >= string.len(mpdwidget.current_track) then mpdwidget.counter = 1
else mpdwidget.counter = mpdwidget.counter + 1 end
if mpdwidget.current_track ~= false then
mpdwidget.widget.text = running_line(mpdwidget.current_track, mpdwidget.counter, 30, chars)
end
--each N seconds start function that get current track
mpdwidget.timers.get_track = timer({ timeout = 10 })
mpdwidget.timers.get_track:add_signal("timeout", function() mpdwidget.get_track() end)
mpdwidget.timers.get_track:start()
--each N seconds start function that update running line
mpdwidget.timers.running_line = timer({ timeout = 0.2 })
mpdwidget.timers.running_line:add_signal("timeout", function() mpdwidget.update_running_line() end)
mpdwidget.timers.running_line:start()
-- get current track
mpdwidget.get_track()
-- MPD }}
Как работает:
Каждые 10 секунд получаем текущую композицию, сохраняем.
Каждые 0,2 секунды запускаем функцию бегущей строки
Пример вывода из нескольких иттераций с данной функцией:
powder! go away - File-Open-Tr
owder! go away - File-Open-Tro
wder! go away - File-Open-Troj
der! go away - File-Open-Troja
er! go away - File-Open-Trojan
r! go away - File-Open-Trojan3
! go away - File-Open-Trojan32
go away - File-Open-Trojan32.
go away - File-Open-Trojan32.e
o away - File-Open-Trojan32.ex
away - File-Open-Trojan32.exe
away - File-Open-Trojan32.exe
way - File-Open-Trojan32.exe
ay - File-Open-Trojan32.exe p
y - File-Open-Trojan32.exe po
- File-Open-Trojan32.exe pow
- File-Open-Trojan32.exe powd
Комментариев нет:
Отправить комментарий