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

Martin Kopta 16. 6. 2014

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.

widgety

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.

Našli jste v článku chybu?
Vitalia.cz: Voda z Vltavy před a po úpravě na pitnou

Voda z Vltavy před a po úpravě na pitnou

DigiZone.cz: Parlamentní listy: kde končí PR...

Parlamentní listy: kde končí PR...

Podnikatel.cz: Insolvence LevneElektro.cz? Začíná boj o peníze

Insolvence LevneElektro.cz? Začíná boj o peníze

Měšec.cz: TEST: Vyzkoušeli jsme pražské taxikáře

TEST: Vyzkoušeli jsme pražské taxikáře

DigiZone.cz: Nova opět stahuje „milionáře“

Nova opět stahuje „milionáře“

Vitalia.cz: Test dětských svačinek: Tyhle ne!

Test dětských svačinek: Tyhle ne!

DigiZone.cz: Wimbledon na Nova Sport až do 2019

Wimbledon na Nova Sport až do 2019

DigiZone.cz: DVB-T2 ověřeno: seznam TV zveřejněn

DVB-T2 ověřeno: seznam TV zveřejněn

Vitalia.cz: Inspekce našla nelegální sklad v SAPĚ. Zase

Inspekce našla nelegální sklad v SAPĚ. Zase

DigiZone.cz: Mordparta: trochu podchlazený 87. revír

Mordparta: trochu podchlazený 87. revír

DigiZone.cz: Rapl: seriál, který vás smíří s ČT

Rapl: seriál, který vás smíří s ČT

Podnikatel.cz: Byla finanční manažerka, teď cvičí jógu

Byla finanční manažerka, teď cvičí jógu

DigiZone.cz: Světový pohár v přímém přenosu na ČT

Světový pohár v přímém přenosu na ČT

120na80.cz: 3 preventivní vyšetření na odhalení rakoviny

3 preventivní vyšetření na odhalení rakoviny

Lupa.cz: Jak levné procesory změnily svět?

Jak levné procesory změnily svět?

Vitalia.cz: Muž, který miluje příliš. Ženám neimponuje

Muž, který miluje příliš. Ženám neimponuje

Podnikatel.cz: Udělali jsme velkou chybu, napsal Čupr

Udělali jsme velkou chybu, napsal Čupr

Lupa.cz: Patička e-mailu závazná jako vlastnoruční podpis?

Patička e-mailu závazná jako vlastnoruční podpis?

Podnikatel.cz: Takhle se prodávají mražené potraviny

Takhle se prodávají mražené potraviny

Podnikatel.cz: Babišovi se nedá věřit, stěžovali si hospodští

Babišovi se nedá věřit, stěžovali si hospodští