Sample Header Ad - 728x90

Expand KDE activities concept to the shell

5 votes
2 answers
3404 views
Sometimes, I use KDE, and one of the things that I like the most in KDE 4 is the activity concept. At work, it is very useful because I often work on several different projects during one day. Switching to another activity enables me to change the widgets, so that I can have access to folders related to the current project, for instance. I've decided to use this concept in the shell, so I have coded a small bash function called "switch", which sets aliases useful for the current project, e.g. alias cdwww=~/public_html/current_project/www , and so on. **My question is** : Is there a way I can synchronise KDE activities with shell activities, that is calling 'switch myproj' on every opened terminal when switching to activity 'myproj' through KDE and *vice versa* (bonus question)? **Another question** : how do I make my newly created aliases work in all consoles? Is there a way I can detect every opened terminal in konsole or in gnome-terminal and execute my function in it? EDIT: here is the switch function, located at the end of my .bashrc file, feel free to comment: function switch() { if [ ! -d ~/.switch ] then mkdir ~/.switch fi if [ ! -f ~/.switch/proj.save ] then touch ~/.switch/proj.save fi echo "$1" > ~/.switch/proj.save case $1 in meddispar ) echo "Switching to meddispar..." echo "setting cdproj alias" alias cdproj="cd ~/public_html/onp/" echo "setting cdwww alias" alias cdwww="cd ~/public_html/onp/www/" echo "setting cc alias" alias cc="cdwww && php bin/php/ezcache.php --clear-all --purge && cd -" ;; darjeeling ) echo "Switching to darjeeling..." echo "setting cdproj alias" alias cdproj="cd ~/public_html/darjeeling/" echo "setting cdwww alias" alias cdwww="cd ~/public_html/darjeeling/www/" echo "setting cc alias" alias cc="rm -rf ~/public_html/darjeeling/www/var/cache/*" ;; * ) echo "'$1'? WTF?" rm ~/.switch/proj.save ;; esac } if [ -f ~/.switch/proj.save ] then switch cat ~/.switch/proj.save fi As per Gilles' answer, here is what I have got: greg@tiny :) ~ > qdbus |ack ctivity org.kde.ActivityController-1949 org.kde.ActivityManager greg@tiny :) ~ > qdbus org.kde.ActivityManager / /ActivityManager /MainApplication /StatusNotifierWatcher /connections /kbuildsycoca /kded /kxkb /modules /modules/StatusNotifierWatcher /modules/activitymanager /modules/device_automounter /modules/dnssdwatcher /modules/favicons /modules/freespacenotifier /modules/keyboard /modules/khotkeys /modules/kpackagekitd /modules/kremotecontroldaemon /modules/ktimezoned /modules/kwrited /modules/nepomuksearchmodule /modules/networkmanagement /modules/networkstatus /modules/powerdevil /modules/randrmonitor /modules/remotedirnotify /modules/solidautoeject /modules/statusnotifierwatcher /org /org/freedesktop /org/freedesktop/PowerManagement /org/freedesktop/PowerManagement/Inhibit /org/kde /org/kde/networkmanagement /org/kde/networkmanagement/Activatable /org/kde/networkmanagement/Activatable/10 /org/kde/networkmanagement/Activatable/11 /org/kde/networkmanagement/Activatable/12 /org/kde/networkmanagement/Activatable/13 /org/kde/networkmanagement/Activatable/14 /org/kde/networkmanagement/Activatable/15 /org/kde/networkmanagement/Activatable/16 /org/kde/networkmanagement/Activatable/17 /org/kde/networkmanagement/Activatable/2 /org/kde/networkmanagement/Activatable/3 /org/kde/networkmanagement/Activatable/4 /org/kde/networkmanagement/Activatable/5 /org/kde/networkmanagement/Activatable/6 /org/kde/networkmanagement/Activatable/7 /org/kde/networkmanagement/Activatable/8 greg@tiny :) ~ > qdbus org.kde.ActivityManager /ActivityManager method QStringList org.kde.ActivityManager.ActivitiesForResource(QString uri) method QString org.kde.ActivityManager.ActivityIcon(QString id) method QString org.kde.ActivityManager.ActivityName(QString id) signal void org.kde.ActivityManager.ActivityNameChanged(QString id, QString name) method QString org.kde.ActivityManager.AddActivity(QString name) method QStringList org.kde.ActivityManager.AvailableActivities() method QString org.kde.ActivityManager.CurrentActivity() signal void org.kde.ActivityManager.CurrentActivityChanged(QString id) method bool org.kde.ActivityManager.IsBackstoreAvailable() method void org.kde.ActivityManager.RegisterActivityController(QString service) method void org.kde.ActivityManager.RegisterResourceWindow(uint wid, QString uri) method QStringList org.kde.ActivityManager.RegisteredActivityControllers() method void org.kde.ActivityManager.RemoveActivity(QString id) method void org.kde.ActivityManager.SetActivityIcon(QString id, QString name) method void org.kde.ActivityManager.SetActivityName(QString id, QString name) method bool org.kde.ActivityManager.SetCurrentActivity(QString id) method void org.kde.ActivityManager.UnregisterResourceWindow(uint wid, QString uri) method QString org.kde.ActivityManager._allInfo() method QString org.kde.ActivityManager._serviceIteration() method QDBusVariant org.freedesktop.DBus.Properties.Get(QString interface_name, QString property_name) method QVariantMap org.freedesktop.DBus.Properties.GetAll(QString interface_name) method void org.freedesktop.DBus.Properties.Set(QString interface_name, QString property_name, QDBusVariant value) method QString org.freedesktop.DBus.Introspectable.Introspect() greg@tiny :) ~ > qdbus org.kde.ActivityController-1949 /ActivityController method void org.kde.ActivityController.ActivityAdded(QString id) method void org.kde.ActivityController.ActivityRemoved(QString id) method void org.kde.ActivityController.ResourceWindowRegistered(uint wid, QString uri) method void org.kde.ActivityController.ResourceWindowUnregistered(uint wid, QString uri) method QDBusVariant org.freedesktop.DBus.Properties.Get(QString interface_name, QString property_name) method QVariantMap org.freedesktop.DBus.Properties.GetAll(QString interface_name) method void org.freedesktop.DBus.Properties.Set(QString interface_name, QString property_name, QDBusVariant value) method QString org.freedesktop.DBus.Introspectable.Introspect() EDIT : I completely rewrote my script using python, and now the whole project is available here : https://github.com/greg0ire/switch
Asked by greg0ire (3095 rep)
Oct 26, 2010, 09:16 PM
Last activity: Oct 4, 2013, 08:15 AM