Yakuake — это такой весьма удобный терминал для KDE, прячущийся подобно консоли Quake. Задача — запустить в нем некую программу в отдельной вкладке и в конкретном каталоге. В целом решение взято из поста на Gentoo.ru, однако я убрал проверку существования вкладки (всегда открывается новая), добавил переход в нужный каталог, ну и использовал более понятные параметры командной строки, для чего вместо bash-скрипта написал короткую программу на Ruby. Код можно найти под именем yakurun
в моей свалке скриптов на GitHub, или далее в этом посте.
#!/usr/bin/ruby -Ku require 'optparse' name = nil path = nil program = nil opts = OptionParser.new if $stdout.stat.chardev? opts.banner = "\e[1mUsage:\e[0m yakurun [options] [program with args]" opts.separator '' opts.separator "\e[1mOptions:\e[0m" else opts.banner = 'Usage: yakurun [options] [program with args]' opts.separator '' opts.separator 'Options:' end opts.on '-n', '--name', '-t', '--tab', '=NAME', String, 'Name of tab or session.' do |value| name = value end opts.on '-p', '--path', '-d', '--directory', '=PATH', String, 'Working path for started program.' do |value| path = value end opts.on '-?', '-h', '--help', 'Show short help and exit.' do puts opts.to_s exit end args = opts.parse ARGV program = args.join ' ' if args.length > 0 if name == nil && path == nil && program == nil puts opts.to_s exit end name ||= args[0] || path `qdbus org.kde.yakuake /yakuake/sessions addSession` session = `qdbus org.kde.yakuake /yakuake/sessions activeSessionId`.chomp terminal = `qdbus org.kde.yakuake /yakuake/sessions \ terminalIdsForSessionId #{session}`.chomp `qdbus org.kde.yakuake /yakuake/tabs setTabTitle #{session} "#{name}"` if path `qdbus org.kde.yakuake /yakuake/sessions runCommandInTerminal \ #{terminal} "cd #{path}"` end if program `qdbus org.kde.yakuake /yakuake/sessions runCommandInTerminal \ #{terminal} '#{program}'` end active = `qdbus org.kde.yakuake /yakuake/MainWindow_1 \ com.trolltech.Qt.QWidget.isActiveWindow`.chomp if active == 'false' `qdbus org.kde.yakuake /yakuake/window toggleWindowState` end
Комментариев нет:
Отправить комментарий