LINUX.ORG.RU

Xmonad и статический тайлинг с табами а-ля Ion3


0

0

Наслушался много хорошего о Xmonad и решил более плотно с ним поработать. Понравилось, как он работает с дочерними окнами приложений, но вот динамический тайлинг для всех тэгов мне не нравится. Хочется как в Ion3. Есть ли такая возможность?

Что интересует: - статический тайлинг (если есть возможность его указывать для определенных тегов, то вообще супер); - табы (их я уже видел, но без мыши с ними не удобно работать); - именованные скрэтчпады (вижу, что такой лэйаут есть, но как его использовать не понял).

★★★★★

Именованые скрэтчпады есть (XMonad.Util.NamedScratchpad из xmonad-contrib), как использовать хорошо написано в документации. Статического тайлинга нет. Что конкретно нужно от табов?

xetf ★★ ()

увидев слова monad и статический подумал... но быстро разочаровался :-(

www_linux_org_ru ★★★★★ ()

вообще тайлинг интересная вещь, которую я никогда не пробовал

интересно было бы поюзать его с kdevelop — там есть режим, когда *все* окошки идут отдельно друг от друга

www_linux_org_ru ★★★★★ ()
Ответ на: комментарий от xetf

> Именованые скрэтчпады есть (XMonad.Util.NamedScratchpad из xmonad-contrib), как использовать хорошо написано в документации.

Со скрэтчпадами разобрался - работает, удобно. Почти нравится.

Статического тайлинга нет.


Вообще? Странно это.

Что конкретно нужно от табов?


Табы есть, но я хочу поделить тэг на фреймы и внутри фрейма создавать (если нужно и когда нужно) табы.

Я нашел лэйаут mouseResizableTile - почти, но не он :(
И зачем то делает большой промежуток между окнами. Как его изменить я не понял.

andreyu ★★★★★ ()
Ответ на: комментарий от www_linux_org_ru

> вообще тайлинг интересная вещь, которую я никогда не пробовал

Попробуйте, возможно вам понравится.

интересно было бы поюзать его с kdevelop — там есть режим, когда *все* окошки идут отдельно друг от друга


Не использую kdevelop, но code:blocks и gimp чувствуют себя хорошо.

andreyu ★★★★★ ()
Ответ на: комментарий от andreyu

>Вообще? Странно это.

«xmonad is a dynamically tiling X11 window manager» (c) xmonad.org

хочу поделить тэг на фреймы и внутри фрейма создавать (если нужно и когда нужно) табы.


Не выйдет. То есть можно скомбинировать несколько tabbed layout-ов (XMonad.Layout.LayoutCombinators), но такому решению не хватает гибкости.

Я нашел лэйаут mouseResizableTile


Попробуйте XMonad.Layout.ResizableTile, почти то же, но без отступов и нельзя ресайзить мышкой. mouseResizableTile взят из bluetile (форк xmonad), промежуток между окон там hardcoded. Зачем он вообще нужен я не знаю, вроде именно для ресайза мышкой =)

xetf ★★ ()
Ответ на: комментарий от xetf

> «xmonad is a dynamically tiling X11 window manager» (c) xmonad.org

Ну как бы да, я читал ;)

>хочу поделить тэг на фреймы и внутри фрейма создавать (если нужно и когда нужно) табы.

Не выйдет. То есть можно скомбинировать несколько tabbed layout-ов (XMonad.Layout.LayoutCombinators), но такому решению не хватает гибкости.



Угу, видел такое, но еще не разбирался. Пока снова сбежал на Ion3 - как работает mplayer в Xmonad мне не понравилось. Тормозит проигрывание (не понимаю, как такое возможно), переключение режимов тоже тормозит (переключается быстро, но видео не обновляется несколько секунд), в полноэкранном режиме (к примеру кнопка «f» в mplayer) остается декоратор окна.

Попробуйте XMonad.Layout.ResizableTile, почти то же, но без отступов и нельзя ресайзить мышкой. mouseResizableTile взят из bluetile (форк xmonad), промежуток между окон там hardcoded. Зачем он вообще нужен я не знаю, вроде именно для ресайза мышкой =)


Угу, видел, попробую его подключить.

andreyu ★★★★★ ()

Еще хотелось бы нотификацию об изменениях в окнах, которые находятся на не активном тэге. Трей не использую, поэтому пропускаю сообщения в Gajim'е.
В Ion3 в углу появлялась нотификация об изменении (видимо, когда окно посылает сигнал Bell).

andreyu ★★★★★ ()
Ответ на: комментарий от andreyu

А по-моему, когда выставляет urgency hint.

Не знаю, как с этим обстоят дела в xmonad, в fvwm я сделал подсветку деска, окно с которого попросило внимания, в пейджере, простеньким скриптом на баше

yoghurt ★★★★★ ()
Ответ на: комментарий от andreyu

>как работает mplayer в Xmonad мне не понравилось. Тормозит проигрывание (не понимаю, как такое возможно), переключение режимов тоже тормозит (переключается быстро, но видео не обновляется несколько секунд)

Странно как-то, у меня он работает отлично.

в полноэкранном режиме (к примеру кнопка «f» в mplayer) остается декоратор окна.


XMonad.Layout.NoBorders, модификатор smartBorders.

хотелось бы нотификацию об изменениях в окнах, которые находятся на не активном тэге.


XMonad.Hooks.UrgencyHook

xetf ★★ ()
Ответ на: комментарий от yoghurt

> А по-моему, когда выставляет urgency hint.

Да, вероятно вы правы.

Не знаю, как с этим обстоят дела в xmonad, в fvwm я сделал подсветку деска, окно с которого попросило внимания, в пейджере, простеньким скриптом на баше


Можно посмотреть на скрипт? Может это натолкнет меня на мысль.

andreyu ★★★★★ ()
Ответ на: комментарий от xetf

> >как работает mplayer в Xmonad мне не понравилось. Тормозит проигрывание (не понимаю, как такое возможно), переключение режимов тоже тормозит (переключается быстро, но видео не обновляется несколько секунд)

Странно как-то, у меня он работает отлично.


Попробую еще разок...

>в полноэкранном режиме (к примеру кнопка «f» в mplayer) остается декоратор окна.

XMonad.Layout.NoBorders, модификатор smartBorders.



О, а я использую noBorders. Спасибо.

>хотелось бы нотификацию об изменениях в окнах, которые находятся на не активном тэге.

XMonad.Hooks.UrgencyHook



Круто, буду настраивать. Еще раз спасибо.

andreyu ★★★★★ ()
Ответ на: комментарий от andreyu

> XMonad.Layout.NoBorders, модификатор smartBorders.

Попробовал поставить этот хук - все работает.

Тормоза при переключении smplayer в полноэкранный режим остались. Попробовал mplayer без всяких морд - тормозов нет. Странно все это. От smplayer отказаться не могу - шибко удобный он.

Как выглядит переключение режима в smplayer:
- Открывается окошко, с задержкой появляется в нем видео. Дальше все играет вроде нормально.
- Переключаюсь в полноэкранный режим - окно с сохранением пропорций разворачивается на весь экран. При этом по краям остаются видны остальные окна этого тега.
- Через несколько секунд края заполняются (как и положено) черным.
- Переключение в оконный режим - окно остается развернутым на весь экран. Хотя должно было бы восстановить размеры и положение.

Хуки такие:
myManageHook = composeAll
[ className =? «MPlayer» --> doFloat
, className =? «Smplayer» --> doFloat
, resource =? «desktop_window» --> doIgnore
, resource =? «kdesktop» --> doIgnore
]
Может в них дело?

andreyu ★★★★★ ()
Ответ на: комментарий от andreyu

Таки да, запустил smplayer - те же глюки что у вас. Причём точно помню, что месяца два назад всё было хорошо. Сломали что-то, видать.

xetf ★★ ()
Ответ на: комментарий от xetf

> Таки да, запустил smplayer - те же глюки что у вас. Причём точно помню, что месяца два назад всё было хорошо. Сломали что-то, видать.

Знать бы где сломали - в Xmonad или в Smplayer? Наверное стоит багрепорт запостить в оба проекта.

andreyu ★★★★★ ()
Ответ на: комментарий от xetf

> Попробуйте XMonad.Layout.ResizableTile, почти то же, но без отступов и нельзя ресайзить мышкой

Эту штуку сделал, но ресайз не работает:

, ((modm, xK_a), sendMessage MirrorShrink)
, ((modm, xK_z), sendMessage MirrorExpand)

Нет никакой реакции на нажатие хоткеев.

andreyu ★★★★★ ()
Ответ на: комментарий от andreyu

Он пытается поймать авторов тредов на этом методом брутфорса. Вообще, мне кажется что ононимус один и всегда всем мешает. Ну почему бы не заблочить их уже навсегда?

tia ()
Ответ на: комментарий от xetf

> >ресайз не работает:

Должен работать. Другие хоткеи, заданые вручную, работают?


Вы предлагаете заменить комбинацию клавиш для этих действий или вопрос в работоспособности остальных кастомных шоткатоы?

По второму вопросу - все остальные шоткаты работают, за исключением ресайза floating-окна в большую сторону по вертикали. При этом перемещение и прочие ресайзы работают корректно.

andreyu ★★★★★ ()
Ответ на: комментарий от andreyu

>Вы предлагаете заменить комбинацию клавиш для этих действий или вопрос в работоспособности остальных кастомных шоткатоы?

Второе. Думал может в main что-то не так прописано, но если другие комбинации работают, то там всё хорошо. Что странно, у меня эти же хоткеи на тех же действиях работают. Киньте на всякий случай свой конфиг.

xetf ★★ ()
Ответ на: комментарий от xetf

> Второе. Думал может в main что-то не так прописано, но если другие комбинации работают, то там всё хорошо. Что странно, у меня эти же хоткеи на тех же действиях работают. Киньте на всякий случай свой конфиг.

Постараюсь вечером - на работе у меня Ion3.

andreyu ★★★★★ ()
Ответ на: комментарий от xetf

> Киньте на всякий случай свой конфиг.

http://www.ugolnik.info/downloads/xmonad/xmonad.tar.bz2

В архиве три файла:
.xmobarrc
.xsession
xmonad.hs

Еще вопрос - как настроить переключение между последними выбранными тегами по хоткею?
Скажем был я на 5м теге, переключился на 2й. Хочу нажав хоткей попасть на 5й, а снова нажав хоткей попасть на 2й.

andreyu ★★★★★ ()
Ответ на: комментарий от andreyu

Скомпилировал ваш конфиг (без изменений) у себя - ресайз работает. Но ResizableTall только на одном воркспейсе (msg). Вообще ResizableTall - это надмножество обычного Tall, поэтому Tall можно выкинуть.

как настроить переключение между последними выбранными тегами по хоткею?


XMonad.Actions.CycleRecentWS
У него функциональность чуть побольше затребованой (позволяет ходить по воркспейсам в порядке их использования), но то, что вам нужно, присутствует.

xetf ★★ ()
Ответ на: комментарий от xetf

> Скомпилировал ваш конфиг (без изменений) у себя - ресайз работает.

Хм, рисайз по вертикали в сторону увеличения тоже работает?

Но ResizableTall только на одном воркспейсе (msg).


Да, только там мне он и нужен.

Вообще ResizableTall - это надмножество обычного Tall, поэтому Tall можно выкинуть.


Логично. Но все же ResizableTall не удовлетворяет моим потребностям.

andreyu ★★★★★ ()
Ответ на: комментарий от xetf

> XMonad.Actions.CycleRecentWS

У него функциональность чуть побольше затребованой (позволяет ходить по воркспейсам в порядке их использования), но то, что вам нужно, присутствует.


О, это то, что нужно. Спасибо!

andreyu ★★★★★ ()
Ответ на: комментарий от xetf

> >рисайз по вертикали в сторону увеличения тоже работает?

Нет, не работает.


Вот про это я и говорил - все остальные рисайзы работают, а этот нет. И проблема явно не в хоткеях.

andreyu ★★★★★ ()
myLayout = (avoidStrutsOn [U])
           $ onWorkspace "g" (
                            gimp
                           )
           $ onWorkspace "im" (
                               named "I" (combineTwoP (reflectHoriz $ TwoPane 0.22 0.22)
                                               (tabs)
                                               (tabsHinted ||| Grid ||| (magnify Grid))
                                               ((ClassName "Tkabber") `Or` ((ClassName "Gajim.py") `And` (Role "roster")))
                                         )
                            )
           $ tabsHinted
           ||| tiled
           ||| Mirror tiled
           ||| magnify Grid
    where
      -- default tiling algorithm partitions the screen into two panes
      -- tiled   = tallDwmStyle shrinkText oxyDarkTheme -- ResizableTall nmaster delta ratio []
      tiled   = ResizableTall nmaster delta ratio []
      -- The default number of windows in the master pane
      nmaster = 1
      -- Default proportion of screen occupied by master pane
      ratio   = 8 % 13
      -- Percent of screen to increment by when resizing panes
      delta   = 3 % 100
      -- tabbed layout
      tabsHinted = noBorders (layoutHintsToCenter $ tabbed shrinkText oxyDarkTheme)
      tabs = noBorders (tabbed shrinkText oxyDarkTheme)
      -- magnification in grid
      magnify = magnifiercz (15%10)
      gimp = named "G" (combineTwoP (TwoPane 0.11 0.11) (tabs)
                        (combineTwoP (reflectHoriz $ TwoPane 0.25 0.25)
                         (tabs) (tabsHinted ||| (magnify Grid) ||| Grid ||| Circle)
                         ((Role "gimp-dock") `Or` (Role "gwyddion-databrowser")))
                        ((Role "gimp-toolbox") `Or` (Role "gwyddion-toolbox")))

Тему читал по диагонали. Ключевое слово — combineTwoP.

Sergius256 ()
Ответ на: комментарий от Sergius256

> Тему читал по диагонали. Ключевое слово — combineTwoP.

Ух, класс. Вечером опробую.

andreyu ★★★★★ ()
Ответ на: комментарий от andreyu

>Вот про это я и говорил - все остальные рисайзы работают, а этот нет.

То есть это:

Эту штуку сделал, но ресайз не работает:

, ((modm, xK_a), sendMessage MirrorShrink)


, ((modm, xK_z), sendMessage MirrorExpand)


Нет никакой реакции на нажатие хоткеев.



уже работает? Или я неправильно понял?

И проблема явно не в хоткеях


Чуть поковырял это дело и, кажется, нашёл в чём проблема. Проблема, кстати, возникает только с окнами для которых заданы layout hints (то есть, могут резайзится только на величину, кратную некоторому количеству пикселей), например терминал urxvt. Попробуйте увеличить размер ресайза, 15 вместо 10 мне помогло, теперь всё работает.

xetf ★★ ()
Ответ на: комментарий от xetf

> >Эту штуку сделал, но ресайз не работает:

>, ((modm, xK_a), sendMessage MirrorShrink)

>, ((modm, xK_z), sendMessage MirrorExpand)


>Нет никакой реакции на нажатие хоткеев.


уже работает? Или я неправильно понял?



Нет, я про рисайз плавающих окон с помощью клавиатуры.

Проблема, кстати, возникает только с окнами для которых заданы layout hints (то есть, могут резайзится только на величину, кратную некоторому количеству пикселей), например терминал urxvt. Попробуйте увеличить размер ресайза, 15 вместо 10 мне помогло, теперь всё работает.


Ресайз плавающих окон в большую и меньшую сторону по горизонтали работает. Рисайз по вертикали работает только на уменьшение размера. Увеличение не работает.

andreyu ★★★★★ ()
Ответ на: комментарий от andreyu

>Ресайз плавающих окон в большую и меньшую сторону по горизонтали работает. Рисайз по вертикали работает только на уменьшение размера. Увеличение не работает.

Да. А если увеличить размер ресайза - работает всё. Почему не работал именно вертикальный ресайз на увеличение - не знаю.

xetf ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.