Моё знакомство с 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( {                          }, 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 (опять таки, если его нету — смело создаём)

Мой ~/.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/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *