Cairo-Dock cafe | Café Cairo-Dock
nochka85, Tuesday 01 September 2009 à 02:00
|
|
Subscription date : 29 November 2007
Messages : 7408
|
Le script ci-dessous est obsolète ! ... la dernière version du script peut se trouver dans la version BZR ( cairo-dock-plug-ins/Dbus/demos/demo_bash/) ou encore ici : http://dl.free.fr/f4SUe2eGb
Le fonctionnement est très simple : Copier le dossier demo_bash où bon vous semble puis executez depuis un terminal la commande : ./demo_bash.py -> une nouvelle applet apparaît dans votre dock
Vous connaissez le bash et vous souhaitez développer une nouvelle applet :- Copier le dossier demo_bash où vous souhaitez (en attendant qu'un répertoire de lancement automatique soit créé
)
- Renommer votre répertoire comme bon vous semble (ou pas d'ailleurs -> C'est vous qui voyez !
)
- Renommer les fichiers demo_bash.py, demo_bash.sh, demo_bash.conf pour nommer votre nouvelle applet <- attention, les 3 fichiers doivent avoir le même nom (à l'extension près)
- Modifier votre fichier nom_de_votre_applet.conf pour modifier les entrées que vous avez besoin
- Récupérez ces entrées dans votre fichier bash dans la section get_ALL_conf_params() grâce à la commande get_conf_param (voir les exemples déjà présents)
- Editer le fichier nom_de_votre_applet.sh et ne programmez QUE dans ce dernier en "alimentant" chaque section action_on_quelquechose (le fichier nom_de_votre_applet.py n'est que le lanceur et joue le rôle de "télécommande" pour l'applet ! ... bref, il n'y a rien à modifier en théorie ... et en plus, c'est en Python
)
- Modifiez les 2 paramètres POSITION_IN_CONF (pour placer votre applet dans la section souhaitée) et DESCRIPTION (pour remplir le 'about')
- Remplacer les 2 images nommée icon et preview par 2 .png de votre choix (<- conserver les même noms ... sans extension)
- Une fois votre programmation finie, lancer la commande : ./nom_de_votre_applet.py (Terminal , ALT+F2 ou en double-cliquant dessus) -> VOILA !! VOTRE APPLET EST FINIE !
Maintenant, c'est à vous de jouer !
NOTE IMPORTANTE : Vous n'avez pas besoin d'avoir la version BZR et les sources pour créer une nouvelle applet en bash -> La programmation d'applets externes peut être réalisée même avec la version des dépôts (Cairo-Dock 2.1.x ou plus)
Bon, voilà la première version "fonctionnelle" d'une applet externe de démo en bash avec interface DBus (il suffit de récupérer la conf de l'applet python ainsi que les images PUIS de ranger çà dans un répertoire en nommant le script ET la conf de la même manière -> Ex: demo_bash.sh et demo_bash.conf ) :
SCRIPT_DIR=$(pwd)
SCRIPT_FUNCTION=$0
APPLET_SCRIPT=`basename $SCRIPT_FUNCTION`
APPLET_NAME="`echo $APPLET_SCRIPT | cut -f1 -d '.' `"
DBUS_NAME="org.cairodock.CairoDock"
DBUS_PATH="/org/cairodock/CairoDock"
DBUS_INTERFACE="org.cairodock.CairoDock"
applet_init() {
dbus-send --session --dest=$DBUS_NAME $DBUS_PATH $DBUS_INTERFACE.RegisterNewModule string:"$APPLET_NAME" int32:3 string:"This is a distant applet\nIt handles right and middle click\n by Nochka85" string:$SCRIPT_DIR
echo "Our module is started"
}
action_on_click() {
echo "Left Click !"
}
action_on_middle_click() {
echo "Middle Click !"
}
action_on_scroll_icon() {
echo "Scroll !"
}
action_on_drop_data() {
echo "Drop Data !"
}
action_on_build_menu() {
echo "Build menu !"
}
action_on_menu_select() {
echo "Menu Select !"
}
action_on_init_module() {
echo "Init module !"
}
action_on_reload_module() {
echo "Reload module !"
}
action_on_stop_module() {
echo "on_stop_module !"
killall /usr/bin/dbus-monitor > /dev/null dbus-send --session --dest=$DBUS_NAME $DBUS_PATH $DBUS_INTERFACE.UnregisterModule string:"$APPLET_NAME" exit
}
main_loop() {
DELAY=1 while [ 1 ]
do
SIGNAL="`/usr/bin/dbus-monitor | grep $DBUS_PATH/$APPLET_NAME* & sleep $DELAY && killall /usr/bin/dbus-monitor`"
if [ "`echo "$SIGNAL" | grep 'on_click_icon'`" != "" ]; then
action_on_click
fi
if [ "`echo "$SIGNAL" | grep 'on_middle_click_icon'`" != "" ]; then
action_on_middle_click
fi
if [ "`echo "$SIGNAL" | grep 'on_scroll_icon'`" != "" ]; then
action_on_scroll_icon
fi
if [ "`echo "$SIGNAL" | grep 'on_drop_data'`" != "" ]; then
action_on_drop_data
fi
if [ "`echo "$SIGNAL" | grep 'on_build_menu'`" != "" ]; then
action_on_build_menu
fi
if [ "`echo "$SIGNAL" | grep 'on_menu_select'`" != "" ]; then
action_on_menu_select
fi
if [ "`echo "$SIGNAL" | grep 'on_init_module'`" != "" ]; then
action_on_init_module
fi
if [ "`echo "$SIGNAL" | grep 'on_reload_module'`" != "" ]; then
action_on_reload_module
fi
if [ "`echo "$SIGNAL" | grep 'on_stop_module'`" != "" ]; then
action_on_stop_module
fi
done
}
applet_init
main_loop
exit
... Comme dit dans le post sur l'interface DBus ( http://www.glx-dock.org/bg_topic.php?t=3251&pos=0 ), n'ayant pas encore réussi à faire une vraie boucle pour "l'écoute" des signaux DBus (avec abonnement aux notifications), j'ai fais une "grosse boucle qui tâche" dans laquelle je récupère le signal qui m'intéresse à l'aide de la commande /usr/bin/dbus-monitor | grep org.cairodock.CairoDock* ... Bref, je récupère en fait un signal du type :
signal sender=:1.28575 -> dest=(null destination) serial=7 path=/org/cairodock/CairoDock/demo_bash; interface=org.cairodock.CairoDock.applet; member=on_build_menu <- MàJ du 01/09/09=Ajout du nom de l'applet
dont j'analyse ensuite le dernier argument .
Ce qui ne marche pas avec cette méthode :- Les signaux des différentes applets externes ne peuvent pas être identifiés -> Pour se faire, il faudrait que le dock nous renvoit le nom de l'applet à la place du "(null destination)"<- MàJ du 01/09/09=Corrigé avec la rev plugins 1276
- Les scroll UP et DOWN ne sont pas différenciables ... vu qu'ils renvoient tous les 2 un 'on_scroll_icon'
- Le 'on_drop_data' n'est pas exploitable ... vu que l'on sait que quelque chose a été glissé sur l'applet MAIS que l'on ne sait pas QUOI
- Le 'on_menu_select' n'est pas exploitable non plus ... du moins je crois (car pas testé
) ... notamment pour la même raison que ci-dessus (on pourrait éventuellement savoir que l'on clique dans le menu, mais on ne saura pas sur quoi !)
- Il y a un temps de latence entre une notification et le "résultat" (normal, vu qu'on attend 1 seconde)
- Il y a de temps en temps des "ratés" -> On clique et cela ne marche pas forcément
... Voilà ! C'est pas "folichon", mais c'est un début !
Et puis tout le reste devrait être possible (analyse du fichier de conf au démarrage pour récupérer les valeurs, action au clic gauche + milieu + molette (identique si haut ou bas), relecture des paramètres de la config au reload, etc ...
Bref, cela ouvre déjà pas mal de "petites" possibilités
Par contre, si quelqu'un a une idée pour vraiment surveiller les signaux dans une boucle (comme en python), je suis preneur !!
EDIT du 01/09/09 : MàJ du script pour se servir automatiquement du nom du fichier comme nom d'applet -> Il suffit de renommer le script et le fichier de config pour obtenir une nouvelle applet avec un autre nom + Modif pour le filtrage des différentes applets externes |
fabounet, Tuesday 01 September 2009 à 16:28
|
|
Subscription date : 30 November 2007
Messages : 17118
|
avec les modifs d'hier, le chemin de l'objet distant est /org/cairodock/CairoDock/demo_bash dans ton cas
tu dois pouvoir filtrer facilement
regarde le wiki pour mieux comprendre, ça ne modifiera pas fondamentalement ton script.
pour la boucle je n'ai pas d'autres idées.
qu'est-ce qu'on a comme programmes commençant par dbus ?
le problème c'est que je suis pas sûr que la notion de callback existe en bash |
nochka85, Tuesday 01 September 2009 à 16:53
|
|
Subscription date : 29 November 2007
Messages : 7408
|
Je regarde tout çà
... et je vais faire des recherches concernant les callback en bash |
nochka85, Tuesday 01 September 2009 à 18:22
|
|
Subscription date : 29 November 2007
Messages : 7408
|
Bon, pour le filtrage des différentes applets, c'est bon avec les nouvelles fonctions ... J'ai simplement remplacé çà :
SIGNAL="`/usr/bin/dbus-monitor | grep org.cairodock.CairoDock* & sleep $DELAY && killall /usr/bin/dbus-monitor`"
par çà :
SIGNAL="`/usr/bin/dbus-monitor | grep $DBUS_PATH/$APPLET_NAME* & sleep $DELAY && killall /usr/bin/dbus-monitor`"
(j'ai mis à jour le script du 1er post pour ceux que çà intéressent )
... par contre, Fab, je viens de trouver un bug : Si je lance le script une première fois, c'est ok ... PUIS je quitte mon applet : le script me kill un éventuel dbus-monitor restant ET me lance un UnregisterModule. Donc, normallement, je suis revenu au même état qu'avant d'avoir lancé le script (d'ailleurs, l'applet n'apparaît plus dans la config) ! Cependant, si je relance ce dernier, le dock plante et se ferme sans même ouvrir le mode maintenance ( <- cela ne le faisait pas hier )
Voici le debug (je commence au moment où je vais dans le menu pour quitter la première fois) :
cd_dbus_applet_emit_on_build_menu (demo_bash)
message : (cairo-dock-menu.c:cairo_dock_delete_menu:1270)
on force a quitter
message : (cairo-dock-menu.c:cairo_dock_delete_menu:1270)
on force a quitter
debug : (cairo-dock-dialogs.c:cairo_dock_build_dialog:912)
cairo_dock_build_dialog (Vous êtes sur le point d'enlever cette applet (demo_bash) du dock. Sûr ?, /usr/share/cairo-dock/cairo-dock.svg, 0, 808a870, 0 (98bc930;85533f8))
debug : (cairo-dock-draw-opengl.c:cairo_dock_create_texture_from_surface:735)
+ texture 152 generee (98bfa90, 586x17)
debug : (cairo-dock-draw-opengl.c:cairo_dock_create_texture_from_surface:735)
+ texture 153 generee (980aed0, 48x48)
cairo_dock_create_surface_from_image_simple: assertion `cImageFile != NULL' failed
cairo_dock_create_surface_from_image_simple: assertion `cImageFile != NULL' failed
debug : (cairo-dock-draw-opengl.c:cairo_dock_create_texture_from_surface:735)
+ texture 154 generee (9821c00, 35x35)
debug : (cairo-dock-draw-opengl.c:cairo_dock_create_texture_from_surface:735)
+ texture 155 generee (9840ca0, 35x35)
message : (cairo-dock-renderer-manager.c:cairo_dock_set_dialog_decorator_by_name:384)
cairo_dock_set_dialog_decorator_by_name (comics)
debug : (cairo-dock-renderer-manager.c:cairo_dock_get_dialog_decorator:360)
cairo_dock_get_dialog_decorator (comics)
debug : (cairo-dock-dialogs.c:on_enter_dialog:66)
inside
debug : (cairo-dock-dialogs.c:on_enter_dialog:66)
inside
debug : (cairo-dock-dialogs.c:on_enter_dialog:66)
inside
message : (cairo-dock-dock-manager.c:cairo_dock_stop_quick_hide:552)
debug : (cairo-dock-dialogs.c:on_leave_dialog:75)
debut d'attente...
debug : (cairo-dock-dialogs.c:on_leave_dialog:75)
debut d'attente...
debug : (cairo-dock-dialogs.c:on_leave_dialog:75)
debut d'attente...
debug : (cairo-dock-dialogs.c:on_leave_dialog:75)
debut d'attente...
debug : (cairo-dock-dialogs.c:on_leave_dialog:75)
debut d'attente...
debug : (cairo-dock-dialogs.c:on_leave_dialog:75)
debut d'attente...
debug : (cairo-dock-dialogs.c:on_enter_dialog:66)
inside
debug : (cairo-dock-dialogs.c:on_leave_dialog:78)
fin d'attente, bInside : 1
debug : (cairo-dock-dialogs.c:on_leave_dialog:78)
fin d'attente, bInside : 0
debug : (cairo-dock-dialogs.c:on_leave_dialog:78)
fin d'attente, bInside : 0
debug : (cairo-dock-dialogs.c:on_leave_dialog:78)
fin d'attente, bInside : 0
debug : (cairo-dock-dialogs.c:on_leave_dialog:78)
fin d'attente, bInside : 0
debug : (cairo-dock-dialogs.c:on_leave_dialog:78)
fin d'attente, bInside : 0
debug : (cairo-dock-applications-manager.c:cairo_dock_update_applis_list:772)
cairo_dock_update_applis_list (9)
message : (cairo-dock-applications-manager.c:cairo_dock_update_applis_list:780)
cette fenetre (23070618) de la pile n'est pas dans la liste
debug : (cairo-dock-application-factory.c:cairo_dock_create_icon_from_xwindow:405)
cette fenetre est timide
debug : (cairo-dock-applications-manager.c:cairo_dock_blacklist_appli:188)
cairo_dock_blacklist_appli (23070618)
message : (cairo-dock-applications-manager.c:_cairo_dock_remove_old_applis:709)
cette fenetre (23070618, (null)) est trop vieille (0 / 140)
debug : (cairo-dock-dialogs.c:on_leave_dialog:75)
debut d'attente...
debug : (cairo-dock-dialogs.c:on_leave_dialog:78)
fin d'attente, bInside : 0
debug : (cairo-dock-dialogs.c:on_enter_dialog:66)
inside
message : (cairo-dock-dialogs.c:_cairo_dock_get_answer_from_dialog:1496)
_cairo_dock_get_answer_from_dialog (0)
debug : (cairo-dock-dialogs.c:_cairo_dock_isolate_dialog:638)
debug : (cairo-dock-dialogs.c:cairo_dock_free_dialog:692)
message : (cairo-dock-dialogs.c:cairo_dock_show_dialog_and_wait:1553)
on force a quitter
message : (cairo-dock-modules.c:cairo_dock_remove_module_instance:1257)
cairo_dock_remove_module_instance (/home/nochka85/.config/cairo-dock/current_theme/plug-ins/cModuleName/demo_bash.conf)
debug : (cairo-dock-modules.c:cairo_dock_deactivate_module_and_unload:949)
1 instance(s) a arreter
message : (cairo-dock-modules.c:cairo_dock_deactivate_module_instance_and_unload:921)
cairo_dock_deactivate_module_instance_and_unload (/home/nochka85/.config/cairo-dock/current_theme/plug-ins/cModuleName/demo_bash.conf)
cd_dbus_emit_on_stop_module ()
message : (cairo-dock-dock-factory.c:cairo_dock_detach_icon_from_dock:646)
cairo_dock_detach_icon_from_dock (Dbus Applet in Bash)
debug : (cairo-dock-icons.c:cairo_dock_free_icon:60)
cairo_dock_free_icon (Dbus Applet in Bash , (null))
debug : (cairo-dock-dialogs.c:cairo_dock_remove_dialog_if_any:732)
cairo_dock_remove_dialog_if_any (Dbus Applet in Bash)
debug : (cairo-dock-icons.c:cairo_dock_free_icon:72)
icon stopped
debug : (cairo-dock-icons.c:cairo_dock_free_icon:74)
icon freeed
message : (cairo-dock-config.c:cairo_dock_update_conf_file:722)
cairo_dock_update_conf_file (/home/nochka85/.config/cairo-dock/current_theme/cairo-dock.conf)
debug : (cairo-dock-keyfile-utilities.c:cairo_dock_write_keys_to_file:33)
cairo_dock_write_keys_to_file (/home/nochka85/.config/cairo-dock/current_theme/cairo-dock.conf)
message : (cairo-dock-applications-manager.c:cairo_dock_unstack_Xevents:369)
nochka85@nochka85-desktop: ~/Cairo-dock_applets/demo_bash devient active
message : (cairo-dock-animations.c:cairo_dock_start_icon_animation:422)
cairo_dock_start_icon_animation (nochka85@nochka85-desktop: ~/Cairo-dock_applets/demo_bash, 0)
debug : (cairo-dock-modules.c:cairo_dock_free_module:450)
cairo_dock_free_module (demo_bash)
debug : (cairo-dock-modules.c:cairo_dock_deactivate_module:636)
cairo_dock_deactivate_module (demo_bash, /home/nochka85/.config/cairo-dock/current_theme/plug-ins/cModuleName/demo_bash.conf)
debug : (cairo-dock-applications-manager.c:cairo_dock_update_applis_list:772)
cairo_dock_update_applis_list (8)
message : (cairo-dock-modules.c:cairo_dock_activate_module:594)
cairo_dock_activate_module (demo_bash)
message : (cairo-dock-modules.c:cairo_dock_instanciate_module:1077)
cairo_dock_instanciate_module (/home/nochka85/.config/cairo-dock/current_theme/plug-ins/cModuleName/demo_bash.conf)
debug : (cairo-dock-load.c:cairo_dock_fill_one_icon_buffer:358)
cairo_dock_fill_one_icon_buffer () -> 45,00x45,00
debug : (cairo-dock-draw-opengl.c:cairo_dock_create_texture_from_surface:735)
+ texture 150 generee (9921f50, 136x136)
debug : (cairo-dock-draw-opengl.c:cairo_dock_create_texture_from_surface:735)
+ texture 151 generee (985ae68, 165x25)
cd_dbus_emit_on_init_module ()
message : (interface-applet.c:cd_dbus_applet_init:204)
Failed to register GObject with DBusConnection
warning : (cairo-dock.c:_cairo_dock_intercept_signal:175)
** (process:15232): WARNING (recursed) **: Cairo-Dock has crashed (sig 6).
It will be restarted now.
Feel free to report this bug on glx-dock.org to help improving the dock !
aborting...
Aborted
... bref, on voit çà à la fin :
Failed to register GObject with DBusConnection
warning : (cairo-dock.c:_cairo_dock_intercept_signal:175)
** (process:15232): WARNING (recursed) **: Cairo-Dock has crashed (sig 6).
It will be restarted now.
Feel free to report this bug on glx-dock.org to help improving the dock !
aborting...
Aborted
... et voici le ddd :
 |
nochka85, Tuesday 01 September 2009 à 21:03
|
|
Subscription date : 29 November 2007
Messages : 7408
|
... et je vais faire des recherches concernant les callback en bash
Je trouve rien
... par contre, du coup, je me pose une question -> Est-ce qu'on ne pourrait pas lancer depuis le script bash ( <- que le dev ne connaissant QUE le bash modifiera pour créer son applet) un programme en Python (que ce même dev ne touchera pas) pour faire la besogne ? ... ou l'inverse -> Un programme Python "basique" (que le dev ne modifie pas) qui, lorsqu'il y a des signaux Dbus, pointe vers des scripts en bash (ceux que le dev modifie) qui effectue les commandes appropriés ?
... sachant que le but n'est pas forcément de faire une applet "complètement" en bash, mais que la personne ne connaissant QUE ce langage de programmation soit capable d'écrire des applets
Bref, là, je me pose une question fondamentale sur la suite des applets en bash .... Quelle est votre opinion sur le sujet ? (<- concernant la faisabilité de l'une où l'autre des méthode) .... perso, je pense, en ne connaissant rien à Python, que la 2ème méthode pourrait peut être le faire .... reste à voir comment passer des paramètres du programme python vers les scripts bash
PS : Là, j'aurais VRAIMENT besoin des pros de la programmation
EDIT :
reste à voir comment passer des paramètres du programme python vers les scripts bash
Peut être tout simplement avec des paramètres que l'on récupèreraient avec $1, $2, etc... dans le/les script(s) bash ? <- Allez, je me mets au Python ce soir pour voir çà |
nochka85, Wednesday 02 September 2009 à 00:37
|
|
Subscription date : 29 November 2007
Messages : 7408
|
Bon, pour le script Python qui pilote 1 ou plusieurs scripts bash ... et bien j'y suis arriver !!! Et çà marche !!! ... donc, je crois que je vais tout remettre à plat et revoir ma copie depuis le début
Donc, je récapitule le nouveau concept :
Créer 1 script Python "standard" que le dev en bash ne touchera JAMAIS + plusieurs scripts (pour chaque notification) voir 1 seul (mais çà risque d'être une usine à gaz ) dans lesquels le dev en bash programmera
@Fab : Est-ce que l'idée t'intéresse ou pas ? ... si oui, j'essaies de faire un premier prototype dès que possible |
fabounet, Wednesday 02 September 2009 à 11:54
|
|
Subscription date : 30 November 2007
Messages : 17118
|
donc si je comprends bien tu prend demo.py, et tu lances des scripts bash dont les noms sont fixés à l'avance, et le dev n'à plus qu'à les remplir ?
ouais c'est une très bonne idée, comme ça:
soit on connait le python et on utilise demo.py
soit on conanit mieux le bash et on utilise demo_bash.py
ça me paraît très sympa !  |
nochka85, Wednesday 02 September 2009 à 11:57
|
|
taiebot65, Wednesday 02 September 2009 à 19:48
|
|
Subscription date : 26 October 2008
Messages : 1904
|
Ca te dit pas de creer des applets aussi.. Ok je sors ==> |
nochka85, Wednesday 02 September 2009 à 21:02
|
|
Subscription date : 29 November 2007
Messages : 7408
|
Ca te dit pas de creer des applets aussi.. Ok je sors ==>
Chaque chose en son temps .... on fera un concours plus tard
Au fait, Fab, pour le soucis du plantage lorsque l'on lance une 2ème fois l'applet ... les sorties ddd et debug te suffisent ou pas ? |
taiebot65, Wednesday 02 September 2009 à 22:10
|
|
Subscription date : 26 October 2008
Messages : 1904
|
on fera un concours plus tard
Pas besoin je suis hors categorie |
nochka85, Thursday 03 September 2009 à 13:36
|
|
Subscription date : 29 November 2007
Messages : 7408
|
Bon petit point sur l'avancement de l'applet demo_bash :
J'ai quasi fini : on_click_icon, on_middle_click_icon, on_scroll_icon, on_drop_data, on_init_module, on_stop_module et on_reload_module sont fonctionnels et marchent nickel !!
... bref, il ne me reste que les 2 notifications on_build_menu et on_menu_select à gérer avec des scripts bash ... mais je crois que çà va être coton (<- d'ailleurs, je suis pas vraiment sûr d'y arriver ) |
nochka85, Thursday 03 September 2009 à 15:03
|
|
Subscription date : 29 November 2007
Messages : 7408
|
@Fabounet : J'ai un soucis pour transformer çà :
def action_on_build_menu():
print "build menu !"
applet_iface.PopulateMenu(["choice 0", "choice 1"])
(tiré de demo.py)
en simple commande DBus afin de le mettre dans mon script action_on_build_menu.sh .
J'ai essayé de faire çà (entre autre) :
dbus-send --session --dest=org.cairodock.CairoDock /org/cairodock/CairoDock/demo_bash org.cairodock.CairoDock.applet.PopulateMenu string:"choice 0" string:"choice 1"
... mais sans succès !
Dans le tuto, j'ai bien trouvé çà :
You can populate the menu thanks to the PopulateMenu method, which takes a NULL-terminated list of strings as parameter.
... mais c'est (je trouve) super flou ... et je comprends pas trop ce "takes a NULL-terminated list of strings"
... Bref, pourrais-tu m'expliquer ou donner un simple exemple dans le tuto (sous la forme : dbus-send --session --dest=org.cairodock.CairoDock /org/cairodock/CairoDock/demo_bash org.cairodock.CairoDock.applet.PopulateMenu ...) sur ce sujet ?
EDIT:
Ah oui, autre chose : Le Unregister ne marche plus ... c'est normal ? ... et il n'y a rien dans le tuto
... pour info, je faisais çà :
dbus-send --session --dest=org.cairodock.CairoDock /org/cairodock/CairoDock org.cairodock.CairoDock.RegisterNewModule string:"demo_bash"
EDIT 2:
Finallement, j'ai regroupé tous les scripts dans un seul .sh (que l'on nommera comme le .py et le .conf ... et donc, pour la démo : demo_bash.sh) ... cela permet d'avoir une meilleur vue d'ensemble ET de ne pas à avoir à redéclarer les différentes variables (et notament lorsqu'il faudra aller chercher les infos dans le .conf) !
... bref, je n'attends que les 2 questions ci-dessus, et mon demo_bash est fini ! |
fabounet, Thursday 03 September 2009 à 17:59
|
|
Subscription date : 30 November 2007
Messages : 17118
|
en fait, si je n'ai pas mis d'exemple c'est que je ne sais pas comment faire
regarde peut-être ce qu'un DBus-monitor renvoie quand c'est un tableau de chaine (terminée par une chaine vide )
le unregister je n'arrive jamais à passer dedans car je sais pas sortir de la main loop sans tout tuer
d'ailleurs, même en bash je vois pas trop comment faire ? |
nochka85, Thursday 03 September 2009 à 18:06
|
|
Subscription date : 29 November 2007
Messages : 7408
|
en fait, si je n'ai pas mis d'exemple c'est que je ne sais pas comment faire
regarde peut-être ce qu'un DBus-monitor renvoie quand c'est un tableau de chaine (terminée par une chaine vide )
Arf
le unregister je n'arrive jamais à passer dedans car je sais pas sortir de la main loop sans tout tuer
d'ailleurs, même en bash je vois pas trop comment faire ?
Bah en fait, je comptais faire mon unregister dans mon script bash PUIS tué le process du .py (toujours depuis le script bash) ... mais comme je te l'ai dit, la commande dbus pour le unregister ne marche plus <- Tu as changé quelque chose ? |
nochka85, Thursday 03 September 2009 à 18:23
|
|
Subscription date : 29 November 2007
Messages : 7408
|
Bon, pour le PopulateMenu, je récupère çà avec dbus-monitor :
method call sender=:1.32158 -> dest=:1.32125 serial=37 path=/org/cairodock/CairoDock/demo_bash; interface=org.cairodock.CairoDock.applet; member=PopulateMenu
array [
string "choice 0"
string "choice 1"
]
... pour info (et pour comparaison), je récupère çà lors d'un scroll up :
signal sender=:1.32830 -> dest=org.cairodock.CairoDock serial=2 path=/org/cairodock/CairoDock/demo_bash; interface=org.cairodock.CairoDock.applet; member=ShowDialog
string "Scroll UP!"
int32 1
... une idée sur ce que je dois rentrer ? |
fabounet, Thursday 03 September 2009 à 18:29
|
|
nochka85, Thursday 03 September 2009 à 19:09
|
|
nochka85, Friday 04 September 2009 à 01:21
|
|
Subscription date : 29 November 2007
Messages : 7408
|
Voilà ! L'applet est terminée !
... et je viens de tenter mon 1er commit sur BZR (rev 1279) -> J'espère que j'ai rien cassé ! |
nochka85, Friday 04 September 2009 à 10:25
|
|
Subscription date : 29 November 2007
Messages : 7408
|
Je viens de modifier le 1er post de ce sujet en y mettant un mini-tuto (je vous colle la même chose ici pour ceux qui auraient la flemme de remontée jusqu'au premier message ) :
Le script ci-dessous est obsolète ! ... la dernière version du script peut se trouver dans la version BZR ( cairo-dock-plug-ins/Dbus/demos/demo_bash/) ou encore ici : http://dl.free.fr/f4SUe2eGb
Le fonctionnement est très simple : Copier le dossier demo_bash où bon vous semble puis executez depuis un terminal la commande : ./demo_bash.py -> une nouvelle applet apparaît dans votre dock
Vous connaissez le bash et vous souhaitez développer une nouvelle applet :- Copier le dossier demo_bash où vous souhaitez (en attendant qu'un répertoire de lancement automatique soit créé
)
- Renommer votre répertoire comme bon vous semble (ou pas d'ailleurs -> C'est vous qui voyez !
)
- Renommer les fichiers demo_bash.py, demo_bash.sh, demo_bash.conf pour nommer votre nouvelle applet <- attention, les 3 fichiers doivent avoir le même nom (à l'extension près)
- Modifier votre fichier nom_de_votre_applet.conf pour modifier les entrées que vous avez besoin
- Récupérez ces entrées dans votre fichier bash dans la section get_ALL_conf_params() grâce à la commande get_conf_param (voir les exemples déjà présents)
- Editer le fichier nom_de_votre_applet.sh et ne programmez QUE dans ce dernier en "alimentant" chaque section action_on_quelquechose (le fichier nom_de_votre_applet.py n'est que le lanceur et joue le rôle de "télécommande" pour l'applet ! ... bref, il n'y a rien à modifier en théorie ... et en plus, c'est en Python
)
- Modifiez les 2 paramètres POSITION_IN_CONF (pour placer votre applet dans la section souhaitée) et DESCRIPTION (pour remplir le 'about')
- Remplacer les 2 images nommée icon et preview par 2 .png de votre choix (<- conserver les même noms ... sans extension)
- Une fois votre programmation finie, lancer la commande : ./nom_de_votre_applet.py (Terminal , ALT+F2 ou en double-cliquant dessus) -> VOILA !! VOTRE APPLET EST FINIE !
Maintenant, c'est à vous de jouer !
NOTE IMPORTANTE : Vous n'avez pas besoin d'avoir la version BZR et les sources pour créer une nouvelle applet en bash -> La programmation d'applets externes peut être réalisée même avec la version des dépôts (Cairo-Dock 2.1.x ou plus)
... bien sûr, j'invite tout le monde à tester l'applet demo_bash ... et j'attends vos remarques !
@Fabounet : Vu que les 2 applets de demos semblent bien fonctionner (au unregister près ...), je pense qu'il serait temps de créer ce répertoire de lancement automatique ... et ce pour 2 raisons :- Avoir un système de création d'applets externes 100% opérationnel afin d'inciter les gens à se lancer ... car là, le lancement du .py est un peu bancal
- Pouvoir se passer de ce unregister qui nous "emmerde"
-> En effet, avec un répertoire de lancement dans ~/.config/cairo-dock/quelquepart , les applets externes se comporteront comme les autres applets ... et à ce que je sache, quand on ne veux pas d'une applet standard, on la décoche ... mais elle apparaît toujours dans la config ! Bref, avec ce système, ce serait la même principe -> le dock lance automatiquement les applets externes se trouvant dans le répertoire dédié et si on ne veut pas l'utiliser, on la décoche de la config ... mais elle reste là (il faudrait géré l'état au lancement par contre ... pour qu'au lancement suivant elle reste décochée ) ... et si on veut définitivement la supprimer, il suffit d'effacer le répertoire de l'applet dans le répertoire de lancement automatique
Bref, avec ce répertoire, le unregister devient sans utilité ET tout est transparent pour l'utilisateur lambda (sauf l'install des futurs applets externes qui ne seront pas fournies avec le dock). En plus, je t'ai simplifié le boulot vu que quelque soit le language (python ou bash), on lance TOUJOURS un programme python
Et, pour finir, je pense qu'il serait pas mal d'avoir ce lancement automatique AVANT de mettre à jour la version stable -> On pourrait "flooder" les forums pour faire appels aux devs python et bash (en créant un petit post avec un message comme dans la box d'info ci-dessus ). Par contre, sans le répertoire, c'est moins accrocheur
EDIT : A oui, j'oubliais -> Juste pour info, c'est EXTRA de développer avec la version bash : Vu qu'on ne touche jamais au .py et que c'est ce dernier qui est executer (le .sh ne sert qu'à lancer des fonctions), on peut faire des modifs en temps réel et SANS RELANCER L'APPLET !!! ... bref, si on veut tester un nouveau truc lors du clic par exemple, et bien il suffit de modifier le .sh , de le sauvegarder PUIS de simplement cliquer sur l'applet qui est déjà lancé pour voir le changement ! |
Cairo-Dock cafe | Café Cairo-Dock
|