Awesome WM: размещение мозаичных клиентов в определенном порядке при запуске

Я установил Awesome WM около недели назад. С тех пор я пытаюсь размещать терминальные клиенты (голый терминал и vim, vifm, htop) в определенном порядке при запуске. Вот визуальное представление того, чего я пытаюсь достичь:

########################
#            #   htop  #
#            ###########
#    vim     #   bare  #
#            ###########
#            #   vifm  #
########################

Мне удалось разместить vim в правильном месте, но другие окна располагаются в произвольном порядке, который меняется при каждой перезагрузке. Вот содержимое моей конфигурации autostart.lua:

    1 local awful = require("awful")                                 
    1                                                                
    2 awful.spawn.single_instance(terminal.."-e xmodmap ~/.Xmodmap; exit")             
    3 awful.spawn.single_instance("brave-browser", {                 
    4     fullscreen = true,                                         
    5     focus = true                                               
    6 })                                                             
    7             
    8 awful.spawn(terminal.." -e vim", {
    9     tag = "edit",
   10     placement = awful.placement.left,                          
   11     callback = function(c) awful.client.setmaster(c) end})
   12 awful.spawn(terminal.." -e htop", {                      
   13     tag = "edit",                                          
   14     height = 80, 
   15     placement = awful.placement.top_right})               
   16 awful.spawn(terminal, {
   17     tag = "edit",                                              
   18     placement = awful.placement.right})
   19 awful.spawn(terminal.." -e vifm", {   
   20     tag = "edit",    
   21     placement = awful.placement.bottom_right})
   22                                                                
   23 awful.spawn(terminal.." -e neomutt", {
   24     tag = "communication",                                     
   25     fullscreen = true })
   26                                                         
   27 awful.spawn("Spotify", { tag = "read" })

Макет тега, с которым у меня проблемы, плитка. Я на Awesome v4.3. Какое свойство клиента нужно добавить, чтобы получить желаемое поведение?


person arsoc    schedule 03.11.2020    source источник


Ответы (2)


Чтобы клиенты появлялись в желаемых позициях при запуске, следует использовать опцию обратный вызов. Вот фрагмент моего файла autostart.lua, связанный с проблемой:

    1 local awful = require("awful")                                                   
    1                                                                                  
    2 local function spawn_vifm ()                                                     
    3     awful.spawn(terminal.." -e vifm", {                                          
    4         tag = "edit",                                                            
    5         placement = awful.placement.bottom_right                                 
    6     })                                                                           
    7 end                                                                              
    8                                                                                  
    9 local function spawn_term ()                                                     
   10     awful.spawn(terminal, {                                                      
   11         tag = "edit",                                                            
   12         placement = awful.placement.right,                                       
   13         callback = function(c) spawn_vifm() end                                  
   14 })                                                                               
   15 end                                                                              
   16                                                                                  
   17 local function spawn_htop ()                                                     
   18     awful.spawn(terminal.." -e htop", {                                          
   19         tag = "edit",                                                            
   20         placement = awful.placement.top_right,                                   
   21         callback = function(c) spawn_term() end                                  
   22     })                                                                           
   23 end
   .......
   38 awful.spawn(terminal.." -e vim", {                                               
   39     tag = "edit",                                                                
   40     placement = awful.placement.left,                                            
   41     callback = function(c)                                                       
   42         awful.client.setmaster(c)                                                
   43         store_active_client(awful.tag.find_by_name(awful.screen.focused(), "edit"), c)
   44         spawn_htop()                                                             
   45     end                                                                          
   46 })

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

person arsoc    schedule 04.11.2020

Я не знаю, что вы имеете в виду под этим: Раскладка тега, с которым у меня возникла проблема, расположена слева. Я полагаю, вы имеете в виду, что ваши терминалы неправильно расположены? Я использовал AwesomeWM около недели несколько лет назад, но быстро понял, что нужно много дорабатывать, чтобы получить именно то, что вы хотите. То, что происходит с тобой, это именно то, с чем я столкнулся.

Проще было просто использовать LXDE и Devilspie2. Вы можете использовать Lua-скрипты для окон, чтобы не украшать и увеличивать их, переходить на другие рабочие столы или делать все, что захотите, довольно легко. Это может помочь вам добраться туда, куда вы направляетесь, но трудно сказать без пояснений по вашему вопросу.

local screenwidth = awful.screen.geometry.width
local screenheight = awful.screen.geometry.height

local halfwidth = math.floor( screenwidth /2 )
local thirdheight = math.floor( screenheight /3 )

awful .spawn( terminal .." -e vim", {
    tag = "edit",
    width = halfwidth,
    height = screenheight,
    placement = awful .placement .left,
    callback = function(c) awful .client .setmaster(c) end }  )

awful .spawn( terminal.." -e htop", {
    tag = "edit",
    width = halfwidth,
    height = thirdheight,
    placement = awful .placement .top_right }  )

awful .spawn( terminal, {  --  bare
    tag = "edit",
    width = halfwidth,
    height = thirdheight,
    placement = awful .placement .right }  )

awful .spawn( terminal .." -e vifm", {
    tag = "edit",
    width = halfwidth,
    height = thirdheight,
    placement = awful .placement .bottom_right }  )

Кроме того, я хотел бы отметить, что Conky может быть жизнеспособным решением, если вы просто хотите просмотреть вывод терминала на своем рабочем столе при написании сценариев на Lua.

person Doyousketch2    schedule 04.11.2020
comment
Спасибо за ваш ответ и предложения. Под макетом тега, с которым у меня возникла проблема, расположено слева я имел в виду, что макет, с которым у меня возникли проблемы, расположен слева в терминологии Awesome (на самом деле, это просто плитка). После дальнейшего изучения Awesome API мне удалось добиться желаемого поведения. Ключевым моментом было использование опции обратного вызова и создание следующего клиента только тогда, когда предыдущий будет готов. Таким образом, он гарантирует, что клиенты будут созданы в правильном порядке. Кстати, я до сих пор не разобрался, как задать ширину htop, но, думаю, с этим можно смириться. - person arsoc; 04.11.2020