Введение
В KDE есть интересная возможность - формирование меню из недавно запускавшихся приложений. В результате при следующем их запуске нет необходимости продираться через длинную цепь подменю. Я написал два скрипта, которые решают аналогичную задачу для IceWM. Идею этих скриптов можно реализовать и в других WM.
Формирование меню в IceWM
Файл главного меню в IceWM называется menu. Обычно существует два таких файла - глобальный, для всей системы, и локальный, для пользователя. Расположение глобального файла зависит от дистрибутива. При установке IceWM из исходников он обычно располагается в /usr/local/share/icewm. Локальный файл menu находится в $ICEWM_PRIVCFG или, если эта переменная не установлена, в ~/.icewm Файл menu является обычным текстовым файлом с простой структурой. Элементы меню, соответствующие программам, имеют следующий вид:
prog название_пункта_меню имя_файла_иконки командная_строка_программы
Для организации подменю используется следующая структура:
menu название_пункта_меню имя_файла_иконки { элементы подменю }
Кроме слова prog могут использоваться ключевые слова menuprog, menufile, runonce, ... (см. файл icewm-10.html, идущий с документацией к IceWM). Также с помощью слова include можно включить в меню содержимое другого файла. Вот фрагмент моего файла меню:
prog "Background options" background icebgset separator menu Недавние folder_green { include /home/Vadim/.icewm/recent.menu } # End of Недавние menu prog Терминал konsole rxvt separator prog KDevelop kdevelop.png icerrun.py kdevelop separator
Принцип функционирования скриптов
Теперь становится понятна основная идея скрипта для формирования меню из недавно запускавшихся приложений: при каждом запуске необходимо модифицировать файл меню. Можно изменять сам файл menu, но для упрощения скриптов лучше формировать специальный файл recent.menu и включить его в основной с помощью ключевого слова include. Для этого необходимо изменить формат запуска программы следующим образом:
prog название_пункта_меню имя_файла_иконки icerrun.py командная_строка_программы
Скрипт icerrun.py выполняет следующее: записывает в начало файла recent.menu командную строку, которую ему передали на выполнение, и затем исполняет её. Помимо этого, он следит за тем, чтобы в этом меню было не более 10 элементов и удаляет повторяющиеся.
Для того, чтобы IceWM перечитывал файл меню при его открытии, необходимо в настройках IceWM (файл preferences, глобальный или локальный) параметр AutoReloadMenus установить в 1.
Альтернатива icerrun.py
Для тех, кто не хочет воспользоваться скриптом, написанном на Python, могут воспользоваться bash-версией скрипта icerrun.
Заключение
Возможно IceWM и не может тягаться по функциональным возможностям с такими грандами как KDE или Gnome, которые уже давно не просто оконные менеджеры, а оконные среды (Desktop Environment), но при правильной настройке IceWM может превратится в лёгкий и удобный инструмент, способный решать множество проблем, возникающих перед вами.
Об авторе
Я работаю программистом и преподаю в Херсонском государственном техническом университете. С Linux знаком с 1999 года. Общаюсь с ним, в основном, дома. Кроме этого, я являюсь разработчиком IceWM Control Center - набора программ (в том числе и скриптов icerrun) для настройки различных параметров IceWM. Одной из программ является редактор меню, который позволяет вам формировать меню более наглядно. Этот редактор поддерживает, описанные здесь, скрипты для формирования меню недавно запускавшихся программ.