Tags Description/ru

Общие положения
Тег - это расширенное понятие виртуальных рабочих столов. В переводе с английского означает ярлык, прикреплять ярлык, связывать.

Для понятия того, что же такое тег, необходимо ввести понятие клиента - это окно приложения(а у одного приложения может быть несколько окон, ярким примером могут являться Интернет-мессенджеры, GIMP.). В отличие от других WM, где окно помещается на рабочий стол, в Awesome Вам необходимо присвоить клиенту тег/теги на которых он будет отображаться.

По умолчанию, все окна клиентов автоматически помечаются тегом на котором открыты. Но вот после этого Вы можете выбрав какое то одно окно приложения пометить еще одним тегом, в результате он будет отображаться на 2х тегах сразу, с учетом выбранной для этого тега схемы.

Например, я открыл Pidgin(IM) на 6 теге, но при его открытии, получается 2 и более окна(собственно чат и контакт-лист), а работаю я на 1м теге, и не хочу постоянно переключаться туда сюда. Если бы я привязал/открыл Pidgin к 1му тегу, у меня бы на нем было 2 окна, одно из которых мне сейчас не нужно, поэтому я просто делаю активным окно чата и помечаю его 1м тегом, в результате к основным рабочим окнам я могу еще и вести переписку.

Сделать это можно следующим образом: Mod4 + Shift + Control + 1-9		Пометить/снять пометку клиента тегом по номеру. Mod4 + Button3 на имени тега		Пометить текущий клиент этим тегом, либо убрать пометку этим тегом. где Mod4 - это обычно Win клавиша Button3 - правая клавиша мыши

А еще можно одновременно отобразить клиенты с 2х тегов. Например, пишите Вы код в редакторе и для этого необходимо смотреть историю из терминала, чтобы не ошибиться или посмотреть/скопировать что то из браузера. Чем открывать их еще раз в этом же теге, или постоянно переключаться туда сюда, проще временно отобразить 2-й тег. При этом будут отображены все клиенты привязанные к этому тегу. Mod4 + Control + 1-9		Включить/выключить тег по номеру. Button3 на имени тега	Включить/выключить тег по номеру.

Управление
Button1 на имени тега				- Выбрать тег для отображения. Button4, Button5 на имени тега 		- Выбрать предыдущий или следующий тег. Mod4 + Button1 на имени тега			- Переместить текущий клиент на этот тег. Mod4 + Button3 на имени тега			- Отобразить/скрыть текущий клиент на этом теге. Button3 на имени тега				- Добавить текущий тег для просмотра. Mod4 + 1-9					- Переключиться на тег по номеру (от 1 до 9). Mod4 + Escape					- Выбрать предыдущий выбранный набор тегов. Mod4 + Control + 1-9				- Включить/выключить тег по номеру. Mod4 + Shift + 1-9				- Пометить клиента тегом по номеру. Mod4 + Shift + Control + 1-9			- Пометить/снять пометку клиента тегом по номеру. Mod4 + Shift + F1-9				- Пометить все отмеченные клиенты тегом по номеру.

Где Button1	- левая кнопка мыши Button3		- правая кнопка мыши Button4		- дополнительные кнопки мыши Button5		- дополнительные кнопки мыши

Изучаем rc.lua
Выглядят теги следующим образом:

Здесь, красным выделен taglist, зеленым - активный тег с открытыми клиентами, синим - неактивный тег на котором открыты клиенты. Все остальные это неактивные теги на которых не открыто ни одного приложения. Теги (по умолчанию) пронумерованы от 1 до 9.

Переименование тегов
Если изучить стандартный файл rc.lua, то мы увидим следующий код, инициализирующий теги (код идентичен в 3.4 и 3.5): -- Здесь мы можем настроить названия наших тегов, присвоить каждому тегу свою схему, или даже присвоить каждому экрану разные теги. Если вы не знаете что такое схемы(Layout) прочтите эту статью.

Для начала заменим цифры на что то более понятное для нас: -- После внесения изменений, не забудьте перезапустить Awesome (mod4+Ctrl+r).

Символьные названия
Если вас не устраивают длинные названия тегов(например вы экономите место для виджетов), то в этом случае можно использовать любые Unicode символы (подобрать можно здесь): -- {{{ Tags -- Define a tag table which hold all screen tags. tags = {} for s = 1, screen.count do   -- Each screen has its own tag table. tags[s] = awful.tag({ "♨", "⌨", "⚡", "✉", "☕", "❁", "☃", "☄", "⚢" }, s, layouts[1]) -- tags[s] = awful.tag({ "➊", "➋", "➌", "➍", "➎", "➏", "➐", "➑", "➒"  }, s, layouts[1])		--раскоментируйте если -- tags[s] = awful.tag({ "☭", "⌥", "✇", "⌤", "☼", "⌘","⍜", "✣","☕"  }, s, layouts[1])			--какой то из наборов -- tags[s] = awful.tag({ "  α  ", "  β  ", "  ζ  ", "  Θ  ", "  Ξ  ", "  ς  ", "  ψ  "  }, s, layouts[1])	--вам приглянулся -- tags[s] = awful.tag({ "⠐", "⠡", "⠪", "⠵", "⠻", "⠿" }, s, layouts[1])						-- end

Работа с несколькими экранами
Если вы используете несколько экранов и хотите, чтобы на каждом экране были свои собственные теги, переделайте код следующим образом: --

Подробнее по работе с несколькими экранами читайте раздел по настройке экранов

Иконки вместо названий
Если использование названий или символов вас не устраивает, то можно настроить отображение иконок вместо названий: -- Для того, чтобы этот код мог работать необходимо назначить эти переменные в файле темы theme.lua, который должен находится в папке ~/.config/awesome/themes. Если у вас этой папки еще нет сделайте ее и скопируйте в нее стандартные темы, которые в дальнейшем будете изменять: mkdir -p ~/.config/awesome/themes cp -R /usr/share/awesome/themes/* ~/.config/awesome/themes/ Затем откройте файл theme.lua из папки ~/.config/awesome/themes/default и добавьте переменные (только перед этим убедитесь, что эти файлы у вас существуют, или назначьте свои): --Tags Icon theme.mainicon = "/usr/share/icons//usr/share/icons/gnome/48x48/places/user-home.png" theme.wwwicon = "/usr/share/icons//usr/share/icons/gnome/48x48/emblems/emblem-web.png" theme.officeicon = "/usr/share/icons//usr/share/icons/gnome/48x48/apps/accessories-text-editor.png" theme.imicon = "/usr/share/icons//usr/share/icons/gnome/48x48/emotes/face-smile.png" theme.mediaicon = "/usr/share/icons//usr/share/icons/gnome/48x48/devices/audio-card.png" И замените код инициализации темы на следующий: beautiful.init("~/.config/awesome/themes/default/theme.lua") Кстати, обратите внимание, что вы можете одновременно определить и иконки и текст, и они будут отображаться. Но если вы определите в theme.lua theme.taglist_disable_icon = true то будет отображен только текст, а если установите в свойство каждого тега (по моему мнению здесь какая то недоработка), в rc.lua: awful.tag.setproperty(tags[s][i], "icon_only", true) Подробнее с настройкой тем и установке иконок для ваших нужд вы можете ознакомиться в статье Темы Beautiful.

Изменение цветов тега
По умолчанию для активного тега используется серый цвет, с белым текстом, а для неактивного белый текст на черном фоне. Но если вы настраиваете свою тему, или вам просто не нравятся стандартные цвета, то можно их переопределить. Для этого откройте файл theme.lua в вашей папке с темами (например ~/.config/awesome/themes/default) и добавьте туда код(по умолчанию эти переменные не определены): theme.taglist_bg_focus = "#222222"		--цвет фона активного тега theme.taglist_fg_focus = "#7FFF00"		--цвет текста активного тега

theme.taglist_bg_occupied = "#222222"		--цвет фона неактивного тега в котором открыты приложения theme.taglist_fg_occupied = "#0000CD"		--цвет текста неактивного тега в котором открыты приложения

theme.taglist_fg_urgent = "#ffffff"            --цвет текста "срочного" тега theme.taglist_bg_urgent = "#ff0000             --цвет фона "срочного" тега

В Awesome 3.5 появилась также возможность настраивать и цвета тегов в котором нет открытых приложений, для этого используются переменные: theme.taglist_bg_empty theme.taglist_fg_empty   --эту переменную лучше не использовать, есть небольшой баг

Помимо всего, для настройки внешнего вида, можно настроить свой шрифт именно для тегов. По умолчанию используются настройки шрифта из переменной theme.font. Но если вы хотите использовать другой шрифт для тегов, не трогая все остальное, определите и назначьте переменную : theme.taglist_font = "sans 8"

Убираем/изменяем квадраты на тегах
Для удаления квадратов, самый простой способ, это закомментировать следующие переменные в файле theme.lua theme.taglist_squares_sel theme.taglist_squares_unsel В Awesome 3.5 появилась возможность устанавливать значки на теги в которых не запущенны приложения, для этого в файле theme.lua нужно определить переменные: theme.taglist_squares_sel_empty theme.taglist_squares_unsel_empty А вообще, заменяя и/или устанавливая указанные выше файлы можно получить все что вы хотите. Ведь согласитесь, одними квадратами наша фантазия не ограничивается, это могут быть треугольники, подчеркивание и т.д., т.е. все ограничивается только вашей фантазией.

Запуск приложения на определенном теге
Иногда возникает необходимость привязать приложение к определенному тегу, например, чтобы браузер открывался на 2 теге, или мессенджер на 4, для этого можно использовать правила(rules).

Для этого найдите секцию awful.rules.rules. По умолчанию, там уже есть код, и добавьте в эту таблицу свои правила, например: -- Устанавиваем Firefox на 2м теге 1го экрана { rule = { class = "Firefox" }, properties = {tag = tags[1][2]}}, -- Устанавиваем VLC на 5й тег последнего экрана(например у нас там настроен полный экран) { rule = { name = "Vlc" },   properties = {tag = tags[screen.count][5]}}, -- Устанавиваем Thunar на 4й тег 1 экрана и сразу переключаемся на него { rule = { class = "Thunar" }, properties = { tag = tags[1][4], switchtotag = true } }, -- Устанавиваем Xterm как плавающего окна с фиксируемой позицией { rule_any = { class = "XTerm", "UXTerm" }, properties = {floating = true}, callback = function(c) c:geometry({x=0, y=0}) end}, Более подробно ознакомиться с правилами вы можете прочитав статью awfu.rules.

Настройка схемы для определенного тега
Иногда при настройке, хочется чтобы например мастер-зона занимала треть экрана, а не половину, или было 2 клиента в мастер-зоне, все этом можно легко настроить: -- Понятия «стэк-зона» и «мастер-зона» используются в тайлинговых схемах и изначают:
 * awful.tag.setmwfact			--устанавливает ширину мастер-зоны
 * awful.tag.setnmaster			--устанавливает число окон в мастер-зоне
 * awful.tag.seticon			--устанавливает иконку тегу
 * awful.tag.setncol			--устанавливает число колонок стек-зоны
 * awful.tag.setproperty			--устанавливает любые из перечисленных выше(напрямую)
 * мастер-зона- область схемы tile куда по умолчанию открываются новые клиенты;
 * стек-зона- область схемы tile куда сдвигаются уже открытые клиенты при запуске нового.

Полный перечень доступных функций приведен в официальном API(eng).

Убираем лишние пробелы между тегами
Код в этой части работает в Awesome 3.5, его можно переделать и под 3.4, но изменений будет достаточно много.

Когда вы используете иконки вместо текста в названии тегов, то образуются пробелы сбоку от иконки, выглядящие не очень то красиво. По умолчанию при использовании текста в названии тега, слева и справа добавляется по 4 пикселя, для разделения текста, но вот для иконок, этот подход выглядит не лучшим образом. Поэтому эту проблему можно (и нужно ) решить. Заодно появится возможность редактировать расстояние в тексте между вашими виджетами.

Итак для решения вопроса нам потребуется 2 файла ~/.config/awesome/awful/widget/common.lua и taglist.lua из этой же папки. Рекомендую скопировать файлы библиотек в пользовательский каталог, чтобы не работать по root. Да и если вы что то испортите, можно будет восстановить. cp -R /usr/share/awesome/lib ~/.config/awesome Итак, для начала откройте ~/.config/awesome/awful/widget/common.lua, найдите в ней функцию common.list_update, и переопределите ее следующим образом: function common.list_update(w, buttons, label, data, objects, left_margin, right_margin) Здесь мы добавили левый и правый отсупы. Затем найдите в этой же функции следующий код: else ib = wibox.widget.imagebox tb = wibox.widget.textbox bgb = wibox.widget.background m = wibox.layout.margin(tb, 4, 4) И замените его на: else local m_left = left_margin or 4			--инициализируем левый отступ local m_right = right_margin or 4			--инициализируем правый отступ ib = wibox.widget.imagebox tb = wibox.widget.textbox bgb = wibox.widget.background m = wibox.layout.margin(tb, m_left, m_right)	--меняем здесь стандартный вызов Здесь, мы подстраховываемся, если аргументы отступа не переданы функции, то они устанавливаются в стандартные значения. Актуально будет для вызовов из других, не переделанных функциях (мы ведь не хотим переделывать весь код )) ).

Открываем ~/.config/awesome/awful/widget/taglist.lua. Затем находим функцию function taglist_update и заменяем ее определение на следующий код: local function taglist_update(s, w, buttons, filter, data, style, update_function, ml, mr)	--добавление переменных отступа Затем в этой же функции, найдите вызов update_function(w, buttons, label, data, tags) и замените его на: update_function(w, buttons, label, data, tags, ml, mr)					--добавление к вызову переменных отсупа Затем в этом же файле находим function taglist.new и добавляем в ее начало: local ml, mr = 0,0		--добавление переменных отступа и инициализация И вот здесь вы можете установить свои отсупы, я для иконок выбрал 0, чтобы они были плотно друг к другу, если выбрать другие значения, то отступы появляются с правой стороны, игнорируя левую.

Затем найдите код: if s == screen then taglist_update(s, w, buttons, filter, data, style, uf) И замените его на: if s == screen then taglist_update(s, w, buttons, filter, data, style, uf, ml, mr)	--добавление к вызову переменных отсупов тега Все готово, перезапускам Awesome!

Разное
По умолчанию для хранения истории переключения между тегами используется переменная tag.history из файла awful/tag.lua. История переключения ограничена 20. По большому счету обычно больше 3х и не нужно. Но если вам все же нужно больше переопределите переменную tag.history.limit Кстати, переменная tag.history полностью сохраняется в памяти, т.е. при перезапуске Awesome история будет потеряна. Для переключения по истории тегов используется комбинация клавиш: Mod4 + Escape					- Выбрать предыдущий выбранный набор тегов.

Динамические теги
Несмотря на то, что теперь Awesome поддерживает создание, удаление, переименование тегов на лету, работать с этими функциями не очень удобно (приходится писать просто море кода), для решения этой проблемы пользователями были созданы библиотеки динамических тегов: Дополнительные настройки:
 * Shifty - простая в настройке библиотека для динамического присваивания тегов приложениям.
 * Eminent - Легкая библиотека динамических тегов(wmii подобная), не требующая каких либо изменений в rc.lua
 * tyrannical - Конфигурационная система для awful определяющая динамические теги и приложения(духовный наследник Shifty)
 * Управление тегами в стиле WMII - имитация управления тегами, реализованного в WMII.
 * Сохранение мультитегового состояния - Позволяет вам запомнить мультитеговое отображение, и переключаться между тегами с сохранением этого состояния.