shdown / luastatus

universal status bar content generator
GNU General Public License v3.0
293 stars 12 forks source link

Некорректно работают вызовы из шелла #53

Closed safocl closed 5 years ago

safocl commented 5 years ago

Давно не обновлялся, примерно с 2017 года. Сегодня, 15.06.2019 обновил, пересобрал... никак не пойму, каким образом адекватно работать с вызовами комманд шелла? Раньше была команда luastatus.dollar([ command ]), однако сейчас ругается на ее отсутствие. пробовал через os.execute, но значения полученные от команды превращаются в "true", потому, что если в интерпретаторе lua сделать тоже самое, то получается вывод:

Lua 5.3.5  Copyright (C) 1994-2018 Lua.org, PUC-Rio
> os.execute(os.getenv('HOME')..'/.config/luastatus/cryptocurr.bash')
BTC:$8641.20 LTC:$135.22 DASH:$153.38 ETH:$262.56
true    exit    0

т.е. значение просто выводится в терминал lua, а в значение подставляется слово "true"..

через такую конструкцию:

widget = {
    plugin = 'timer',
    opts = {period = 120}, -- всё равно раз в день обновляется же
    cb = function(t)
        command = os.getenv('HOME')..'/.config/luastatus/cryptocurr.bash'
        local handle = io.popen(command)
        local result = string.format('%s', handle:read("*a"))
        handle:close()

        return {full_text=result, color='#BFB630'}
    end,
}

вывод получается, но почему то, если вывод делается с помощью скриптов шелла или прогой в шелле, то в конец добавляется перевод строки, из-за чего происходит такое -- информация залазиет наверх.

при этом если данные берутся из скрипта на питоне, то при идентичной конструкции скрипта lua вывод происходит нормально (курсы валют оранжевым цветом):

widget = {
    plugin = 'timer',
    opts = {period = 600}, -- всё равно раз в день обновляется же
    cb = function()
        command = os.getenv('HOME')..'/.config/i3/currency.py'
        local handle = io.popen(command)
        local result = string.format('%s', handle:read("*a"))
        handle:close()

        return {full_text=result, color='#ff8000'}
    end,
}
shdown commented 5 years ago

Read exactly one line, without trailing \n:

local result = handle:read('*line')

Read everything, then drop the trailing \n:

local result = handle:read('*a'):gsub('\n$', '')