Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 smile 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:
sckb.th.png
Pour la souris :
raccourcisms.th.png

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 smile
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à tongue

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

RegisBurin a écrit :

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... yikes
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 hmm
Merci pour ce joli code bien utile smile

Hors ligne