#1 Le 06/03/2010, à 09:33
- wlourf
[résolu][openbox] lister les raccourcis de rc.xml
Bonjour,
Savez-vous s'il existe un script qui permet de lister les raccourcis clavier de rc.xml pour les afficher dans un fichier ou dans un conky ?
Merci
w.
Dernière modification par wlourf (Le 28/03/2010, à 15:08)
Hors ligne
#2 Le 06/03/2010, à 10:59
- Goda
Re : [résolu][openbox] lister les raccourcis de rc.xml
Salut
C'est pas évident à faire, car la syntaxe est particulière : exemple A = Alt, W = Super
Le mieux c'est encore d'aller les recopier à la main, ça te prendra moins de temps que d'écrire un script. Cela dit pour se fixer un challenge genre exo de programmation c'est pas mal et à mon avis c'est tout à fait faisable...à grands coups de "grep", de "cut" et de "sed" pour mettre ça au propre.
" Read The F$$$$$ Manual " ---> man man
Pensez à passer en RÉSOLU...(en éditant le titre du 1er message)
Hors ligne
#3 Le 06/03/2010, à 18:13
- wlourf
Re : [résolu][openbox] lister les raccourcis de rc.xml
Merci pour ton avis, comme j'avais un après-midi de libre, je me suis lancé dans un script et je suis pas mécontent du résultat bien qu'il y ait sûrement des améliorations à faire (ou d'autres façons de faire ça)! C'est un script python qui lit rc.xml et mets les raccourcis dans un fichier conkyrc, le tout pouvant être lancé depuis un raccourci clavier , bien sûr...
Edit : J'ai modifié le script pour un affichage multi-colonnes et pour pouvoir afficher les raccourcis souris.
Le modèle de conky qui sera complété par le script python (python va créer un fichier à partir de ce modèle sans l'altérer), il y a juste les couleurs à paramétrer selon ses goûts avant la section TEXT :
Le fichier s'appelle : modele_conky
background no
update_interval 1
cpu_avg_samples 2
net_avg_samples 2
override_utf8_locale yes
double_buffer yes
no_buffers yes
text_buffer_size 2048
imlib_cache_size 0
own_window yes
#own_window_type desktop
#own_window_transparent yes
#own_window_hints undecorate,sticky,skip_taskbar,skip_pager,below
own_window_title my shortcuts
border_inner_margin 0
border_outer_margin 0
minimum_size 50 50
alignment tr
# -- Graphics settings -- #
draw_shades no
draw_outline no
draw_borders no
draw_graph_borders no
# -- Text settings -- #
use_xft yes
xftfont Courier:size=10.5
xftalpha 0.8
uppercase no
default_color FFFFFF
###colors for Keyboard###
#color for applications:
color0 FFFF00
#color for menu:
color1 FFFFFF
#color for openbox shortcuts :
color2 666666
#colors for Mouse
#color for titles
color5 FFFF00
#color for shortcuts
color6 EEEEEE
TEXT
${time}
Le script python raccourcis.py, il faut indiquer dans les 2 premières variables les chemins complets vers:
rc_path_file = le chemin complet de rc.xml
conkytemplate_path_file = le chemin complet de modele_conky ci-dessus
Dans les variables qui suivent, on peut définir le nombre de lignes par colonne nbLnKb et nbLnMs et la largeur des colonnes lgColKb et lgColMs, Kb pour clavier, Ms pour souris.
Dernière variable : appliFirst=True utilisée pour trier les raccourcis clavier par nom de l'application, sinon trie par nom du raccourci.
#!/usr/bin/env python
# coding=utf-8
#this script read the file rc.xml for OpenBox configuration
#and returns the shortcuts for Mouse ou Keyboard in a file called by conky
#wlourf 07/03/2010 http://u-scripts.blogspot.com/2010/03/how-to-display-openboxs-shortcuts.html
#v1.1 29/04/2010
# keyboard shorcuts without commands are not displayed
# long command lines are shortened in the dispay to fit the column width
import sys
import xml.etree.ElementTree as etree
#full path and name of the rc.xml file
rc_path_file="/home/wlourf/.config/openbox/rc.xml"
#template of conkyrc to use
conkytemplate_path_file ="/home/wlourf/scripts/raccourcis/modele_conky"
#column width (Ms = souris, Kb= clavier)
lgColMs=50
lgColKb=40
#Number of lines per Column (Ms = souris, Kb= clavier)
nbLnMs=30
nbLnKb=30
#in "Keyboard" array, "appliFirst" will display application name before shorcut
appliFirst=True
#END OF THE PARAMETERS !
def main_keyboard():
"""read keyboard shorcuts"""
#xml parser
strRoot="{http://openbox.org/3.4/rc}"
tree = etree.parse(rc_path_file)
root = tree.getroot()
#sc = array of shortcuts
sc=[]
for k in root.findall(strRoot+'keyboard/'+strRoot+'keybind'):
key = k.get("key")
action_et = k.find(strRoot+'action')
strTxt=""
if action_et!=None:
sc.append((key,"",""))
if action_et.get("name")=="Execute":
color="color0"
name_et=action_et.find(strRoot+'name')
command_et=action_et.find(strRoot+'command')
exec_et=action_et.find(strRoot+'execute')
if name_et != None:
strTxt=name_et.text
elif command_et != None:
strTxt=command_et.text
elif exec_et != None:
strTxt=exec_et.text
elif action_et.get("name")=="ShowMenu":
menu_et=action_et.find(strRoot+'menu')
if menu_et != None: strTxt=menu_et.text
color="color1"
else:
action_name=action_et.get("name")
if action_name!=None: strTxt=action_name
color="color2"
sc[len(sc)-1]=(key,strTxt,color)
if appliFirst:
for i in range(len(sc)):
t0=sc[i][0]
t1=sc[i][1]
sc[i]=(t1,t0,sc[i][2])
sc.sort()
#display the array
#for i in range(0,len(sc)):
# print str(i)+"\t"+sc[i][0]+"\t"+sc[i][1]
#format array in array of text lines
sc3=[]
for i in range(nbLnKb):
if i>len(sc):
break
sc3.append("")
for j in range(0,len(sc)/nbLnKb+1):
if i+j*nbLnKb<len(sc):
x=i+(j*nbLnKb)
if (len(sc[x][1])+len(sc[x][0]))>=lgColKb-3:
length=lgColKb-len(sc[x][1])-3
else:
length=len(sc[x][0])
sc3[i]+="${"+sc[x][2]+"}"+sc[x][0][:length]+"."*(lgColKb-length-len(sc[x][1]))+sc[x][1]+" "
write_conkyrc(sc3)
def main_mouse():
"""read shortcuts for mouse"""
#xml parser
strRoot="{http://openbox.org/3.4/rc}"
tree = etree.parse(rc_path_file)
root = tree.getroot()
#array of shortcuts
sc=[]
for k in root.findall(strRoot+'mouse/'+strRoot+'context'):
context = k.get("name")
sc.append((context,"","",""))
for mb in k.findall(strRoot+'mousebind'):
btn = mb.get("button")
actionBtn = mb.get("action")
if btn==None: btn=""
if actionBtn==None : actionBtn=""
actions=""
for act in mb.findall(strRoot+"action"):
if act.get("name") != None:
actions+=act.get("name")+", "
if actions !="": actions=actions[:-2]
sc.append("\t"+btn+" "+actionBtn+":"+actions+"\n")
sc[len(sc)-1]=(context,btn,actionBtn,actions)
sc.sort()
#format the array, part 1/2
lastTitle=""
sc2=[]
for i in range(len(sc)):
title=sc[i][0]
if title!=lastTitle:
lastTitle=title
sc2.append("${color5}"+title+"_"*(lgColMs-len(title))+"${color6}")
else:
txt=" "+sc[i][1]+" "+sc[i][2]+" : "+sc[i][3]
if len(txt)>lgColMs:
txt0=txt[:lgColMs]
txt1=txt[lgColMs:]
else:
txt0=txt
txt1=""
sc2.append(txt0+" "*(lgColMs-len(txt0)))
if txt1!="":
sc2.append(txt1+" "*(lgColMs-len(txt1)))
#format the array, part 2/2
sc3=[]
for i in range(nbLnMs):
if i>len(sc2):
break
sc3.append("")
for j in range(0,len(sc2)/nbLnMs+1):
if i+j*nbLnMs<len(sc2):
sc3[i]+=str(sc2[i+(j*nbLnMs)]+" ")
write_conkyrc(sc3)
def write_conkyrc(arr):
#read the conky template and create the final conkyrc
template = open(conkytemplate_path_file,'r')
out_file = open(conkyout_path_file,'w')
f=template.readlines()
for line in f:
out_file.write(line)
for i in range(0,len(arr)):
out_file.write(arr[i]+"\n")
out_file.close
template.close
if __name__ == "__main__":
if len(sys.argv)<3:
print ("needs 2 arguments : conkyrc template + k/m (keyboard or mouse)")
sys.exit()
conkyout_path_file=sys.argv[1]
if sys.argv[2]=="m":
main_mouse()
else:
main_keyboard()
Ensuite, un petit script lanceur.sh pour lancer le python et afficher le conky (necessite de le lancer avec deux paramètres), n'oubliez pas de le rendre executable...
#!/bin/sh
if (test $# -ne 2 )
then
echo '2 arguments minimum : '
echo ' - fichier conkyrc à créer (path+nom)'
echo ' - choix du raccourci m/k (mouse ou keyboard)'
exit
fi
python "/home/ll/scripts/raccourcis/raccourcis.py" $1 "$2"
conky -c $1
Et enfin, dans rc.xml, je fais 2 raccourcis vers le script lanceur.sh comme ça je peux appeler mes raccourcis clavier/souris quand j'ai un trou de mémoire :
<keybind key="W-r">
<action name="Execute">
<name>Raccourcis clavier</name>
<command>/home/ll/scripts/raccourcis/lanceur.sh /tmp/conky_kb k</command>
</action>
</keybind>
<keybind key="W-s">
<action name="Execute">
<name>Raccourcis souris</name>
<command>/home/ll/scripts/raccourcis/lanceur.sh /tmp/conky_ms m</command>
</action>
</keybind>
Et voilà le résultat:
Avec le tri + multicolonne pour le clavier:
Pour la souris :
Si ça peut servir à quelqu'un, tant mieux !
Edit :Mise à jour 29/04/2010:
- les raccourcis sans commande ne sont plus affichés (on peut voir ce genre e lignes parfois : <keybind key="C-F9"/>
- les commandes trop longues pour être affichées dans une colonne sont raccourcies pour s'afficher directement.
Dernière modification par wlourf (Le 29/04/2010, à 19:57)
Hors ligne
#4 Le 06/03/2010, à 18:30
- UUBBUU_USER
Re : [résolu][openbox] lister les raccourcis de rc.xml
SAlut ... Merci ......
Sinon pour ton problème d'argument .... .a tu essayer avec optparse ?????
La un script ou j' apprend le python et ou j'ai utilisé optparse..
http://forum.ubuntu-fr.org/viewtopic.ph … 8#p3178448
PEACE LOVE UNITY FREE TIBET
Hors ligne
#5 Le 07/03/2010, à 10:49
- wlourf
Re : [résolu][openbox] lister les raccourcis de rc.xml
Je viens d'éditer le post avec le script :
Maintenant le script python utilise un parser xml pour lire le fichier rc.xml, ce qui est nettement plus efficace
On peut afficher les résultats avec le nom de l'application avant le nom du raccourci.
On peut afficher le résultat sur plusieurs colonnes (mais il faut utiliser une police à chasse fixe)
Et enfin, on peut faire la même chose pour les raccourcis souris.
Pour le problème de paramètres du script python lancé depuis un shell, à la place de ça:
python "/home/ll/scripts/raccourcis/raccourcis.py mon_param"
il faut écrire ça :
python "/home/ll/scripts/raccourcis/raccourcis.py" "mon_param"
voilà
Hors ligne
#6 Le 09/03/2010, à 14:58
- RegisBurin
Re : [résolu][openbox] lister les raccourcis de rc.xml
Yep, j'avais jamais vu ça... c'est juste énorme, bravo...
Config (M-AUDIO Delta44/Wacom CTH661-Phone ZTE OpenC-FFOS2.1) | BabyBox[WIP]
Moi sur le web / Moi, IRL mais sur le web / Ma maison sur le web
Hors ligne
#7 Le 10/03/2010, à 22:45
- wlourf
Re : [résolu][openbox] lister les raccourcis de rc.xml
Yep, j'avais jamais vu ça... c'est juste énorme, bravo...
c'est un peu exagéré mais bon ... ça fait pas de mal.
J'ai mis à jour le script python dans le post ci-dessus :
- code nettoyé plus intégration des actions "ShowMenu" dans une troisième couleur
et donc mise à jour du conkyr pour la troisième couleur
Hors ligne
#8 Le 30/07/2010, à 03:43
- mel4
Re : [résolu][openbox] lister les raccourcis de rc.xml
Bonsoir,
Je ne sais pas ce qu'est conky (en tout cas, ce n'est pas installé sur mon ordi). Mais, est-ce que ce script permet de lister tous les raccourcis? Je veux dire ceux de gnome (et/ou metacity, je ne comprends pas trop la différence) et de compiz?
Mon problème est que j'ai dû attribuer par erreur un Maj+c quelque part et je ne le retrouve plus. Et maintenant impossible de taper un c majuscule, ce qui embêtant...
Merci!
Mel
Hors ligne
#9 Le 31/07/2010, à 10:26
- wlourf
Re : [résolu][openbox] lister les raccourcis de rc.xml
conky est une application permettant d'afficher différents paramètres de son PC (températures, réseau ) sur son bureau : http://doc.ubuntu-fr.org/conky et ce fil pour pas mal d'exemples : http://forum.ubuntu-fr.org/viewtopic.php?id=326972
metacity est le gestionnaire de fenêtres (WM) , gnome est "l'environnement de bureau" qui utilise le WM metacity + d'autres applicatons comme le menu, le bureau.
Openbox est aussi un WM et le script ne s'applique qu'au fichier rc.xml d'Openbox.
Pour récupérer ton Maj+C, essaye Systeme/Preferences/Raccourcis clavier, sinon je ne sais pas, ouvre un fil dans le forum Gnome.
Hors ligne
#10 Le 20/04/2012, à 00:22
- ergatif
Re : [résolu][openbox] lister les raccourcis de rc.xml
Bonjour,
Je n'arrive pas à faire fonctionner le script.
J'ai bien paramétré correctement les différents scripts, mais le script python ne semble pas se comporter correctement : le fichier conky créé est identique au modele_conky sauf qu'il fait un octet de plus.
Je me demande si c'est un problème lié au parser. Y a-t-il un lien avec l'URL http://openbox.org/3.4/rc qui renvoie "The requested URL /3.4/rc was not found on this server."
Toute aide serait bienvenue, car le script semble correspondre exactement à ce que je cherchais.
Merci !
Hors ligne
#11 Le 20/04/2012, à 03:00
- ergatif
Re : [résolu][openbox] lister les raccourcis de rc.xml
En fait j'ai réussi à faire tourner ce script en remplaçant les 2 lignes du script python raccourcis.py, (ou shortcuts.py) :
strRoot="{http://openbox.org/3.4/rc}"
par
strRoot=""
Pourtant j'ai un openbox 3.4.10...
Une mise-à-jour du script paraît nécessaire
Merci pour ce joli code bien utile
Hors ligne