Темная сторона мозаики (III): XMonad

Вроде много помолился и так до сегодняшнего дня ни миллиметра настроек не ставлю. Как я обещал какое-то время сегодня порву свой xmonad.hs, который я приготовил специально для этого случая. Этот и другие файлы конфигурации находятся в Вставке, в частности цвета консоли, настройки окна y верхняя панель.

Вы можете скачать их оттуда и открыть в своем любимом текстовом редакторе.

До

Если вам интересно, моим рабочим столом был небольшой Openbox в стабильной версии Debian. Пропуская на данный момент процесс установки дистрибутива, вы должны убедиться, что необходимые пакеты находятся в репозиториях. Давайте сделаем это (помня, что я на Debian):

sudo aptitude установить ghc xmonad xmobar gmrun dmenu

И готово. Мы только что установили, в порядке появления; компилятор Glasgow Haskell, отвечающий за компиляцию и интерпретацию Haskell; XMonad, оконный менеджер, XMobar - это панель, которая представляет информацию о системе и некоторых средствах запуска программ, dmenu и gmrun; которые уже были настроены так, что XMonad запускает их с помощью Mod + P и Mod + Shift + P.

А вот так выглядел мой рабочий стол. Я сказал это так, чтобы у нас была точка сравнения и подражание некоторым вещам, которые я уже настроил в более минималистичной среде.

Ничего особенного

Но сюрприз. XMonad приветствует нас такими. В захвате я уже открыл gmrun, чтобы показать, что он не сломан:

Ничего особенного

И мы хотим, чтобы это выглядело так, уже настроено и все:

Так что да

На снимке экрана показан терминал, на котором запущен ncmpcpp, клиент MPD для терминала; и сеанс GVim, оба с цветами палитры Соляризованный свет. Получить это было несложно, и даже Vim и urxvt уже были готовы в моей системе.

The xmonad.hs, как страшно!

Не за что. Конфигурация, которую вы собираетесь увидеть, чрезвычайно проста и проста. Он должен работать во всех системах с XMonad 0.9.1, даже если 0.10 уже доступна. Ну бойтесь, очень бойтесь:

- Конфигурация Xmonad - Как видите, это довольно просто import XMonad import XMonad.Util.EZConfig import XMonad.Util.Run wrk = ["A", "C", "G", "T"] main = do xmproc <- spawnPipe "xmobar" spawn "азота --restore" 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), spawn "gvim"), ((mod4Mask, xK_c), spawn "mpc toggle"), ((mod4Mask, xK_a) , spawn «mpc prev»), ((mod4Mask, xK_s), spawn «mpc next»)] - Конец конфигурации. Просто, легко и чисто.

Что здесь произошло?

Если они уже оправились от паники, мы видим, что наша конфигурация едва достигает 30 строк кода. Я собираюсь объяснить по частям, почему, если вы скопируете и вставите это, XMonad скомпилирует программу, которую мы только что написали. Готов?

Раздел зависимостей

В начале файла есть три строки, начинающиеся с ключевого слова Импортировать. Как и в других языках программирования, он отправляет компилятору найти нужный модуль и дает ему функции счастливого модуля. Посмотрим еще раз:

импортировать XMonad импортировать XMonad.Util.EZConfig импортировать XMonad.Util.Run

Наша программа использует три зависимости. Первый приносит нам собственные функции XMonad, второй и третий помогут нам позже определять сочетания клавиш и запускать программы. Давайте продолжим.

переменные

Эта вещь работа И для чего это? Оцените код повнимательнее:

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

работа это переменная, которая эквивалентна списку из четырех элементов, все строки; потому что списки Haskell принимают только один тип элементов. Если вам интересно, почему я выбрал эти четыре буквы для своих рабочих столов, я вспомнил четыре нуклеиновых основания ДНК.
Имя - это просто сокращение, и мы могли бы указать его myWorkspaces, pepitoRojo или что-то еще, если оно начинается с нижнего регистра и мы указываем его в следующем разделе.
Здесь начинается самое хорошее в том, что в нашем распоряжении есть полный язык программирования, потому что мы можем определять цвет окна из переменной:

windowColor = "#FFFFFF"

Или даже создайте функцию, которая возвращает цвет в зависимости от нашего настроения:

moodColor m | m == "Sad" = "# b0c4f6" - Что-то вроде синего | m == "Angry" = "# ba3f3f" - Что-то вроде красного | m == "Happy" = "# 8bff7e" - Что-то вроде зеленого | в противном случае = "#FFFFFF" - белый, для нейтральных дней.

И многое другое. Вы уже чувствуете силу на пальцах? Одна вещь. Если вы не понимаете, что произошло, подумайте, что это собственная структура Haskell, которую мы называем охрана и это в основном похоже на дерево if-then-else, но более организованное и красивое. И не волнуйтесь, код написал я и работает нормально.

Основной раздел

Из строки, в которой говорится main = делать мы начали уточнять поведение XMonad. Посмотрим спокойно.

С самого начала

Этого можно достичь разными способами, но чтобы избежать зависимостей и сделать код более чистым, хотя и явно более пещерным, я выбрал следующее:

xmproc <- spawnPipe "xmobar" spawn "азота --restore" spawn "urxvtd" spawn "mpd" spawn "xfce4-volumed"

Первая строка запускает XMobar, конфигурационный файл которого мы увидим позже.
Затем мы запустили несколько важных вещей для меня: красивые обои (такие же, как на первом скриншоте), демон, который заставляет urxvt бегать как ветер, демон mpd, который играет мою музыку с самого начала, и я никогда не закрываю - и регулятор громкости. Ага, вот и все. Синтаксис такой же, если вы хотите начать то, что вам нужно.

Окончательные корректировки

Здесь мы определяем некоторые вещи, которые обычно являются просто личными предпочтениями. Например, мне нравится использовать обычно бесполезную клавишу Super (фактически, клавишу Windows) вместо Alt, но это мое предпочтение. Если вы хотите вернуться в Super, удалите первую строку.

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

Затем мы определяем наш терминал, urxvtc, потому что это то, что мы называем клиентом демона, с которым мы работали ранее. Другие вещи, такие как список рабочих пространств, которые мы могли бы добавить, например:

, workspaces = [«H», «O», «L», «A»], workspaces = [«A», «R», «C», «H», «L», «I», «N» "," U "," X "], workspaces = [" 1: Интернет "," 2: музыка "," 3: неиспользуемое пространство "," 4: Ufff "]

И другие вещи, которые позволяет нам делать обработка списков строк Haskell.
Толщина границы - это целое число, и если мы хотим изменить цвет окна, сфокусированного функцией настроениеЦвет которую мы только что создали, потому что мы оставляем переменную вот так:

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

$ На линии хмонад ... Это просто применение правоассоциативных функций, то есть мы сохраняем некоторые круглые скобки. 

Горячие клавиши

В конце файла у нас есть список кортежей, которые содержат некоторые ярлыки, в этом случае они запускают GVim, приостанавливают или воспроизводят музыку, а также ускоряют или задерживают ее. Вот и все. Функция additionalKeys входит во второй модуль, который мы импортируем, и обратные акценты заставляют ее выполняться в стиле функции div (/), например 1/2, а не div 1 2, что упрощает чтение. Так что, это:

- ...} `additionalKeys` [((mod4Mask, xK_v), создать« gvim »), ((mod4Mask, xK_c), создать« mpc toggle »), ((mod4Mask, xK_a), spawn« mpc prev ») , ((mod4Mask, xK_s), создать "mpc next")]

.Xmobarrc

Конфиг {font = "- * - monospace-9 - * - * - * - * - * - * - * - * - * - *", bgColor = "# fdf6e3", fgColor = "# 657b83", position = Top , lowerOnStart = False, commands = [Run Com "echo" ["$ USER"] "имя пользователя" 864000, Run Com "hostname" ["-s"] "hostname" 864000, Run Com "mpc current" [""] "mpd" 10, дата выполнения "% a% b% d" "date" 36000, дата выполнения "% H:% M" "время" 10, запуск StdinReader], sepChar = "'", alignSep = "} {" , template = "'username' @ 'hostname'} {'mpd' | 'date' - 'time'"

Это должно сработать, и это действительно так. Синтаксис немного сложнее, и лучше всего проанализировать его самостоятельно, чтобы понять. Поэтому я просто ограничусь тем, что скажу вам, что мы описываем команды, их параметры и некоторые дополнительные настройки, которые будут показаны в XMobar.
В строке шаблона есть все действия, и я придумал трюк, чтобы показать песню, которую я слушаю. Этот трюк и тот, который позволяет изменить песню для сочетаний клавиш, требует mpc, исполняемого файла клиента mpd из терминала.

Выводы

Думаю, все. Мы уже просмотрели основной файл XMonad и начали изучать Haskell, нравится нам это или нет. Если вы хотите продолжить, есть очень хорошее руководство для начала.
В следующей части мы рассмотрим непрограммируемые менеджеры, в частности Spectrwm / Scrotwm. Увидимся.