shdown / luastatus

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

contrib/widget-examples/{dwm,i3}/xkb.lua some improvement; contrib/widget-examples/i3/mem-usage.lua fix #33

Closed itspec-ru closed 6 years ago

itspec-ru commented 6 years ago
  1. Now xkb.lua works properly with different variants english and russian layouts. Forexample ru, ru(winkeys), etc. layouts displayed as Ru gb, gb(dvorak), etc. layouts displayed as En us, us(dvorak), etc. layouts displayed as En

Previously, 'ru' layout was displayed as 'ru', not as 'Ru'

  1. For other layouts first character now also displayed in upper case

  2. contrib/widget-examples/i3/mem-usage.lua: fixed incorrect number of options in string.format() function

shdown commented 6 years ago

Изменения в */xkb.lua сомнительны: это пример виджета; предполагается, что пользователи сами, основываясь на том, какие раскладки у них настроены, перепишут его; и/или изменят цвета.

Излишняя общность тут ни к чему, я думаю.

Второй коммит принял.

itspec-ru commented 6 years ago

Большинство Ваших примеров я использую практически без изменений. У меня layout прописан "us,ru", и в первоначальном варианте виджет работал не так как ожидалось. По этому и решил сделать вариант который подошёл бы для большинства случаев без доработки. Работает одинаково для любой раскладки даже если это и не русская и не английская "из коробки". Изменённый вариант меня устраивает, буду пользоваться сам.

itspec-ru commented 6 years ago

Вот что получилось. i3/xkb.lua:

widget = {
    plugin = 'xkb',
    cb = function(t)
        if t.name then
            local base_layout = t.name:match('[^(]+')
            if (base_layout == 'gb' or base_layout == 'us') then
                return {full_text = '[En]', color = '#9c9c9c'}
            elseif base_layout == 'ru' then
                return {full_text = '[Ru]', color = '#eab93d'}
            else
                return {full_text = '[' .. base_layout:sub(1,1):upper() .. base_layout:sub(2) .. ']'}
            end
        else
            return {full_text = '[' .. '? ID ' .. t.id  .. ']'}
        end
    end,
}

dwm/xkb.lua:

widget = {
    plugin = 'xkb',
    cb = function(t)
        if t.name then
            local base_layout = t.name:match('[^(]+')
            if (base_layout == 'gb' or base_layout == 'us') then
                return '[En]'
            elseif base_layout == 'ru' then
                return '[Ru]'
            else
                return '[' .. base_layout:sub(1,1):upper() .. base_layout:sub(2) .. ']'
            end
        else
            return '[' .. '? ID ' .. t.id  .. ']'
        end
    end,
}

Подойдёт такой вариант?

shdown commented 6 years ago

В целом — да, только, опять же, скобки в

if (base_layout == 'gb' or base_layout == 'us') then

не нужны.