LINUX.ORG.RU

Red Flat Awesome

 ,


74

12

Примерно год назад решил попробовать awesome. Хотелось чего-то максимально кастомизируемого, но более монолитного и системонезависимого. Данный wm показался интересным в этом плане, так что вооружившись напильником попытался сделать на его основе годное, согласно своим представлениям, окружение.

Еще скриншоты: традиционный с окнами[1] и все остальные[2][3][4][5][6][7].

На панели можно увидеть

  • Модифицированный taglist на самописных виджетах.
  • Набор индикаторов: иконка меню и оповещалка об обновлениях в одном, раскладка клавиатуры, регулятор громкости, почта, кастомный layoutbox. На громкости висит простенький виджет для моего любимого exaile[2], layoutbox умеет меню выбора режима тайлинга[2].
  • Сильно перепиленный tasklist[4][5]. Приложения обозначаются трехбуквенными алиасами, окна одного класса группируются в один значок. При наведении подсказка с полным именем или списком группы, по правой кнопке менюшка управления окном.
  • Специальный виджет для минитрея, точками обозначено количество приложений в трее. По клику/хоткею является собственно сам минитрей.
  • Индикаторы ресурсов - выдрал код из vicious и прикрутил свои визуалы. Была задумка сделать нескучные всплывающие виджеты с системной инфой, как раньше было у меня в доке, но энтузиазм закончился уже на первом, показывающем топ процессов[3]. Даже его не допилил до конца, память отображает криво.
  • Часы.

Виджеты на рабочем столе - перенес свои луа скрипты от коньков на базу awesome. Тут нет готовых датчиков, но на помощь снова приходит vicious. В целом средствами осома такие штуки пилить даже удобнее, ибо тру модульность и интерактивность. Зависимые от сети вещи подключены через модификацию asyncshell. Может быть имело смысл все через него пускать, но поздновато осознал насколько это нужная и полезная штука, лень переделывать.

Для пущего уюта установил uselessgap тайлинг от Lain. Сделал активные грани экрана. Немного переписал awful.menu, добавив автоскрытие, возможность вставлять неиндексируемые элементы(заголовки, разделители), автоматическую расстановку хоткеев и еще по мелочи[2][4]. На базе menubar запилил запускалку приложений[3] в стиле synapse, очень нравится такой визуал. Сильно скучал по классическому альттабу, даже накостылял кое-что, но потом некто Joren Heit выкатил няшный Familiar Alt Tab. Скрестив его и свои наработки получил такую переключалку[5][6]. Адским костылем с помощью asyncshell и rsvg-convert прикрутил адекватное масштабирование векторных иконок, заодно добавив смену цвета на лету. Сделал подсказку по хоткеям[7], как сами знаете где, с интерактивной подсветкой (пока без модификаторов).

Многое еще нужно допиливать, но надежда завершить все это и нормально оформить изрядно подтаяла за прошедшее время, так что решил вбросить то что есть, в сыром виде. Все скрипты можно посмотреть здесь. Пользуясь случаем, хочу поблагодарить unlog1c за его конфиги, некоторые вещи откровенно позаимствовал оттуда.

Awesome 3.5.6, compton, тема gtk - Boje, иконки ACYL, шрифты play и prototype.

>>> Просмотр (1920x1080, 123 Kb)

★★★

Проверено: JB ()

Ответ на: комментарий от YLoS

Чем видеочип охлаждаешь? :)

Прохладными историями о том, что полноценная поддержка оптимуса вот-вот придет на линукс. Короче, только при активной дискретке этот датчик запускается.

Worron ★★★
() автор топика
Ответ на: комментарий от Worron

ЛОР,Ха! Нашел что показывать. Лор всегда офигенно смотрится. Примерю на себя твой awesome, только заставку сменю. Аниме неперевариваю. И спасбо за stylish и Blank Your Monitor + Easy Reading

dokihot
()
Ответ на: комментарий от gBopHuk

Работает на ура

Отлично, добавлю аналогичный фикс в остальные всплывающие виджеты.

Worron ★★★
() автор топика
Ответ на: комментарий от Worron

Нужно установить весь модуль полностью

Понял, этого не было.

Крайне желательно установить librsvg2-bin.

Не вопрос.

Далее есть два варианта.

Я пока запустился полностью с rc-redflat.lua и у меня запустилось. Красиво, но хочу сразу рапортовать на случай, если тебе нужен репорт, что

а) в rc*lua, кое-где остались ссыкли на /home/vorron - возможно, ты этого не хотел, когда выложил в git. б) периодчески появляется и исчезает ошибка desktop/dashpack.lua: 70: attempt to compare number with nil в) картинки с рожицами в fullhd смотрятся слегка расплывчато. г) может, разбить конфиг на модули?

В остальном я понял, что твой конфиг - отличный пример, но мне нужно другое юзабилити. В связи с чем вопросы. 1) Я не могу использовать твой апплет для запуска, мне больше подходит gmrun. Но если его запустить в режиме layout.magnifier (одно окно всегда в центре), то gmrun подменяет центральное окно, а твой апплет ложится свержу. Можно как-то gmrun стать особым окном поверх? 2) При переключении между тегами страдает отрисовка в Google Chrome. Не отрисовываются назад тулбары.

crypt ★★★★★
()
Ответ на: комментарий от Worron

Отдельно про альт-таб. Такого:

-- {{{ Key bindings
globalkeys = awful.util.table.join(
    awful.key({ modkey,           }, "Left",   awful.tag.viewprev       ),
    awful.key({ modkey,           }, "Right",  awful.tag.viewnext       ),
    awful.key({ modkey,           }, "Escape", awful.tag.history.restore),

в твоих rc*.lua нет, поэтому я сделал так:

        -- Global keys
        --------------------------------------------------------------------------------
        local raw_globalkeys = {
                { comment = "Global keys" },
-------------------------- skipped ------------------------------------
                {
                        args = { { modkey,           }, "a", function () redflat.floatwid.appswitcher:show({ filter = redflat.widget.tasklist.filter.allscreen }) end},
                        comment = "alttab"
                }
        }

        -- format raw keys to key objects
        globalkeys = redutil.table.join_raw(raw_globalkeys, awful.key)

В итоге Альтаб появляется, можно переключать фокус окон, но после этого альттаб не исчезает и никак не закрывается. Ошибка: attempt to index global 'redflat' (a nil value)

crypt ★★★★★
()
Последнее исправление: crypt (всего исправлений: 2)
Ответ на: комментарий от crypt

если тебе нужен репорт

Конечно нужен, очень даже приветствуется.

в rc*lua, кое-где остались ссыкли на /home/vorron

Если только ссылки (на почтовые скрипты), то норм. Таки rc-redflat.lua мой основной конфиг, я удивлен, что он вообще запустился на другой машине, но без него понять как пользоваться самим модулем было бы проблематичнее.

ошибка desktop/dashpack.lua: 70

Ошибка в настольном виджете(вероятно thermal). Как говорилось, некоторые виджеты требуют специальных утилит и настройки.

картинки смотрятся слегка расплывчато

И после установки librsvg2-bin? Данный пакет, конкретно утилита rsvg-convert нужна для решения именно этой проблемы.

может, разбить конфиг на модули?

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

Можно как-то gmrun стать особым окном поверх?

Нужно задать ему особое поведение с помощью правил. В частности, задать свойство floating(игнорировать тайлинг). Может также понадобится свойство ontop и насильно поместить окно по центру, а может и не понадобится.

страдает отрисовка в Google Chrome

Вот тут не знаю. Могу подсказать по настройке самого awesome, а вот по проблемам конкретных программ, если сам не сталкивался, вряд ли.

Worron ★★★
() автор топика
Ответ на: комментарий от crypt

Такого в твоих rc*.lua нет

Это код из дефолтного rc.lua, в моих конфигах альттаб уже подключен, см после

		{ comment = "Application switcher" },
По идее, должен работать из коробки. Попробуй еще запустить rc-base.lua в качестве конфига.

Worron ★★★
() автор топика
Ответ на: комментарий от Worron

Если только ссылки (на почтовые скрипты), то норм. Таки rc-redflat.lua мой основной конфиг, я удивлен, что он вообще запустился на другой машине, но без него понять как пользоваться самим модулем было бы проблематичнее.

А, я этого не понял и думал, что это как раз и есть конфиг для народа. Так всеравно же легко через os.getenv(«HOME») определить.

И после установки librsvg2-bin?

Да, так точно. Рожицы смотрелись мыльно, не как вектор, это точно. Впрочем, я эту часть использовать не собирался.

Думал об этом, но так и не решил. Вынести отдельно жирный кусок с хоткеями не так просто, он ссылается на панельные и всплывающие виджеты и не только.

Да, я про ссылки понял и тем более, что я не в курсе особенностей импорта в lua, предложил это осторожно.)

crypt ★★★★★
()
Ответ на: комментарий от Worron

Это код из дефолтного rc.lua, в моих конфигах альттаб уже подключен, см после

А, я этого не заметил.

Так, вот вторая попытка запустить альт-таб. Он действительно работает с базовым конфигом rc-base.lua, но

а) Сверху нужно в rc-base.lua добавить

local redflat = require("redflat")

б) Он нормально работает при Mod1, если же я вешаю на Альт появляется то самое поведение, когда альтаб открывает линейку с окнами, но не закрывает. Ты не догадываешься, в чем может быть дело?

в) Как мне изменить его поведение, чтобы при первом нажатии Alt+Tab в линейке красное выделение оставалось на текущем окне, а не переходило на следующее? Т.е. : нажал Алт-таб, посмотрел список, потупил, отпустил и вернулся, где был.

г) Есть мелкая придирка по поводу работы Альттаб вместе с заголовками redflat темы.

crypt ★★★★★
()
Последнее исправление: crypt (всего исправлений: 3)
Ответ на: комментарий от Worron

уточнение по поводу проблем со свитчером. зависит также от раскладки.

(Mod1 AND en) - OK
(Mod4 AND en) - Problem
(Mod1 AND ru) - Problem

Problem - в текущий момен лаг секунд в 10-15. Возможно, не всегда из него выходит.

crypt ★★★★★
()
Последнее исправление: crypt (всего исправлений: 1)
Ответ на: комментарий от crypt

мыльно, не как вектор, это точно

Странно. Сделать пару проверочных скриптов, чтобы попытаться понять в чем проблема, или пока оно тебе не нужно, будешь ковырять более приоритетные вещи?

если же я вешаю на Альт появляется то самое поведение, когда альтаб открывает линейку с окнами, но не закрывает

У альттаба, для большей гибкости, сделан собственный keygrabber. То есть заданной комбинацией он только запускается, далее в вступает в силу его собственный набор хоткеев, а все остальные игнорируются. Эти внутренние хоткеи(следующее приложение, предыдущее, закрыть) тоже можно править из rc.lua, см код

	redflat.float.appswitcher.keys.next  = { "a", "A", "Tab" }
	redflat.float.appswitcher.keys.prev  = { "q", "Q", }
	redflat.float.appswitcher.keys.close = { "Super_L" }
То есть, чтобы он закрывался по отжатию Alt, нужно поправить примерно так
	redflat.float.appswitcher.keys.close = { "Alt_L", "Alt_R" }
Также можно задать хоткеи для быстрого перехода к приложению по его номеру, это правда вынесено в theme файл.

чтобы при первом нажатии Alt+Tab в линейке красное выделение оставалось на текущем окне

В файле appswitcher.lua, в функции appswitcher:show(args) удалить/закомментировать строку

	self:switch(args)

Есть мелкая придирка по поводу работы Альттаб вместе с заголовками redflat темы

Можно подробнее? По идее заголовки при активном appswitcher должны просто скрываться.

Worron ★★★
() автор топика
Ответ на: комментарий от Worron

Сделать пару проверочных скриптов ... будешь ковырять более приоритетные вещи?

Да нет, спасибо, у меня всегда окна сверху, я такие аплеты не юзаю.

С настройками хоткеев для appswitcher теперь все понятно, кроме того, почему не работает при переключении раскладки. Ведь Tab он и есть таб.

self:switch(args)

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

p.s. по остальному отпишу подробнее позже.

crypt ★★★★★
()
Последнее исправление: crypt (всего исправлений: 1)
Ответ на: комментарий от Worron

что я не понимаю с этим awesome, так это почему постоянно идет чехарда окон. допустим у меня уже окно, с которым я работаю слева, почему при разных layout мне всевремя подменяют активное окно(мастер). похожая картина, если новое окно всегда слейв. а мне нужно, чтобы мой браузер, скажем, всегда весел слева и ни при каких делах никуда не уезжал. что же, новый layout делать?

crypt ★★★★★
()
Ответ на: комментарий от crypt

похожая картина, если новое окно всегда слейв

Не понял. Если у тебя выбран layout с явным мастер окном (awful.layout.suit.tile) и новые окна выставлены в слейв командой:

awful.client.setslave(c)
то при открытии нового окна мастер приложение гарантированно сохраняет свою геометрию.

Worron ★★★
() автор топика
Ответ на: комментарий от crypt

может, с лейаутами lain была такая проблема

С lain.layout.uselesstile тоже должно быть нормально. Просто не у всех лейаутов есть мастер окна с фиксированными размерами. В fair этого нет, например.

Worron ★★★
() автор топика
Ответ на: комментарий от crypt

Попробуй выполнить в терминале

xkbcomp $DISPLAY - | egrep -v 'group . = AltGr;' | xkbcomp - $DISPLAY
и после использовать appswitcher с русской раскладкой, будет эффект?

Worron ★★★
() автор топика
Ответ на: комментарий от Worron

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

По поводу правил для мастер/слейв окон у меня начались глюки с rc-base.lua, поэтому я сбросил настройки на дефолтный rc.lua. И уже из него подключаю альтаб.

Там где-то имеет место двойное срабатывание, если по Alt+Tab вызывается redflat.floatwid.appswitcher:show() и floatwidget.appswitcher.keys.next = { «Tab» }

crypt ★★★★★
()
Последнее исправление: crypt (всего исправлений: 2)
Ответ на: комментарий от Worron

Я не очень понимаю, как работает keygrabber в appswitcher. Видимо, awesome после нажатия ключевых клавиш вызывает appswitcher:show и передает ему туда это же самое нажатие, которое тут же и срабатывает в

        self.keygrabber = function(mod, key, event)

                if event == "press" then return false
                elseif awful.util.table.hasitem(self.keys.close, key) then self:hide()
                elseif awful.util.table.hasitem(self.keys.next,  key) then self:switch() 
                elseif awful.util.table.hasitem(self.keys.prev,  key) then self:switch({ reverse = true })
                elseif awful.util.table.hasitem(style.hotkeys,   key) then focus_by_key(key)
                else
                        return false
                end
        end

придумать бы какую-нибудь провеку, чтобы знать, отрисовано уже окно свитчера (первое нажатие) или нет (второе нажатие).

crypt ★★★★★
()
Ответ на: комментарий от crypt

Там где-то имеет место двойное срабатывание

Похоже я чуть неправильно писал, для дефолтного конфига строка подключения должна быть вида

awful.key({ modkey,           }, "a", nil, function () ... end)
awful.key имеет четыре аргумента
awful.key(mod, _key, press, release)
то есть можно отдельно задать действие на нажатие клавиши и ее отжатие. Так как внутренние хоткеи appswitcher реагируют именно на отжатие, то чтобы не было двойного срабатывания запускаться он должен тоже по отжатию, функция должна идти четвертым аргументом, а не третьим.

Worron ★★★
() автор топика
Ответ на: комментарий от crypt

В общем, вместо того чтобы перенести запуск на отжатие, ты перевел сам свитчер на отслеживание нажатий. Ну ладно, главное чтобы работало.

Worron ★★★
() автор топика
Ответ на: комментарий от Worron

я исходил из того, что ты мне сказал выше:

«У альттаба, для большей гибкости, сделан собственный keygrabber. То есть заданной комбинацией он только запускается, далее в вступает в силу его собственный набор хоткеев»

раз управление передали в appswitcher, то там и правим.

Заодно, видишь, нашли неточность в доках.)

А вот почему ломается при переключении раскладки... - это скорее всего какая-то фишка встроенного в lua или awesome keygrabber'a. Не уверен, что можно вылечить.

И еще наблюдение. Пытался запустить redflat на fedora - много ворнингов, которые требуют правки. Видимо, там уже lua 5.2 и это дает о себе знать.

crypt ★★★★★
()
Последнее исправление: crypt (всего исправлений: 3)
Ответ на: комментарий от Worron

Хочу задать еще пару вопросов относительно темы оформления. В каком месте рисуются три кнопки-полоски окон? В theme.lua я этого не вижу, там вроде как только дефиниции, и это сбирвает с толку.

А возможно сделать декорирование только плавающих окон?

crypt ★★★★★
()
Ответ на: комментарий от crypt

В каком месте рисуются три кнопки-полоски окон?

В основном конфиге. В моих конфигах это блок кода озаглавленный

-- Windows titlebar config

А возможно сделать декорирование только плавающих окон?

Для этого можно использовать сигналы. Нужен сигнал реагирующий на смену свойства окна floating и/или сигнал реагирующий на смену лейаута на floating. Ну и стартовая проверка этих параметров при появлении нового окна. Для примера: у меня заголовки скрываются если окно максимизировано, см

...
	local function on_maximize(c)
		if c.maximized_vertical then
			redflat.titlebar.hide(c)
		else
			redflat.titlebar.show(c)
		end
	end

...
		if c.maximized_vertical then redflat.titlebar.hide(c) end
		c:connect_signal("property::maximized_vertical", on_maximize)
...

Worron ★★★
() автор топика
Ответ на: комментарий от crypt

Формально нет, хотя на моей системе он полноценно подхватывает тему из /usr/share/icons/default/index.theme, попробуй.

Worron ★★★
() автор топика
Ответ на: комментарий от Worron

Темы, вроде, работают. А вот альт-таб сейчас показывает окна со всех тегов. Как-то можно настроить, чтобы показывал только с текущего?

crypt ★★★★★
()
Ответ на: комментарий от Worron

и еще там какой-то баг, не отрисовывает все окна с другого тега, хотя место под них оставляет.

crypt ★★★★★
()
Ответ на: комментарий от crypt

альт-таб сейчас показывает окна со всех тегов

Это настраивается с помощью фильтров в команде запуска, чтобы только с текущего

redflat.float.appswitcher:show({ filter = redflat.widget.tasklist.filter.currenttags })
Систему фильтров полностью позаимствовал из дефолтного awful.widget.tasklist, при желании можно писать хитрые свои.

не отрисовывает все окна с другого тега

Вот с этим не сталкивался. Свернутые окна на активном теге как отрисовывает? Модуль с последними исправлениями(от 19-20 февраля важные фиксы)?

Worron ★★★
() автор топика
Ответ на: комментарий от Worron

не знаю, я еще не научился сворачивать здесь окна.) оставлю пока фильтр для текущего тега и сделаю вид, что проблемы нет. appswitcher за 22 февраля, вроде.

crypt ★★★★★
()

Клёво сделал! Только вот по этому значку-регулятору громкости хрен поймёшь какая сейчас громкость стоит.

Tactile ★★
()

Слушай, а как поменять цвет фона в элементе куда текст набираешь? Чтобы с цветами не делал он всегда чёрный.

gBopHuk
()
Ответ на: комментарий от gBopHuk

как поменять цвет фона в элементе куда текст набираешь?

В таблицу style добавить ключ

field         = { color = { bg = "#ffffff" } },
Стиль задается или в самом файле apprunner.lua, или в файле темы см theme.float.apprunner. У того что в теме приоритет, он замещает значения переменных apprunner.lua.

Worron ★★★
() автор топика
Ответ на: комментарий от Worron

field = { color = { bg = «#ffffff» } },

Спасибо! Настроил чтобы цвета были из текущей темы

... или в файле темы см theme.float.apprunner.

Вот этот момент не понял - куда именно смотреть?

gBopHuk
()
Ответ на: комментарий от gBopHuk

куда именно смотреть?

На гитхабе файл темы themes/redflat/theme.lua, посмотри как он устроен, там можно задавать стили практически всех элементов не правя файлы самого модуля.

Worron ★★★
() автор топика
Ответ на: комментарий от Worron

Свернутые окна на активном теге как отрисовывает?

со свернутыми окнами фигня. при минимизации пропадает миниатюра этого окна, а иногда и соседних.

насчет проблемы с альтаб в альтернативной раскладке - self.keygrabber = function(mod, key, event) перестает получать инфу о новых нажатиях после ctrl+shift, так что возможно это проблема keygrabber'a awesome.

crypt ★★★★★
()
Ответ на: комментарий от crypt

со свернутыми окнами фигня

Может попробовать грубый фикс отключающий кастомные иконки: в appswitcher заменить

surface = gears.surface(icon_db[string.lower(c.class)] or c.icon)
на
surface = gears.surface(c.icon)

видимо, брошу я это пилить

Ну смотри сам. Awesome требует определенных усилий на начальное освоение и дает максимальную гибкость в дальнейшем использовании. Устраивает ли такой подход каждый решает для себя индивидуально.

Worron ★★★
() автор топика
Ответ на: комментарий от Worron

да луа палки в колеса вставляет.:( нужно как-то ошибки ловить в том же appswitcher (потом в keygrabber), а документация не настолько разжеванная на сам lua (и уж тем более awesome), чтобы сходу написать хендлер. то ли в awesome есть свой хендлер, то ли нет. то ли из самого lua сигналы обрабатывать хбз. сплошной гуглеж.

crypt ★★★★★
()
Ответ на: комментарий от Worron

Переменная с двойным дном - кто-то уже мучался с keygrabber, keycode и lua.:( Я на форумах встретил отзыв об awesome, что разработчики совсем не заботятся о совместимости между версиями и перенос конфигов - это каждый раз непросто.

Слабая документация, экзотичный язык, отсутствие совместимости - прямо все сразу. Так что звучит заманчиво, но ...

crypt ★★★★★
()
Ответ на: комментарий от Worron

Хочу еще раз уточнить: у тебя альтаб рисует миниатюры свернутых окнон и вообще окон, которых сейчас не видно?

crypt ★★★★★
()
Ответ на: комментарий от Worron

А, понятно. Я уже столкнулся с этим ограничением в других альттабах и думал, что как-то удалось это победить.

crypt ★★★★★
()
Ответ на: комментарий от Worron

Я разобрался (еще в марте) с кейграббером. Авторы не стали использовать стандартные библиотеки для резолвинга кейкодов, а сделали заглушку, которая и глючила. «Вырезал-пришил», теперь свичер окон и все прочее работает исправно. Даже скриншот думал сделать в галлерею, чтобы высказать все, что я думаю о разработчиках.

crypt ★★★★★
()
Ответ на: комментарий от crypt

«Вырезал-пришил»

Ну можешь таки запилить историю успеха, я, например, не особо представлю что именно чинил, данная проблема обошла. Возможно будет интересно и полезно.

что я думаю о разработчиках

Эко ты категорично. Гарантирую, если будешь дальше изучать архитектуру awesome, то не раз встретятся места реализация которых вызывает недоумение. Однако, смотрю на такие вещи философски, нужно владеть предметом немного на другом уровне, чтобы с уверенностью утверждать «это должно быть сделано по-другому». К тому же опен сорс, как говорится, если тебя не устраивает - попробуй сделать лучше.

Worron ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.