В этом кусочке назначаем кнопки мыши и клавиатуры. Небольшое примечание: для 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. Надеюсь ничего не забыл описать.
ссылка на оригинал статьи http://habrahabr.ru/post/214471/
Добавить комментарий