Script to launch commands in multiple tabs in KDE Konsole.
It is based on script provided in Linux Journal.
[ -r ~/path/to/konsole-tabs.sh ] && | |
. ~/path/to/konsole-tabs.sh | |
# Run multiple commands in individual tabs | |
commands_in_tabs() { | |
local cmd profile clear_first clear_cmd="" exit_new_tabs_afterwards exit_current_tab_afterwards title i | |
local sessions=() | |
: "${profile:="$(qdbus org.kde.konsole /Konsole defaultProfile)"}" | |
: "${clear_first:=1}" | |
: "${exit_new_tabs_afterwards:=0}" | |
: "${exit_current_tab_afterwards:=0}" | |
: "${reuse_current_tab:=0}" | |
# title_in_args set to 1 to load even args as title for the tab | |
# Example: | |
# commands_in_tabs command1 title1 command2 title2 ... | |
: "${title_in_args:=0}" | |
if [ $# -gt 0 ] && [ "$reuse_current_tab" = 1 ]; then | |
# wouldn't close the current tab if asked to reuse it | |
exit_current_tab_afterwards=0 | |
# create a background task to inject the first command into the current tab | |
# Double shell so that bash's job-control wouldn't polute the shell | |
( ( | |
if [ "$title_in_args" = 1 ]; then | |
qdbus org.kde.konsole "$KONSOLE_DBUS_SESSION" setTitle 0 "$2" </dev/null &>/dev/null | |
sleep 0.1 | |
qdbus org.kde.konsole "$KONSOLE_DBUS_SESSION" setTitle 1 "$2" </dev/null &>/dev/null | |
sleep 0.1 | |
fi | |
# prefix with space to avoid an entry in the history | |
qdbus org.kde.konsole "$KONSOLE_DBUS_SESSION" sendText " $1"$'\n' </dev/null &>/dev/null | |
)& ) | |
if [ "$title_in_args" = 1 ]; then | |
shift 2 | |
else | |
shift | |
fi | |
fi | |
if [ $# -eq 0 ]; then | |
return; | |
fi | |
if [ "$clear_first" = 1 ]; then | |
if [ "$exit_new_tabs_afterwards" = 1 ]; then | |
clear_cmd="HISTFILE=/dev/null; clear; " | |
else | |
clear_cmd="clear; " | |
fi | |
fi | |
# Format '<Tab Name/Title> <Profile Name> <Command>' | |
for ((i=1; i<=$#; i++)); do | |
cmd="${!i}" | |
if [ "$title_in_args" = 1 ]; then | |
let i++ | |
title="${!i}" | |
else | |
title="${cmd%% *}" | |
fi | |
if [ "$exit_new_tabs_afterwards" = 1 ]; then | |
cmd="exec ${cmd}" | |
fi | |
sessions+=("${title}" "$profile" "${clear_cmd}${cmd}") | |
done | |
konsole_start_sessions "${sessions[@]}" | |
if [ "$exit_current_tab_afterwards" = 1 ]; then | |
# close the current shell | |
exec sleep 0.1 | |
elif [ "$reuse_current_tab" = 1 ]; then | |
qdbus org.kde.konsole /Konsole prevSession </dev/null &>/dev/null | |
fi | |
} | |
# SSH on to multiple hosts in individual tabs | |
multi_ssh() { | |
local i ssh_cmds=() | |
for ((i=1; i<=$#; i++)); do | |
ssh_cmds+=("ssh ${!i}" "${!i}") | |
done | |
local clear_first exit_new_tabs_afterwards exit_current_tab_afterwards reuse_current_tab title_in_args | |
clear_first="${clear_first:-1}" \ | |
exit_new_tabs_afterwards="${exit_new_tabs_afterwards:-1}" \ | |
exit_current_tab_afterwards="${exit_current_tab_afterwards:-1}" \ | |
reuse_current_tab="${reuse_current_tab:-1}" \ | |
title_in_args=1 \ | |
commands_in_tabs "${ssh_cmds[@]}" | |
} |
Script to launch commands in multiple tabs in KDE Konsole.
It is based on script provided in Linux Journal.
# Based on http://www.linuxjournal.com/content/start-and-control-konsole-dbus | |
# Start sessions in konsole. | |
function konsole_start_sessions() | |
{ | |
local nsessions=0 | |
local i session_num | |
for ((i = 1; i <= $#; )); do | |
local name="${!i}" | |
let i++ | |
local profile="${!i}" | |
let i++ | |
local cmd="${!i}" | |
let i++ | |
session_num=$(qdbus org.kde.konsole /Konsole org.kde.konsole.Window.newSession "$profile" "$HOME") | |
sleep 0.1 | |
qdbus org.kde.konsole "/Sessions/$session_num" setTitle 0 "$name" </dev/null &>/dev/null | |
sleep 0.1 | |
qdbus org.kde.konsole "/Sessions/$session_num" setTitle 1 "$name" </dev/null &>/dev/null | |
sleep 0.1 | |
qdbus org.kde.konsole "/Sessions/$session_num" sendText "$cmd"$'\n' </dev/null &>/dev/null | |
sleep 0.1 | |
let nsessions++ | |
done | |
# Activate first session. | |
for ((; nsessions > 1; nsessions--)); do | |
qdbus org.kde.konsole /Konsole prevSession </dev/null &>/dev/null | |
done | |
} |