Третья часть моего поста (предыдущую можно найти тут)
В этом кусочке назначаем кнопки мыши и клавиатуры. Небольшое примечание: для 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( { }, key_Alt_R, function () kbdcfg.switch() end),
-- Манипуляция областями экрана (перестановка клиентов)
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 ),
-- Перезапуск awesome
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
-- modkey + <номер тэга>
-- Переключиться в выбранный тэг
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),
-- modkey + Ctrl + <номер тэга>
-- Совместить выбранный тэг с текущим
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),
-- modkey + <номер тэга>
-- Переместить клиент в фокусе на выбранный тэг
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),
-- modkey + <номер тэга>
-- Переместить клиент в фокусе на выбранный тэг, оставив его и в текущем тэге
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 = "MPlayer" },
-- properties = { floating = true } },
--{ rule = { class = "pinentry" },
-- properties = { floating = true } },
--{ rule = { class = "Gimp" },
-- properties = { floating = true } },
-- Set Firefox to always map on tags number 5 of screen 1.
--{ rule = { class = "Firefox" },
-- properties = { tag = tags[1][5] } }
-- "Коньки": без рамки и плавать
{
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)
-- Enable sloppy focus
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
-- Set the windows at the slave,
-- i.e. put it at the end of others instead of setting it master.
-- awful.client.setslave(c)
-- Put windows in a smart way, only if they does not set an initial position.
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(kbdcfg.widget)
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 (опять таки, если его нету — смело создаём)
!darkgray
*background: #212121
!silver
*foreground: #C0C0C0
!black
*color0: #251f1f
*color8: #5e5e5e
!red
*color1: #eb4509
*color9: #eb4509
!green
*color2: #94e76b
*color10: #95e76b
!yellow
*color3: #ffac18
*color11: #ffac18
!blue
*color4: #46aede
*color12: #46aede
!magenta
*color5: #e32c57
*color13: #e32c57
!cyan
*color6: #d6dbac
*color14: #d6dbac
!white
*color7: #efefef
*color15: #efefef
!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. Надеюсь ничего не забыл описать.
Автор: worm2fed