LINUX.ORG.RU

Xmonad и multihead - контроль перемещения воркспейсов

 , ,


1

1

Допустим, имеется 4-5 мониторов. На мониторе-1 открыт workspace-1, на мониторе-2 открыт workspace-2, ну и так далее. Число воркспейсов больше числа мониторов.

Если находясь на мониторе-2 выбрать workspace-1 (т.е. нажать комбинацию mod-1), то:

а.) на мониторе-2 возникнет workspace-1 вместо workspace-2; но

б.) на мониторе-1 возникнет workspace-2.

Т.е. они поменяются местами. Это, наверное, было бы удобно при наличии двух мониторов. Но при большем количестве мониторов это метание воркспейсов между мониторами кажется сложно отслеживаемым, и охватить полную карту местонахождения воркспейсов кажется сложным, потому что она всё время меняется.

Нельзя ли сделать, как в дефолтном awesome wm, чтобы при смене воркспейса на одном из мониторов это всё не скакало по другим мониторам, т.е. на других мониторах воркспейс не менялся бы.

Так же прошу объяснить, чем (какой концепцией работы) вообще объясняется такое метание воркспейсов между мониторами в почти дефолтной конфигурации xmonad. Стоит ли менять это поведение?

Как вы контролируете перемещение окон приложений? Например, воркспейс с браузером затерялся где-то примерно между 8 и 12 воркспейсом. Как вы его найдёте? Будете прокручивать воркспейсы с 8 по 12? Или увидите на настроеном xmobar? Или ещё как-то?

Deleted

Последнее исправление: cetjs2 (всего исправлений: 6)

потому что ты используешь greedyView, а для того поведения, которое нужно тебе, надо view

Так же прошу объяснить, чем (какой концепцией работы) вообще объясняется такое метание воркспейсов между мониторами в почти дефолтной конфигурации xmonad

концепцией «меньше 3 мониторов», как ты и сказал

Как вы контролируете перемещение окон приложений? Например, воркспейс с браузером затерялся где-то примерно между 8 и 12 воркспейсом. Как вы его найдёте? Будете прокручивать воркспейсы с 8 по 12? Или увидите на настроеном xmobar? Или ещё как-то?

в XMonad.Prompt.Window есть функции для поиска окон

но лично у меня окна не терялись

f1u77y ★★★★
()
Последнее исправление: f1u77y (всего исправлений: 4)
Ответ на: комментарий от anonymous

как я понимаю, должно отрисовываться 2 копии одного окна, но с разными размерами

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

потому что ты используешь greedyView, а для того поведения, которое нужно тебе, надо view.

Вот конфиг.

Там про greedyView есть только в строке 99. Но если даже и выпилить строки 96-99, то воркспейсы всё равно летают по всем мониторам при нажатии mod-Up или mod-Down (см. строки 58 и 60) в том случае, если на одном из других мониторов открыт этот же воркспейс. Если заменить в строке 99 на просто view, то ничего не меняется.

С другой стороны, если на двух мониторах будет открыт один и тот же воркспейс, от как это будет выглядеть? все вводимые данные будут дублироваться?

XMonad.Prompt.Window работает круто, спасибо!

Deleted
()
Последнее исправление: Deleted (всего исправлений: 4)
Ответ на: комментарий от Deleted

Если заменить в строке 99 на просто view, то ничего не меняется

упс, ошибочка. но всё равно странно: view должен работать так: если на одном из мониторов есть этот воркспейс, то активировать этот монитор, иначе поставить данный тег в качестве текущего на текущем мониторе

тогда держи функцию с нужным поведением(не тестил):

view' :: (Eq s, Eq i) => i -> StackSet i l a s sd -> StackSet i l a s sd
view' i s
    | i == currentTag s = s
    | Just x <- L.find ((i==).tag) (hidden  s ++ map workspace (visible s))
    = s { current = (current s) { workspace = x }
        , hidden = workspace (current s) : L.deleteBy (equating tag) x (hidden s) }
    | otherwise = s

  where equating f = \x y -> f x == f y

а в дефолтном осоме может случиться один тег на 2 мониторах одновременно?

все вводимые данные будут дублироваться?

да

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

а в дефолтном осоме может случиться один тег на 2 мониторах одновременно?

Там всё прибито: вот есть, допустим, 4 монитора, на каждом по 9 тегов. Получается всего 4*9 рабочих столов. И где ты положил свой браузер, там он и валяется в том же мониторе и в том же теге )))

если на одном из мониторов есть этот воркспейс, то активировать этот монитор

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

Deleted
()
Последнее исправление: Deleted (всего исправлений: 6)
Ответ на: комментарий от Deleted

Т.е. воркспейсы скачут изначально

потому что по дефолту при смене воркспейсов используется greedyView

а view' работает?

f1u77y ★★★★
()

при смене воркспейса на одном из мониторов это всё не скакало по другим мониторам

Так и есть - если на мониторе ты выбираешь воркспейс, отсутствующий на других мониторах, то на них ничего не меняется.

Вообще, концептуально, каждый «монитор» в xmonad это viewport - типа амбразура, которая может «смотреть» на один из рабочих столов. Мне, например, сразу было очевидно, что через 2 разных «амбразуры» нельзя смотреть на один и тот же рабочий стол.

Соответственно для меня такое поведение как раз наиболее логичное и очевидное - если я переключил монитор-2 на workspace-1, который раньше торчал ко мне через монитор-1, то ясно-понятно, что через монитор-1 теперь должен торчать какой-нибудь другой workspace-N, где N != 1.

Учитывая что число рабочих столов всегда больше числа мониторов, я не очень представляю, как оно может быть по-другому.

Как вы контролируете перемещение окон приложений?

В большинстве случаев - автоматически.

Например, воркспейс с браузером затерялся где-то примерно между 8 и 12 воркспейсом.

Это как вообще - браузер это ж не носок под кроватью, с чего бы ему теряться?

Как вы его найдёте?

А в чём вообще сакральный смысл его терять? У меня, например, все окна firefox открываются на рабочем столе под названием web, все окна файлового менеджера на рабочем столе files etc. Соответственно переключаясь на рабочий стол 2 (web) или 4 (files) я заранее знаю что там будет.

Зачем что-то искать, если можно это просто не терять?

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

У меня, например, все окна firefox открываются на рабочем столе под названием web

Что, если браузер — это только для примера? Браузеров может быть открыто много в разных воркспейсах по разным тематикам (3 воркспейса легко, а то и больше), просто потому что есть место. Если это всё в одном воркспейсе, но табы прессуются до иконок, долго искать клавишами... особенно если это вертикальный моник. Более того, если это не браузер, а терминалы с локальными и удаленными консолями...

В общем, пригодился совет выше по поводу XMonad.Prompt.Window, а так же:

import XMonad.Actions.GridSelect
...
, ((modMask, xK_g), goToSelected defaultGSConfig)

плюс пришлось использовать львиную долю import XMonad.Actions.CycleWS.

Буду рад узнать и другие способы охватить всю карту расположения воркспейсов.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.