История изменений
Исправление Hoodoo, (текущая версия) :
Я использую awesome и раньше использовал три раскладки.
Решил для себя проблему так: awesome смотрит, какое окно активно, если это не емакс, то зовёт setxkbmap. Если емакс, то зовёт емаксклиент.
Для того, чтобы это работало, емакс должен работать в режиме сервера и выводить имя буфера в имя окна.
Таким образом раскладки везде переключаются по ctrl+\
Сейчас раскладки осталось две, потому что я открыл для себя compose ıęüğ ололо
Овёс:
-- Store keyboard layout for each window, show flags etc.
-- In my config, it goes into screen definition
kbdcfg = {}
kbdcfg.state = {}
kbdcfg.cmd = "setxkbmap"
kbdcfg.layout = {
{ "pl", "", "PL", 'nil', "poland" },
{ "ru", "", "RU", '\\"russian-computer\\"', "russia" }
-- { "tr", "", "TR", '\\"turkish-postfix\\"', "turkey" }
}
kbdcfg.current = 1 -- pl is our default layout
kbdcfg.widget = wibox.widget.textbox()
kbdcfg.widget:set_text(" " .. kbdcfg.layout[kbdcfg.current][3] .. " ")
-- Set keyboard layout with a command and update the widget
kbdcfg.set = function (k)
kbdcfg.state[client.focus.window] = k
local t = kbdcfg.layout[k]
kbdcfg.widget:set_text(" " .. t[3] .. " ")
-- kbdcfg.flag(t[5])
os.execute( kbdcfg.cmd .. " " .. t[1] .. " " ..t[2] )
end
-- Lookup the layout seen in this window the last time
kbdcfg.restore = function ()
local t = kbdcfg.state[client.focus.window] or 1
kbdcfg.set(t)
end
kbdcfg.flag = function (flag)
naughty.notify({ icon = "/home/hoodoo/.config/awesome/resources/flags/" .. flag .. ".png", icon_size = 140 })
end
-- Just cycle through all the layouts by one, call the switch function
kbdcfg.cycle = function ()
kbdcfg.current = kbdcfg.current % #(kbdcfg.layout) + 1
kbdcfg.smartswitch(kbdcfg.current)
end
-- Distinct between Emacs and all the rest, if it's emacs then set input method instead of switch command
kbdcfg.smartswitch = function (n)
local layout_description = kbdcfg.layout[n]
if client.focus.class == 'Emacs' then
os.execute( "emacsclient -e " .. '"' .. '(with-current-buffer \\"' .. client.focus.name .. '\\" (set-input-method ' .. layout_description[4] .. '))"' )
else
kbdcfg.set(n)
end
end
-- This goes into keys definition
-- Defined for all variants of the \ button - in Turkish Q there's a comma there, meh
awful.key({ "Control" }, "backslash", kbdcfg.cycle ),
-- awful.key({ "Control" }, "comma", kbdcfg.cycle ),
Емакс:
(setq frame-title-format '("%b"))
На caps повешен compose. Ушёл от турецкого инпута в емаксе, потому что тогда получается два разных способа ввода - в емаксе и во всём остальном. А turkish-postfix работает очень похоже на compose.
Исходная версия Hoodoo, :
Я использую awesome и раньше использовал три раскладки.
Решил для себя проблему так: awesome смотрит, какое окно активно, если это не емакс, то зовёт setxkbmap. Если емакс, то зовёт емаксклиент.
Для того, чтобы это работало, емакс должен работать в режиме сервера и выводить имя буфера в имя окна.
Таким образом раскладки везде переключаются по ctrl+\
Сейчас раскладки осталось две, потому что я открыл для себя compose ıęüğ ололо
Овёс:
-- Store keyboard layout for each window, show flags etc.
-- In my config, it goes into screen definition
kbdcfg = {}
kbdcfg.state = {}
kbdcfg.cmd = "setxkbmap"
kbdcfg.layout = {
{ "pl", "", "PL", 'nil', "poland" },
{ "ru", "", "RU", '\\"russian-computer\\"', "russia" }
-- { "tr", "", "TR", '\\"turkish-postfix\\"', "turkey" }
}
kbdcfg.current = 1 -- pl is our default layout
kbdcfg.widget = wibox.widget.textbox()
kbdcfg.widget:set_text(" " .. kbdcfg.layout[kbdcfg.current][3] .. " ")
-- Set keyboard layout with a command and update the widget
kbdcfg.set = function (k)
kbdcfg.state[client.focus.window] = k
local t = kbdcfg.layout[k]
kbdcfg.widget:set_text(" " .. t[3] .. " ")
-- kbdcfg.flag(t[5])
os.execute( kbdcfg.cmd .. " " .. t[1] .. " " ..t[2] )
end
-- Lookup the layout seen in this window the last time
kbdcfg.restore = function ()
local t = kbdcfg.state[client.focus.window] or 1
kbdcfg.set(t)
end
kbdcfg.flag = function (flag)
naughty.notify({ icon = "/home/hoodoo/.config/awesome/resources/flags/" .. flag .. ".png", icon_size = 140 })
end
-- Just cycle through all the layouts by one, call the switch function
kbdcfg.cycle = function ()
kbdcfg.current = kbdcfg.current % #(kbdcfg.layout) + 1
kbdcfg.smartswitch(kbdcfg.current)
end
-- Distinct between Emacs and all the rest, if it's emacs then set input method instead of switch command
kbdcfg.smartswitch = function (n)
local layout_description = kbdcfg.layout[n]
if client.focus.class == 'Emacs' then
os.execute( "emacsclient -e " .. '"' .. '(with-current-buffer \\"' .. client.focus.name .. '\\" (set-input-method ' .. layout_description[4] .. '))"' )
else
kbdcfg.set(n)
end
end
-- This goes into keys definition
-- Defined for all variants of the \ button - in Turkish Q there's a comma there, meh
awful.key({ "Control" }, "backslash", kbdcfg.cycle ),
-- awful.key({ "Control" }, "comma", kbdcfg.cycle ),
Емакс:
(setq frame-title-format '("%b"))