notion, mod_xinerama и два статусбара ([РЕШЕНО])

ion, dwm, wmii, awesome, xmonad и другие

Модератор: Модераторы разделов

Ответить
Аватара пользователя
Black
Сообщения: 1100
ОС: ArchLinux

notion, mod_xinerama и два статусбара

Сообщение Black »

Завалялся тут старенький монитор. Решил его воткнуть вторым. Дописал в конфиг dopath("mod_xinerama"), назначил кнопки XF86Back/XF86Forward на переключение между экранами. Всё работает, вот только статусбара на втором экране нет. Дописал в cfg_statusbar.lua ещё одну секцию mod_statusbar.create{}, только указал screen=1, и template="[ %workspace_name ]". Перезапускаю - получаю ошибку:

Код: Выделить всё

Notion startup error log:
>> mod_statusbar.lua:316: Screen not found.
Что интересно, файла mod_statusbar.lua в системе не существует.

Версия

$ pacman -Q notion
notion 1:4.0.2-3
P.S.: awesome, i3, xmonad и прочие, не знаю что там нынче в моде, не предлагать. На ion3 сижу лет 15 и никуда с него не собираюсь.
Последний раз редактировалось Black 15.02.2022 19:44, всего редактировалось 1 раз.
Компьютер служит для решения тех проблем, которых до изобретения компьютера не существовало
Спасибо сказали:
Аватара пользователя
UnixNoob
Сообщения: 1367
ОС: Slackware

Re: notion, mod_xinerama и два статусбара

Сообщение UnixNoob »

В офф. документации нет ответа?
Если я правильно понял о чем речь идет.
"Однажды один очень мудрый человек… ничего не сказал. Времена были опасные, да и собеседники ненадёжные"
Спасибо сказали:
Аватара пользователя
Black
Сообщения: 1100
ОС: ArchLinux

Re: notion, mod_xinerama и два статусбара

Сообщение Black »

Если бы всё было так просто :)
В оффициальном талмуде пример конфига из дистрибутива. Никакого внятного объяснения параметра screen не нашёл, кроме того, что он integer.
Компьютер служит для решения тех проблем, которых до изобретения компьютера не существовало
Спасибо сказали:
Аватара пользователя
Black
Сообщения: 1100
ОС: ArchLinux

Re: notion, mod_xinerama и два статусбара

Сообщение Black »

Таки нашёл.
LIMITATIONS

For some reason, loading the statusbar module _BEFORE_ the Xinerama module hides
the status bar. To work around this, load mod_xinerama before loading the
statusbar module.
А у меня как раз dopath("mod_xinerama") был последним, в конце файла. Сдвинул выше, чтобы был раньше mod_statusbar, добавил в cfg_statusbar.lua:

Код: Выделить всё

mod_statusbar.create{
	screen=1,
	pos='bl',
	fullsize=true,
	systray=false,
	template="  [ %wsname_2 ]"
}
И ага: на каждом экране по своему статусбару со своим содержимым. Только вот скрипт statusbar_wsname как-то странновато работает: %wsname_fullall показывает все воркспейсы на обоих экранах, %wsname показывает имя воркспейса на первом экране, а вот %wsname_0 и %wsname_1 ничего не показывают.Но это уже как-нибудь потом на досуге разберусь.
Компьютер служит для решения тех проблем, которых до изобретения компьютера не существовало
Спасибо сказали:
Аватара пользователя
Black
Сообщения: 1100
ОС: ArchLinux

Re: notion, mod_xinerama и два статусбара

Сообщение Black »

Подправил statusbar_workspace.lua, чтобы корректно показывал текущий вокрспейс на каждом мониторе. Заодно выкинул из него workspace_pager (во-первых, мне он не нужен, а во-вторых, он есть в statusbar_wsname.lua) и workspace_frame (для этого есть statusbar_fname.lua).
Поскольку я тот ещё программист, особенно на lua, для двух экранов сделал две переменные scr1 и scr2, ну и дальше всех по две. Костыль, но работает. Судя по активности, никто им не пользуется, но вдруг кому пригодится.

Код: Выделить всё

-- statusbar_workspace.lua
--
-- Show current workspace name or number in the statusbar.
-- 
-- Put any of these in cfg_statusbar.lua's template-line:
--  %workspace_name1
--  %workspace_name2
--
-- This is an internal statusbar monitor and does NOT require
-- a dopath statement (effective after a 2006-02-12 build).
--
-- version 1
-- author: Rico Schiekel <fire at paranetic dot de>
--
-- version 2
--
--  * Added statusbar_ to the filename (since it *is*
--    an internal statusbar monitor) so that it works without
--    a "dopath" call.
--
--  * Removed timer.  Only needs to run on hook.
--    Much faster this way.
--
-- version 3
-- update for ion-3rc-20070506 on 2007-05-09 
-- by Kevin Granade <kevin dot granade at gmail dot com>
--
-- Updated to use new wx_ api
-- Replaced region_activated_hook with region_notify_hook
-- 
-- version 4
-- update for notion-4.0.2 on 2022-02-23
-- to work with mod_xinerama and two screens
-- by Akaky Chertyhansky <akakychert@gmail.com >
-- (it's a dogshit, but it works)

local function update_workspace()
    local scr1=ioncore.find_screen_id(0)
    local scr2=ioncore.find_screen_id(1)
    local curws1 = scr1:mx_current()
    local curws2 = scr2:mx_current()
    local wstype, c
    local curindex1 = scr1:get_index(curws1)+1
    local curindex2 = scr2:get_index(curws2)+1
    

    local fr,cur


    ioncore.defer( function()
	mod_statusbar.inform('workspace_name1', curws1:name())
	mod_statusbar.inform('workspace_name2', curws2:name())
	mod_statusbar.update()
    end)
end

local function update_workspace_wrap(reg, how)
    if how ~= "name" then
        return
    end

    update_workspace()
end

ioncore.get_hook("region_notify_hook"):add(update_workspace_wrap)
ioncore.get_hook("screen_managed_changed_hook"):add(update_workspace)
Компьютер служит для решения тех проблем, которых до изобретения компьютера не существовало
Спасибо сказали:
Ответить