twm: A Middle Earthen Adventure
Обновена на: March 24, 2022Във видимо непрестанния си порив да човъркам екзотични неща, се захванах да опитам да ползвам twm (твм) – прозорец-кондукторът, който идва по дефалт с Х11. Вероятно всички сме го виждали и чудили как да го загасим. С неговите менюта, дето задържаш копче, че да изскочат. Ще бъда честен – вече не помня защо изобщо се хванах с него. Може би понеже се чудех дали мога да му се спрат window titles.
Но ме задържа чудесната конфигурационна схема. Както и малкото, но достатъчни функции по подразбиране. Неща катo warping и sloppy focus. Докато се разигравах с конфигурацията, постепенно научавах всички странни пинизи по този близо (дали?) 40-годишен софтуер. Твърде стар е, за да е EWMH-compatible. Сиреч, не пълни _NET_WM_ променливи, съответно приложения като xdotool или wmctrl не работят с него. Съществува форк – ETWM – който твърди, че обединява всички форкове в едно и добавя EWMH функционалност, но за него ще говоря по-късно.
Обезателно да се реши проблемът с фокуса на Хром/WebKit/Blink неща; и до момента нямам бетонна идея защо смяната на фокус към Хром прозорец не се отразява правилно. Контекстните менюта на тоя фреймуърк не работят като хората, затова и фокусът трябва експлицитно да се предаде на прозореца. Уж нещо, което твм прави – но не достатъчно добре за Хром. Няма проблеми с Файърфокс. Реших да си поиграя с кода – не, че съм много добър по С, но мога да чета достатъчно, че да пачна подобен проблем. Стигнах до заключението, че таймингите, с които се викат Xlib функции не са правилни. Тоест, всеки път, когато пуснеш съобщение към Xorg, трябва да приложиш таймстамп. Казвам трябва, макар че може да пуснеш и NULL. Това обаче не работи винаги като хората, затова моят пач се сведе до това колкото се може повече пъти да се сменя фокусът към новия прозорец. Помогна, но не беше достатъчно консистентен.
Други малки проблеми като – ако имаш border и fullzoom-неш прозорец, да го офсетва така, че да крие бордъра – си приложих сам, не беше много филм. Но това с фокуса така и не успях напълно да реша. Пробвах останалите форкове – такива с поддръжка за vdesktops (всъщност, един виртуален десктоп, но pan-ваш с определен viewport. vtwm нарича отделните панове “врати”. мило), но всички страдаха от същия проблем.
Бях твърдо надъхан да компилирам etwm, колкото и счупен да е кодът му. В крайна сметка успях – след като открих, че не работи като хората, ако не си дефинирал поне един Workspace в конфига – нещо, което е нужно за ctwm; един от форковете. Но и той имаше същия проблем. Дейба! Вече нямаше какво толкова да сторя, освен да търся някаква пачната форма на код. А тези twm-и са толкова obscure, че е брутално трудно да намерих developer информация. Стигнах обаче до някакво японско репо, което програмистът беше кръстил “etwm”, въпреки че “е”-то значи друго. Реших да го компилирам за идеята и – о, небеса! Проблемът с фокуса е решен! Но как?! diff-вам кода и все още си играя, но не мога напълно да разбера как господинът го е оправил. Вижда се, че е променил повечето функции за предаване на фокус – може би е това. Също е заменил integer кастовете с long – явно също е нужно. Но да, работи, без да има NetWM/EWMH поддръжка. Мисля си, че ако наистина се постарая някой ден, ще му вкарам поддръжка, но е много работа почти за нищо.
И него пачнах. Добавих му офсет за lemonbar, който да сетваш от конфига. Настроих си достатъчно минимален lemonbar, че да виждам датата и часа. И някои други работи. Абе, работи чудно. Старият ми навик да мапвам CapsLock за Hyper и да warp-вам към определени прозорци с hotkey също работи безупречно. И защо бих предпочел това пред dwm? Нещо, което ползвам доста по-дълго? Защото twm – или както в момента наричам с кодово име форка си, legolas (рендъм е, наистина) – има достатъчно малко функции да ми върши работа, а tiling-а не съм го ползвал от твърде дълго време вече. А може би просто ми се иска да сменя малко. И аз не знам.
За това колко е смотано написан ETWM – имайки предвид, че дори не се компилира стоков, понеже са му преебани половината дефиниции; че няма консистентност в имената на новите функции, че няма сейфти чекове за почти нищо и крашва от най-малкото мога да кажа. Дали искам да го позлвам, за да импементирам EWMH в японския Леголас? Може би, но е толкова грозно написано, че по-скоро бих се заел сам да си напиша филмите.
В заключение ще кажа, че когато цялото нещо е готово, ще си го кача тук, за да не го забравя. Поканен си да го тестваш, ако ти се занимава.
Ресурси:
http://www.straightrunning.com/tools/twm.html
http://www.custompc.plus.com/twm/twmrc.htm
Японски форк
ETWM
https://www.x.org/pub/individual/app/twm-1.0.11.tar.xz