КАКОДА подесим Window Maker
Упутство. [верзија 0.7, 6. децембар 2023.]
Страхиња РадићСадржај
1. Увод
Window Maker је менаџер прозора који прати изглед оперативног система NeXTSTEP/OPENSTEP. У оквиру пројекта ГНУ постоји пројекат GNUstep, коме је циљ да се направи свеобухватни оквир за израду апликација које подсећају на NeXTSTEP у језику Objective‑C, који се користио за програмирање NeXTSTEP апликација. Иако Window Maker може да „коегзистира“ са GNUstep‑ом, они су два засебна пројекта, са различитим циљевима. Window Maker је само менаџер прозора, док је GNUstep комплетно окружење за апликације које подсећају на NeXTSTEP и OPENSTEP, као и основа за њихову изградњу. Уместо GNUstep‑а, Window Maker користи сопствену библиотеку WINGs (WINGs is Not GNUstep), која је мања и једноставнија, и написана у обичном C‑у.2. Инсталација Window Maker-а
У већини система које подржава, Window Maker се може инсталирати преко
менаџера пакета. Рецимо, у Alpine Linux‑у постоји пакет windowmaker
, који
се, уз одговарајуће пакете са наставцима -dev
и -doc
може инсталирати
наредбом (као root1):
# apk add windowmaker windowmaker-dev windowmaker-doc
ипак, у Alpine Linux‑у ови пакети не садрже локализоване преводе порука (.mo датотеке), па се, ако желимо да користимо локализовани Window Maker, уместо тога он мора компајлирати из изворног кода.
Пошто су инсталирани неопходни пакети-предуслови (пун списак на страници Window Maker Compilation and Installation), ово се постиже наредбама (уз локализацију на српски):
$ git clone git://repo.or.cz/wmaker-crm.git $ autoreconf -if $ ./configure --without-menu-textdomain CATALOGS=sr.mo LINGUAS=sr \ LIBS=-lintl MSGFMT=msgfmt && make $ su -c 'make install'
након чега је пожељно да се инсталирају датотеке са подешавањима наредбом
$ wmaker.inst
или, ако оне већ постоје, да се регенерише кориснички мени наредбом:
$ wmgenmenu > $HOME/GNUstep/Defaults/WMRootMenu
3. Фонт
Подразумевани фонт у NeXTSTEP‑у је била Helvetica. По мом мишљењу,
најсличнији фонту Helvetica у савременим Униксоликим системима је Liberation
Sans. Он се у већини система може инсталирати из менаџера пакета, нпр. у
Alpine Linux‑у се одговарајући пакет зове font-liberation
. Дакле, у Alpine
Linux‑у се може извршити:
# apk add font-liberation
4. Иконе
Иконе из GNUstep‑а и OPENSTEP‑а, без посебног начина организације, се могу наћи на сајту Icons for Window Maker, AfterStep, GNUstep ala NeXTSTEP. Оне се могу додати у неки од директоријума подешених у Window Maker‑у као „путање за претрагу икона“, рецимо
$HOME/GNUstep/Library/Icons
и потом додељивати апликацијама и иконама у доку. Ипак, да би GTK и Qt апликације могле да их користе, неопходно је да буду у одговарајућим поддиректоријумима, да имају специфичне називе и датотеку index.theme. Због овога је неопходан и пакет икона GNUstep, који се може преузети са gnome-look.org или store.kde.org.
4.1. Nextlike
Тема GNUstep садржи иконе које су специфичне за GNUstep, и не одговарају у
потпуности иконама из NeXTSTEP‑а. Ово је најуочљивије код икона фасцикли:
Приметимо да су иконе из датотеке openstepicons-1.1.tar.gz мало светлије него
што би требало да буду, а да су иконе из датотеке gnustepicons-1.0.tar.gz
тамније. Ово се може исправити прављењем нове теме, коју ћемо назвати
Nextlike, комбиновањем постојеће теме, GNUstep, икона са горенаведеног сајта
и икона из пакета wmicons. То се може урадити следећим наредбама
(неопходан је ImageMagick, подразумева се да је тема GNUstep
распакована у директоријум GNUstep унутар $HOME/.local/share/icons; ако тај
директоријум не постоји, треба га креирати):
Наредбе за генерисање теме Nextlike (подужи листинг!)
$ mkdir -p $HOME/src
$ curl -O http://www.aiei.ch/gnustep/icons/two/gnustep-icons-1.0.tar.gz
$ tar xvf gnustep-icons-1.0.tar.gz
$ mv gnustep-icons-1.0 $HOME/src/
$ curl -O http://www.aiei.ch/gnustep/icons/one/openstepicons-1.1.tar.gz
$ tar xvf openstepicons-1.1.tar.gz
$ mv openstepicons-1.1 $HOME/src/
$ curl -O https://ftp.openbsd.org/pub/OpenBSD/snapshots/packages/amd64/\
wmicons-1.0p1.tgz
$ ( mkdir wmicons-1.0p1 && cd wmicons-1.0p1
tar xvf ../wmicons-1.0p1.tgz
)
$ mv wmicons-1.0p1 $HOME/src/
$ ( cd $HOME/.local/share/icons
cp -r GNUstep Nextlike
cd Nextlike
gsdir="$HOME/src/gnustep-icons-1.0/icons"
osdir="$HOME/src/openstepicons-1.1/icons.tiff"
osopt="-gamma 0.6"
wmdir="$HOME/src/wmicons-1.0p1/share/WindowMaker/Pixmaps"
:
nldir=actions/48
mkdir -p $nldir
convert $osopt $osdir/WM.App-find.tiff $nldir/edit-find.png
convert $gsdir/Magnifier.tiff $nldir/edit-find-replace.png
ln -s edit-find.png $nldir/find-location.png
convert $osopt -fill green -colorize 30 \
$osdir/AuthServer.App-ISDNIcon.tiff $nldir/call-start.png
convert $osopt -fill red -colorize 30 \
$osdir/AuthServer.App-ISDNIcon.tiff $nldir/call-stop.png
convert $osopt -fill blue -colorize 10 \
$osdir/AuthServer.App-ISDNIcon.tiff $nldir/call-stop.png
convert $osopt -fill green -colorize 60 \
$osdir/WM.App-netUserAddress.tiff $nldir/user-available.png
convert $osopt -fill yellow -colorize 80 \
$osdir/WM.App-netUserAddress.tiff $nldir/user-away.png
convert $osopt -fill orange -colorize 60 \
$osdir/WM.App-netUserAddress.tiff $nldir/user-busy.png
convert $osopt -fill blue -colorize 40 \
$osdir/WM.App-netUserAddress.tiff $nldir/user-idle.png
convert $osopt $osdir/WM.App-netUserAddress.tiff $nldir/user-invisible.png
convert $osopt -fill '#aaaaaa' -colorize 70 \
$osdir/WM.App-netUserAddress.tiff $nldir/user-offline.png
ln -s ../../apps/48/accessories-text-editor.png $nldir/document-edit.png
ln -s ../../devices/48/printer.png $nldir/document-print.png
[ -f $nldir/edit-delete.png ] && rm $nldir/edit-delete.png
convert $gsdir/M3Play_delete_song.tiff $nldir/edit-delete.png
convert $osopt $osdir/Installer.App-Delete.tiff \
$nldir/edit-clear.png
ln -s ../../places/48/user-home.png $nldir/go-home.png
convert $osopt $osdir/ProductFeedbackn.tiff $nldir/edit-paste.png
convert $osopt $osdir/ProjectBuilder.App-Documents_color.tiff \
$nldir/edit-copy.png
convert $osopt $osdir/ProjectBuilder.App-text_win.tiff $nldir/document-new.png
convert $osopt $osdir/WM.App-floppy.tiff $nldir/document-save.png
convert $osopt $osdir/WM.App-openFloppy.tiff $nldir/document-save-as.png
convert $osopt $osdir/WM.App-stop.tiff $nldir/process-stop.png
convert $gsdir/MailIcon_box_add.tiff $nldir/list-add.png
convert $gsdir/MailIcon_box_delete.tiff $nldir/list-remove.png
convert $gsdir/rwd.tiff -crop 12x+0x0 $nldir/go-previous.png
convert $gsdir/ffwd.tiff -crop 12x+0x0 $nldir/go-next.png
convert $gsdir/tostart.tiff $nldir/go-first.png
convert $gsdir/toend.tiff $nldir/go-last.png
convert $nldir/go-previous.png -rotate 90 $nldir/go-up.png
convert $nldir/go-next.png -rotate 90 -flop $nldir/go-down.png
convert $gsdir/tostart.tiff -rotate 90 $nldir/go-top.png
convert $gsdir/toend.tiff -rotate 90 -flop $nldir/go-bottom.png
ln -sf media-seek-forward.png $nldir/go-jump.png
convert $gsdir/play.tiff $nldir/media-playback-start.png
convert $gsdir/pause.tiff $nldir/media-playback-pause.png
convert $gsdir/rwd.tiff $nldir/media-seek-backward.png
convert $gsdir/ffwd.tiff $nldir/media-seek-forward.png
ln -s go-first.png $nldir/media-skip-backward.png
ln -s go-last.png $nldir/media-skip-forward.png
convert $wmdir/FolderOpen.xpm $nldir/document-open.png
convert $gsdir/MailIcon_send.tiff $nldir/document-send.png
ln -s document-send.png $nldir/mail-send.png
ln -sf mail-repllied.png $nldir/mail-reply-sender.png
convert $gsdir/MailIcon_forward.tiff $nldir/mail-unread.png
ln -s mail-unread.png $nldir/mail-forward.png
ln -s mail-read.png $nldir/mail-mark-read.png
convert -grayscale Rec709Luma \
$gsdir/MailIcon_forward.tiff $nldir/mail-read.png
convert $gsdir/MailIcon_reply.tiff $nldir/mail-replied.png
convert $gsdir/MultipleSelection.tiff $nldir/edit-select-all.png
convert $gsdir/gf_finger.tiff $nldir/edit-select.png
convert -size 48x48 xc:none $nldir/system-users.png
composite -geometry +8+0 $nldir/user-offline.png \
$nldir/system-users.png $nldir/system-users.png
composite -geometry +0+8 $nldir/user-invisible.png \
$nldir/system-users.png $nldir/system-users.png
:
nldir=apps/48
ln -sf gwenview.png $nldir/ristretto.png
convert $osopt $osdir/WM.App-find.tiff $nldir/baloo.png
ln -s ../../devices/48/video-display.png $nldir/preferences-desktop-display.png
ln -sf help-contents.png $nldir/system-help.png
ln -sf preferences-desktop-theme.png $nldir/qt5ct.png
convert $osopt $osdir/Preferences.App-boot.tiff $nldir/system-shutdown.png
convert $osopt $osdir/WM.App-openRoot.tiff $nldir/system-reboot.png
convert $gsdir/PrefsIcon_Login.tiff $nldir/system-log-out.png
ln -s ../../actions/48/edit-find.png $nldir/system-search.png
convert $osopt $osdir/Preferences.App-Password.tiff $nldir/system-lock-screen.png
convert $osopt $osdir/Interfacebuilder.App-fontmanager_nib.tiff \
$nldir/tools-check-spelling.png
convert $osopt $osdir/Documentation-manual.tiff $nldir/help-contents.png
ln -sf help-contents.png $nldir/help-browser.png
ln -sf internet-mail.png $nldir/sylpheed.png
ln -sf accessories-text-editor.png $nldir/xed.png
:
nldir=categories/48
convert $osopt $osdir/WM.App-eunet.tiff $nldir/applications-internet.png
:
nldir=devices/48
convert $osopt $osdir/WM.App-root.tiff $nldir/computer.png
convert $osopt $osdir/Preferences.App-Mouse.tiff $nldir/input-mouse.png
convert $osopt $osdir/Preferences.App-Keyboard-JTF.tiff $nldir/input-keyboard.png
convert $osopt $osdir/Preferences.App-Monitor.tiff $nldir/video-display.png
convert $wmdir/harddrive.tif $nldir/drive-harddisk.png
ln -sf ../../actions/48/document-save.png $nldir/media-floppy.png
ln -sf media-optical.png $nldir/drive-optical.png
convert $osopt $osdir/Grab.App-CameraNormal.tiff $nldir/camera-photo.png
convert $osopt $osdir/PrintManager.App-queue.tiff $nldir/scanner.png
:
nldir=places/48
convert $osopt $osdir/WM.App-folder.tiff $nldir/folder.png
convert $osopt $osdir/WM.App-eunet.tiff $nldir/network-workgroup.png
cd $nldir
find . -name 'folder-*.png' ! -type l -exec ln -sf folder.png {} \;
[ -f folder-downloads.png ] && rm folder-downloads.png
convert $wmdir/FolderLink.xpm folder-downloads.png
ln -sf folder-downloads.png folder-download.png
[ -f folder-html.png ] && rm folder-html.png
convert $wmdir/FolderGlobe.xpm folder-html.png
ln -sf folder-html.png folder-cloud.png
ln -sf folder-html.png folder-dropbox.png
ln -sf folder-html.png folder-gdrive.png
ln -sf folder-html.png folder-network.png
ln -sf folder-html.png folder-onedrive.png
ln -sf folder-html.png folder-owncloud.png
ln -sf folder-html.png folder-public.png
ln -sf folder-html.png folder-publicshare.png
[ -f folder-bookmark.png ] && rm folder-bookmark.png
convert $wmdir/FolderBooks.xpm folder-bookmark.png
ln -sf folder-bookmark.png bookmarks.png
ln -sf folder-bookmark.png favorites.png
ln -sf folder-bookmark.png folder-favorites.png
cd -
mv index.theme index.theme.old
sed -e 's/^\(Name=\).*/\1Nextlike/' \
-e 's/^\(Comment=\).*/\1Based on the theme GNUstep/' \
-e '/^Directories/{s,actions/24,actions/48,;s:status/24,::}' \
-e '/^\[actions\/24\]/,/^$/{s,actions/24,actions/48,;
s,\(Size=\)24,\148,;s,\(Type=\)Fixed,\1Scalable,}' \
-e '/^\[status\/24\]/,/^$/d' \
index.theme.old > index.theme
)
5. GTK
За GTK програме постоји тема OneStepBack, која се просто распакује у директоријум
$HOME/.local/share/themes
након чега се у датотеку $HOME/.gtkrc-2.0 може унети:
gtk-icon-theme-name = "Nextlike" gtk-theme-name = "OneStepBack" gtk-font-name = "Liberation Sans 10" gtk-toolbar-style = GTK_TOOLBAR_BOTH gtk-menu-images = 0 gtk-button-images = 0
а за GTK 3 треба изменити датотеку $HOME/.config/gtk-3.0/settings.ini 2:
[Settings] gtk-application-prefer-dark-theme=0 gtk-icon-theme-name = Nextlike gtk-theme-name = OneStepBack gtk-font-name = Liberation Sans 10 gtk-overlay-scrolling = false
Директива gtk-overlay-scrolling
служи да се искључи аутоматско сакривање трака
за скроловање после извесног времена. Ни NeXTSTEP, ни OPENSTEP то нису
радили. 😊
6. Qt
За Qt постоји тема QTStep, која подржава погон за теме Kvantum. У пракси, доследни резултати се постижу само уколико је поред Kvantum‑а инсталиран и Qt5 Configuration Tool (qt5ct). Ово се у Alpine Linux‑у постиже наредбом:
# apk add qt5ct kvantum kvantum-qt5 kvantum-themes qt5ct
а за QTStep (подразумева се да се налазимо у $HOME/src; скрипт make_theme.sh такође захтева инсталиран, али на срећу не неопходно и постављен за подразумевану љуску, GNU Bash):
$ git clone https://github.com/andbgr/QTStep $ cd QTStep/kvantum/QTStep.source $ ./make_theme.sh WMakerDefault
овим ће у надређеном директоријуму бити генерисана тема QTStepWMakerDefault у
истоименом поддиректоријуму. У последњој наредби може се уместо WMakerDefault
ставити било који назив теме за који постоји датотека colors.[назив] у
директоријуму QTStep.source.
6.1. Kvantum
У програму kvantummanager потребно је инсталирати жељену тему, овде QTStepWMakerDefault. То се постиже активирањем Select a Kvantum theme folder, навигацијом и одабиром директоријума $HOME/src/QTStep/kvantum/QTStepWMakerDefault, и затим активирањем Install this theme. Затим се активира Change/Delete Theme, одабере QTStepWMakerDefault, и активира Use this theme.
После овога се активира Configure Active Theme и:
На картици Hacks се активира Iconless push buttons и Iconless menus.
На картици Sizes & Delays се подеси:
- Small Icon: 24px
- Large Icon: 48px
- Button Icon: 24px
- Toolbar Icon: 48px
На картици Miscellaneous се одабере Toolbutton style → Text Under Icon.
6.2. qt5ct
Следећи кораци су у програму qt5ct.
На картици Appearance се одабере Style: kvantum, Standard dialogs: Default.
На картици Fonts се одабере General: Liberation Sans 10, Fixed width: Liberation Mono 10.
На картици Icon Theme се одабере Nextlike.
На картици Interface се искључи Dialog buttons have icons и Menus have icons. У листи за избор Toolbar button style се изабере The text appears under the icon.
Активира се дугме OK.
На крају, потребно је подесити променљиве окружења у датотекама са подешавањима ($HOME/.profile, $HOME/.bashrc, итд.), тако да је постављена променљива
export QT_QPA_PLATFORMTHEME=qt5ct
а није, рецимо, променљива QT_STYLE_OVERRIDE
. Такође, није на одмет да у
датотеци $HOME/.config/Trolltech.conf стоји:
[Qt] style=kvantum
7. Неки програми
Највећа сличност са NeXTSTEP‑ом се, наравно, постиже употребом GNUstep апликација. Међутим, пошто је ово упутство усредсређено на Window Maker, ево неких предлога за најчешће апликације:
Уређивач текста: xed
Програм за мејл: Sylpheed
Прегледач PDF‑а: Xpdf
Канцеларијски пакет: (Неизбежни) LibreOffice
Прегледач слика: Ristretto
Музички плејер: JuK
Програм за обраду слика: (Неизбежни) GIMP (Edit → Preferences → Interface: Theme → System, Icon Theme → Legacy)
Програм за векторске слике: (Неизбежни) Inkscape (Edit → Preferences → Interface → Theming: Change GTK theme → Use system theme (OneStepBack), Change icon theme → hicolor, деактивирати Use symbolic icons)
8. Резултат
9. Недостаци
Ова листа недостатака нипошто није исцрпна, и допуњаваћу је у складу са уоченим стањем.
Можда најуочљивији недостатак је да је величина неких икона другачија у односу на GNUstep/NeXTSTEP/OPENSTEP иконе, као и да се многе иконе и даље исцртавају као „симболичке“, у зависности од тога које теме икона су инсталиране.
Неки програми „одбијају послушност“ у вези са присуством икона у менију и на дугмадима, или да потпис дугмади буде испод икона (
GTK_TOOLBAR_BOTH
), нпр. Sylpheed.
Нажалост, ово је последица, и само још један у низу примера, политике „дебилизације“ софтвера, у овом случају примењене на GTK. У софтверу се намерно смањује могућност прилагођавања и контроле од стране корисника, а такве одлуке доносе програмери‑деспоти који управљају великим софтверским пројектима као што су GTK и GNOME.
Релевантне везе:
gtk-button-images
:Deprecated since: 3.10
This setting is deprecated. Application developers control whether a button should show an icon or not, on a per-button basis. If a GtkButton should show an icon, use the GtkButton:always-show-image property of GtkButton, and pack a GtkImage inside the GtkButton.gtk-menu-images
:Deprecated since: 3.10
This setting is deprecated. Application developers control whether or not a GtkMenuItem should have an icon or not, on a per widget basis. Either use a GtkMenuItem with a GtkBox containing a GtkImage and a GtkAccelLabel, or describe your menus using a GMenu XML description.gtk-toolbar-style
:Deprecated since: 3.10
This setting is ignored.
Потписи изабраних икона у PCManFM‑у су исцртани истом бојом као и неизабраних.
10. TODO
За урадити:
☐ максимална могућа покривеност (провера у gtk4-icon-browser)
☑ тестирање „од нуле“ у емулатору
☑ слике екрана разних апликација