For some reason, you have to find yourself when running from a konsole window now.
So the code for opening tabs now has to:
So the code for opening tabs now has to:
- Grab a list of all the fricking windows (getWindowId()/getWindows() below) to find my own id.
- Grab a list of all the fricking sessions (getSessions() below)
- Open a new tab
- Grab the session list AGAIN and compare it to find the one we just opened.
- Only then are you able to send a command to that tab.
Hope you can read some shell script, because this is almost too painful to explain.
#!/usr/bin/env bash
# konsole dbus functions
getWindows() {
windows=`qdbus org.kde.konsole /konsole org.freedesktop.DBus.Introspectable.Introspect |grep MainWindow | cut -d \" -f 2`
echo ${windows}
}
getSessions() {
sessions=`qdbus org.kde.konsole /Sessions org.freedesktop.DBus.Introspectable.Introspect |grep "node name" | cut -d \" -f 2`
echo ${sessions}
}
getWindowId() {
windows=`getWindows`
for i in $windows
do
id=`qdbus org.kde.konsole /konsole/$i org.kde.KMainWindow.winId`
if [ "${WINDOWID}" -eq "$id" ]; then
echo $i
fi
done
}
findNewSession() {
old="$@"
new=`getSessions`
for t in $new; do
grep -q $t <(echo $old)
if [ "$?" -eq "1" ]; then
echo $t
fi
done
}
sshopentabs () {
boxlist=$1
box_name=$2
comm='ssh -o StrictHostKeyChecking=no -o CheckHostIP=no -o UserKnownHostsFile=/dev/null'
slot=1
for i in $boxlist
do
sessions=`getSessions`
echo ${KONSOLE_DBUS_SERVICE}
newtab
j=`findNewSession $sessions`
if [ "${box_name}" -eq "" ]; then
renametab ${j} $i
else
renametab ${j} "${box_name} slot ${slot}"
fi
sendtab ${j} "${comm} root@${i}"
let slot=$slot+1
done
return ${j}
}
newtab () {
id=`getWindowId`
dbus-send --session --dest=${KONSOLE_DBUS_SERVICE} --type=method_call --print-reply /konsole/$id org.kde.KMainWindow.activateAction string:"new-tab"
}
renametab () {
sessionno=$1
tabname=$2
session="/Sessions/${sessionno}"
dbus-send --session --dest=${KONSOLE_DBUS_SERVICE} --type=method_call --print-reply ${session} org.kde.konsole.Session.setTabTitleFormat int32:0 string:"$tabname"
dbus-send --session --dest=${KONSOLE_DBUS_SERVICE} --type=method_call --print-reply ${session} org.kde.konsole.Session.setTabTitleFormat int32:1 string:"$tabname"
dbus-send --session --dest=${KONSOLE_DBUS_SERVICE} --type=method_call --print-reply ${session} org.kde.konsole.Session.setTitle int32:1 string:"$tabname"
}
sendtab () {
sessionno=$1
cmd=$2
session="/Sessions/${sessionno}"
dbus-send --session --dest=${KONSOLE_DBUS_SERVICE} --type=method_call --print-reply ${session} org.kde.konsole.Session.sendText string:"$cmd^M"
}
closetab () {
dbus-send --session --dest=${KONSOLE_DBUS_SERVICE} --type=method_call --print-reply ${KONSOLE_DBUS_SESSION} org.kde.konsole.Session.sendText string:"exit^M"
}
No comments:
Post a Comment