Surf: minimalistický prohlížeč podle pravidel Suckless

16. 6. 2014
Doba čtení: 6 minut

Sdílet

Surf je webový prohlížeč postavený na WebKit a GTK+, který se snaží držet základní unixové filozofie a pravidel projektu Suckless. Umí pouze to, co je potřeba pro prohlížení webu a ostatní funkce (jako například panely či záložky) ponechává na dalších programech. Pokud vám prohlížeče smrdí, zkuste Surf.

Proč minimalistický prohlížeč?

Jak jsme si řekli v předchozích dílech seriálu, Suckless komunita se snaží vytvářet jednoduché programy zaměřené na zkušené uživatele s důrazem na unixovou filozofii, minimalismus a střídmost. Pokud se podíváme na scénu webových prohlížečů, dominují zde především prohlížeče jako Internet Explorer, Chrome, Firefox a Safari. Ani jeden zřejmě nesplňuje ani jedno z uvedených kritérií. Suckless komunita s touto situací nebyla spokojena a na světě se brzy objevil prohlížeč Surf, který se k ideálům Suckless snaží alespoň co nejvíce přiblížit.

„Still, I feel, one can't emphasize enough how insane the web has become. For example, consider the mere fact http is called http. The first /t/ in it is for text. Now it is used to embed and transfer whatnots. Worse: often, where could and should be text, the text is obfuscated in binary containers. That said, suckless web browser is an oxymoron: it sucks either at design or at the amount of content accessible. Surf is a particular trade-off of what is worth caring about and giving the user interface to.“
 –stanio, 2014–02–20, Suckless mailing list 2013

S orientací na pokročilé uživatele přichází samozřejmě důraz na ovládání klávesnicí a snadná rozšiřitelnost. Ta je také důsledkem zaměření na unixovou filozofii. Surf tak neimplementuje vlastnosti, které nejsou jeho primárním zaměřením jako webového prohlížeče a co lze, deleguje jiným programům, které si uživatel může zvolit (nebo vytvořit) dle vlastní libosti. Jasným příkladem toho je propojení s programem Tabbed, které si ukážeme za chvíli.

Surfování se Surfem

Po spuštění Surfu uživatel obdrží opravdu spartánské rozhraní. Žádná tlačítka, žádný stavový řádek, žádné menu a dokonce ani žádný adresní řádek. Vůbec nic, kromě výchozího bílého pozadí. Zde je vidět pro Suckless typická orientace na odborné uživatele, u kterého se očekává, že si přečte manuálovou stránku. Ta je stručná a jasná. Pro zadání adresy stačí stisknout CTRL₊g a zadat adresu. Při zadávání si můžete všimnout, že program, který se stará o toto zadání není Surf, ale jiný program – dmenu, který jsme potkali v článku o dwm. Zde je tedy vidět střípek unixové filozofie.

Po načtení stránky můžeme samozřejmě navigovat myší, ale Surf od vás očekává spíše povely z klávesnice. Na posunování stránkou a navigování v historii (zpět a vpřed) jsou vyhrazeny klávesové zkratky CTRL₊hjkl, které odborníkovi již dávno zarostly do svalů na prstech.


Autor: Suckless Project

K dispozici jsou pak možnosti (zkratky) vyhledávat na stránce, přiblížení a oddálení, načtení stránky z adresy ve schránce a zkopírování aktuální adresy do schránky, tisk, znovunačtení (a znovunačtení bez mezipaměti) a několik dalších.

Zajímavou schopností Surfu je možnost klávesovými zkratkami vypnout a zapnout vykreslování obrázků, vykonávání skriptů a aktivovat a deaktivovat pluginy (Flash). Pokud vás na dané stránce zajímá jen text, je možné se takto jednoduše zbavit všech rozptylujících elementů. Nebo pokud jste na mobilním připojení kdesi v horách a potřebujete rychle zjistit nějakou informaci, můžete takto ušetřit spoustu zbytečného datového přenosu.

Pokročilou schopností Surfu je možnost uložit si vlastní JavaScriptový kód do souboru ~/.surf/script.js. Ten je pak přístupný na každé stránce a uživatel si tak může jednoduše modifikovat schopnosti prohlížeče. Mezi zajímavé využití script.js patří například kód pro zvýrazňování odkazů, podobně jako to dělá například Vimperátor.

Mezi pokročilejší možnosti Surfu také patří možnost používat alternativní soubor s cookies. Surf si je ukládá jednoduše do obyčejného textového souboru ~/.surf/cookies.txt. Při startu si je možné pomocí přepínačů na příkazové řádce vybrat jiný soubor.


Autor: Suckless Project

Pro Surf existuje mnoho modifikací, které jsou k dispozici na stránce projektu. Zajímavé jsou například způsoby uchovávání záložek nebo vyhledávání v adresním řádku. Některé z těchto rozšíření používají možnost ovládat Surf pomocí XProperties nástrojem xprop(1).

Kromě uvedených možností úpravy chování Surfu lze samozřejmě celý prohlížeč konfigurovat. Konfigurace se děje úpravou hlavičkového souboru a rekompilací, stejně jako například v případě zmíněného dwm.

Příklad rekonfigurace Surfu do kiosk módu (ve kterém nebude Surf reagovat na klávesové zkratky):

$ cd ~/dev/
$ git clone http://git.suckless.org/surf
Cloning into 'surf'...
remote: Counting objects: 1117, done.
remote: Compressing objects: 100% (734/734), done.
remote: Total 1117 (delta 650), reused 770 (delta 382)
Receiving objects: 100% (1117/1117), 486.29 KiB | 734.00 KiB/s, done.
Resolving deltas: 100% (650/650), done.
Checking connectivity... done.
$ cd surf
$ cp config.def.h config.h
$ ed config.h
4656
/kiosk
static Bool kioskmode       = FALSE; /* Ignore shortcuts */
s/FALSE/TRUE/
wq
4655
$ make
surf build options:
CFLAGS   = -std=c99 -pedantic -Wall -Os -I. -I/usr/include -I/usr/X11R6/include -pthread -I/usr/include/webkitgtk-1.0 -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/pango-1.0 -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/libdrm -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libpng16 -I/usr/include/pango-1.0 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/harfbuzz -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/harfbuzz -I/usr/include/libsoup-2.4 -I/usr/include/libxml2 -I/usr/include/webkitgtk-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include  -DVERSION="0.6" -DBSDSOURCE
LDFLAGS  = -g -L/usr/lib -lc -L/usr/X11R6/lib -lX11 -lwebkitgtk-1.0 -lgtk-x11-2.0 -lgdk-x11-2.0 -lpangocairo-1.0 -latk-1.0 -lcairo -lgdk_pixbuf-2.0 -lpangoft2-1.0 -lpango-1.0 -lfontconfig -lfreetype -lsoup-2.4 -lgio-2.0 -lgobject-2.0 -ljavascriptcoregtk-1.0 -lglib-2.0  -lgthread-2.0
CC       = cc
CC surf.c
surf.c:1173:1: warning: ‘eval’ defined but not used [-Wunused-function]
 eval(Client *c, const Arg *arg) {
 ^
CC -o surf
$ ./surf

Použití Surfu v kombinaci s Tabbed

Po chvíli používání Surfu jistě většinu začne pálit chybějící možnost použití více panelů. Vývojáři tuto schopnost schválně nezabudovali a místo toho nechali na uživateli, jak se k tomuto problému postaví. Pokud používáte správce oken dwm, můžete použít třeba monocle mód (zobrazení na celou obrazovku) a mít prostě více instancí Surfu pod sebou. Pokud ale vyloženě trváte na něčem jako klasické panely (taby), můžete sáhnout po dalším Suckless projektu – tabbed. Jde o jednoduchý malý program, jehož úlohou je pouze pojímat grafické aplikace a poskytovat rozhraní panelů. Neslouží tedy pouze jako obal pro instance Surfu, ale třeba i pro instance xtermu, suckless terminálu st či prohlížeče PDF souborů.


Autor: Suckless Project

Tabbed je velmi jednoduchý a opět stejně jako v případě Surfu, stačí si projít manuálovou stránku. Pro použití se Surfem stačí spustit tabbed surf -e (přepínač -e řekne Surfu, aby využil funkci XEmbed. Pro otevření další instance Surfu lze použít buď CTRL+t nebo CTRL+SHIFT+Enter, pro zavření tabu pak CTRL+q. A opět, pro pohyb mezi panely slouží CTRL₊SHIFT+h a CTRL+SHIFT+l, pro jejich přesouvání pak CTRL+SHIFT+j a CTRL+SHIFT+k.

bitcoin_skoleni

Shrnutí

Surf je sice již dost stabilní, ale ne ukončený projekt. Ještě jej čeká několik změn, jako například případná integrace s Adblock Plus nebo náhrada WebKitu za něco více suckless.

„We should be really concerned about the fact that it requires hundreds of developers and millions of dollars to develop and maintain a piece of software (i.e. webkit) to just barely keep up with the most recent changes in standards.“
 –Laslo Hunhold, 2014–02–17, Suckless mailing list 2013

Nicméně, Suckless se podařilo vytvořit prakticky použitelný minimalistický webový prohlížeč, který se drží unixové filozofie a je velmi přátelský pro pokročilé uživatele. Když nic jiného, dá se jistě alespoň měřit s alternativními minimalistickými prohlížeči jako například uzbl, w3m, dillo, glinks a netsurf.

Seriál: Suckless project

Autor článku

Martin Kopta je absolventem ČVUT FEL, kde studoval systémové programování a od roku 2010 se věnuje profesionální programátorské praxi. Zajímá se o unixové systémy, programátorské techniky a technologie.