Xmonad (Вопросы и обсуждение)

ion, dwm, wmii, awesome, xmonad и другие

Модератор: Модераторы разделов

Аватара пользователя
uptime
Сообщения: 1661
Статус: Drinker with computing problems
ОС: kubuntu 8.04

Re: Xmonad

Сообщение uptime »

Sabivan писал(а):
27.02.2009 21:17
...Я до сих пор не понимаю почему в одних дистрибутивах для доступа к консоли нужно запустить xterm, в других konsole (вроде еще просто terminal бывает). У меня кубунта не знает команды xterm. А вот когда я записал myTerminal = konsole всё заработало :)

Это просто разные программки. В тайловых ВМ (и не только), кстати, наиболее кошерным считается urxvt.
Надеюсь, вы получите удовольствие, затачивая xmonad под себя ))
The answer, my friend, is blowin' in the wind.
The answer is blowin' in the wind.
Спасибо сказали:

moot
Сообщения: 3
ОС: Archlinux

Re: Xmonad

Сообщение moot »

Подскажите, нельзя ли в xmonad сделать отступы от границ окон?
Спасибо сказали:

Аватара пользователя
serg43
Сообщения: 137
ОС: Linux, Archlinux

Re: Xmonad

Сообщение serg43 »

moot писал(а):
03.03.2009 16:38
Подскажите, нельзя ли в xmonad сделать отступы от границ окон?

Можно, в xmonad.hs:
-- Default offset of drawable screen boundaries from each physical
-- screen. Anything non-zero here will leave a gap of that many pixels
-- on the given edge, on the that screen. A useful gap at top of screen
-- for a menu bar (e.g. 15)
--
-- An example, to set a top gap on monitor 1, and a gap on the bottom of
-- monitor 2, you'd use a list of geometries like so:
--
-- > defaultGaps = [(18,0,0,0),(0,18,0,0)] -- 2 gaps on 2 monitors
--
-- Fields are: top, bottom, left, right.
--
myDefaultGaps = [(0,0,0,0)]
Спасибо сказали:

Аватара пользователя
l0stparadis3
Сообщения: 207
Статус: GNU/FireShow
ОС: Mac OS X | FreeBSD

Re: Xmonad

Сообщение l0stparadis3 »

Вышеописанный способ - это отступы от границ экрана, а не от границ окон.

Может способ конечно и есть, но на мой взгляд это немного противоречит идеологии тайлинговых вм.
Если в Linux не существует решения вашей проблемы... То у вас неправильная проблема.
Спасибо сказали:

moot
Сообщения: 3
ОС: Archlinux

Re: Xmonad

Сообщение moot »

serg43, gap вроде уже давно не поддерживается, да и не это нужно
l0stparadis3, жаль, красивостей хочется
Спасибо сказали:

Аватара пользователя
Portnov
Модератор
Сообщения: 1786
Статус: Матёрый линуксоид
ОС: Debian testing/unstable

Re: Xmonad

Сообщение Portnov »

Что такое "отступы от границ окон"?
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Спасибо сказали:

Аватара пользователя
l0stparadis3
Сообщения: 207
Статус: GNU/FireShow
ОС: Mac OS X | FreeBSD

Re: Xmonad

Сообщение l0stparadis3 »

Portnov
Если я правильно понял, это расстояние между окнами. То есть чтобы в тайлинговой ВМ окна не соприкасались, а находились на некотором расстоянии друг от друга и был виден кусок обоев.

moot
Хотите красивостей - поставьте в терминале псевдопрозрачность, чтобы видеть вашу обоину, а для гуевых приложений красивую тему. На худой конец, откройте для себя xcompmgr, они с xmonad отлично живут вместе.
А вообще не вижу смысла делать пустое место между окнами в ВМ, которая по своей идеологии сокращает количество незанятого места.
Если в Linux не существует решения вашей проблемы... То у вас неправильная проблема.
Спасибо сказали:

Аватара пользователя
Portnov
Модератор
Сообщения: 1786
Статус: Матёрый линуксоид
ОС: Debian testing/unstable

Re: Xmonad

Сообщение Portnov »

Про отступы - если очень надо, могу накатать Layout Modifier для этого :)
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Спасибо сказали:

moot
Сообщения: 3
ОС: Archlinux

Re: Xmonad

Сообщение moot »

l0stparadis3, хмонад юзаю не из-за идеологии, а из-за удобства :)

Portnov, буду признателен!
Спасибо сказали:

Аватара пользователя
Portnov
Модератор
Сообщения: 1786
Статус: Матёрый линуксоид
ОС: Debian testing/unstable

Re: Xmonad

Сообщение Portnov »

Вот, пожалста :)

Код: Выделить всё

data WindowsGaps a = WindowsGaps Int
    deriving (Read, Show)

instance LayoutModifier WindowsGaps Window where
    modifyLayout (WindowsGaps gap) = gapLayout gap

gapLayout :: (LayoutClass l Window) =>
             Int ->
             W.Workspace WorkspaceId (l Window) Window ->
             Rectangle ->
             X ([(Window, Rectangle)], Maybe (l Window))
gapLayout gap wksp rect = do
    let stack = W.stack wksp
    let ws = W.integrate' stack
    if null ws then
        runLayout wksp rect
        else do
          wrs <- runLayout wksp rect
          return (gapWindows gap $ fst wrs, snd wrs)

gapWindows :: Int -> [(a, Rectangle)] -> [(a,Rectangle)]
gapWindows gap lst = zip ws $ map (gapRect gap) rects
    where ws = fst pair
          rects = snd pair
          pair = unzip lst

gapRect :: Int -> Rectangle -> Rectangle
gapRect gap (Rectangle sx sy sw sh) = Rectangle x y w h
    where gap2 = gap `div` 2
          x = fromIntegral $ sx + (fromIntegral gap2)
          y = fromIntegral $ sy + (fromIntegral gap2)
          w = fromIntegral $ sw - (fromIntegral gap)
          h = fromIntegral $ sh - (fromIntegral gap)

windowsGaps gap = ModifiedLayout (WindowsGaps gap)


Вставить это в xmonad.hs где-нибудь после импортов (предполагается, что среди прочих есть import qualified XMonad.StackSet as W, и import XMonad.Layout.LayoutModifier). Использовать, например, так:

myLayoutHook = windowsGaps 10 Grid ||| tile ...

Число указывает ширину пробелов между окнами. Между краями экрана и окнами расстояние будет вдвое меньше.

На днях оформлю в виде патча и отошлю в mail-list, авось примут. Я, правда, так и не понял, зачем это нужно :)
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Спасибо сказали:

petrun
Сообщения: 45

Re: Xmonad

Сообщение petrun »

Есть желание сделать именованные скрачпады,как в ионе.
Делаю на основе Action.TagWindows.(помечаем окно тегом через TagPrompt и переносим с hiddenWorkspace из Action.DynamicWorkspaces на текущий вокспейс)
Надо написать функцию,которая будет если окно отмеченное тегом есть на текущем воркспейсе переносить его на hiddenWorkspace,а если нет то переносить его с hiddenWorkspace на текущий.
К сожалению хаскелл не знаю.Может кто поможет?
Спасибо сказали:

petrun
Сообщения: 45

Re: Xmonad

Сообщение petrun »

Не подскажете хорошую книгу по хаскеллу?
Спасибо сказали:

Аватара пользователя
uptime
Сообщения: 1661
Статус: Drinker with computing problems
ОС: kubuntu 8.04

Re: Xmonad

Сообщение uptime »

petrun писал(а):
25.03.2009 15:11
Не подскажете хорошую книгу по хаскеллу?

Мне хватило "Мягкого введения в Haskell", чтобы понять, что это не моё )). Но статья понравилась.
The answer, my friend, is blowin' in the wind.
The answer is blowin' in the wind.
Спасибо сказали:

Аватара пользователя
uptime
Сообщения: 1661
Статус: Drinker with computing problems
ОС: kubuntu 8.04

Re: Xmonad

Сообщение uptime »

А как можно организовать автомонтирование или просто ручное монтирование флешки под xmonad? В KDE этим занимался какой-то демон, но он мне тоже не казался очень удобным. Задавал лишние вопросы и тормозил. Хотелось бы более четкой работы: воткнул флешку, отдал команду, можно начинать копирование. Либо без второго пункта.
The answer, my friend, is blowin' in the wind.
The answer is blowin' in the wind.
Спасибо сказали:

babun
Сообщения: 5
ОС: Gentoo Linux

Re: Xmonad

Сообщение babun »

uptime писал(а):
25.03.2009 21:31
А как можно организовать автомонтирование или просто ручное монтирование флешки под xmonad? В KDE этим занимался какой-то демон, но он мне тоже не казался очень удобным. Задавал лишние вопросы и тормозил. Хотелось бы более четкой работы: воткнул флешку, отдал команду, можно начинать копирование. Либо без второго пункта.

Посмотри на hal+halevt. Команду придётся отдавать только на размонтирование, да и ту при желании можно повесить на хоткей.

Теперь мои вопросы: я знаю что часть из присутствующих слезла с ion3. Я сам на нём сижу уже несколько лет, но вот количество претензий начинает набирать критическую массу и хочется куда-то перейти. Давайте я напишу важный для меня функционал, а вы, ежели не влом, напишите насколько сложно такое сделать в xmonad. Или, может, в нём такие проблемы решаются как-то совсем по-другому.

1. Я привык к статическому лейауту и kludges. Я знаю, что если я запускаю psi, то он ляжет в строго отведённое ему место на 3-м воркспейсе например. Очень неохота на каждом запуске системы рассовывать окна по углам и ресайзить их до нужных размеров. Автоматизируется ли этот процесс в xmonad?
2. В добавок к (1): запуск по хоткею, если приложение уже не запущено, то есть по mod-p или будет запущен psi (и засунут в нужное место), или меня ткнут лицом в уже запущенный инстанс. Кажется, я такой скрипт уже видел готовый, думаю его должно быть несложно и самому написать (хаскель на среднем уровне я знаю).
3. Я активно использую named scratchpads со своими добавками, по типу (2). Например, по mod-m у меня всплывает скрэтчпад с ncmpc. Соответственно, ncmpc запускается там по мере необходимости. Поиск программы можно делать по class, role, instance, name.
4. Не так актуально - у меня для каждого окна запоминается раскладка (en/ru), которая восстанавливается на его активации.

Спасибо за внимание.
Спасибо сказали:

petrun
Сообщения: 45

Re: Xmonad

Сообщение petrun »

babun

1) ManageHooK + XMonad.Layout.PerWorkspace.
Создаем на нужных воркспейсах нужные лайуты и кидаем туда окна по
babun писал(а):
26.03.2009 07:37
class, role, instance, name.

2) XMonad.Actions.WindowGo (runOrRaise)
3) Сам пытаюсь реализовать,но хаскелл не знаю(
Если напишете одну функцию ,то поможете и себе и мне, и может еще кому)
Суть в использовании XMonad.Actions.TagWindows .Присваеваем окну новый таг (Можно через tagPrompt, можно по хоткею,можно автоматом по
babun писал(а):
26.03.2009 07:37
class, role, instance, name
через XMonad.Hooks.XPropManage)Далее
showTag tag = withTaggedGlobalP tag shiftHere
hideTag tag = withTaggedP tag (W.shiftWin "etc")
Нужно написать функцию,которая если окно есть на текеущем воркспейсе вызывалась первая функции,а если нет,то вторая.Ну и надо понять как сделать воркспей скрытым, это точно как-то делалось.
Таги, а не просто ManageHooks, я использую,что бы можно было динамически делать разные окна скрачпадами.

4) xxkb вроде номально работает с современными версиями xmonad

uptime
Спасибо,вникаю.
Спасибо сказали:

babun
Сообщения: 5
ОС: Gentoo Linux

Re: Xmonad

Сообщение babun »

petrun писал(а):
26.03.2009 08:17
1) ManageHooK + XMonad.Layout.PerWorkspace.
Создаем на нужных воркспейсах нужные лайуты и кидаем туда окна по


OK, а сами воркспейсы/лейауты не придётся пересоздавать на каждом запуске? Ион их сохраняет, последний раз когда я смотрел хмонад (год назад кажется) - он не умел.
Спасибо сказали:

petrun
Сообщения: 45

Re: Xmonad

Сообщение petrun »

Это все статически в конфиг прописыватся, сохранять созданные в процессе работы воркспейсы и лайоуты он не умеет.
Каждый раз создавать не придеться,но надо будет каждый раз дописывать конфиг,если надо будет что-то изменить.
Спасибо сказали:

Аватара пользователя
Portnov
Модератор
Сообщения: 1786
Статус: Матёрый линуксоид
ОС: Debian testing/unstable

Re: Xmonad

Сообщение Portnov »

Существует код для xmonad, добавляющий функциональность xxkb непосредственно в WM.
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Спасибо сказали:

petrun
Сообщения: 45

Re: Xmonad

Сообщение petrun »

Portnov писал(а):
26.03.2009 10:05
Существует код для xmonad, добавляющий функциональность xxkb непосредственно в WM.


Гугль что-то молчит,можно ссылочку?
Спасибо сказали:

Аватара пользователя
Portnov
Модератор
Сообщения: 1786
Статус: Матёрый линуксоид
ОС: Debian testing/unstable

Re: Xmonad

Сообщение Portnov »

Вот: http://hpaste.org/fastcgi/hpaste.fcgi/view?id=2893#a2893
переключать с помощью sendMessage (XkbToggle Nothing)

UPD. Полный xmonad.hs с использованием этого кода: http://hpaste.org/fastcgi/hpaste.fcgi/view?id=2894#a2894

По поводу этого кода спрашивать тов. delamonpansie в жабер-комнате xmonad@conference.jabber.ru.
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Спасибо сказали:

babun
Сообщения: 5
ОС: Gentoo Linux

Re: Xmonad

Сообщение babun »

Можно ли новое окно пихнуть не просто на какой-то воркспейс, а в заданную его часть? Например, воркспейс представляет из себя simpleTabbed **|* Tall, и хочется чтобы браузер всегда отправлялся в simpleTabbed. Подозреваю что нет, иначе не было бы костыля withIM..
Спасибо сказали:

Аватара пользователя
Portnov
Модератор
Сообщения: 1786
Статус: Матёрый линуксоид
ОС: Debian testing/unstable

Re: Xmonad

Сообщение Portnov »

Да, похоже, напрямую это невозможно. Разве что сразу после пересылки переставлять окно (по типу mod-shift-j/k).
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Спасибо сказали:

Аватара пользователя
uptime
Сообщения: 1661
Статус: Drinker with computing problems
ОС: kubuntu 8.04

Re: Xmonad

Сообщение uptime »

babun писал(а):
26.03.2009 07:37
uptime писал(а):
25.03.2009 21:31
А как можно организовать автомонтирование или просто ручное монтирование флешки под xmonad? В KDE этим занимался какой-то демон, но он мне тоже не казался очень удобным. Задавал лишние вопросы и тормозил. Хотелось бы более четкой работы: воткнул флешку, отдал команду, можно начинать копирование. Либо без второго пункта.

Посмотри на hal+halevt. Команду придётся отдавать только на размонтирование, да и ту при желании можно повесить на хоткей.

babun, спасибо за наводку. К сожалению, halevt к *бунте ещё не прикрутили, но поиски привели меня к ivman. Поставил, работает.
The answer, my friend, is blowin' in the wind.
The answer is blowin' in the wind.
Спасибо сказали:

Аватара пользователя
minoru-kun
Сообщения: 620
ОС: Debian GNU/Linux

Re: Xmonad

Сообщение minoru-kun »

Можно попробовать autofs, тогда не придется даже давать команду на размонтирование.
Спасибо сказали:

Аватара пользователя
uptime
Сообщения: 1661
Статус: Drinker with computing problems
ОС: kubuntu 8.04

Re: Xmonad

Сообщение uptime »

minoru-kun писал(а):
27.03.2009 19:50
Можно попробовать autofs, тогда не придется даже давать команду на размонтирование.

Спасибо, но так как-то спокойнее ))
The answer, my friend, is blowin' in the wind.
The answer is blowin' in the wind.
Спасибо сказали:

Yur4eg
Сообщения: 14

Re: Xmonad

Сообщение Yur4eg »

ОС Debian Lenny. Поставил xmonad, так
% sudo aptitude install xmonad
Потом скопировал пример конфига с сайта монада, положил в ~/.xmonad/xmonad.hs, сделал зачем-то
% xmonad --reconfigure
вроде где-то так написано.

Захожу в xmonad, а у меня серое окошекчо и не откликается он у меня на нажатие клавиш, ни терминал не вызывается, ни сенс не закрывается на alt+shift+q, что=то я не так делаю. Вобщем прошу помощи у общественности.
Спасибо сказали:

Yur4eg
Сообщения: 14

Re: Xmonad

Сообщение Yur4eg »

Ложная тревога. поменял modMask с alt на winkey и все заработало
Спасибо сказали:

Аватара пользователя
drag0n
Сообщения: 156
Статус: Дракон-линуксоид
ОС: Slackware Linux

Re: Xmonad

Сообщение drag0n »

Недавно решил вновь поставить "чистый" xmonad, без KDE. И возникла странная проблема с xmobar, а все старые конфиги я потерял :(.
Настраивал xmobar по этому мануалу, и еше взял кусок отсюда. В итоге xmonad запускается, только без перенаправления в пайп. Если прописать это перенаправление в .xinitrc, то, как следует из отладочной печати, xmonad запускается, но дальше никаких признаков его работы нет :(.
Если пытаться запустить xmobar из командой строки, то он ругается на некие ошибки в конфиге, хотя год назад, с тем же самым конфигом все прекрасно работало.
xmonad.hs

Код: Выделить всё

import XMonad
import System.Exit
import XMonad.Actions.UpdatePointer
import XMonad.Layout.Reflect
import XMonad.Layout.NoBorders
import XMonad.Layout.MosaicAlt
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.ManageDocks
import XMonad.Prompt
import XMonad.Prompt.AppendFile
import XMonad.Prompt.Shell
import XMonad.Util.Scratchpad
import XMonad.Hooks.UrgencyHook

import qualified XMonad.StackSet as W
import qualified Data.Map        as M

myFont          = "-*-terminus-*-*-*-*-12-*-*-*-*-*-*-*"
myTerminal      = "urxvt"
myBorderWidth   = 1
myModMask       = mod1Mask

myNumlockMask   = mod2Mask

myWorkspaces    = ["1:any","2:web","3:im","4:media","5:dev","6:misc"]

myNormalBorderColor  = "#000000"
myFocusedBorderColor = "#DDDDDD"

myFocusFollowsMouse :: Bool
myFocusFollowsMouse = False
-- Default offset of drawable screen boundaries from each physical
-- screen. Anything non-zero here will leave a gap of that many pixels
-- on the given edge, on the that screen. A useful gap at top of screen
-- for a menu bar (e.g. 15)
--
-- An example, to set a top gap on monitor 1, and a gap on the bottom of
-- monitor 2, you'd use a list of geometries like so:
--
-- > defaultGaps = [(18,0,0,0),(0,18,0,0)] -- 2 gaps on 2 monitors
--
-- Fields are: top, bottom, left, right.
--
--myDefaultGaps   = [(0,16,0,0)]

------------------------------------------------------------------------
-- Key bindings. Add, modify or remove key bindings here.
--
myKeys conf@(XConfig {XMonad.modMask = modMask}) = M.fromList $

    -- launch a terminal
    [ ((modMask .|. shiftMask, xK_Return), spawn $ XMonad.terminal conf)

    -- launch dmenu
    , ((modMask,               xK_p     ), shellPrompt myXPConfig)

    --launch notes
    , ((modMask .|. shiftMask, xK_b     ), appendFilePrompt myXPConfig "/home/drag0n/.xmonad/NOTES")

    --launch vim
    , ((modMask,               xK_v     ), spawn "urxvt -e vi 2>/dev/null")

    --launch opera
    , ((modMask,               xK_f     ), spawn "opera")

    --launch mutt
    , ((modMask .|. shiftMask, xK_m     ), spawn "urxvt -e mutt")

    --launch mcabber
    , ((modMask,               xK_c     ), spawn "urxvt -e mcabber")

    --launch akregator
    , ((modMask,               xK_a     ), spawn "akregator")

    -- close focused window
    , ((modMask .|. shiftMask, xK_c     ), kill)

    , ((modMask,               xK_s     ), scratchpadSpawnActionTerminal "urxvt")
     -- Rotate through the available layout algorithms
    , ((modMask,               xK_space ), sendMessage NextLayout)

    --  Reset the layouts on the current workspace to default
    , ((modMask .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf)

    -- Resize viewed windows to the correct size
    , ((modMask,               xK_n     ), refresh)

    -- Move focus to the next window
    , ((modMask,               xK_Tab   ), windows W.focusDown)

    -- Move focus to the next window
    , ((modMask,               xK_j     ), windows W.focusDown)

    -- Move focus to the previous window
    , ((modMask,               xK_k     ), windows W.focusUp  )

    -- Move focus to the master window
    , ((modMask,               xK_m     ), windows W.focusMaster  )

    -- Swap the focused window and the master window
    , ((modMask,               xK_Return), windows W.swapMaster)

    -- Swap the focused window with the next window
    , ((modMask .|. shiftMask, xK_j     ), windows W.swapDown  )

    -- Swap the focused window with the previous window
    , ((modMask .|. shiftMask, xK_k     ), windows W.swapUp    )

    -- Shrink the master area
    , ((modMask,               xK_h     ), sendMessage Shrink)

    -- Expand the master area
    , ((modMask,               xK_l     ), sendMessage Expand)

    -- Push window back into tiling
    , ((modMask,               xK_t     ), withFocused $ windows . W.sink)

    -- Increment the number of windows in the master area
    , ((modMask              , xK_comma ), sendMessage (IncMasterN 1))

    -- Deincrement the number of windows in the master area
    , ((modMask              , xK_period), sendMessage (IncMasterN (-1)))

    -- toggle the status bar gap
    --, ((modMask              , xK_b     ),
    --      modifyGap (\i n -> let x = (XMonad.defaultGaps conf ++ repeat (0,0,0,0)) !! i
    --                         in if n == x then (0,0,0,0) else x))

    -- Quit xmonad
    , ((modMask .|. shiftMask, xK_q     ), io (exitWith ExitSuccess))
    --, ((modMask .|. shiftMask, xK_q     ), spawn "dcop ksmserver default logout 0 -1 -1")

    -- Restart xmonad
    , ((modMask              , xK_q     ),
          broadcastMessage ReleaseResources >> restart "xmonad" True)
    ]
    ++

    --
    -- mod-[1..9], Switch to workspace N
    -- mod-shift-[1..9], Move client to workspace N
    --
    [((m .|. modMask, k), windows $ f i)
        | (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9]
        , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]]
    ++

    --
    -- mod-{w,e,r}, Switch to physical/Xinerama screens 1, 2, or 3
    -- mod-shift-{w,e,r}, Move client to screen 1, 2, or 3
    --
    [((m .|. modMask, key), screenWorkspace sc >>= flip whenJust (windows . f))
        | (key, sc) <- zip [xK_w, xK_e, xK_r] [0..]
        , (f, m) <- [(W.view, 0), (W.shift, shiftMask)]]


------------------------------------------------------------------------
-- Mouse bindings: default actions bound to mouse events
--
myMouseBindings (XConfig {XMonad.modMask = modMask}) = M.fromList $

    -- mod-button1, Set the window to floating mode and move by dragging
    [ ((modMask, button1), (\w -> focus w >> mouseMoveWindow w))

    -- mod-button2, Raise the window to the top of the stack
    , ((modMask, button2), (\w -> focus w >> windows W.swapMaster))

    -- mod-button3, Set the window to floating mode and resize by dragging
    , ((modMask, button3), (\w -> focus w >> mouseResizeWindow w))

    -- you may also bind events to the mouse scroll wheel (button4 and button5)
    ]

------------------------------------------------------------------------
-- Layouts:

-- You can specify and transform your layouts by modifying these values.
-- If you change layout bindings be sure to use 'mod-shift-space' after
-- restarting (with 'mod-q') to reset your layout state to the new
-- defaults, as xmonad preserves your old layout settings by default.
--
-- The available layouts.  Note that each layout is separated by |||,
-- which denotes layout choice.
--
myLayout =  smartBorders $ avoidStruts (MosaicAlt M.empty ||| Full ||| Mirror tiled)
  where
     -- default tiling algorithm partitions the screen into two panes
     -- we set position of the main window in bottom
     -- we put focused window in the master area
     tiled   = reflectHoriz $ Tall nmaster delta ratio

     -- The default number of windows in the master pane
     nmaster = 1

     -- Default proportion of screen occupied by master pane
     ratio   = 2/3

     -- Percent of screen to increment by when resizing panes
     delta   = 3/100

------------------------------------------------------------------------
-- Window rules:

-- Execute arbitrary actions and WindowSet manipulations when managing
-- a new window. You can use this to, for example, always float a
-- particular program, or have a client always appear on a particular
-- workspace.
--
-- To find the property name associated with a program, use
-- > xprop | grep WM_CLASS
-- and click on the client you're interested in.
--
-- To match on the WM_NAME, you can use 'title' in the same way that
-- 'className' and 'resource' are used below.
--
myManageHook = composeAll
    [ className =? "MPlayer"        --> doFloat
    , className =? "Opera"          --> doF (W.shift "2:web")
    , className =? "Akregator"      --> doF (W.shift "2:web")
    , className =? "Ktorrent"       --> doF (W.shift "2:web")
    , title     =? "mutt"           --> doF (W.shift "2:web")
    , title     =? "mcabber"        --> doF (W.shift "3:im")
    , className =? "Skype"          --> doF (W.shift "3:im")
    , className =? "Djview"         --> doF (W.shift "4:media")
    , className =? "Xpdf"           --> doF (W.shift "4:media")
    , className =? "feh"            --> doF (W.shift "4:media")
    , className =? "Assistant"      --> doF (W.shift "5:dev")
    , className =? "Designer"       --> doF (W.shift "5:dev")
    , className =? "Linguist"       --> doF (W.shift "5:dev")
    , className =? "VirtualBox"     --> doF (W.shift "5:dev")
    , className =? "K3b"            --> doF (W.shift "6:misc")
    , resource  =? "desktop_window" --> doIgnore
    , resource  =? "kdesktop"       --> doIgnore
    ]

------------------------------------------------------------------------
-- Status bars and logging

-- Perform an arbitrary action on each internal state change or X event.
-- See the 'DynamicLog' extension for examples.
--
-- To emulate dwm's status bar
--
-- > logHook = dynamicLogDzen
--
-- myLogHook = return ()

myLogHook = dynamicLogWithPP xmobarPP

myXPConfig = XPC { font     = myFont
                 , bgColor  = "#000000"
                 , fgColor  = myFocusedBorderColor
                 , fgHLight = "#000000"
                 , bgHLight = myFocusedBorderColor
                 , borderColor = myFocusedBorderColor
                 , promptBorderWidth = 1
                 , position = Bottom
                 , height   = 16
                 , historySize = 256
                 , defaultText = ""
                 , autoComplete = Just 200
}

------------------------------------------------------------------------
-- Now run xmonad with all the defaults we set up.

-- Run xmonad with the settings you specify. No need to modify this.
--
--main = xmonad defaults
main = xmonad $ withUrgencyHook FocusHook $ defaultConf

-- A structure containing your configuration settings, overriding
-- fields in the default config. Any you don't override, will
-- use the defaults defined in xmonad/XMonad/Config.hs
--
-- No need to modify this.
--
--defaults = defaultConfig {
defaultConf = defaultConfig {
        terminal           = myTerminal,
        focusFollowsMouse  = myFocusFollowsMouse,
        borderWidth        = myBorderWidth,
        modMask            = myModMask,
        numlockMask        = myNumlockMask,
        workspaces         = myWorkspaces,
        normalBorderColor  = myNormalBorderColor,
        focusedBorderColor = myFocusedBorderColor,
--      defaultGaps        = myDefaultGaps,

        keys               = myKeys,
--      mouseBindings      = myMouseBindings,

        layoutHook         = myLayout,
        manageHook         = myManageHook <+> manageDocks <+> scratchpadManageHookDefault,
        logHook            = myLogHook
}


.xmobarrc

Код: Выделить всё

Config { position = Top
         , comands = [ Run PipeReader "~/.xmonad/status" "log"
                        , Run Swap [] 10
                     ]
         , sepChar = "%"
         , alignSep = "}{"
         , template = "%log%"
}


.xinitrc

Код: Выделить всё

PIPE=$HOME/.xmonad/status

xmodmap ~/.Xmodmap &
unclutter -idle 1 -root &
feh --bg-scale ~/docs/guns/1194928759_212492_229_448_artfile_ru.jpg &
xcompmgr -c &
xxkb &

rm -f $PIPE
PATH=${PATH}:/sbin mkfifo -m 600 $PIPE
[ -p $PIPE ] || exit

xmobar &
xmonad > $PIPE &
wait $!
killall xmobar


Буду рад, если мне дадут рабочие конфиги .xmobarrc и .xinitrc
После каталога /etc понимаешь, что реестр - место, откуда нормальными не возвращаются.
Спасибо сказали:

Аватара пользователя
drag0n
Сообщения: 156
Статус: Дракон-линуксоид
ОС: Slackware Linux

Re: Xmonad

Сообщение drag0n »

Таки заставил работать!! :crazy: :drunk:

Обошелся обычным конвейером.
.xinitrc

Код: Выделить всё

xmodmap ~/.Xmodmap &
unclutter -idle 1 -root &
feh --bg-scale ~/docs/guns/1194928759_212492_229_448_artfile_ru.jpg &
xcompmgr -c &
xxkb &
xmonad | xmobar


Взял чей-то конфиг с ArchLinux Wiki
.xmobarrc

Код: Выделить всё

Config { font = "-*-terminus-*-*-*-*-12-*-*-*-*-*-*-u"
       , bgColor = "#000000"
       , fgColor = "#AFAF87"
       , position = Top
       , commands = [ Run Network "eth0" ["-L","0","-H","32","--normal","#429942","--high","#A36666"] 10
                    , Run Cpu ["-L","3","-H","50","--normal","#429942","--high","#A36666"] 10
                    , Run Memory ["-t","Mem: <usedratio>%"] 10
                    , Run Date "%a %b %_d %Y %H:%M:%S" "date" 10
                    , Run CoreTemp ["-t", "Temp: <core0>C : <core1>C : <core2>C : <core3>C"] 10
                    , Run StdinReader
                    ]
       , sepChar = "%"
       , alignSep = "}{"
       , template = " %StdinReader% }{ %coretemp% | %cpu% | %memory% | %eth0% | %date%"
       }


xmonad выводит все на stdout
xmonad.hs

Код: Выделить всё

import XMonad
import System.Exit
import XMonad.Actions.UpdatePointer
import XMonad.Layout.Reflect
import XMonad.Layout.NoBorders
import XMonad.Layout.MosaicAlt
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.ManageDocks
import XMonad.Prompt
import XMonad.Prompt.AppendFile
import XMonad.Prompt.Shell
import XMonad.Util.Scratchpad
import XMonad.Hooks.UrgencyHook

import qualified XMonad.StackSet as W
import qualified Data.Map        as M

myFont          = "-*-terminus-*-*-*-*-12-*-*-*-*-*-*-*"
myTerminal      = "urxvt"
myBorderWidth   = 1
myModMask       = mod1Mask

myNumlockMask   = mod2Mask

myWorkspaces    = ["1:any","2:web","3:im","4:media","5:dev","6:misc"]

myNormalBorderColor  = "#000000"
myFocusedBorderColor = "#DDDDDD"

myFocusFollowsMouse :: Bool
myFocusFollowsMouse = False
-- Default offset of drawable screen boundaries from each physical
-- screen. Anything non-zero here will leave a gap of that many pixels
-- on the given edge, on the that screen. A useful gap at top of screen
-- for a menu bar (e.g. 15)
--
-- An example, to set a top gap on monitor 1, and a gap on the bottom of
-- monitor 2, you'd use a list of geometries like so:
--
-- > defaultGaps = [(18,0,0,0),(0,18,0,0)] -- 2 gaps on 2 monitors
--
-- Fields are: top, bottom, left, right.
--
--myDefaultGaps   = [(0,16,0,0)]

------------------------------------------------------------------------
-- Key bindings. Add, modify or remove key bindings here.
--
myKeys conf@(XConfig {XMonad.modMask = modMask}) = M.fromList $

    -- launch a terminal
    [ ((modMask .|. shiftMask, xK_Return), spawn $ XMonad.terminal conf)

    -- launch dmenu
    , ((modMask,               xK_p     ), shellPrompt myXPConfig)

    --launch notes
    , ((modMask .|. shiftMask, xK_b     ), appendFilePrompt myXPConfig "/home/drag0n/.xmonad/NOTES")

    --launch vim
    , ((modMask,               xK_v     ), spawn "urxvt -e vi 2>/dev/null")

    --launch opera
    , ((modMask,               xK_f     ), spawn "opera")

    --launch mutt
    , ((modMask .|. shiftMask, xK_m     ), spawn "urxvt -e mutt")

    --launch mcabber
    , ((modMask,               xK_c     ), spawn "urxvt -e mcabber")

    --launch akregator
    , ((modMask,               xK_a     ), spawn "akregator")

    -- close focused window
    , ((modMask .|. shiftMask, xK_c     ), kill)

    , ((modMask,               xK_s     ), scratchpadSpawnActionTerminal "urxvt")
     -- Rotate through the available layout algorithms
    , ((modMask,               xK_space ), sendMessage NextLayout)

    --  Reset the layouts on the current workspace to default
    , ((modMask .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf)

    -- Resize viewed windows to the correct size
    , ((modMask,               xK_n     ), refresh)

    -- Move focus to the next window
    , ((modMask,               xK_Tab   ), windows W.focusDown)

    -- Move focus to the next window
    , ((modMask,               xK_j     ), windows W.focusDown)

    -- Move focus to the previous window
    , ((modMask,               xK_k     ), windows W.focusUp  )

    -- Move focus to the master window
    , ((modMask,               xK_m     ), windows W.focusMaster  )

    -- Swap the focused window and the master window
    , ((modMask,               xK_Return), windows W.swapMaster)

    -- Swap the focused window with the next window
    , ((modMask .|. shiftMask, xK_j     ), windows W.swapDown  )

    -- Swap the focused window with the previous window
    , ((modMask .|. shiftMask, xK_k     ), windows W.swapUp    )

    -- Shrink the master area
    , ((modMask,               xK_h     ), sendMessage Shrink)

    -- Expand the master area
    , ((modMask,               xK_l     ), sendMessage Expand)

    -- Push window back into tiling
    , ((modMask,               xK_t     ), withFocused $ windows . W.sink)

    -- Increment the number of windows in the master area
    , ((modMask              , xK_comma ), sendMessage (IncMasterN 1))

    -- Deincrement the number of windows in the master area
    , ((modMask              , xK_period), sendMessage (IncMasterN (-1)))

    -- toggle the status bar gap
    --, ((modMask              , xK_b     ),
    --      modifyGap (\i n -> let x = (XMonad.defaultGaps conf ++ repeat (0,0,0,0)) !! i
    --                         in if n == x then (0,0,0,0) else x))

    -- Quit xmonad
    , ((modMask .|. shiftMask, xK_q     ), io (exitWith ExitSuccess))
    --, ((modMask .|. shiftMask, xK_q     ), spawn "dcop ksmserver default logout 0 -1 -1")

    -- Restart xmonad
    , ((modMask              , xK_q     ),
          broadcastMessage ReleaseResources >> restart "xmonad" True)
    ]
    ++

    --
    -- mod-[1..9], Switch to workspace N
    -- mod-shift-[1..9], Move client to workspace N
    --
    [((m .|. modMask, k), windows $ f i)
        | (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9]
        , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]]
    ++

    --
    -- mod-{w,e,r}, Switch to physical/Xinerama screens 1, 2, or 3
    -- mod-shift-{w,e,r}, Move client to screen 1, 2, or 3
    --
    [((m .|. modMask, key), screenWorkspace sc >>= flip whenJust (windows . f))
        | (key, sc) <- zip [xK_w, xK_e, xK_r] [0..]
        , (f, m) <- [(W.view, 0), (W.shift, shiftMask)]]


------------------------------------------------------------------------
-- Mouse bindings: default actions bound to mouse events
--
myMouseBindings (XConfig {XMonad.modMask = modMask}) = M.fromList $

    -- mod-button1, Set the window to floating mode and move by dragging
    [ ((modMask, button1), (\w -> focus w >> mouseMoveWindow w))

    -- mod-button2, Raise the window to the top of the stack
    , ((modMask, button2), (\w -> focus w >> windows W.swapMaster))

    -- mod-button3, Set the window to floating mode and resize by dragging
    , ((modMask, button3), (\w -> focus w >> mouseResizeWindow w))

    -- you may also bind events to the mouse scroll wheel (button4 and button5)
    ]

------------------------------------------------------------------------
-- Layouts:

-- You can specify and transform your layouts by modifying these values.
-- If you change layout bindings be sure to use 'mod-shift-space' after
-- restarting (with 'mod-q') to reset your layout state to the new
-- defaults, as xmonad preserves your old layout settings by default.
--
-- The available layouts.  Note that each layout is separated by |||,
-- which denotes layout choice.
--
myLayout =  avoidStruts $ smartBorders $ (MosaicAlt M.empty ||| Full ||| Mirror tiled)
  where
     -- default tiling algorithm partitions the screen into two panes
     -- we set position of the main window in bottom
     -- we put focused window in the master area
     tiled   = reflectHoriz $ Tall nmaster delta ratio

     -- The default number of windows in the master pane
     nmaster = 1

     -- Default proportion of screen occupied by master pane
     ratio   = 2/3

     -- Percent of screen to increment by when resizing panes
     delta   = 3/100

------------------------------------------------------------------------
-- Window rules:

-- Execute arbitrary actions and WindowSet manipulations when managing
-- a new window. You can use this to, for example, always float a
-- particular program, or have a client always appear on a particular
-- workspace.
--
-- To find the property name associated with a program, use
-- > xprop | grep WM_CLASS
-- and click on the client you're interested in.
--
-- To match on the WM_NAME, you can use 'title' in the same way that
-- 'className' and 'resource' are used below.
--
myManageHook = composeAll
    [ className =? "MPlayer"        --> doFloat
    , className =? "Opera"          --> doF (W.shift "2:web")
    , className =? "Akregator"      --> doF (W.shift "2:web")
    , className =? "Ktorrent"       --> doF (W.shift "2:web")
    , title     =? "mutt"           --> doF (W.shift "2:web")
    , title     =? "mcabber"        --> doF (W.shift "3:im")
    , className =? "Skype"          --> doF (W.shift "3:im")
    , className =? "Djview"         --> doF (W.shift "4:media")
    , className =? "Xpdf"           --> doF (W.shift "4:media")
    , className =? "feh"            --> doF (W.shift "4:media")
    , className =? "Assistant"      --> doF (W.shift "5:dev")
    , className =? "Designer"       --> doF (W.shift "5:dev")
    , className =? "Linguist"       --> doF (W.shift "5:dev")
    , className =? "VirtualBox"     --> doF (W.shift "5:dev")
    , className =? "K3b"            --> doF (W.shift "6:misc")
    , resource  =? "desktop_window" --> doIgnore
    , resource  =? "kdesktop"       --> doIgnore
    ]

------------------------------------------------------------------------
-- Status bars and logging

-- Perform an arbitrary action on each internal state change or X event.
-- See the 'DynamicLog' extension for examples.
--
-- To emulate dwm's status bar
--
-- > logHook = dynamicLogDzen
--
-- myLogHook = return ()

myLogHook = dynamicLogWithPP $ xmobarPP

myXPConfig = XPC { font     = myFont
                 , bgColor  = "#000000"
                 , fgColor  = myFocusedBorderColor
                 , fgHLight = "#000000"
                 , bgHLight = myFocusedBorderColor
                 , borderColor = myFocusedBorderColor
                 , promptBorderWidth = 1
                 , position = Bottom
                 , height   = 16
                 , historySize = 256
                 , defaultText = ""
                 , autoComplete = Just 200
}

------------------------------------------------------------------------
-- Now run xmonad with all the defaults we set up.

-- Run xmonad with the settings you specify. No need to modify this.
--
main = xmonad $ withUrgencyHook FocusHook $ defaultConf

-- A structure containing your configuration settings, overriding
-- fields in the default config. Any you don't override, will
-- use the defaults defined in xmonad/XMonad/Config.hs
--
-- No need to modify this.
--
--defaults = defaultConfig {
defaultConf = defaultConfig {
        terminal           = myTerminal,
        focusFollowsMouse  = myFocusFollowsMouse,
        borderWidth        = myBorderWidth,
        modMask            = myModMask,
        numlockMask        = myNumlockMask,
        workspaces         = myWorkspaces,
        normalBorderColor  = myNormalBorderColor,
        focusedBorderColor = myFocusedBorderColor,
--      defaultGaps        = myDefaultGaps,

        keys               = myKeys,
--      mouseBindings      = myMouseBindings,

        layoutHook         = myLayout,
        manageHook         = myManageHook <+> manageDocks <+> scratchpadManageHookDefault,
        logHook            = myLogHook
}

:drinks:
После каталога /etc понимаешь, что реестр - место, откуда нормальными не возвращаются.
Спасибо сказали: