debian.org / О Debian Где взять Debian Поддержка Уголок разработчика Новости Wiki

Автор Тема: Xmonad, xmobar. Делимся полезными наработками.  (Прочитано 8485 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ChubaDuba

  • Местный житель
  • ***
  • Topic Author
  • Сообщений: 488
  • Debian 9 + Xmonad
  • Jabber: achubakov@jabber.ru
Предлагаю размещать в этой теме у кого что есть интересного по тайловому оконному менеджеру xmonad.

Cообщение объединено 23 Январь 2018, 15:18:40
Компоновка окон XMonad.Layout.ThreeColumns
Особенно будет востребована у владельцев ультра широких мониторов.

 

Cообщение объединено 23 Январь 2018, 15:54:25
Коды метеостанций для погодного плагина xmobar.
« Последнее редактирование: 29 Январь 2019, 12:02:48 от ChubaDuba »
 

Оффлайн ChubaDuba

  • Местный житель
  • ***
  • Topic Author
  • Сообщений: 488
  • Debian 9 + Xmonad
  • Jabber: achubakov@jabber.ru
Re: Xmonad, xmobar. Делимся полезными наработками.
« Ответ #1 : 24 Январь 2018, 18:35:47 »
Прозрачность неактивных окон.

Сам этой фишкой не пользуюсь, но может у кого будет востребованной...
Устанавливаем композитный менеджер окон xcompmgr
sudo apt-get install xcompmgr
Добавляем его в автозагрузку, вставив в файл ~/.xinitrc строчку:
xcompmgr -r0 &
Редактируем конфиг xmonad. Добавляем модуль XMonad.Hooks.FadeInactive, удаляем границу у окон, устанавливаем степень непрозрачности:
...
import XMonad.Hooks.FadeInactive
...
...
myConfig = ....
          {...
          ...
          , borderWidth = 0
          , logHook = fadeInactiveLogHook 0.8
          ...
          }
...
Со значением степени непрозрачности можно поиграться и выбрать оптимальное для себя.
Результат:

На скрине calc - активное окно, writer - неактивное окно.
« Последнее редактирование: 23 Апрель 2018, 16:06:53 от ChubaDuba »
 

Оффлайн ChubaDuba

  • Местный житель
  • ***
  • Topic Author
  • Сообщений: 488
  • Debian 9 + Xmonad
  • Jabber: achubakov@jabber.ru
Re: Xmonad, xmobar. Делимся полезными наработками.
« Ответ #2 : 25 Январь 2018, 18:41:38 »
Прикручиваем управление аудио плеером MOC и выводим информацию о треке в xmobar.

Для начала определяемся с клавишами. Мой вариант:

"Pause" - пауза/воспроизведение;
mod4Mask + "<" - предыдущий трек;
mod4Mask + ">" - следующий трек.

Определяем keysum для каждой клавиши используя команду:
xev | grep keycode



Вносим изменения в конфиг xmonad:
...
      myKeys = [
                 ...
               , ...
               , ((0                      , 0xff13), spawn "mocp -G")
               , ((mod4Mask,                  0x2e), spawn "mocp -f")
               , ((mod4Mask,                  0x2c), spawn "mocp -r")
               ...
               ...
               ]
Готово!

Скрипт для вывода в xmobar имя исполнителя и названия текущего трека.
Обзавём наш скрипт song:
Spoiler: ShowHide

#! /bin/bash
#

TCOL="#DBDCCC"    # Цвет названия трека при воспроизведении
ACOL="#DBA3A2"    # Цвет исполнителя при воспроизведении
DCOL="#637482"    # Цвет дефиса "-" при воспроизведении
PCOL="#4F4F4F"    # Цвет исполнителя и трека композиции на паузе

MOCSTATE=$(mocp --info | head -n 1 | tail -c +8)

if [ $MOCSTATE == "PLAY" ]; then
  # MOC на воспроизведении
  echo "<fc=$ACOL>$(mocp --info | tail -n +4 | head -n 1 | \
       tail -c +9)</fc> <fc=$DCOL>-</fc> <fc=$TCOL>$(mocp --info | \
       tail -n +5 | head -n 1 | tail -c +12)</fc>"

elif [ $MOCSTATE == "PAUSE" ]; then
  # MOC на паузе
  echo "<fc=$PCOL>$(mocp --info | tail -n +4 | head -n 1 | \
       tail -c +9) - $(mocp --info | tail -n +5 | head -n 1 | tail -c +12)</fc>"
fi

Добавляем вывод скрипта в xmobar. Правим конфиг xmobar'а:
...
        commands = [
                    ...
                    ...
                    Run Com "<указываем_путь_до_нашего_скрипта>" [] "song" 10,
                    ...
                   ]

...
...
, template = "%StdinReader% }{%song% .....................}
                         
Результат:
На воспроизведении:

На паузе:




« Последнее редактирование: 23 Апрель 2018, 16:07:10 от ChubaDuba »
 

Оффлайн ChubaDuba

  • Местный житель
  • ***
  • Topic Author
  • Сообщений: 488
  • Debian 9 + Xmonad
  • Jabber: achubakov@jabber.ru
Re: Xmonad, xmobar. Делимся полезными наработками.
« Ответ #3 : 26 Январь 2018, 20:50:02 »
Меню программ для Xmonad.

Вариантов существует много. Мне импонирует MyGtkMenu:
 
« Последнее редактирование: 23 Апрель 2018, 16:07:30 от ChubaDuba »
 

Оффлайн dogsleg

  • systemd of a pwn
  • Местный житель
  • ***
  • Сообщений: 203
  • Debian Developer
    • www.pimentola.ru
Re: Xmonad, xmobar. Делимся полезными наработками.
« Ответ #4 : 27 Январь 2018, 20:50:48 »
Системный лоток

Смотрю, пошёл не только xmonad, но и сопутствующее...

В качестве системного лотка использую trayer:


Тут в лотке висят GNU Ring, Google Hangouts, Dropbox. Запущен с помощью следующей команды:

/usr/bin/trayer --edge top --align right --SetDockType true --SetPartialStrut true  --expand true --width 10 --transparent true --tint 0x000000 --alpha 0 --height 17 --distance 460 --distancefrom right &
Cообщение объединено 27 Январь 2018, 21:03:50
Запоминание раскладки для каждого окна

Мне не нравится, когда раскладка переключается глобально, для меня удобнее, чтобы у разных окон были разные раскладки. Соответственно, раскладка для некоторого данного окна должна запоминаться. Это можно сделать в xmonad с помощью пакета xmonad-extras, который есть и в Debian (да-да, этот пакет в Debian когда-то загрузил я ;) ).

Соответственно, в настройки xmonad надо добавить что-то типа:

...
import XMonad.Hooks.PerWindowKbdLayout
...
main = xmonad defaultConfig { handleEventHook = perWindowKbdLayout }

У меня это сделано конкретно так:

...
import XMonad.Hooks.PerWindowKbdLayout
...
main = do
    ...
    xmonad $ ewmh $ defaultConfig
        { ...
        , handleEventHook    = mconcat
                               [ perWindowKbdLayout
                               , docksEventHook
                               , handleEventHook defaultConfig ]
« Последнее редактирование: 27 Январь 2018, 21:03:50 от dogsleg »
 
Пользователи, которые поблагодарили этот пост: ChubaDuba

Оффлайн ChubaDuba

  • Местный житель
  • ***
  • Topic Author
  • Сообщений: 488
  • Debian 9 + Xmonad
  • Jabber: achubakov@jabber.ru
Re: Xmonad, xmobar. Делимся полезными наработками.
« Ответ #5 : 27 Январь 2018, 23:19:35 »
Запоминание раскладки для каждого окна
Добавлю ещё один рабочий вариант:
Устанавливаем пакет kbdd
sudo apt-get install kbdd
Добавляем в автозагрузку, вставив в файл ~/.xinitrc строчку:
kbdd &
Пользуемся.
« Последнее редактирование: 27 Январь 2018, 23:27:07 от ChubaDuba »
 

Оффлайн ChubaDuba

  • Местный житель
  • ***
  • Topic Author
  • Сообщений: 488
  • Debian 9 + Xmonad
  • Jabber: achubakov@jabber.ru
Re: Xmonad, xmobar. Делимся полезными наработками.
« Ответ #6 : 29 Январь 2018, 22:56:28 »
Иконки для Workspaces'ов в xmobar.

Понадобится шрифт с иконками. Я использую Terminus Re33 Nerd
Для определения unicode values наших иконок можно использовать вот этот ресурс.

Редактируем конфиг xmonad:

Вот так теперь отображаются имена Workspaces'ов в xmobar'е:


P.S. В конфиге xmobar'а тоже нужно прописать шрифт:
Config { font = "xft:Terminus Re33 Nerd:size=14:weight=bold:antialias=true:hinting=true"
       , additionalFonts = [ "xft:Terminus Re33 Nerd:size=14:weight=bold:antialias=true:hinting=true" ]
...
...
« Последнее редактирование: 23 Апрель 2018, 16:07:52 от ChubaDuba »
 

Оффлайн ChubaDuba

  • Местный житель
  • ***
  • Topic Author
  • Сообщений: 488
  • Debian 9 + Xmonad
  • Jabber: achubakov@jabber.ru
Re: Xmonad, xmobar. Делимся полезными наработками.
« Ответ #7 : 06 Февраль 2018, 14:53:41 »
Компоновка окон XMonad.Layout.IM для клиента мгновенных сообщений.
Сам я использую в качестве клиента Tkabber, но думаю, что можно настроить и для Psi+ и Gagim.

Добавляем в конфиг xmonad:
...
...
import XMonad.Layout.IM
import Data.Ratio ((%))
...
...
myLayout = withIM (1%7) (ClassName "Tkabber") Grid ||| ...
...
Как всё это выглядит:
« Последнее редактирование: 15 Февраль 2019, 09:41:23 от ChubaDuba »
 

Оффлайн ChubaDuba

  • Местный житель
  • ***
  • Topic Author
  • Сообщений: 488
  • Debian 9 + Xmonad
  • Jabber: achubakov@jabber.ru
Re: Xmonad, xmobar. Делимся полезными наработками.
« Ответ #8 : 08 Февраль 2018, 11:14:13 »
Уровень громкости для xmobar
Музыку послушать любим, поэтому фишка очень востребованная...
Так как у меня в хозяйстве моноблок, то хотелось видеть в xmobar не только текущий уровень звука, но и канал по которому он идёт.
Скрипт, который всё это будет выводить нам в xmobar. Обзавём его vol:
Spoiler: ShowHide

#!/bin/bash
#

vol=$(amixer get Master | awk -F'[]%[]' '/%/ {if ($7 == "off") \
{ print "MM" } else { print $2 }}' | head -n 1)

COLOR="#DBA3A2"
volume="[on]"

Volume_s="`amixer get Speaker Playback Volume | sed '6!d' | \
         sed -r 's/^[^B]+//' | sed -r 's/^[^[]+//'`"

Volume_h="`amixer get Headphone Playback Volume | sed '6!d' | \
         sed -r 's/^[^B]+//' | sed -r 's/^[^[]+//'`"

if [[ $Volume_s == *"$volume"* ]] && [[ $Volume_h != *"$volume"* ]]; then
   echo "<fc=#8CD0D3>vol.</fc><fc=$COLOR>(d)</fc><fc=#8CD0D3>$vol%</fc>"
fi

   if [[ $Volume_s == *"$volume"* ]] && [[ $Volume_s == *"$volume"* ]]; then
   echo "<fc=#8CD0D3>vol.</fc><fc=$COLOR>(dh)</fc><fc=#8CD0D3>$vol%</fc>"
   fi

      if [[ $Volume_s == *"$volume"* ]] && [[ $Volume_h != *"$volume"* ]]; then
         echo "<fc=#8CD0D3>vol.</fc><fc=$COLOR>(d)</fc><fc=#8CD0D3>$vol%</fc>"
      else
           if [[ $Volume_h == *"$volume"* ]]; then
              echo "<fc=#8CD0D3>vol.</fc><fc=$COLOR>(h)</fc><fc=#8CD0D3>$vol%</fc>"   
           else
              echo "<fc=#8CD0D3>vol.MM</fc>"
           fi
      fi

exit 0


Добавляем вывод скрипта в xmobar:
commands = [
           ...
           ...
           Run Com "/путь_до_скрипта/vol" [] "vol" 10,
           ...
           ...
           ]
...
...
           , template = " %StdinReader% }{ ... ...%vol% ... ... }

Получаем в xmobar:

где
(d) - выход через динамики;
(h) - выход через наушники;
MM - звук выключен (Mute).

Вешаем управление громкостью на предварительно выбранные клавиши. Редактируем конфиг xmonad:

...
...
myKeys = [
         ...
         , ((0                          , 0x1008ff11), spawn "amixer set Master 2-")
         , ((0                          , 0x1008ff13), spawn "amixer set Master 2+")
         , ((0                          , 0x1008ff12), spawn "amixer set Master toggle")
         ...
         ]
...
...
Ну и до кучи, чтобы не лазить в alsamixer и не передёргивать в нём каналы ещё один скрипт для быстрого переключения между каналами:
Spoiler: ShowHide

#! /bin/bash
#
# Скрипт, переключающий источник звука alsa.
# С колонок на наушники и наоборот.

volume="[on]"

Volume_s="`amixer get Speaker Playback Volume | sed '6!d' | \
         sed -r 's/^[^B]+//' | sed -r 's/^[^[]+//'`"
         
Volume_h="`amixer get Headphone Playback Volume | sed '6!d' | \
         sed -r 's/^[^B]+//' | sed -r 's/^[^[]+//'`"

if [[ $Volume_s == *"$volume"* ]] && [[ $Volume_s == *"$volume"* ]]; then
   amixer sset Headphone mute
   amixer sset Speaker unmute
fi


if [[ $Volume_s == *"$volume"* ]] && [[ $Volume_h != *"$volume"* ]]; then
   amixer sset Headphone unmute
   amixer sset Speaker mute
else

     if [[ $Volume_h == *"$volume"* ]]; then
        amixer sset Headphone mute
        amixer sset Speaker unmute
     fi
fi

exit 0

Его выполнение вешаем на клавишу как и в случае с громкостью, внося изменения в конфиг xmomad.
« Последнее редактирование: 23 Апрель 2018, 16:08:40 от ChubaDuba »
 

Оффлайн Ogis1975

  • OS: Debian 9.4 / WM: Xmonad
  • Местный житель
  • ***
  • Сообщений: 412
  • Debian 9.8 xmonad
    • Мой репозиторий на Github
Re: Xmonad, xmobar. Делимся полезными наработками.
« Ответ #9 : 13 Февраль 2018, 20:00:26 »
Приветствую знатоков Xmonad и haskel. У меня один вопрос. Настроил Xmonad под себя. Все работает. Посмотрел в файл xmonad.errors. А там такая надпись-
Spoiler: ShowHide
xmonad.hs:132:9: warning: [-Wtabs]
    Tab character found here, and in three further locations.
    Please use spaces instead.

Гуглил, и нашел, что нужно настроить свой ide, чтобы вместо табов, использовались space. Настроил, но ошибка все равно вылезла. Как я понимаю, нужно править ручками, но как? Я в haskel понимаю чуть больше, чем ноль. Как это победить? В принципе не критично, но хочется исправить...
 

Оффлайн qupl

  • Главный модератор
  • Ветеран
  • *****
  • Сообщений: 4497
  • memento mori
  • Jabber: qupl@jabber.ru
Re: Xmonad, xmobar. Делимся полезными наработками.
« Ответ #10 : 13 Февраль 2018, 21:51:51 »
Заменить символы Tab на пробелы.

Оффлайн Ogis1975

  • OS: Debian 9.4 / WM: Xmonad
  • Местный житель
  • ***
  • Сообщений: 412
  • Debian 9.8 xmonad
    • Мой репозиторий на Github
Re: Xmonad, xmobar. Делимся полезными наработками.
« Ответ #11 : 13 Февраль 2018, 22:40:40 »
Заменить символы Tab на пробелы.
Ну так это понятно, но как их определить?
 

Оффлайн ChubaDuba

  • Местный житель
  • ***
  • Topic Author
  • Сообщений: 488
  • Debian 9 + Xmonad
  • Jabber: achubakov@jabber.ru
Re: Xmonad, xmobar. Делимся полезными наработками.
« Ответ #12 : 13 Февраль 2018, 23:34:35 »
Так а что там у вас в 132-ой строчке xmonad.hs?
 

Оффлайн qupl

  • Главный модератор
  • Ветеран
  • *****
  • Сообщений: 4497
  • memento mori
  • Jabber: qupl@jabber.ru
Re: Xmonad, xmobar. Делимся полезными наработками.
« Ответ #13 : 14 Февраль 2018, 07:42:02 »
Ну так это понятно, но как их определить?
Открыть текстовым редактором, в  mc просмотрщик по F4 показывает hex-коды.

Оффлайн Ogis1975

  • OS: Debian 9.4 / WM: Xmonad
  • Местный житель
  • ***
  • Сообщений: 412
  • Debian 9.8 xmonad
    • Мой репозиторий на Github
Re: Xmonad, xmobar. Делимся полезными наработками.
« Ответ #14 : 14 Февраль 2018, 16:57:05 »
Так а что там у вас в 132-ой строчке xmonad.hs?
Вот весь масив
Spoiler: ShowHide
 -- xmobar setting
           , logHook                = myLogHook wsbar
                                         >> updatePointer (0.5,0.5) (0,0)
          , handleEventHook   = fullscreenEventHook <+> docksEventHook
          , workspaces           = myWorkspaces
          , modMask              = modm
          , mouseBindings      = newMouse
          }   

« Последнее редактирование: 14 Февраль 2018, 16:59:52 от Ogis1975 »
 

Русскоязычное сообщество Debian GNU/Linux

Re: Xmonad, xmobar. Делимся полезными наработками.
« Ответ #14 : 14 Февраль 2018, 16:57:05 »


Теги: xmonad xmobar 
 

[решено]xmonad - открытие диалоговых окон

Автор redVi

Ответов: 0
Просмотров: 1442
Последний ответ 19 Октябрь 2012, 10:16:16
от redVi