Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2007-04-23 01:43:22

  harry666t - Członek DUG

harry666t
Członek DUG
Zarejestrowany: 2007-01-28

Komponowanie pulpitu

[ppp wersja "pro" - propozycja projektu programistycznego]

Mam już powoli tego dość.

Gdy pierwszy raz uruchomiłem Linuxa z płyty CD przywitał mnie pulpit KDE. Wtedy byłem pod wrażeniem konfigurowalności, która dziś jest moim utrapieniem. W windowsie miałem wybór pomiędzy win32 classic a luną, ewentualnie można było pasek zadań przesunąć na górną krawędź pulpitu lub włączyć autoukrywanie.

Dziś muszę mieć środowisko tak dokładnie dopasowane do moich potrzeb, że chyba od 5-6 miesięcy jeszcze sobie go nie skleiłem. Robiłem najmożliwsze i najniemożliwsze mieszanki najróżniejszych desktop envów, window managerów, paneli, docków, launcherów, rootmenu, appletów, dockappów, emulatorów terminala, theme'ów, naśladowałem nextstepa, cde, mac os classic oraz x, a nawet (tfu, tfu! ale któż nie próbował... aero robi wrażenie) viśtę.

Wśród próbowanych wariantów były do tej pory: KDE, Gnome, Gnome/Beryl, Beryl/perlpanel, E16, E17, Fluxbox, Windowmaker, AfterStep, xfce4, i kilka minimalistycznych wariantów w stylu twm, wszystkie w najprzeróżniejszych konfiguracjach, nierzadko łącząc i przeplatając elementy z jednych środowisk do innych. Komponowanie tych środowisk i doprowadzanie ich do odpowiedniego stanu zajęło mi tyle czasu, że przez ostatni miesiąc napisałem jakieś 400 linijek kodu. Kiedyś tyle pisałem w jeden dzień (o ile go nie debugowałem :P). Nie mogę więcej tracić na to czasu. Muszę skompletować pulpit, który nie będzie przeszkadzał mi w pracy. (Całe szczęście że programowanie jest póki co jedynie moim hobby. Gdybym na tym zarabiał... Umarłbym z głodu.)

Nadal co chwilę coś mi nie pasuje. KDE za ciężkie. Gnome kiepsko radzi sobie z wirtualnymi pulpitami. Beryl niestabilny i mimo ostatnich ulepszeń nadal pożera pamięci niemało. E16 - prawie ideał, ale właśnie ta "niemal idealność" mnie w nim wkurza - będąc tak blisko, nie mogę jej osiągnąć. E17 ma wiele wirtualnych pulpitów zamiast jednego większego z bardziej delikatnymi granicami. Fluxbox też jakoś mnie już nie pociąga. Windowmaker jest mało intuicyjny, jeszcze mniej AfterStep (w dodatku trzeba kliknąć na pasek tytułu by wysunąć okno na pierwszy plan).

Doszedłem do wniosku, że trzeba poradzić się ludzi, którzy mają dłuższy staż w środowiskach uniksowych. Część moich wymagań na pewno spełnią istniejące WMy, i z nich trzeba będzie czerpać fragmenty kodu. Czas więc napisać własnego menedżera okien oraz towarzyszące mu tałatajstwo. Próbuję skleić coś, co wyglądałoby i działałoby następująco.

Dekorator / menedżer okien powinien dać się skonfigurować tak, aby były dostępne następujące akcje (za pomocą konfigurowalnych skrótów klawiaturowych): zamknij okno, shade, zabij proces właściciela okna, przesuwaj/zmień rozmiar okna (alt+klik). Na pasku tytułowym (najlepiej tytuł wyśrodkowany) powinny znaleźć się następujące ikonki: po lewej zamknij, shade, maksymalizuj, po prawej może być jakiś ładny obrazek :) fajnie gdyby dało się je poprzekładać. Okna powinny być dekorowalne za pomocą pixmapek (sam se je zrobię). Focus on mouse over (tradycja uniksa...). Jak najwięcej rzeczy powinno dać się robić z klawiatury.

Wirtualne pulpity muszą być, ale nie mogą być jednowymiarowe (KDE, Gnome, Fluxbox), a już nawet dwuwymiarowe mi nie starczą (E16, E17, AfterStep). Chodzi mi o takie "bezgraniczne", duże workspace'y. Dostarczany wraz z LessTif mwm ma coś takiego, że można kliknąć prawym przyciskiem na dowolnym miejscu na pagerze i znaleźć się w połowie drogi między jednym workspacem a drugim. Od strony technicznej jest to jeden duży wirtualny pulpit bez barier (i chyba mam nawet pomysł jak to ukodzić, niestety nadal nie zajarzyłem API Xów na tyle by to zaimplementować). Myślę, że gdybym miał pisać własnego wma, wyszedłbym właśnie od mwm - tylko że czekałoby mnie naprawdę sporo pracy, bo AFAIK tenże nie obsługuje nawet "focus on mouseover" - kolejnej opcji bez której nie przeżyję.

Ważna opcja to "sticky". Przyklejone okna powinny niezależnie od tego co się dzieje pozostawać "przyklejone do szkła od monitora", co jednak nie oznacza że powinny zostawać zawsze na wierzchu (cholernie mnie to denerwowało w AfterStepie). Warstw układania okien powinno być conajmniej 5 (zawsze na dole, pulpit, normalna, powyżej, sam wierzch). W E16 wkurzało mnie, że jest ich tylko 4.

Mając kod źródłowy chętnie zacząłbym przerabiać tego WMa by można było potraktować pulpit trochę jak mapkę w starcrafcie czy innych settlersach. Niedawno skonfigurowałem sobie Beryla, by obracanie kostką zaczynało się od kliknięcia lewym na pulpit. Kliknięcie na pulpicie i tak zazwyczaj nie wywołuje żadnej akcji, a okazuje się że przewijanie workspace'ów tą metodą jest *cholernie* wygodne (i, co najważniejsze, wymaga tylko jednej ręki, oraz ogólnie niewiele celowania. A to ogromny plus).

Dalej, fajnie by było gdyby każdej aplikacji można było "przyczepić karteczkę z napisem "zawsze siedź w lewym górnym rogu pulpitu", albo "gdy zbliża się do ciebie mysza - uciekaj na bok"", czyli coś w rodzaju ~/.e16/e_config--0.0.snapshots, innymi słowy, zapamiętywanie ustawień.

Konfiguracja - poprzez pliki tekstowe o możliwie najprostszej możliwej składni. Podoba mi się styl konfiguracji fluxboksa; E16, gdy już się zrozumie co jaki klucz robi, też jest dość przyjemny. Niech wszelkie pliki XML idą do piekła! Są może fajne do parsowania gdy ma się libxml, ale czytanie ich (i pisanie) to droga przez mękę. Proponuję coś w stylu "klucz:wartość" lub "klucz wartość", po jednej parze na linijkę, ewentualnie { i } aby pogrupować klucze w grupy, czyli zamiast

Kod:

blah.shit:lol
blah.fuck:rotfl

napisać:

Kod:

blah {
  shit:lol
  fuck:lol
}

Nie ukrywam że inspirowałem się moim wcześniejszym projektem, czyli The Net Code :D


W sumie na menedżerze okien kończy się najdłuższa moja lista problemów, ale nadal nie są rozwiązane następujące kwestie.

Uruchamianie programów. Wpisywanie nazwy każdego programu w oknie terminala jest tró i trendy i h4 i 1337, ale na dłuższą metę prosty pasek z ikonkami w stylu docka z osx lepiej daje radę. Lepszą opcją byłoby jakieś menu pulpitowe, klikalne prawym przyciskiem (fluxbox, windowmaker), z prostą składnią menu (E16, fluxbox, w sumie wszystko = zła składnia). Dobra składnia to byłoby coś w stylu:

Kod:

Epiphany:epiphany -n
Terminal:~/bin/term
XKill:/usr/bin/xkill
Some menu:
  Pierwsza pozycja w menu:jakisprogram -w -a
  Druga pozycja: Menu Kontratakują!:innyprogram --jakas-opcja
  Po tej opcji konczy sie menu:~/bin/bardzofajnyskrypt.py -xdfcg -2
::
Restartuj WM::restart
Koniec pracy::exit

Dlaczego składnia np. we fluksie jest zła? Zawiera zbyt wiele artefaktów. Co innego chciałbym zrobić z typowym wpisem w menu, jak nie uruchomić z niego program? Dlaczego muszę grzebać się i wpisywać tak oczywiste rzeczy jak [exec] kilkanaście razy? Bardziej szczegółowa składnia powinna pozostać na okazję rzadszych wpisów. Składnia nie musi być śliczna. Jeżeli trzeba konfigurować coś edytując pliki tekstowe - i tak nie jest to user-firendly, więc czemu nie popchnąć dźwigni na maksa i zrobić czegoś, co w końcu będzie wygodne dla h4x0rów.

Parser wykonam sam ;] już umiem :D

Kolejna rzecz to dock/slit. Fajnie gdy przewija się jakiś wykres użycia procesora, no i jest taka mała aplikacja, docker, która pełni funkcję traya (nie trzeba implementować własnego, uff...). Problem w tym, że kawałek softu najśliczniej implementujący takiego docka - fluxbox - jest na niezbyt lubianej przeze mnie licencji typu BSD ;] tak więc muszę go napisać od zera, albo spełnić me marzenie o "standalone" docku (już kiedyś nawet zakładałem na forum DUGu temat o takowym).

Zegar - nie potrzebuję! szczęśliwi czasu nie liczą :D ale gdyby był - z datą, kalendarzem, i jakimś prostym budzikiem / przypominaczem (żadnej integracji z evolution czy inną krową). W sumie mogę ukodzić sam, tylko nie chciałbym zaczynać od zera.

Pager - jako samolotne okienko (mwm, E16), ewentualnie dokowalne (jak fbpager). Śmiesznie by było gdyby pulpit miał takie rozmiary (oczywiście w skali) jakie w danej chwili pager - powiększasz pagera, wirtualny pulpit również się powiększa.

Programy powinny być możliwie jak najprostsze, pożerać tylko tyle pamięci ile to niezbędne (poza pixmapami, które powinny być opcją), zostawiać miejsce na dodawanie ficzersów. Preferowany język to C++ tam, gdzie liczy się wydajność (algorytmy rysowania różnych bzdur czy gradientów) oraz python tam, gdzie C++ nie jest niezbędny.



To by było na tyle. Wszystkie programy, od których mógłbym wyjść, powinny być (najlepiej) na GNU GPL v2 lub nowszej, ewentualnie tylko GPLv2 lub LGPL, w miarę możliwości jak najdalej od tz. "liberalnych" licencji typu MIT/BSD (nie kocham ich za brak copyleftu) czy jakichś egzotycznych, niekompatybilnych z GPL.

Błagam o jakieś wsparcie w tej sprawie ;] głównie potrzebowałbym wskazówek - które istniejące projekty spełniają najwięcej z przedstawionych warunków, możliwie będąc dość znane, oparte na popularnych (i stabilnych!) bibliotekach, a przy tym możliwie jak najprostsze (chciałbym dość szybko zrozumieć kod i zacząć je rozszerzać zamiast tracić (znowu) czas na próby załapania API które potem okaże się niewygodne). Jeśli komuś podoba się pomysł i/lub ma podobne zboczenia co ja, a przy tym odróżnia perla od asemblera, bardzo mile by mi było zaprosić do wspólnej pracy nad kodem. Przydałyby się też jakieś linki do godziwych tutoriali (najlepiej po angielsku - naprawdę coraz gorzej czyta mi się polski...) na temat API Xów, LessTif, tworzenia "miksowanych" aplikacji w C++/Pythonie, hakowania menedżerów okien, i tym podobne. Gdy już proces dewelopienia ruszy - będę potrzebował tylu beta-testerów ilu się nada. Zasypcie moją skrzynkę majlową bugreportami! Chcę nie mieć czasu na siedzienie na slashdocie :) Nie zapominajmy też o tym, że np. KDE też zaczęło się od szalonego pomysłu rzuconego przez jednego hakera na jakiejś grupie w usenecie, kto wie, czy za parę lat nie wyjdzie z tego projektu jakieś DDE :P


[ /\/\/\ o_0 ----->>>       Ascii Art Userbar User ]

"steal and steal and steal some more and give it to all your friends and keep on stealin'"
- Reznor

Offline

 

#2  2007-04-23 12:08:32

  pasqdnik - Pijak ;-P

pasqdnik
Pijak ;-P
Skąd: Wrocław
Zarejestrowany: 2006-03-06

Re: Komponowanie pulpitu

Piszę się na beta-testera, na pisanie takich aplikacji jestem na razie za cienki w uszach ;)


Dum spiro - spero ...
pozdrawiam, pasqdnik

Offline

 

#3  2007-04-23 12:41:55

  harry666t - Członek DUG

harry666t
Członek DUG
Zarejestrowany: 2007-01-28

Re: Komponowanie pulpitu

z lesstif.org zassałem źródła mwm i stwierdzam z przykrością, że mimo iż większość lesstif jest na lgpl - mwm jest na mit/bsd. ponadto, mimo iż ma prawie 30 tysięcy linijek kodu, to nie potrafi prawie nic poza rysowaniem ramek, tym właśnie "bezbrzeżnym" pulpitem i prostym menu desktopowym o *złej* składni. ale "feel" mwma daje przykład tego, co chciałbym osiągnąć.

sądzę że zamiast motif/lesstif lepszym rozwiązaniem byłoby gtk2. chyba zacznę od odchudzania jakiejś wczesnej wersji metacity lub sawfish, ew. E.

pasqdnik, jesteś na liście.


[ /\/\/\ o_0 ----->>>       Ascii Art Userbar User ]

"steal and steal and steal some more and give it to all your friends and keep on stealin'"
- Reznor

Offline

 

#4  2007-04-23 12:50:30

  azhag - Admin łajza

azhag
Admin łajza
Skąd: Warszawa
Zarejestrowany: 2005-11-15

Re: Komponowanie pulpitu

na szybko dodam, że dobrze by było jakby WM miał opcję robienia zakładek okien (jak pwm i fluxbox) - bez tego wg mnie WM jest kaleki ;]

więcej uwag później


Błogosławieni, którzy czynią FAQ.
[url=http://www.opencaching.pl]opencaching[/url] :: [url=http://dug.net.pl/sources.list]debian sources.list[/url] :: [url=http://www.linuxportal.pl/blogi/azhag/wpisy]coś jakby blog[/url] :: [url=http://dug.net.pl/]polski portal debiana[/url] :: linux user #403712

Offline

 

#5  2007-04-23 13:47:41

  Ryszard - Piwo DUG

Ryszard
Piwo DUG
Skąd: Zadupia
Zarejestrowany: 2006-06-30

Re: Komponowanie pulpitu

Hmmmmmmmmm trudno coś powiedzieć na ten temat jeden woli pizze a drugi hot-doga
Czym sie rózni Bmw od Audi a co by to było jak by Fso np maluch + bmw ???////
Albo dupa koloru bląd i dupa koloru zielonego
I mnie to w .......................... Ma i enter


[url=http://img196.imageshack.us/i/freebsde.jpg/][img]http://img196.imageshack.us/img196/3770/freebsde.jpg[/img][/url]

Offline

 

#6  2007-04-23 14:39:53

  harry666t - Członek DUG

harry666t
Członek DUG
Zarejestrowany: 2007-01-28

Re: Komponowanie pulpitu

azhag - póki co chcę się koncentrować na dodawaniu funkcjonalności, która jest innowacyjna, której jeszcze nie ma żaden wm. chodzi mi o zupełnie nowy sposób pracy na pulpicie: zamiast ściskać okna na kilku wirtualnych pulpitach, dać im jeden ogromny, po którym swobodnie można się przewijać. klonowanie fluksa absolutnie nie jest moim celem. ale jeśli coś zacznie wychodzić z tego projektu, możesz napisać patcha dodającego taby - z chęcią go włączę do głównego drzewa ;]


[ /\/\/\ o_0 ----->>>       Ascii Art Userbar User ]

"steal and steal and steal some more and give it to all your friends and keep on stealin'"
- Reznor

Offline

 

#7  2007-04-23 16:57:24

  Treadstone - Członek DUG

Treadstone
Członek DUG
Skąd: Chorzów
Zarejestrowany: 2005-09-19

Re: Komponowanie pulpitu

Słuchaj, a nie lepiej fvwm i piszemy config do niego? Chętnie pomogę, fvwm sam w sobie dla mnie jest właśnie narzędziem do napisania własnego, dopasowanego do swoich potrzeb wm. A oto aspekty, które by za nim przemawiały:

1. 2/3 roboty mamy już za sobą;
2. Możliwości konfiguracji są praktycznie nieograniczone;
3. Wsparcie ze strony użytkowników fvwm;
4. Możliwosć łatwego pisania modułów w FvwmScript jak i chociażby C++, perlu, pythonie itp.

A teraz odp na Twoje punkty:

1. Przyciski na oknie - dowolne, możesz nawet zrobić sobie przycisk, po naciśnięciu którego otworzy się piękne, przeźroczyste menu z całkowicie dowolnymi funkcjami, nie tylko związanymi z danym oknem. Wszystko w pixmapach bądź wektorach. Focus on mouse over - nie ma problemu. Rzeczy z klawiatury dostępne są wszystkie te, które z myszy.

2. Wirtualne pulpity - funkcja znana Tobie z mwm (jeden bezgranicznie duży workspace) jest dostępna. Możesz także zrobić sobie np. 2 pulpity, każdy duży na 4 ekrany ułożone po dwa w kolumnie.

3. Warstwy - nie wiem dokładnie ile ich jest i jakimi prawami się rządzą, w moim configu mam po prostu pasek na dole ala windows, który jest zawsze na wierzchu. Możemy też zrobić coś takiego, że po naciśnięciu powiedzmy CTRL+spacja przyklejone okna pojawiają się na wierzchu, po powtórnym naciśnięciu wracają na poprzednie miejsce

4. Zapamiętywanie ustawień - nie wiem, jakie jest w e16 dokładnie, ale w fvwm z configu idzie ustawić niektóre rzeczy. Przykładowo, kawałek mojego configu:

Kod:

Style FvwmPager !Title, HandleWidth 1, Sticky, CirculateSkip, WindowListSkip, StaysOnBottom, BorderWidth 1, NeverFocus, FixedSize, Colorset 11

Wszystko to może być zapamiętywane (najlepiej do osobnego pliku) i dowolnie modyfikowane przez użytkownika - potrzebne będzie jedynie kilka funkcji do napisania, które to zaautomatyzują.

4. Konfiguracja. Pliki konfiguracyjne mają prostą składnie, ale z racji tego, że możliwości konfiguracji fvwm są przeogromne, poznanie i zrozumienie wszystkich funkcji jest bardzo praco/czaso chłonne

5. Launchbar - dostępny, możemy zrobić, by kliknięcie lewym przyciskiem na jakas ikone wywoływało np. firefoksa, prawym operę, a środkowym otwierało menu z wszystkimi dostępnymi przeglądarkami.

6. Składnia z menu. No tutaj mogę polemizować:) We fluxboksie oczywiście, możemy jedynie wywołać program bądź menu. Ale w fvwm możemy np coś takiego:
Mamy menu1 i menu2. Menu 2 jest dostępne pod PPM, menu1 jest wywoływane z konfigurowalnego paska a'la OSX. Możemy zrobić tak, by menu1 było pod ppm, a menu2 pod lpm. Albo menu1 może wywołać podmenu menu2. Albo wszystko to naraz. Trudno mi jest to zobrazować, ale z menusami można robić mnóstwo rzeczy, dla przykładu podam jedynie takie moje menu, które zowie się PSX. Jego zawartość zmienana jest dynamicznie, gdsy zmienia się ilość plików w folderze /mnt/psx. Każdy wpis przypisany jest do jednego pliku a kliknięcie na niego powoduje uruchomienie emulatorem ePSXe odpowiedniej gry. Zarzuce screenshotem, jak uporam się z tymi cholernymi sterami do mojej Geforce2. Jak masz pytania, pisz:)

7. dockbar z fluxboksa - nie ma, wykorzystuje mały i zgrabny programik - trayer, którego traktuje funkcją z fvwm - swallow, która powoduje, że jest on częścią dolnego paska (tak można zrobić z każdą aplikacją, świetnie sprawdza się w tym celu conky)

8. zegar - gotowy, ktoś już kiedyś napisał taką funkcję do fvwm, która wyświetla zegar a po kliknmięciu na niego pojawia się w jego miejscu data. JEst u mnie na pasku - funkcja swallow jak wyżej.

9. pager - fvwm ma najlepszy pager z jakim się spotkałem, stanowi integralną część środowiska. Podobnie jak większość funkcji jest to moduł, który ładowany jest do pamięci na życzenie usera.

EDIT: Z ciekawszych funkcji warto jeszcze wspomnieć o gestach myszy - są w pełni wspierane, kiedyś korzystałem, klikając np. alt i malując literkę L uruchamiał mi się terminal:)

A tutaj oficjalna strona:

[url]http://www.fvwm.org/[/url] oraz forum: [url]http://fvwm.lair.be[/url]

Offline

 

#8  2007-04-23 19:59:54

  Matthew - Użytkownik

Matthew
Użytkownik
Skąd: Lipka/Gdańsk (PG)
Zarejestrowany: 2006-06-09
Serwis

Re: Komponowanie pulpitu

Oooo!!!

Pomożesz mi Treadstone? Proszę. :) W tej chwili mam crystala i nawet fajny ale momentami mnie lekko irytuje.

Offline

 

#9  2007-04-23 20:44:24

  Treadstone - Członek DUG

Treadstone
Członek DUG
Skąd: Chorzów
Zarejestrowany: 2005-09-19

Re: Komponowanie pulpitu

Z modyfikowaniem crystala jest problem - jest on dosyć mocno rozbudowany oraz posiada bardzo zawiłą składnie, która praktycznie uniemożliwia konfigurację tak na własną rękę, z plików. Wiem, bo próbowałem wyciągnąć z niego kawałki configu, które strasznie mi się podobały. A konfiguracją czystego fvwm pomóc mogę, jak najbardziej:) Odp na PW

Offline

 

#10  2007-04-23 23:46:45

  harry666t - Członek DUG

harry666t
Członek DUG
Zarejestrowany: 2007-01-28

Re: Komponowanie pulpitu

Cholera, tylko nie to :( znowu wpadłem na świetny pomysł, a tu się okazuje że ktoś pokonał 2/3 drogi za mnie, a kolejne 1/3 to edycja konfiguracji...

Jestem zawiedziony, chciałem sobie pohaczyć swojego WMa, a tu kit. Czy naprawdę już wszystkie programy na tym świecie zostały napisane? >_<

Z drugiej strony, zaraz ściągnę fvwma i powiem co sądzę o domyślnym look&feel.


A co do składni menu... Mam pomysł, może coś w rodzaju translatora pomiędzy tym hack-friendly formatem a wszystkimi najpopularniejszymi? Hm, zaraz... Takie coś też już jest.

I'm powerless.


[ /\/\/\ o_0 ----->>>       Ascii Art Userbar User ]

"steal and steal and steal some more and give it to all your friends and keep on stealin'"
- Reznor

Offline

 

#11  2007-04-24 08:13:02

  Treadstone - Członek DUG

Treadstone
Członek DUG
Skąd: Chorzów
Zarejestrowany: 2005-09-19

Re: Komponowanie pulpitu


Z drugiej strony, zaraz ściągnę fvwma i powiem co sądzę o domyślnym look&feel.
[/quote]

Domyślny jest brzydki, niepraktyczny i nawet w 5% nie oddaje możliwości tego wm. Polecam sprawdzić sobie tutaj: [url]http://fvwm.lair.be/viewforum.php?f=39&sid=ce5ac843de7d07a719bd07d3a7047a88[/url]
w poszukiwaniu gotowych configów. Ten jest nawet ciekawy: [url]http://fvwm.lair.be/viewtopic.php?t=1652[/url].
I do przetestowania polecam jeszcze:
[url]http://pemarchandet.free.fr/fvwm.html[/url]
oraz [url]http://student.agh.edu.pl/~artursc/[/url]
Oczywiście, możesz zacząć od budowania swojego wm korzystając z części kodu fvwm, podobnie jak Enlightenment, Xfce czy Afterstep.

Offline

 

#12  2007-04-24 20:43:17

  qluk - Pan inż. Cyc

qluk
Pan inż. Cyc
Skąd: Katowice
Zarejestrowany: 2006-05-22

Re: Komponowanie pulpitu

Treadstone, ma racje polecajac fvwm'a, ale jest z nim jeden kłopot, toporny z niego młot :) Mało zę trudno sobie poradzić ze zmiana rozdzielczości (hehe czasem fajne efekty powstają ;) ), to jeszcze sama konfiguracja tego "pierona".
A skoro mowa o fvwm'ie to nie nie można zapomnieć, że tworzy potężny tandem wraz z ROX'em.

Offline

 

#13  2007-04-24 22:24:57

  zielkam - były zielony_83 :)

zielkam
były zielony_83 :)
Skąd: Zawiercie
Zarejestrowany: 2006-05-06
Serwis

Re: Komponowanie pulpitu

<offtop>
Ja natomiast pokusiłem się o fvwm-crystal, pierwsze wrażenia bardzo pozytywne, jak na ustawienia defaultowe to wygląda bardzo dobrze :-) znacznie lepiej od fvwm na default.
</offtop>
Harry jeśli uważasz że jesteś w stanie napisać coś fajnego to zrób to po prostu!. Nie przejmuj się tym że coś takiego już może jest.. Może twoje będzie lepsze :).

Ja też się piszę na testera ;-)


Zostałeś zarejestrowany jako użytkownik #416423 przez.. :mrgreen:
##
[url=http://fluxboxpl.org]FluxboxPL[/url] | [url=http://zielony.fluxboxpl.org/blog/]Mój Lepszy Świat[/url] | [url=http://www.unixy.pl/]UnixyPL[/url] | [url=www.adescom.pl]Telenia VOIP dla ISP[/url]
JID: zielony@jabster.pl

Offline

 

#14  2007-04-24 22:57:48

  harry666t - Członek DUG

harry666t
Członek DUG
Zarejestrowany: 2007-01-28

Re: Komponowanie pulpitu

zielony, oczywiście. mam już parędziesiąt linijek działającego kodu w C++. jest to lekka przeróbka tinywm (głównie kosmetyczne poprawki będące przygotowaniem do wprowadzenia nowych funkcjonalności). mywm (nazwa kodowa) póki co potrafi 3 rzeczy: przenieść okno, zmienić jego rozmiar, i wysunąć je na wierzch. jak to zrobić gdy nie ma ramek - wystarczy poczytać kod...

Kod:

/* TinyWM is written by Nick Welch <mack@incise.org>, 2005.
 * modified by harry666t, 2007 renamed mywm.
 * This software is covered by the GNU GPL v2 or any later
 * and is provided AS IS, with NO WARRANTY.
 */

#include <X11/Xlib.h>
#include <cstdlib>
#include <cstdio>

inline int max (int a, int b) {
  return (a>b ? a:b);
}

int main (int argc, char* argv[]) {
  bool debug = true;
  /*
   * TODO: add getopt to support diplayz other than :0
   */
  Display * dpy;
  char* display = getenv("DISPLAY");
  if (!(dpy = XOpenDisplay(display != NULL ? display : ":0" ))) return 1;
  Window root = DefaultRootWindow(dpy);
  XWindowAttributes attr;
  XButtonEvent start;
  XEvent ev;
  XGrabKey (dpy, XKeysymToKeycode(dpy, XStringToKeysym("z")),
            Mod1Mask, root, True, GrabModeAsync, GrabModeAsync);
  XGrabButton (dpy, 1, Mod1Mask, root, True, ButtonPressMask,
               GrabModeAsync, GrabModeAsync, None, None);
  XGrabButton (dpy, 3, Mod1Mask, root, True, ButtonPressMask,
               GrabModeAsync, GrabModeAsync, None, None);
  
  for(;;) {    
    XNextEvent (dpy, &ev);    
    if (ev.type == KeyPress && ev.xkey.subwindow != None) {      
      XRaiseWindow (dpy, ev.xkey.subwindow);      
    } else if (ev.type == ButtonPress && ev.xbutton.subwindow != None) {
      XGrabPointer (dpy, ev.xbutton.subwindow, True,
                    PointerMotionMask|ButtonReleaseMask, GrabModeAsync,
                    GrabModeAsync, None, None, CurrentTime);
      XGetWindowAttributes (dpy, ev.xbutton.subwindow, &attr);
      start = ev.xbutton;
    } else if (ev.type == MotionNotify) {
      int xdiff, ydiff;
      while (XCheckTypedEvent (dpy, MotionNotify, &ev));
      xdiff = ev.xbutton.x_root - start.x_root;
      ydiff = ev.xbutton.y_root - start.y_root;
      XMoveResizeWindow 
        (dpy, ev.xmotion.window,
         attr.x + (start.button==1 ? xdiff : 0),
         attr.y + (start.button==1 ? ydiff : 0),
         max (1, attr.width + (start.button==3 ? xdiff : 0)),
         max (1, attr.height + (start.button==3 ? ydiff : 0))
         ); // emacs indents code like sniper shots enemies
    } else if (ev.type == ButtonRelease) {
      XUngrabPointer (dpy, CurrentTime);
    }
  }
}

Kod:

$ g++ -o mywm -lX11 mywm.cpp

Wymagane nagłówki od X11. Licencja GPL 2 lub wyższa (do wyboru).

Zalety: nie ryzykując utraty minimalnej funkcjonalności (zmiana położenia, rozmiaru i kolejności okien) dostajemy menedżer który ruszy na dowolnej maszynie zdolnej uruchomić X11, i nie pozostawi absolutnie żadnego zauważalnego śladu w postaci zużycia procesora lub pamięci. Ponadto, jest łatwy do zrozumienia i pozostaje gotowy do dalszego hackowania.

Wady: wszystko inne.

Przed uruchomieniem na chwilę pozbyć się obecnego WMa ;]

===

Czytałem sporo o fvwm na forum gentoo, i dochodzę do prostego wniosku. Inne WMy są jak kalkulatory. Od takich za 5 złotych z kiosku (twm, mwm, itp), po kalkulatory naukowe z rysowaniem wykresów funkcji (fluxbox, E*).

fvwm jest jak programowalny kalkulator naukowy w stylu TI92+. zawsze chciałem sobie sprawić TI92+ więc pewnie na chwilę zostanę przy kocie.

Tymczasem ja próbuję polutować kalkulatorek z części które można znaleźć w domu. Cóż, może jak fvwm mi się znudzi (znając mnie daję mu miesiąc) to zacznę dalej grzebać przy mywm.

W międzyczasie w końcu doszedłem do wniosku: co nie podoba mi się w dzisiejszym uniksie, oraz zacząłem opracowywać własną architekturę procesora: ANARCH - i nawet piszę emulator ANARCHa, zwany anarch. idę pod prysznic, jak wrócę to podzielę się spostrzeżeniami.


[ /\/\/\ o_0 ----->>>       Ascii Art Userbar User ]

"steal and steal and steal some more and give it to all your friends and keep on stealin'"
- Reznor

Offline

 

#15  2007-04-25 00:35:29

  qluk - Pan inż. Cyc

qluk
Pan inż. Cyc
Skąd: Katowice
Zarejestrowany: 2006-05-22

Re: Komponowanie pulpitu

Stwórz sobie arghitekture oparta o rozszerzoną implementacjie maszyny Turinga :P Będziewsz zawsze w stanie optymalnie rozwiązywać algorytmy ( o ile będzie istnial takowy ::P )

Offline

 

#16  2007-04-25 17:13:58

  harry666t - Członek DUG

harry666t
Członek DUG
Zarejestrowany: 2007-01-28

Re: Komponowanie pulpitu

Cóż, chyba każdy zestaw instrukcji musi być zgodny z turingiem, no nie? BTW mam już szkic 14 instrukcji, z czego kilka jest do poprawki, chyba ze dwie do usunięcia, parę pomysłów do dodania, i w momencie gdy mi się skończą pomysły - publikuję specyfikację i piszę emulator ;]

Obecnie istnejące instrukcje już są zgodne z turingiem, to znaczy jest coś w stylu: q++, q--, p[q]++, p[q]--, jest while i end while, teraz kombinuję ze skokiem do adresu w pamięci oraz drugim wskaźnikiem (byłby potrzebny by wracać z funkcji). Generalnie nie wiem jak rozwiązać problem komunikacji z zewnętrznym sprzętem. A zresztą zaraz założę temat, bo się offtop robi.


[ /\/\/\ o_0 ----->>>       Ascii Art Userbar User ]

"steal and steal and steal some more and give it to all your friends and keep on stealin'"
- Reznor

Offline

 

#17  2007-04-26 20:43:58

  qluk - Pan inż. Cyc

qluk
Pan inż. Cyc
Skąd: Katowice
Zarejestrowany: 2006-05-22

Re: Komponowanie pulpitu

Nie musi :]
Turinga nie da się zaimplementować fizycznie :P Po drugie nie ma komend skoku tylko masz ruch głowicy w lewo, prawo i zmianę stanu oraz odczyt stanu :]
Są pseudokody do tworzenia czegoś zgodnego z Turinga bądź zbliżonego jak brainfuck lub Ook (hehe z wiki "Ook z założenia jest językiem przeznaczonym dla orangutanów." :D).

Offline

 

#18  2007-04-26 23:18:30

  harry666t - Członek DUG

harry666t
Członek DUG
Zarejestrowany: 2007-01-28

Re: Komponowanie pulpitu

jeżeli jest tylko ruch lewo/prawo, zapis i odczyt - to nie da się w tym żadnego programu napisać.

a gdzie pętla? ;]

w temacie o ANARCH wrzucę dziś lub jutro oficjalny zestaw instrukcji, niech ktoś krzyczy jeśli coś jest źle bo już to zaimplementowałem i potem nie będzie mi się chciało zmieniać.


[ /\/\/\ o_0 ----->>>       Ascii Art Userbar User ]

"steal and steal and steal some more and give it to all your friends and keep on stealin'"
- Reznor

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
To nie jest tylko forum, to nasza mała ojczyzna ;-)

[ Generated in 0.011 seconds, 11 queries executed ]

Informacje debugowania

Time (s) Query
0.00011 SET CHARSET latin2
0.00004 SET NAMES latin2
0.00164 SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='18.226.200.93' WHERE u.id=1
0.00069 REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '18.226.200.93', 1733048154)
0.00021 SELECT * FROM punbb_online WHERE logged<1733047854
0.00088 SELECT topic_id FROM punbb_posts WHERE id=58676
0.00006 SELECT id FROM punbb_posts WHERE topic_id=7738 ORDER BY posted
0.00065 SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=7738 AND t.moved_to IS NULL
0.00005 SELECT search_for, replace_with FROM punbb_censoring
0.00352 SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=7738 ORDER BY p.id LIMIT 0,25
0.00085 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=7738
Total query time: 0.0087 s