Coucou les mecs,

Voulant convertir le code du Pybraces issu de edsharp et N'aimant pas me faire ch... plus que ça, j'ai recherché s'il n'existait pas en ligne des convertisseurs que je pourrais utiliser pour traduire instantanément du C# en python.

Et apparemment les convertisseurs de code source en tout genre sont foisonnant sur le net, si on en croit mon moteur de recherche favorit.

Néanmoins après avoir fait face à quelques enquiquinants problèmes d'accessibilité, ce n'est qu'à mon troisième site visité que j'ai finalement pu réalisé ce que je cherchais.

Certes c'est un outil qui a converti du C# au iron python à partir du framework .net 4, mais je ne vais pas faire la fine bouche car ça me facilite grandement le travail.

Ce site que ma foi je retiens pour mes futurs besoins de convertion en .net se trouve à l'adresse:
http://codeconverter.sharpdevelop.net/SnippetConverter.aspx


Le code qu'il m'a produit est le suivant:

Début du code iron python

class pyBraces():

# InvokeSnippet method
def PyDent2Brace(self, sText):
 sText = Util.RegExpReplaceCase(sText, @"^\t*\# end \w+$", "")
 sOld = sText
 while True:
  sText = Util.RegExpReplaceCase(sText, @"^(\t*) ", "$1\t")
  if sText == sOld:
   break
  else:
   sOld = sText
 # does not work
 #
 # sText = Util.RegExpReplaceCase(sText, @"^\t*\#", "#");
 # sText = Util.RegExpReplaceCase(sText, @"^\#([^ ])", "# $1");
 # string[] aIndent = Util.RegExpExtractCase(sText, @"^\t+");
 # int iMax = 0;
 # int iMin = 1000;
 # foreach (string s in aIndent) {
 # iLength = s.Length;
 # if (iLength > iMax) iMax = iLength;
 # if (iLength < iMin) iMin = iLength;
 # }
 #
 # if (iMin > 0) {
 # string sMin = "\t".PadRight(iMin, '\t');
 # string sAbbrev = "\t".PadRight(iMin - 1, '\t');
 # for (int n = 1; n <= iMax / iMin; n++) {
 # sText = Util.RegExpReplaceCase(sText, @"^" + sMin, sAbbrev);
 # }
 # }
 #
 hl = HomerList(sText.Split('\n'))
 i = 0
 iOldLevel = 0
 iCount = 0
 a =
 hlCode = HomerList()
 hlLevel = HomerList()
 bTripleQuote = False
 iBrace = 0
 iBracket = 0
 iParen = 0
 iTripleQuote = 0
 iDoubleQuote = 0
 iSingleQuote = 0
 bQuote = False
 while i < hl.Count:
  sLine = hl[i]
  sTrim = sLine.TrimEnd()
  sPack = sTrim.TrimStart()
  iTrim = sTrim.Length
  iPack = sPack.Length
  if not bTripleQuote and (iPack == 0 or sPack.StartsWith("#")):
   hl[i] = sPack
  else:
   iParen = 0
   iBracket = 0
   iBrace = 0
   iSingleQuote = 0
   iDoubleQuote = 0
   while True:
    iCharCount = iPack
    iChar = 0
    while iChar < iCharCount:
     if sPack[iChar] == '"':
      if iChar > 0 and sPack[iChar - 1] == '\\':
       break
if (iChar + 2 < iCharCount) and sPack[iChar + 1] == '"' and sPack[iChar + 2] == '"':
       if bTripleQuote and iTripleQuote > 0:
        bTripleQuote = False
        bQuote = False
        iTripleQuote -= 1
        iSingleQuote = 0
        iDoubleQuote = 0
       elif not bQuote and not bTripleQuote and iTripleQuote == 0:
        bTripleQuote = True
        bQuote = True
        iTripleQuote += 1
        iSingleQuote = 0
        iDoubleQuote = 0
       iChar += 2
      elif bQuote and iDoubleQuote > 0:
       bQuote = False
       iDoubleQuote -= 1
      elif not bQuote and iDoubleQuote == 0:
       bQuote = True
       iDoubleQuote += 1
     elif sPack[iChar] == '\'':
      if iChar > 0 and sPack[iChar - 1] == '\\':
       break
      if bQuote and iSingleQuote > 0:
       bQuote = False
       iSingleQuote -= 1
      elif not bQuote and iSingleQuote == 0:
       bQuote = True
       iSingleQuote += 1
     elif sPack[iChar] == '(':
      if not bQuote:
       iParen += 1
     elif sPack[iChar] == ')':
      if not bQuote:
       iParen -= 1
     elif sPack[iChar] == '[':
      if not bQuote:
       iBracket += 1
     elif sPack[iChar] == ']':
      if not bQuote:
       iBracket -= 1
     elif sPack[iChar] == '{':
      if not bQuote:
       iBrace += 1
     elif sPack[iChar] == '}':
      if not bQuote:
       iBrace -= 1
     iChar += 1
    if (iParen + iBracket + iBrace == 0) or bTripleQuote:
     break
    hl[i] = sPack + @" \"
while i < hl.Count and (hl[i].Trim().Length == 0 or hl[i].TrimStart().StartsWith("#")):
     i += 1
    if i == hl.Count:
     break
    sLine = hl[i]
    sTrim = sLine.TrimEnd()
    iTrim = sTrim.Length
    sPack = sTrim.TrimStart()
    iPack = sPack.Length
   if i == hl.Count:
    break
   if bTripleQuote:
    hl[i] = sTrim
   else:
    iNewLevel = iTrim - iPack
    #if (i == 75 || i == 76) Dialog.Show(iNewLevel, hl[i]);
    iDelta = iOldLevel - iNewLevel
    k = i - 1
    while k >= 0 and hl[k].StartsWith("#"):
     k -= 1
    k += 1
while hlCode.Count > 0 and iDelta > 0 and Int32.Parse(hlLevel[hlLevel.Max]) >= iNewLevel:
     hl.Insert(k, "} end " + hlCode.Pop())
     hlLevel.Pop()
     iCount -= 1
     i += 1
     k += 1
     iDelta -= 1
    if iOldLevel > iNewLevel:
     hl.Insert(k, "")
     i += 1
    iOldLevel = iNewLevel
    if sPack.EndsWith(":"):
     sPack = sPack.TrimEnd(a) + " {"
     iCount += 1
     aCode = sPack.Split(' ')
     hlCode.Add(aCode[0].TrimEnd('{'))
     hlLevel.Add(iNewLevel.ToString())
    elif sPack.EndsWith(@"\"):
     hl[i] = sPack
     i += 1
     if i == iCount:
      break
     sPack = hl[i].Trim()
    hl[i] = sPack
  i += 1
 while iCount > 0:
  hl.Add("} end " + hlCode.Pop())
  iCount -= 1
 sText = String.Join("\n", hl.ToArray()).Trim() + "\n"
 sText = Util.RegExpReplaceCase(sText, @"\n\n+", "\n\n")
 sText = Util.RegExpReplaceCase(sText, @"\n+\n\}", "\n}")
 sText = Util.RegExpReplaceCase(sText, @"\n+el", "\nel")
 return sText
# PyDent2Brace method
def PyBrace2Dent(self, sText):
 sText = Util.RegExpReplaceCase(sText, @"^\t*\# end \w+$", "")
 #sText = Util.RegExpReplaceCase(sText, @"^\t*\#", "#");
 #sText = Util.RegExpReplaceCase(sText, @"^\#([^ ])", "# $1");
 hl = HomerList(sText.Split('\n'))
 i = 0
 iCount = 0
 a =
 hlCode = HomerList()
 sIndent = App.ReadOption("IndentUnit", "  ")
 sIndent = Util.Literalize(sIndent)
 while i < hl.Count:
  sPack = hl[i].Trim()
  #if (iCount > 0) sLine = "\t".PadLeft(iCount, '\t') + sPack;
  if iCount > 0:
   sLine = Util.Replicate(sIndent, iCount) + sPack
  else:
   sLine = sPack
  if sPack.EndsWith("{"):
   sLine = sLine.TrimEnd(a) + ":"
   iCount += 1
   aCode = sPack.Split(' ')
   hlCode.Add(aCode[0].TrimEnd('{'))
  elif sPack.StartsWith("}"):
   sLine = "# end " + hlCode.Pop()
   #if (iCount > 1) sLine = "\t".PadLeft(iCount - 1, '\t') + sLine;
   if iCount > 1:
    sLine = Util.Replicate(sIndent, iCount - 1) + sLine
   iCount -= 1
  hl[i] = sLine
  i += 1
 sText = String.Join("\n", hl.ToArray()).Trim() + "\n"
 sText = Util.RegExpReplaceCase(sText, @"\n+\n", "\n\n")
 #sText = Util.RegExpReplaceCase(sText, @"\n+(\t*)el", "\n$1el");
 sText = Util.RegExpReplaceCase(sText, @"\n+(" + sIndent + ")el", "\n$1el")
 return sText
# PyBrace2Dent method


Fin du code iron python

Faudra maintenant trouver les équivalant d'objets .net en python classique.

Yannick Daniel Youalé
La programmation est une religion. Aimez-la, ou quittez-la.
www.visuweb.net







----- Original Message ----- From: "_Abdel_" <[email protected]>
To: <[email protected]>
Sent: Tuesday, January 26, 2016 11:45 PM
Subject: [progliste] Re: Extension pour 6pad++


Ouais ouais JF,

En fait, je pense que le PB que tu rencontres est lié au fait que tu as déjà un événement "pageOpened" dans ton fichier "6pad++.py", puisque tu m'as dis que tu en avais programmé 1.

Le PB est donc parfaitement logique, si tu utilise l'extension forPython, étant-donné que cette extension l'utilise aussi, ca a du faire un conflit d'événement "pageOpened".

Pour solutionner le PB, à mon avis, il faudrait tout simplement réunir tout ce que tu veux faire dans une seule et unique fonction événementielle "pageOpened", et ça devrait rouler.

Pour les constantes, Quentin vient de nous les donner, merci à lui.

Bien amicalement,
Abdel.

----- Original Message ----- From: "Jean-François Colas" <[email protected]>
To: <[email protected]>
Sent: Tuesday, January 26, 2016 10:41 PM
Subject: [progliste] Re: Extension pour 6pad++


Salut Abdel et tous,

Ah OK, donc c'est le même secret que celui que je m'apprête à mettre en place. Ne pourrait-on pas fabriquer un fichier de constantes, un dico, un truc qui permettrait de savoir directement que 38 c'est la flèche bas ou je ne sais trop quoi... Bon ça c'est pour le côté pauvre progra mmeur, l'ordi n'en a rien à carrer... Puis ya pas d'urgence.

Pour le plantage, tu as sans doute raison, mais ya trop de choses qui ont changé entre hier et aujourd'hui, aujourd'hui ton module n'est pas activable et je ne sais pas pourquoi parce que je n'ai pas gardé celui d'hier... Ce qui est sûr, c'est que je suis assez près de débusquer un zoh-oli plantage, il sera certainement dû à un truc qu'on devrait pas faire mais il plante 6Pad++ sérieux. Je continue mes investigations demain. Je crois que c'est lié à la gestion des instances de la classe Page, décidément j'ai quelques soucis avec celle-là lol.

J.-F.


Le 25/01/2016 23:49, _Abdel_ a écrit :
Salut JF et la liste,

Pour les scan codes, voici mon secret :

def onKeyDown(activePage, vk):
   sp.say(str(vk), True)
   return True

Tu es obligé de retourner True si tu veux pouvoir refermer le programme avec Alt F4, sinon, il ne voudra pas se fermer.

C'est normal, on ne retourne False que si l'on souhaite que la touche en question fasse une action différente de celle par défaut.

Pour le plantage, je ne pense pas qu'il vienne de là, car ici, sur trois PC, je n'ai eu aucun plantage...

En faite, si je n'avais pas associé un événement "pageOpened", le PB que j'avais, c'est que l'événement "keyDown" que j'ai utilisé ne fonctionnait qu'à Louverture de 6pad++, mais pas si j'ouvrais une nouvelle page...

Apparemment, selon les tests que j'ai fait, l'événement "keyDown" personnalisé ne fonctionne que lors de l'ouverture de 6pad++, mais il ne fonctionne pas si l'on ouvre une nouvelle page avec Contrôle O, c'est pourquoi je l'ai appelé également dans la fonction callback de l'événement "pageOpened".

Sinon, je m'excuse pour le double postage de mon dernier mail, ne l'ayant pas vu passer sur la liste, je l'ai envoyé à nouveaux...

Voila, bonne soirée et à bientôt.

Bien amicalement,
Abdel.

----- Original Message ----- From: "Jean-François Colas" <[email protected]>
To: <[email protected]>
Sent: Monday, January 25, 2016 10:59 PM
Subject: [progliste] Re: Extension pour 6pad++


Hello tous,

Petit passage rapide sur mon adresse du soir...

Juste deux petits points à aborder, dont un qui me semble pas mal d'actualité si on parle de développements communs.

Abdel, en regardant la fonction onKeyDown de ton module, je crois piger que le paramètre vk correspond aux "scan codes" des touches. Quelle est ta source pour déterminer ces scan codes? Je crois qu'il y a longtemps, j'avais une référence, mais apparemment, je ne la retrouve pas...

Sinon, quand j'ai mis la nouvelle version de forPython, j'ai eu droit à un vieux plantage:

6pad++.exe
6pad++.exe ne répond pas
Windows peut rechercher une solution en ligne. Si vous fermez le programme, vous risquez de
perdre des informations.
Rechercher une solution et fermer le programme
Fermer le programme
Attendre que le programme réponde.
Voir des détails sur ce problème

Pour une raison apparemment toute bête: A la fois dans ce module et dans mon 6Pad++.py, se trouve une ligne
sp.window.addEvent ("pageOpened", uneFonctionAssociée)

Ca me paraît pas systématique à 100%, alors peut-être déjà, est-ce que c'est plausible en soi, ou bien est-ce que le problème vient forcément d'ailleurs?

Voilà, ce sera mon dernier mot du soir...

J.-F.


Le 23/01/2016 18:17, _Abdel_ a écrit :
Salut JF et la liste,

Merci, je te joins ce que j'ai pu faire jusqu'à présent.

Avec CTRL + F8, on bascule désormais entre le mode "Dire les numéros de
lignes", "Dire les niveaux", "Dire les numéros de lignes et les
niveaux", et "Ne rien dire", qui est le choix par défaut.

PS :

Ta méthode pour la lecture des entêtes et très précise, car elle prend
en considération les doubles ou multiples tabulations.

On verra par la suite comment créer un menu, et proposer la
modifications des touches de racourcis.

Vous pouvez me dire ce que vous en pensez, et vous êtes tout à fait
autorisés à modifier le code comme vous voulez, c'est un travail de
partage et d'entraide.

Bien amicalement,
Abdel.

----- Original Message ----- From: "Jean-François Colas" <[email protected]>
To: <[email protected]>
Sent: Saturday, January 23, 2016 2:39 PM
Subject: [progliste] Re: Extension pour 6pad++


Hello,

Avec, pourquoi pas, à terme, un module permettant de modifier un jeu
de raccourcis clavier, avec liste des fonctions disponibles, détection
de conflits de raccourcis... histoire de ne pas s'y perdre. Comme ça,
tu distribue ton module, je modifie le jeu de raccourcis, tu
distribues une nouvelle version de ton module, plutôt que de tout
reprendre je réapplique chez moi mon jeu de raccourcis si besoin...

J.-F.


Le 21/01/2016 14:12, _Abdel_ a écrit :
OK Mathieu, super !

En fait, pour que tout le monde y trouve son compte, ne vous
inquiétez pas pour les raccourcis clavier, chacun pourra très bien
modifier ses sixpad.window.addAccelerator comme bon lui semble.

Le plus important, ce serait de réussir à créer une extension digne
de ce nom, qui permette à chacun d'entre nous de créer des programmes
Python en toute accessibilité, avec ce super éditeur qu'est 6pad++ !

Bien amicalement,
Abdel.

----- Original Message ----- From: "Mathieu Barbe"
<[email protected]>
To: <[email protected]>
Sent: Thursday, January 21, 2016 1:53 PM
Subject: [progliste] Re: Extension pour 6pad++


C'est  bon, ça marche.
C'est pas grâce à ta technique.
Je suis trop nul, pour mes tests j'avais ouvert des fichier python
sans fonctions.
Le boulait!
Merci.



Le 21/01/2016 12:24, _Abdel_ a écrit :
Salut Mathieu,

C'est vrai que j'ai aussi eu un peu de mal pour faire reconnaître
l'extension.

Essaie ce qui suit:

1. Tu ouvres l'éditeur 6pad++.

2. Tu presses la touche F12 pour afficher la console.

3. Dans la console, tu écris ce qui suit, sans les guillemets bien
entendu, puis tu valides avec entrée :

"sixpad.setConfig("extension", "plugins/forPython.py")

Après, pour vérifier l'activation, toujours dans la console, tu
écris ce qui suit, puis tu valides sur entrée :

"print(sixpad.getConfig("extension"))"

Attention, pour ceux qui ne sont pas familiers avec Python 3.4, le
paramètre de print doit être entre parenthèses.

Bien amicalement,
Abdel.

----- Original Message ----- From: "Mathieu Barbe"
<[email protected]>
To: <[email protected]>
Sent: Thursday, January 21, 2016 12:13 PM
Subject: [progliste] Re: Extension pour 6pad++


+1.
J'ai installé le plugins, mais cela ne fonctionne pas.
Puis-je voir si le plugins est bien lancé?
Math

Le 21/01/2016 12:12, QuentinC a écrit :
Salut,

En fait il faudrait utiliser des raccourcis genre Alt+Haut/Bas
pour aller de fonction en fonction ou de classe en classe. C'est
beaucoup plus pratique que de chercher F2.
Progliste :
Pour se désinscrire de la liste :
mailto:[email protected]?subject=unsubscribe

Pour voir les archives de la liste :
http://www.mail-archive.com/[email protected]/

Je vous rappelle que les pièces jointe sont activés leur taille
est limité à 2 MO
Pour accéder aux fichiers de la liste
http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr
Ou en utilisant la nouvelle page de partage :
http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt
Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en
privé, je vous répondrez en privé.



--
Mathieu Barbe
Research Engineer at CEA-LETI
DRT/LETI/DACLE/ LIALP
Laboratoire Infrastructures et Ateliers pour le Logiciel sur Puces

Commissariat à l’énergie atomique et aux énergies alternatives
MINATEC Campus | 17 rue des Martyrs | 38054 Grenoble Cedex 9
Tel : +33 (0)4 38 78 30 08
[email protected]

Progliste :
Pour se désinscrire de la liste :
mailto:[email protected]?subject=unsubscribe

Pour voir les archives de la liste :
http://www.mail-archive.com/[email protected]/
Je vous rappelle que les pièces jointe sont activés leur taille
est limité à 2 MO
Pour accéder aux fichiers de la liste
http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr
Ou en utilisant la nouvelle page de partage :
http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt
Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en
privé, je vous répondrez en privé.




Progliste :
Pour se désinscrire de la liste :
mailto:[email protected]?subject=unsubscribe

Pour voir les archives de la liste :
http://www.mail-archive.com/[email protected]/

Je vous rappelle que les pièces jointe sont activés leur taille est
limité à 2 MO
Pour accéder aux fichiers de la liste
http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr
Ou en utilisant la nouvelle page de partage :
http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt
Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en
privé, je vous répondrez en privé.



--
Mathieu Barbe
Research Engineer at CEA-LETI
DRT/LETI/DACLE/ LIALP
Laboratoire Infrastructures et Ateliers pour le Logiciel sur Puces

Commissariat à l’énergie atomique et aux énergies alternatives
MINATEC Campus | 17 rue des Martyrs | 38054 Grenoble Cedex 9
Tel : +33 (0)4 38 78 30 08
[email protected]

Progliste :
Pour se désinscrire de la liste :
mailto:[email protected]?subject=unsubscribe

Pour voir les archives de la liste :
http://www.mail-archive.com/[email protected]/
Je vous rappelle que les pièces jointe sont activés leur taille est
limité à 2 MO
Pour accéder aux fichiers de la liste
http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr
Ou en utilisant la nouvelle page de partage :
http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt
Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en
privé, je vous répondrez en privé.




Progliste :
Pour se désinscrire de la liste :
mailto:[email protected]?subject=unsubscribe

Pour voir les archives de la liste :
http://www.mail-archive.com/[email protected]/

Je vous rappelle que les pièces jointe sont activés leur taille est
limité à 2 MO
Pour accéder aux fichiers de la liste
http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr
Ou en utilisant la nouvelle page de partage :
http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt
Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en
privé, je vous répondrez en privé.


Progliste :
Pour se désinscrire de la liste :
mailto:[email protected]?subject=unsubscribe

Pour voir les archives de la liste :
http://www.mail-archive.com/[email protected]/
Je vous rappelle que les pièces jointe sont activés leur taille est
limité à 2 MO
Pour accéder aux fichiers de la liste
http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr
Ou en utilisant la nouvelle page de partage :
http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt
Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en
privé, je vous répondrez en privé.



Progliste :
Pour se désinscrire de la liste : mailto:[email protected]?subject=unsubscribe

Pour voir les archives de la liste :
http://www.mail-archive.com/[email protected]/
Je vous rappelle que les pièces jointe sont activés leur taille est limité à 2 MO
Pour accéder aux fichiers de la liste
http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr
Ou en utilisant la nouvelle page de partage :
http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt
Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en privé, je vous répondrez en privé.




Progliste :
Pour se désinscrire de la liste : mailto:[email protected]?subject=unsubscribe

Pour voir les archives de la liste :
http://www.mail-archive.com/[email protected]/

Je vous rappelle que les pièces jointe sont activés leur taille est limité à 2 MO
Pour accéder aux fichiers de la liste
http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr
Ou en utilisant la nouvelle page de partage :
http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt
Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en privé, je vous répondrez en privé.


Progliste :
Pour se désinscrire de la liste : mailto:[email protected]?subject=unsubscribe

Pour voir les archives de la liste :
http://www.mail-archive.com/[email protected]/
Je vous rappelle que les pièces jointe sont activés leur taille est limité à 2 MO
Pour accéder aux fichiers de la liste
http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr
Ou en utilisant la nouvelle page de partage :
http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt
Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en privé, je vous répondrez en privé.




Progliste :
Pour se désinscrire de la liste : mailto:[email protected]?subject=unsubscribe

Pour voir les archives de la liste :
http://www.mail-archive.com/[email protected]/
Je vous rappelle que les pièces jointe sont activés leur taille est limité à 2 MO
Pour accéder aux fichiers de la liste
http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr
Ou en utilisant la nouvelle page de partage :
http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt
Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en privé, je vous répondrez en privé.




Progliste :
Pour se désinscrire de la liste : 
mailto:[email protected]?subject=unsubscribe

Pour voir les archives de la liste :
http://www.mail-archive.com/[email protected]/       

Je vous rappelle que les pièces jointe sont activés leur taille est limité à 2 MO
Pour accéder aux fichiers de la liste
http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr
Ou en utilisant la nouvelle page de partage :
http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt
Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en privé, je 
vous répondrez en privé.
        
        

Répondre à