Медленно, но верно облагораживая свое рабочее окружение, подбираю софт под собственные нужды. И все больше программ перекочевывают в консоль - они удобны, быстры, интерфейс не перегружен всякими свистелками... Да что я тут рассказываю.
В итоге сейчас имею некий набор консольных программ, которые активно использую. Запускаю я их, как Вы могли догадаться, в 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.