Wolna amerykanka w PLD?
Pawel Wilk
siefca w entropy.echelon.pl
Wto, 8 Kwi 2003, 16:02:57 CEST
Tomku, wyluzuj, było na wstępie, że nieśmiałe marzenia. Wracałem
wcięty do domu jakiś czas temu i mi to przyszło do głowy. :-) Wiem, że
głupi był pomysł, ale gdyby nie on to bym tego nie przypomniał teraz
co sobie przypomniałem...
Apropos pierwotnych założeń -- chciałbym spytać co sądzić o
rozwiązaniu takim, że za lokalizację katalogu na konfigurację
odpowiada jakaś mała biblioteka, która działa na podobnej zasadzie
co gettext i podmienia nazwy ścieżkowe (albo po prostu je uzyskuje)
w zależności od ustawień dla konkretnych aplikacji.
Mamy pliki:
/etc/switches (globalny)
~/.switches (lokalny)
składnia pliku:
nazwa_aplikacji.nazwa_zmiennej = wartość
z możliwością substytucji zmiennych:
aplikacja.zmienna = @inna.aplikacja.inna_zmienna
albo
aplikacja.zmienna = @po_prostu_zmienna
i z możliwością substytucji zmiennych środowiskowych:
aplikacja.zmienna = $zmienna_środowiskowa
i z substytucją ~ na katalog domowy (w pewnych okolicznościach)
i z komentarzami oznaczonymi przez #
to w skrócie tyle o budowie plików konfiguracyjnych samej biblioteki.
Do pliku /etc/switches wpadają łańcuchy dodawane przy instalacji
pakietu. Ten plik jest przeszukiwany jeśli klucz nie zostanie
znaleziony w pliku .switches użytkownika, chyba że aplikacja
zdecyduje inaczej.
* przykład dla programu mplayer
w /etc/switches mamy:
user_cf_dir = ~/etc/
mplayer.global.config_dir = /etc/mplayer
mplayer.local.config_dir = @user_cf_dir/mplayer
w ~/.switches może być to samo
ale może być np. taki myk:
user_cf_dir = ~/jestem_inny_tu_mam_konfigi
i tyle! bo wartości zdefiniowane przez usera
zawsze przykrywają te globalne, więc user nie musi
już dopisywać sobie linijki:
mplayer.local.config_dir = @user_cf_dir/mplayer
chyba że bardzo tego chce, np.:
mplayer.local.config_dir = ~/mamplajer
co robi nasz program, gdy chce znaleźć nazwę
dla katalogu konfiguracyjnego użytkownika?
wzywa funkcje:
sw_setdomain("mplayer");
pathname = sw_getvar_path("local.config_dir",
"/home/users/siefca");
sw_getvar_path dla każdego klucza próbuje go uzyskać najpierw
z ~/.switches, a jeśli tam go nie ma to z /etc/switches
więc tutaj pathname będzie wskazywać na bufor ścieżkowy
zawierający: /home/users/siefca/etc/mplayer
Przykładową funkcję celowo nazywam sw_getvar_path() bo
ma być z założenia tym co sw_getvar() plus zamiana ~ na
nazwę katalogu domowego użytkownika. Katalog domowy musi
być wprost podany bo to już brocha aplikacji jak go uzyska.
Przemek Borys dwa lata temu zaproponował też takie
rozwiązanie:
sw_setdomain("mplayer");
pathname = sw_pathget("~/.mplayer/");
przy czym sw_pathget zachowywałoby się jak makro _() z
gettext, czyli w jakimś tam pliku musiłyby być pary
w stylu:
~/.mplayer ~/etc/mplayer
Pomysł na /etc/switches jest rozszerzeniem tego
pomysłu. W tym przypadku mamy znów problem
co robić, gdy pliku jeszcze nie ma. Możnaby by default
brać wtedy tą drugą nazwę.
ps.: nazwy kluczy i zmiennych wewnątrz plików konfiguracyjnych
dla biblioteczki to kwestia umowna ofkors
rfc..
--
Pawel Wilk ( siefca @ entropy echelon pl ) ) pld-devel )
żyj skromnie. szanuj swojego admina.
Więcej informacji o liście dyskusyjnej pld-devel-pl