LINUX.ORG.RU

awesome wm tags + IntelliJ IDEA

 , , ,


0

2

Доброго времени суток.

Не так давно перешел с KDE на awesome. Многое нравится, многое подстроил под себя, кое-что пока остается нерешенным. В частности - у меня два тега отведены под development («dev[1]» и «dev[2]»). Есть также правило, которое заставляет idea открываться на dev[1]. Но, мне бы хотелось, чтобы при открытии ещё одного инстанса идеи, она открывалась уже в следующем теге.

Нашел, как можно задавать instance (aka name) при запуске приложения, по которым можно выстраивать правила, но во-первых, в idea в принципе не взлетело, во-вторых это происходит не динамически, а хотелось бы. Ибо.

Вопрос: кто сталкивался/реализовывал такую хотелку, когда каждый следующи инстанс приложения открывается в следующем теге?

Спасибо заранее.

Напиши хитрое правило с callback'ом. Грубый пример для двух тегов

{
    rule = { class = "Nemo" },
    callback = function(c)
        local first_tag = tags[1][4]
        local second_tag = tags[1][5]

        for _, client_exist in ipairs(first_tag:clients()) do
            if client_exist.class == "Nemo" and c ~= client_exist then
                awful.client.movetotag(second_tag, c)
                return
            end
        end

        awful.client.movetotag(first_tag, c)
    end
},
Для произвольного количества тегов будет чуть сложнее, но идея думаю понятна.

Worron ★★★
()

С матчером ещё можно:

{ rule = { class = "XTerm" },
  callback = function (c)
      local matcher = function (c) 
          return awful.rules.match(c, {class = "XTerm"})
      end

      for client in awful.client.iterate(matcher) do
          if client ~= c then
              awful.client.movetotag(tags[1][2], c)
              return
          end
      end
      awful.client.movetotag(tags[1][1], c)
  end }

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

Только хотел накидать про матчер, а ты уже злодей.

r3lgar ★★★★★
()

Пользуясь случаем - вопрос по свитчеру клавиатуры. Есть 10-и строчный индикатор раскладки на панели, вешается на Caps Lock. Прежде пользовался setxkbmap. Теперь появился сайд-эффект. Кроме переключения раскладки, caps выполняет свою непосредственную функцию и переводит печать текста в uppercase.

Не подскажете, как это можно обойти? Пробовал

remove lock = Caps_Lock
в .xmodmap, курил, как ещё можно реализовать через setxkbmap, не вышло.

Сам свитчер:

local wibox = require("wibox")
local awful = require("awful")
kbdcfg = {}
kbdcfg.cmd = "setxkbmap"
kbdcfg.layout = { { "us", "" , "us" }, { "ru", "" , "ru" } } 
kbdcfg.current = 1 
kbdcfg.widget = wibox.widget.textbox()
kbdcfg.widget:set_text(" " .. kbdcfg.layout[kbdcfg.current][3] .. " ")
kbdcfg.switch = function ()
    print('Switching layout...')
    kbdcfg.current = kbdcfg.current % #(kbdcfg.layout) + 1
    local t = kbdcfg.layout[kbdcfg.current]
    kbdcfg.widget:set_text(" " .. t[3] .. " ")
    os.execute( kbdcfg.cmd .. " " .. t[1] .. " " .. t[2] )
end

globalkeys = awful.util.table.join(globalkeys,
    awful.key({ }, "Caps_Lock",   (function() kbdcfg.switch()  end))
)

bytecode ★★
() автор топика
Последнее исправление: bytecode (всего исправлений: 2)

каждый следующи инстанс приложения открывается в следующем теге?

В shifty есть похожее поведение при настройке тега нижеследующим образом каждый instance urxvt откроется в новом теге под именем «1». Соответственно modkey+1 будет циклически перебирать эти теги. Это, правда, не очень удобно на мой взгляд.

shifty.config.tags = {
    ["1"] = {
        exclusive = true,
        max_clients = 1,
    },
--…
}
shifty.config.apps = {
--…
    { match = { instance = {"^urxvt$" }, }, tag = "1", },
--…
}

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

Странная это идея — переключать раскладку клавиатуры с помощью менеджера окон.

Может лучше использовать что-то вроде https://github.com/qnikst/kbdd/, а в awesome только ловить сигнал и отображать состояние http://awesome.naquadah.org/wiki/Keyboard_layouts_with_kbdd/ru.

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