LINUX.ORG.RU

[awesome] Можно ли прикрутить клавиатурные режимы?

 


0

1

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

В разных режимах один и тот же хоткей даёт разные команды wm.

★★★★★

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

Например:

clientkeys_common = clientkeys
clientkeys_main = join(clientkeys_common,
  awful.key({ modkey }, "Return", function (c)
    c:fullscreen()
  end
)
clientkeys_alternate = join(clientkeys_common,
  awful.key({ modkey }, "Return", function (c)
    c:kill()
  end
)
clientkeys = clientkeys_main

is_alternate = false

indicator = widget({ type = "textbox" })
indicator.text = "main"

rootkeys = join(rootkeys,
  awful.key({ modkey }, "F12", function ()
    clientkeys     = (is_alternate and clientkeys_main or clientkeys_alternate)
    indicator.text = (is_alternate and "main" or "alternate")
    is_alternate   = not is_alternate
  end
)
root.keys(rootkeys)
Главное — не ошибиться с расположением в конфиге.

krakatau
()
Ответ на: комментарий от krakatau
rootkeys = join(rootkeys,
  awful.key({ modkey }, "F12", function ()
    clientkeys     = (is_alternate and clientkeys_main or clientkeys_alternate)
    for s = 1, screen.count() do
      for _, c in pairs( client.get(s) ) do
        c:keys(clientkeys)
      end
    end
    indicator.text = (is_alternate and "main" or "alternate")
    is_alternate   = not is_alternate
  end
)
krakatau
()
Ответ на: комментарий от krakatau

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

modes = { wp = awful.util.table.join(clientkeys, 
		awful.key({ modkey }, "j", function () awful.client.moveresize(  0,  20,   0,   0) end),
    	    	awful.key({ modkey }, "k", function () awful.client.moveresize(  0, -20,   0,   0) end),
    	    	awful.key({ modkey }, "h", function () awful.client.moveresize(-20,   0,   0,   0) end),
    	    	awful.key({ modkey }, "l", function () awful.client.moveresize( 20,   0,   0,   0) end)
	    );
	  to = awful.util.table.join(clientkeys,
		awful.key({ modkey }, "h",  awful.tag.viewprev ),
	    	awful.key({ modkey }, "l",  awful.tag.viewnext ),
	    	awful.key({ modkey }, "j",
	    	    function ()
	    	        awful.client.focus.byidx( 1)
	    	        if client.focus then client.focus:raise() end
	    	    end),
	    	awful.key({ modkey }, "k",
	    	    function ()
	    	        awful.client.focus.byidx(-1)
	    	        if client.focus then client.focus:raise() end
	    	    end)
	    );
	  bo = awful.util.table.join(clientkeys,
		awful.key({ modkey }, "l",  function () awful.tag.incmwfact( 0.05)    end),
		awful.key({ modkey }, "h",  function () awful.tag.incmwfact(-0.05)    end),
		awful.key({ modkey }, "k",	function () awful.layout.inc(layouts,  1) end),
		awful.key({ modkey }, "j", 	function () awful.layout.inc(layouts, -1) end)
	    )
}

mode = "to"

indicator = widget({ type = "textbox" })
indicator.text = mode

setmode = function ( m )
    clientkeys = modes [m]
    for s = 1, screen.count() do
      for _, c in pairs( client.get(s) ) do
        c:keys(clientkeys)
      end
    end
    indicator.text = m
  end

setmode ( mode )

rootkeys = awful.util.table.join(rootkeys,
  awful.key({ modkey }, "w", setmode( "wp" )),
  awful.key({ modkey }, "t", setmode( "to" )),
  awful.key({ modkey }, "b", setmode( "bo" ))
)

globalkeys = awful.util.table.join(globalkeys,rootkeys)
ados ★★★★★
() автор топика
Ответ на: комментарий от ados

Третьим аргументом у awful.key должна быть функция, а не её результат, как выходит сейчас.

rootkeys = awful.util.table.join(rootkeys,
  awful.key({ modkey }, "w", function () setmode( "wp" ) end),
  awful.key({ modkey }, "t", function () setmode( "to" ) end),
  awful.key({ modkey }, "b", function () setmode( "bo" ) end)
)

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

Спасибо за поправку. Наконец заставил виджет работать, ещё убрал таблицу rootkeys, т.к. она у меня не определена, а wm молчит, что не знает. Пока глючат режимы, подозреваю, что из-за того, что globalkeys и clientkeys работают по разному и надо с каждым режимом вести две таблицы.

ados ★★★★★
() автор топика

Ну всё, пожалуй, релиз:

rootkeys = awful.util.table.join(rootkeys,
  awful.key({ modkey }, "w", function () setmode( "wp" ) end),
  awful.key({ modkey }, "t", function () setmode( "to" ) end),
  awful.key({ modkey }, "b", function () setmode( "bo" ) end)
)

modekeys = { 
    wp = { 
        client = awful.util.table.join(clientkeys, -- window position mode 
            awful.key({ modkey }, "j", function () awful.client.moveresize(  0,  20,   0,   0) end),
            awful.key({ modkey }, "k", function () awful.client.moveresize(  0, -20,   0,   0) end),
            awful.key({ modkey }, "h", function () awful.client.moveresize(-20,   0,   0,   0) end),
            awful.key({ modkey }, "l", function () awful.client.moveresize( 20,   0,   0,   0) end)
        ),
        root = rootkeys
        --root = awful.util.table.join(rootkeys, 
        --)
    },
    to = { 
        client = awful.util.table.join(clientkeys, -- tag operation mode
            awful.key({ modkey,           }, "j",
                function ()
                    awful.client.focus.byidx( 1)
                    if client.focus then client.focus:raise() end
                end),
            awful.key({ modkey,           }, "k",
                function ()
                    awful.client.focus.byidx(-1)
                    if client.focus then client.focus:raise() end
                end)
        ),
        root = awful.util.table.join(rootkeys, 
            awful.key({ modkey }, "h", awful.tag.viewprev ),
            awful.key({ modkey }, "l", awful.tag.viewnext )
        )
    },
    bo = { 
        client = clientkeys,
           --client = awful.util.table.join(clientkeys, -- buffer operation mode
           --    ),
           root = awful.util.table.join(rootkeys, 
               awful.key({ modkey }, "l",  function () awful.tag.incmwfact(-0.05)    end),
               awful.key({ modkey }, "h",  function () awful.tag.incmwfact( 0.05)    end),
               awful.key({ modkey }, "k",  function () awful.layout.inc(layouts,  1) end),
               awful.key({ modkey }, "j",  function () awful.layout.inc(layouts, -1) end)
           )
    }
}

indicator = widget({ type = "textbox" })
indicator.text = mode


setmode = function ( chmode )
    clientkeys = modekeys[chmode].client
    for s = 1, screen.count() do
      for _, c in pairs( client.get(s) ) do
        c:keys(clientkeys)
      end
    end
    rootkeys = modekeys[chmode].root
    root.keys( rootkeys )
    indicator.text = chmode
end

mode = "to"
setmode ( mode )

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