Медленно, но верно облагораживая свое рабочее окружение, подбираю софт под собственные нужды. И все больше программ перекочевывают в консоль - они удобны, быстры, интерфейс не перегружен всякими свистелками... Да что я тут рассказываю.
В итоге сейчас имею некий набор консольных программ, которые активно использую. Запускаю я их, как Вы могли догадаться, в Yakuake. И вот решил немного упростить себе жизнь, автоматизировав некоторые рутинные операции: создание нового таба, задание табу понятного имени, ну и, собственно, запуск в созданном табе нужного приложения.
Задача: кликом по ярлыку/сочетанием клавиш/[подставить своё]:
а) запускать в новой вкладке Yakuake нужное приложение
б) если вкладка приложения уже есть, но оно было по какой-то причине закрыто, запускать его в ней.
в) если/когда приложение уже запущено - делать вкладку с ним активной.
с) открывать окно Yakuake, если оно скрыто.
Итак, поехали!
Первым делом создаем в домашней директории каталог
Далее добавляем в переменную PATH путь к нашему каталогу, чтоб можно было обращаться к скриптам напрямую, без необходимости указывать полный путь. Для этого в файл
Ну а теперь можно помещать в эту папку любые скрипты собственного написания :). ...так, на будущее.
Сам скрипт yakurun на bash:
Создаем, если еще не существует, файл
Теперь остается добавить xbindkeys в автозапуск и перезайти в систему. Или же просто (пере)запустить xbindkeys.
В итоге сейчас имею некий набор консольных программ, которые активно использую. Запускаю я их, как Вы могли догадаться, в Yakuake. И вот решил немного упростить себе жизнь, автоматизировав некоторые рутинные операции: создание нового таба, задание табу понятного имени, ну и, собственно, запуск в созданном табе нужного приложения.
Задача: кликом по ярлыку/сочетанием клавиш/[подставить своё]:
а) запускать в новой вкладке Yakuake нужное приложение
б) если вкладка приложения уже есть, но оно было по какой-то причине закрыто, запускать его в ней.
в) если/когда приложение уже запущено - делать вкладку с ним активной.
с) открывать окно Yakuake, если оно скрыто.
Итак, поехали!
Первым делом создаем в домашней директории каталог
.bin
(название может быть любым, какое больше нравится). Именно там будут лежать пользовательские скрипты. Каталог скрытый - чтоб не мешался.Далее добавляем в переменную PATH путь к нашему каталогу, чтоб можно было обращаться к скриптам напрямую, без необходимости указывать полный путь. Для этого в файл
~/.bashrc
(или другой, специфичный для используемой оболочки) нужно встравить строку:export PATH="${PATH}:/home/UserName/.bin"
, где UserName - имя пользователя.Ну а теперь можно помещать в эту папку любые скрипты собственного написания :). ...так, на будущее.
Сам скрипт yakurun на bash:
#!/bin/bash #Имя таба и название бинарника NAME="${1}" EXEC="${2}" if [[ "x${NAME}" == "x" || "x${EXEC}" == "x" ]]; then echo "Usage: yakurun <tabname> <appname>" exit fi #Получаем список открытых сессий (фактически - табов) SESSIONS=`qdbus org.kde.yakuake /yakuake/sessions sessionIdList` #Заменяем запятые на пробелы SESSIONS="${SESSIONS//,/ }" #Считаем, что еще не открыто таба с указанным в переменной NAME именем. TAB_EXISTS=0 #Перебираем все открытые табы в поисках таба с именем NAME for SESSION in ${SESSIONS}; do SNAME=`qdbus org.kde.yakuake /yakuake/tabs tabTitle ${SESSION}` if [ "x${SNAME}" == "x${NAME}" ]; then #Таб найден TAB_EXISTS=1 #Получаем идентификатор сессии для найденного таба TERMINAL=`qdbus org.kde.yakuake /yakuake/sessions terminalIdsForSessionId ${SESSION}` #Проверяем, есть ли запущенные текущим пользователем процессы с именем EXEC APP=`ps u | awk '{ print $11; }' | grep "${EXEC}"` if [ "x${APP}" != "x${EXEC}" ]; then #Если ничего не найдено, запускаем в этом табе приложение EXEC qdbus org.kde.yakuake /yakuake/sessions runCommandInTerminal ${TERMINAL} "${EXEC}" fi #Делаем таб активным qdbus org.kde.yakuake /yakuake/sessions raiseSession ${SESSION} break fi done #Если еще не было открыто таба с именем NAME if [ ${TAB_EXISTS} = 0 ]; then #Открываем новый таб qdbus org.kde.yakuake /yakuake/sessions addSession SESSION=`qdbus org.kde.yakuake /yakuake/sessions activeSessionId` TERMINAL=`qdbus org.kde.yakuake /yakuake/sessions terminalIdsForSessionId ${SESSION}` #Переименовываем его qdbus org.kde.yakuake /yakuake/tabs setTabTitle ${SESSION} "${NAME}" #Запускаем в нем приложение EXEC qdbus org.kde.yakuake /yakuake/sessions runCommandInTerminal ${TERMINAL} "${EXEC}" fi #Проверяем, открыто ли окно Yakuake ACTIVE=`qdbus org.kde.yakuake /yakuake/MainWindow_1 com.trolltech.Qt.QWidget.isActiveWindow` if [ ${ACTIVE} == 'false' ]; then #Если нет - делаем его видимым qdbus org.kde.yakuake /yakuake/window toggleWindowState fiТеперь, в качестве примера, настроим сочетания клавиш для запуска/открытия weechat (Meta + c) и MOC (Meta + m) в Yakuake:
Создаем, если еще не существует, файл
~/.xbindkeysrc
следующего содержания:#Запуск/открытие weechat в yakuake "/home/UserName/.bin/yakurun WeeChat weechat-curses" Mod2+Mod4 + c #Запуск/открытие MOC в yakuake "/home/UserName/.bin/yakurun MOCP mocp" Mod2+Mod4 + mНе забудьте заменить UserName на имя пользователя.
Теперь остается добавить xbindkeys в автозапуск и перезайти в систему. Или же просто (пере)запустить xbindkeys.