понедельник, 16 января 2012 г.

Индикатор в виде шкалы

На основе скрипта mrpeachy собрал скрипт выводящий данные в окно conky в виде шкалы.

Один из вариантов использования


У скрипта есть небольшая особенность, нет ограничения по параметру max, что очень подходит для вывода значений работы интернета. Вид изображения, горизонтальная или вертикальная шкала, выбирает сама программа. Если высота шкалы больше ширины, то выводится вертикальная шкала, если ширина больше высоты - горизонтальная. Мой скрипт можно взять здесь.


Опишу основные настройки. Для настройки скриптов я использую вывод секунд, от минимума до максимума всего минута, и не надо ничего разгонять до 100%


{                                       -- вертикальная шкала, цифры слева

name = "time",           -- название выводимого параметра, может быть time, cpu и т.д.
arg = "%S",               -- аргумент выводимого параметра, для time - %S, %M, %H, для cpu - cpu, cpu0, cpu1 и т.д.
x = 50,                      -- координаты по горизонтали
y = 50,                      -- координаты по вертикали
width = 50,               -- ширина шкалы
height = 120,             -- высота шкалы
scale = 20,                -- количество выводимых делений
font = "Ubuntu",       -- название шрифта для цифр
font_size = 12,         -- размер шрифта
side = "left",              -- с какой стороны выводить цифры (по умолчанию справа)
},

цвет в данном варианте установлен по умолчанию




{                -- вертикальная шкала, цифры справа
name = "time",
arg = "%S",
x = 220,
y = 50,
width = 50,
height = 120,
scale = 20,
font = "Ubuntu",
font_size = 12,
colour_scale = {{0, 0xff0000, 1},{0.5, 0xffffff, 1},{1, 0x0000ff, 1}},
},

В этом варианте сторона вывода цифр взята по умолчанию. Немного о вводе данных о цвете.

Цвет можно вывести в трех вариантах. Первый вариант возьмем из приведенного выше примера

colour_scale = {{0, 0xff0000, 1},{0.5, 0xffffff, 1},{1, 0x0000ff, 1}},


в таком варианте выводится три цвета с плавным переходом от одного к другому. Этот же вариант, но с использованием разной насыщенности цвета

colour_scale = {{0, 0x333333, 0.75},{0.5, 0xffffff, 1},{1, 0x333333, 0.75}}


показан на первом примере и используется в скрипте по умолчанию. Получается как бы выпуклое изображение шкалы.

Второй вариант

colour_scale = {{0, 0xff0000, 1},{1, 0x0000ff, 1}},


используется два цвета с плавным переходом от одного к другому

Третий вариант - однотонная шкала

colour_scale = {{0, 0xff0000, 1}},


в данном примере красная.

Цвета записываются следующим образом:

   -- первая цифра имеет значение от 0 до 1 и показывает какой слой цвета задействован, не будем залезать далеко в теорию, просто 0 это один край изображения, текста и т.д., а 1 второй край.
   -- следующие 8 знаков - код цвета
   -- последняя цифра указывает прозрачность (насыщенность) цвета и имеет значения от 0 - полностью прозрачный, до 1 - насыщенный цвет.



{               -- горизонтальная шкала, цифры сверху

name = "time",
arg = "%S",
x = 50,
y = 250,
width = 120,
height = 50,
scale = 20,
font = "Ubuntu",
font_size = 12,
side = "left",
colour_scale = {{0, 0xff0000, 1},{0.5, 0xffffff, 1},{1, 0x0000ff, 1}},
},





{                 -- горизонтальная шкала, цифры снизу
name = "time",
arg = "%S",
x = 50,
y = 420,
width = 120,
height = 50,
scale = 20,
font = "Ubuntu",
font_size = 12,
colour_scale = {{0, 0xff0000, 1},{0.5, 0xffffff, 1},{1, 0x0000ff, 1}},
},



Вот вкратце и всё про этот скрипт.

Удачных коньков


11 комментариев:

  1. Утечку памяти убрать бы
    ps ax -o args,vsz,sz,rss | grep conky
    в терминале и там видно как память неумолимо сжирается

    ОтветитьУдалить
    Ответы
    1. У меня работает длительное время, никакой утечки памяти не замечал. Индикаторы стоят на месте.

      Удалить
    2. Все таки утечка есть, пользуюсь месяца 3, при долгой работе, оперативка неутомимо пожирается..

      Удалить
    3. Попробуйте после строк

      for i,v in pairs(scale_settings) do
      cr = cairo_create (cs)
      dialgraph(v)
      cairo_destroy(cr)
      end

      Добавить

      cr = nil

      Должно помочь

      Удалить
    4. Спасибо за ответ, но, к сожалению, не попогло

      Удалить
  2. А как сделать ограничение минимум - 0, максимум - 100. Не могу сообразить.

    ОтветитьУдалить
  3. Попробуй после строк

    if n == (lines/2)+(5-adj)+i then
    num = value - adj + (i + 4)
    elseif n == (lines/2)+(5-adj)+(-i-3) then
    num = value - adj-(i-1)
    else
    num = ""
    end

    Вставить примерно такую строку

    if num < 0 then num = "" end

    Ну и для 100 аналогично

    ОтветитьУдалить
  4. Этот комментарий был удален автором.

    ОтветитьУдалить
  5. {
    name = 'downspeedf',
    arg = 'eth0',
    x = 650,
    y = 80,
    width = 50,
    height = 100,
    scale = 20,
    font = "Ubuntu",
    font_size = 12,
    side = "left",
    colour_scale = {{0, 0xff0000, 1},{0.5, 0xffffff, 1},{1, 0x0000ff, 1}},
    },
    Таким образом не отображается нагрузка на итерфейс eth0. Кому-нибудь удалось реализовать это?

    ОтветитьУдалить
  6. можно еще раз залить скрипт?

    ОтветитьУдалить