Моё знакомство с WM Awesome. Часть 3
Третья часть моего поста
В этом кусочке назначаем кнопки мыши и клавиатуры. Небольшое примечание:
для Mod4 + PrntScr я назначил делать скриншот выделенной области, а на
просто PtntScrn скриншот всего экрана, но второй случай не работает — не
доходят руки разобраться (для скриншотов вам понадобится установить
пакет xsnap
Назначение кнопок и комбинаций
root.buttons(awful.util.table.join(
awful.button({ }, right_button, function() main_menu:toggle() end),
awful.button({ }, plus_button, awful.tag.viewnext ),
awful.button({ }, minus_button, awful.tag.viewprev )
))
globalkeys = awful.util.table.join(
awful.key( { modkey, }, key_Left, awful.tag.viewprev ),
awful.key( { modkey, }, key_Right, awful.tag.viewnext ),
awful.key( { modkey, }, key_Esc, awful.tag.history.restore ),
awful.key( { modkey, }, key_Tab,
function()
awful.client.focus.history.previous()
if client.focus then client.focus:raise() end
end ),
awful.key( { modkey, }, key_X, function() awful.util.spawn(terminal) end ),
awful.key( { modkey, }, key_R, function() bottom_prompt_box[mouse.screen]:run() end ),
awful.key( { }, key_Home, function() awful.util.spawn_with_shell("google-chrome-stable") end ),
awful.key( { modkey, "Control" }, key_R, awesome.restart),
awful.key( { modkey }, key_F1, function () awful.util.spawn('slimlock') end),
awful.key( { }, key_Print,
function () awful.util.spawn_with_shell("DATE=`date +%d%m%Y_%H%M%S`; xsnap -file $HOME/Snapshots/snap$DATE") end),
awful.key( { modkey }, key_Print,
function () awful.util.spawn_with_shell("DATE=`date +%d%m%Y_%H%M%S`; xsnap -nogui -file $HOME/Snapshots/snap$DATE") end),
awful.key( { }, key_Vol_Up, function () volumecfg.up() end),
awful.key( { }, key_Vol_Down, function () volumecfg.down() end),
awful.key( { }, key_Mute, function () volumecfg.toggle() end)
)
clientkeys = awful.util.table.join(
awful.key( { modkey, }, key_F, function(c) c.fullscreen = not c.fullscreen end ),
awful.key( { modkey, "Shift" }, key_C, function(c) c:kill() end ),
awful.key( { modkey, "Control" }, key_Space, awful.client.floating.toggle ),
awful.key( { modkey, "Control" }, key_Return, function(c) c:swap( awful.client.getmaster() ) end ),
awful.key( { modkey, }, key_O, awful.client.movetoscreen ),
awful.key( { modkey, }, key_T, function(c) c.ontop = not c.ontop end ),
awful.key( { modkey, }, key_N,
function(c)
c.minimized = true
end ),
awful.key( { modkey, }, key_M,
function(c)
c.maximized_horizontal = not c.maximized_horizontal
c.maximized_vertical = not c.maximized_vertical
end )
)
Здесь определены некоторые комбинации для тегов, роли и сигналы.
Например пиджин у меня открывается только на 4 теге, а в сигнала я
прописываю — отображать у окон кнопку развернуть, закрыть, иконку и
заголовок окна.
Комбинации для окон, правила и сигналы
for i = 1, 9 do
globalkeys = awful.util.table.join( globalkeys,
awful.key({ modkey }, "#" .. i + 9,
function()
local screen = mouse.screen
local tag = awful.tag.gettags(screen)[i]
if tag then
awful.tag.viewonly(tag)
end
end),
awful.key({ modkey, "Control" }, "#" .. i + 9,
function()
local screen = mouse.screen
local tag = awful.tag.gettags(screen)[i]
if tag then
awful.tag.viewtoggle(tag)
end
end),
awful.key({ modkey, "Shift" }, "#" .. i + 9,
function()
local tag = awful.tag.gettags(client.focus.screen)[i]
if client.focus and tag then
awful.client.movetotag(tag)
end
end),
awful.key({ modkey, "Control", "Shift" }, "#" .. i + 9,
function()
local tag = awful.tag.gettags(client.focus.screen)[i]
if client.focus and tag then
awful.client.toggletag(tag)
end
end)
)
end
clientbuttons = awful.util.table.join(
awful.button( { }, left_button, function(c) client.focus = c; c:raise() end),
awful.button( { modkey }, left_button, awful.mouse.client.move),
awful.button( { modkey }, right_button, awful.mouse.client.resize)
)
root.keys(globalkeys)
awful.rules.rules = {
{
rule = { },
properties = { border_width = beautiful.border_width,
border_color = beautiful.border_normal,
focus = awful.client.focus.filter,
keys = clientkeys,
buttons = clientbuttons}
},
{
rule = { class = "Conky"},
properties = { border_width = 0, floating = true }
},
{
rule = { instance = "Pidgin" },
properties = { tag = tags[1][4], floating = false, maximized_horizontal = false, maximized_vertical = false }
},
{
rule = { instance = "Skype" },
properties = { floating = true, maximized_horizontal = false, maximized_vertical = false }
}
}
client.connect_signal("manage",
function (c, startup)
c:connect_signal("mouse::enter",
function(c)
if awful.layout.get(c.screen) ~= awful.layout.suit.magnifier
and
awful.client.focus.filter(c)
then
client.focus = c
end
end)
if
not startup
then
if
not c.size_hints.user_position
and
not c.size_hints.program_position
then
awful.placement.no_overlap(c)
awful.placement.no_offscreen(c)
end
end
end)
client.connect_signal("focus",
function(c)
c.border_color = beautiful.border_focus
local left_layout = wibox.layout.fixed.horizontal()
left_layout:add(awful.titlebar.widget.iconwidget(c))
local right_layout = wibox.layout.fixed.horizontal()
right_layout:add(awful.titlebar.widget.maximizedbutton(c))
right_layout:add(awful.titlebar.widget.closebutton(c))
local middle_layout = wibox.layout.flex.horizontal()
local title = awful.titlebar.widget.titlewidget(c)
title:set_align("center")
middle_layout:add(title)
local layout = wibox.layout.align.horizontal()
layout:set_left(left_layout)
layout:set_right(right_layout)
layout:set_middle(middle_layout)
awful.titlebar(c):set_widget(layout)
awful.titlebar(c, {size = 18})
end)
client.connect_signal("unfocus",
function(c)
c.border_color = beautiful.border_normal
awful.titlebar(c, {size = 18})
end)
Переключение раскладок.
Сразу скажу, что стоит откатиться xkbcomp до версии 1.2.3, так как в
1.2.4 есть баг (при переключении раскладки, не работают кнопки мыши)
Про раскладку вообще, можно добавить реализацию как это в gentoo wiki
написанно, но тогда у нас не буду работать горячии клавиши (для
системных мы указывали коды клавиш, так что это нам не страшно), а вот
такие как ctrl + C и т.д. работать не будут.
в новых версиях Xorg сервера убрали xorg.conf, теперь конфигурация лежит в другом месте. Создадим директорию
sudo mkdir /etc/X11/xorg.conf.d
И в ней создадим 2 файла, 01-keyboard-layout.conf и 01-enable-pointerkeys.conf
В первом:
Section "InputClass"
Identifier "keyboard-layout"
MatchIsKeyboard "on"
Option "XkbLayout" "us,ru"
Option "XkbOptions" "grp:ctrl_shift_toggle,terminate:ctrl_alt_bksp
EndSection
Перезапуск X сервера комбинацией ctrl + alt + backspace и смена раскладки с помощью ctrl + shift
После смены раскладки у нас по умолчанию отключаются кнопки мыши, по
этому для их включения запишем во втором (при версии xkbcomp-1.2.4 это
не работает):
Section "InputClass"
Identifier "Keyboard Defaults"
MatchIsKeyboard "yes"
Option "XkbOptions" "keypad:pointerkeys"
EndSection
Теперь сделаем приятным для глаз наш urxvt, для этого отредактируем
файлик ~/.Xdefaults (опять таки, если его нету — смело создаём)
Мой ~/.Xdefaults!darkgray
*background:
!silver
*foreground:
!black
*color0:
*color8:
!red
*color1:
*color9:
!green
*color2:
*color10:
!yellow
*color3:
*color11:
!blue
*color4:
*color12:
!magenta
*color5:
*color13:
!cyan
*color6:
*color14:
!white
*color7:
*color15:
!save 5000 lines
URxvt*saveLines: 5000
!left button
URxvt.matcher.button: 1
!default brauser google chrome
URxvt.urlLauncher: google-chrome-stable
!underline links
URxvt.underlineURLs: true
!
URxvt.keysym.M-u: perl:url-select:select_next
!disabled button 'new tab'
URxvt.tabbed.new-button:no
!?
URxvt.tabbed.tabbar-fg: 15
!?
URxvt.tabbed.tabbar-bg: 8
!?
URxvt.tabbed.tab-fg: 8
!?
URxvt.tabbed.tab-bg: 14
Rxvt.font: -misc-fixed-medium-r-normal--15-140-75-75-c-90-iso8859-1
URxvt.boldFont: -misc-fixed-bold-r-normal--15-140-75-75-c-90-iso8859-1
!disable scrollbar
URxvt*scrollBar: false
В итоге получаем приятную для глаз цветовую схему нашего терминала.
В итоге получаем вот такую приятную и весьма удобную систему:
Конечно я не достиг такого уровня, как unlogic и мой конфиг ещё можно
совершенствовать до бесконечности, но я получил удобную и
работоспособную систему.
P.S. В emacs у меня цветовая схема monokai.
P.P.S. Надеюсь ничего не забыл описать.
http://habrahabr.ru/post/214471/
|