Temná stránka mozaiky (III): XMonad

Zdá se, že jsem vás nechal dlouho čekat, a to proto, že jsem až do dneška nezměnil jediné nastavení. Jak jsem už nějakou dobu sliboval, dnes roztrhám svůj soubor xmonad.hs, který jsem si připravil speciálně pro tuto příležitost. Tento a další konfigurační soubory jsou na Vložení, konkrétně barvy konzole , nastavení oken a horní lišta.

Můžete si je odtud stáhnout a otevřít ve svém oblíbeném textovém editoru.

Před

V případě, že vás zajímalo, můj desktop byl malý Openbox ve stabilní verzi Debianu. V tuto chvíli přeskočíte instalační proces distribuce, měli byste ověřit, zda jsou potřebné balíčky v úložištích. Udělejme to (pamatuji si, že používám Debian):

sudo aptitude install ghc xmonad xmobar gmrun dmenu

A připraven. Právě jsme nainstalovali, v pořadí vzhledu; kompilátor Glasgow Haskell, který má na starosti kompilaci a interpretaci Haskella; XMonad, správce oken, XMobar je lišta, která poskytuje informace o systému a některých spouštěcích programech, dmenu a gmrun; které již přijdou nakonfigurované tak, aby je XMonad spouštěl pomocí Mod + P a Mod + Shift + P.

A takto vypadal můj desktop. Řekl jsem to tak, že máme bod srovnání a napodobujeme některé věci, které jsem již nakonfiguroval v minimalističtějším prostředí.

Nic zvláštního

Ale překvapení. XMonad nás takto vítá. V zachycení jsem již otevřel gmrun, takže je vidět, že to není rozbité:

Nic velkolepého

A chceme, aby to vypadalo takto, již nakonfigurované a všechno:

Tak jo

Snímek obrazovky ukazuje terminál se spuštěným ncmpcpp, MPD klientem pro terminál a relací GVim, obojí s využitím palety SolarizedLight . Dosažení tohoto cíle nebylo obtížné a Vim a urxvt již byly v mém systému nainstalovány.

Xmonad.hs, jak děsivé!

Vůbec ne. Konfigurace, kterou se chystáte vidět, je extrémně jednoduchá a základní. Mělo by fungovat na všech systémech s XMonad 0.9.1, přestože je již k dispozici 0.10. No bojte se, velmi se bojte:

- Konfigurace Xmonad - Jak vidíte, je to docela jednoduchý import XMonad import XMonad.Util.EZConfig import XMonad.Util.Run wrk = ["A", "C", "G", "T"] main = do xmproc <- spawnPipe "xmobar" spawn "dusík - obnovit" spawn "urxvtd" spawn "mpd" spawn "xfce4-volumed" xmonad $ defaultConfig {modMask = mod4Mask, terminal = "urxvtc", borderWidth = 2, normalBorderColor = "# fdf6e3 ", focusBorderColor =" # 002b26 ", workspaces = wrk}` additionalKeys` [((mod4Mask, xK_v), založit "gvim"), ((mod4Mask, xK_c), založit "mpc toggle"), ((mod4Mask, xK_a) , spawn "mpc prev"), ((mod4Mask, xK_s), spawn "mpc next")] - Konec konfigurace. Jednoduché, snadné a čisté.

Co se tady stalo?

Pokud se již ze strachu vzpamatovali, vidíme, že naše konfigurace sotva dosáhne 30 řádků kódu. Po částech vám vysvětlím, proč pokud jste to zkopírovali a vložili, XMonad zkompiluje program, který jsme právě napsali. Připraven?

Sekce závislostí

Blízko začátku souboru jsou tři řádky, které začínají klíčovým slovem ` import` . Stejně jako v jiných programovacích jazycích toto klíčové slovo říká kompilátoru, aby hledal požadovaný modul, a kompilátor poté poskytuje funkce z tohoto modulu. Podívejme se na to znovu:

import XMonad import XMonad.Util.EZConfig import XMonad.Util.Run

Náš program používá tři závislosti. První nám přináší vlastní funkce XMonadu, druhý a třetí nám pomůže později definovat klávesové zkratky a spouštět programy. Pojďme dál.

Proměnné

Co je wrk a k čemu se používá? Pojďme se blíže podívat na kód:

wrk = ["A", "C", "G", "T"]

vlnit je proměnná, která odpovídá seznamu čtyř prvků, všech řetězců; protože seznamy Haskell přijímají pouze jeden typ položky. Pokud se divíte, proč jsem si vybral ty čtyři písmena pro své pracovní plochy, vzpomněl jsem si na čtyři nukleové báze DNA.
Název je pouze zkratka a mohli bychom jej dát myWorkspaces, pepitoRojo nebo cokoli jiného, ​​pokud to začíná malým písmenem a my ho specifikujeme v další části.
Zde začíná dobrá věc, že ​​máme k dispozici kompletní programovací jazyk, protože jsme mohli definovat barvu okna z proměnné:

windowColor = "#FFFFFF"

Nebo dokonce vytvořte funkci, která vrací barvu s ohledem na naši náladu:

moodColor m | m == "Smutné" = "# b0c4f6" - Něco jako modrá | m == "Angry" = "# ba3f3f" - Něco jako červená | m == "Happy" = "# 8bff7e" - Něco jako zelená | jinak = "#FFFFFF" - bílá, pro neutrální dny

A mnohem víc. Cítíte už tu sílu na dosah ruky? Jedna věc. Pokud nechápete, co se stalo, představte si to jako strukturu v Haskellu, které říkáme guard , a je to v podstatě jako strom typu if-then-else, ale organizovanější a úhlednější. A nebojte se, kód jsem napsal sám a funguje dobře.

Hlavní část

Počínaje řádkem s parametrem main=do začneme specifikovat chování XMonadu. Pojďme se na to pečlivě podívat.

Na začátku vykopněte věci

Toho lze dosáhnout mnoha způsoby, ale abych se vyhnul závislostem a vylepšil kód, i když zjevně jaskynnější, rozhodl jsem se pro toto:

xmproc <- spawnPipe "xmobar" spawn "dusík - obnovit" spawn "urxvtd" spawn "mpd" spawn "xfce4-volumed"

První řádek začíná XMobar, jehož konfigurační soubor uvidíme později.
Pak jsme pro mě spustili několik podstatných věcí, pěknou tapetu (stejnou jako na prvním snímku obrazovky), démona, který nutí urxvt běžet jako vítr, démona mpd - který hraje moji hudbu od začátku a nikdy se nezavřu - a ovládání hlasitosti. Jo, to je ono. Syntaxe je stejná, pokud chcete začít, co potřebujete.

Konečné úpravy

Zde definujeme některé věci, které jsou obvykle jen osobní preference. Například bych rád použil normálně zbytečný klíč Super (efektivně ten Windows) místo Alt, ale to je moje preference. Pokud se chcete vrátit zpět na Super, odeberte první řádek.

- ... xmonad $ defaultConfig {modMask = mod4Mask, terminal = "urxvtc", borderWidth = 2, normalBorderColor = "# fdf6e3", focusBorderColor = "# 002b26", workspaces = wrk} - ...

Dále jsme definovali náš terminál urxvtc , protože tak jsme nazývali klienta démona, kterého jsme spustili dříve. Další věci, jako například seznam pracovních prostorů, jsme mohli umístit na místa jako:

, workspaces = ["H", "O", "L", "A"], workspaces = ["A", "R", "C", "H", "L", "I", "N "," U "," X "], workspaces = [" 1: web "," 2: hudba "," 3: nevyužitý prostor "," 4: Ufff "]

A další věci, které nám umožňuje Haskellovo zpracování seznamu řetězců.
Tloušťka ohraničení je jen celé číslo a pokud chceme změnit barvu okna, zaměřenou funkcí nálada Barva kterou jsme právě vytvořili, protože proměnnou necháme takto:

--..., focusBorderColor = moodColor "Happy" - ...

Znak $ v řádku xmonad… je pouze mapování funkce asociativní zprava, což znamená, že si ušetříme závorky.

Klávesové zkratky

Na konci souboru máme seznam n-tic, které obsahují některé zkratky, v tomto případě spustí GVim, pozastaví nebo přehraje hudbu a posune ji nebo zpozdí. A je to. Funkce additionalKeys přichází ve druhém modulu, který importujeme, a zadní akcenty umožňují jeho provedení ve stylu funkce div (/) jako 1/2 a ne div 1 2, což usnadňuje čtení. Takže to je:

- ...} `additionalKeys` [((mod4Mask, xK_v), založit„ gvim “), ((mod4Mask, xK_c), založit„ mpc toggle “), ((mod4Mask, xK_a), založit„ mpc předchozí “), ((mod4Mask, xK_s), spawn "mpc next")]

Soubor .xmobarrc

Konfigurace {font = "- * - monospace-9 - * - * - * - * - * - * - * - * - * - *", bgColor = "# fdf6e3", fgColor = "# 657b83", pozice = na začátek , lowerOnStart = False, commands = [Run Com "echo" ["$ USER"] "uživatelské jméno" 864000, Run Com "hostname" ["-s"] "hostname" 864000, Run Com "mpc current" [""] "mpd" 10, datum spuštění "% a% b% d" "datum" 36000, datum spuštění "% H:% M" "čas" 10, spuštění StdinReader], sepChar = "'", alignSep = "} {" , template = "'username' @ 'hostname'} {'mpd' | 'date' - 'time'"

To by mělo fungovat a ve skutečnosti to funguje. Syntaxe je trochu složitější a je nejlepší ji analyzovat sami, abyste jí porozuměli. Takže se omezím jen na to, abych vám řekl, že popisujeme příkazy, jejich možnosti a některá další nastavení, která se zobrazí v XMobar.
Řádek šablony má veškerou akci a já jsem vymyslel trik, jak zobrazit skladbu, kterou poslouchám. Tento trik a ten, který mění skladbu pomocí klávesových zkratek, vyžaduje mpc, spustitelný klient mpd z terminálu.

Závěry

To je vše, myslím. Už jsme zkontrolovali hlavní soubor XMonad a začali jsme se učit Haskell, ať se nám to líbí nebo ne. Pokud chcete pokračovat, začněte velmi dobrým průvodcem.
V dalším pokračování prozkoumáme neprogramovatelné manažery, konkrétně Spectrwm / Scrotwm. Uvidíme se.


Přidat jako preferovaný zdroj v Googlu