diff --git a/.gitattributes b/.gitattributes
index 872b1954e5fe24ff833822fecf1e5c73a0dc27f2..bad91ba3da7e7bd083d77e706eac760fe1503ac2 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -464,6 +464,7 @@ ecrire/exec/breves_edit.php -text
 ecrire/exec/breves_voir.php -text
 ecrire/exec/brouteur.php -text
 ecrire/exec/brouteur_frame.php -text
+ecrire/exec/charger_plugin_descr.php -text
 ecrire/exec/config_contenu.php -text
 ecrire/exec/config_fonctions.php -text
 ecrire/exec/config_lang.php -text
diff --git a/ecrire/exec/admin_plugin.php b/ecrire/exec/admin_plugin.php
index fd04ab268c5ca154fe16501687dac98866118f0d..3fd701d9025fe0867ec5e952a9b2250ecac6e942 100644
--- a/ecrire/exec/admin_plugin.php
+++ b/ecrire/exec/admin_plugin.php
@@ -34,7 +34,12 @@ function exec_admin_plugin_dist($retour='') {
 	echo $commencer_page(_T('icone_admin_plugin'), "configuration", "plugin");
 	
 
-	// barre_onglets("configuration", "plugin"); // a creer dynamiquement en fonction des plugin charges qui utilisent une page admin ? // cfg
+	echo "<br />\n";
+	echo "<br />\n";
+
+
+	echo gros_titre(_T('icone_admin_plugin'),'',false);
+
 	
 	echo debut_gauche('plugin',true);
 	echo debut_boite_info(true);
@@ -50,15 +55,19 @@ function exec_admin_plugin_dist($retour='') {
 	// on fait l'installation ici, cela permet aux scripts d'install de faire des affichages ...
 	installe_plugins();
 
-	echo debut_droite('plugin', true);
 
-	echo gros_titre(_T('icone_admin_plugin'),'',false);
+	// Si on a CFG, ajoute un lien (oui c'est mal)
+	if (isset($GLOBALS['meta']['plugin']['CFG'])) {
+		debut_cadre_enfonce();
+		echo icone_horizontale('CFG &ndash; '._T('configuration'), generer_url_ecrire('cfg'), 'plugin-24.gif', '', true);
+		fin_cadre_enfonce();
+	}
+
+	echo debut_droite('plugin', true);
 
 	$lpf = liste_plugin_files();
 	$lcpa = liste_chemin_plugin_actifs();
 
-	echo "<br />\n";
-
 	if ($lpf) {
 		echo debut_cadre_trait_couleur('plugin-24.gif',true,'',_T('plugins_liste'),
 		'liste_plugins');
@@ -75,11 +84,11 @@ function exec_admin_plugin_dist($retour='') {
 		if (count($lpf) - count($lcpa) > 9
 		AND _request('afficher_tous_plugins') != 'oui') {
 
-			$dir_auto  = substr(_DIR_PLUGINS_AUTO, strlen(_DIR_PLUGINS));
+			$dir_auto = substr(_DIR_PLUGINS_AUTO, strlen(_DIR_PLUGINS));
 			$lcpaffiche = array();
 			foreach ($lpf as $f)
 				if (!strpos($f, '/')
-				or substr($f, 0, strlen($dir_auto)) == $dir_auto
+				OR ($dir_auto AND substr($f, 0, strlen($dir_auto)) == $dir_auto)
 				OR in_array($f, $lcpa))
 					$lcpaffiche[] = $f;
 			$corps = "<p>"._L(count($lcpa).' plugins activ&#233;s.')."</p>\n"
@@ -147,7 +156,7 @@ function tree_open_close_dir(&$current,$target,$deplie=array()){
 }
 
 // http://doc.spip.org/@affiche_arbre_plugins
-function affiche_arbre_plugins($liste_plugins,$liste_plugins_actifs){
+function affiche_arbre_plugins($liste_plugins, $liste_plugins_actifs){
 	$racine = basename(_DIR_PLUGINS);
 	$init_dir = $current_dir = "";
 	// liste des repertoires deplies : construit en remontant l'arbo de chaque plugin actif
@@ -192,7 +201,7 @@ function affiche_arbre_plugins($liste_plugins,$liste_plugins_actifs){
 				unset($liste_plugins[$key]);
 			}
 	}
-	$res .= tree_open_close_dir($current_dir,$init_dir);
+	$res .= tree_open_close_dir($current_dir,$init_dir, true);
 
 	return http_script("
 	jQuery(function(){
diff --git a/ecrire/exec/charger_plugin_descr.php b/ecrire/exec/charger_plugin_descr.php
new file mode 100644
index 0000000000000000000000000000000000000000..c2d9fb9f97aa39d1543e45740c1812f32e5cd9e9
--- /dev/null
+++ b/ecrire/exec/charger_plugin_descr.php
@@ -0,0 +1,49 @@
+<?php
+
+/***************************************************************************\
+ *  SPIP, Systeme de publication pour l'internet                           *
+ *                                                                         *
+ *  Copyright (c) 2001-2007                                                *
+ *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
+ *                                                                         *
+ *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
+ *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
+\***************************************************************************/
+
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+include_spip('inc/plugin');
+
+// Un morceau d'ajax qui affiche le descriptif d'un plugin a partir
+// des listes de plugins a telecharger, dans exec=admin_plugin
+// http://doc.spip.org/@exec_admin_plugin_dist
+function exec_charger_plugin_descr_dist() {
+
+	if (!autoriser('configurer', 'plugins')) {
+		include_spip('inc/minipres');
+		echo minipres();
+		exit;
+	}
+
+	if ($url_plugin = _request('url')) {
+		include_spip('inc/charger_plugin');
+		include_spip('inc/texte');
+		$liste = liste_plugins_distants($url_plugin);
+		$item = $liste[$url_plugin][2];
+		include_spip('inc/presentation');
+		debut_cadre_relief();
+		echo propre('<h3><multi>'
+			.sinon($item['titre'], $liste[$url_plugin][0]).'</multi></h3>'
+			.'<multi>'.$item['descriptif'].'</multi>'
+			.$item['lesauteurs']. ' '
+			. ($item['tags']
+				? "<p>".join(' &mdash; ',$item['tags'])."</p>\n"
+				:'')
+			. propre('[->'.$liste[$url_plugin][1].']')
+			);
+		fin_cadre_relief();
+	}
+
+}
+
+?>
\ No newline at end of file
diff --git a/ecrire/inc/charger_plugin.php b/ecrire/inc/charger_plugin.php
index 8455ce96e8d8ce7e5ddd529902f3767b655de632..09bedd27968cdb13ba11ac9c8be9edceda2f663f 100644
--- a/ecrire/inc/charger_plugin.php
+++ b/ecrire/inc/charger_plugin.php
@@ -44,8 +44,9 @@ function formulaire_charger_plugin($retour='') {
 			$auto = _L("Si vous souhaitez autoriser l'installation automatique des plugins, veuillez&nbsp;:
 			<ul>
 			<li>cr&#233;er un r&#233;pertoire <code>".joli_repertoire(_DIR_PLUGINS_AUTO)."</code>&nbsp;;
-			<li>v&#233;rifier que le serveur est autoris&#233; &#224; &#233;crire dans ce r&#233;pertoire.".aide("droits")."</li>
+			<li>v&#233;rifier que le serveur est autoris&#233; &#224; &#233;crire dans ce r&#233;pertoire.".aide("install0")."</li>
 			</ul>");
+			$auto .= "<p>"._L("Certains plugins demandent aussi &#224; pouvoir t&#233;l&#233;charger des fichiers dans le r&#233;pertoire <code>lib/</code>, &#224; cr&#233;er le cas &#233;ch&#233;ant &#224; la racine du site.")."</p>";
 		}
 
 		if (!$auto)
@@ -96,9 +97,15 @@ function interface_plugins_auto($retour) {
 			
 			
 			$nick = strtolower(basename($url, '.zip'));
-			$menu[$nick] = '<div style="height:1.9em;overflow:hidden;border-bottom:1px dotted grey;"><label><input type="radio" name="url_zip_plugin" value="'.entites_html($url).'" />'."<b title='$url'>$nick</b></label> | ".$titre."</div>\n";
+			$menu[$nick] = '<div class="desc_plug"><label><input type="radio" name="url_zip_plugin" value="'.entites_html($url).'" />'."<b title='$url'>$nick</b></label> | ".$titre."</div>\n";
 		}
 		ksort($menu);
+
+		$res .= "<style type='text/css'><!--
+		.desc_plug {
+	height:1.9em;overflow:hidden;border-bottom:1px dotted grey;
+} // --></style>\n";
+
 		$res .= "<div style='border: solid 1px $couleur_foncee; padding:3px; background-color:white; height: 200px; overflow:auto;overflow-y: auto;' class='cadre-trait-couleur'>\n";
 # <select name='url_zip_plugin'>
 #			."<option>"._L('choisir...')."</option>"
@@ -106,6 +113,15 @@ function interface_plugins_auto($retour) {
 #			."\n</select></p>\n";
 		$res .= "</div>\n";
 
+		$res .= http_script("
+		jQuery('.desc_plug').click(function() {
+			var me = this;
+			jQuery('#desc').load('".generer_url_ecrire('charger_plugin_descr', 'url=', '\\x26')."'+$(me).find('input').attr('value'));
+		});")
+		."\n<div id='desc'></div>\n";
+
+
+
 		$res .= _L("ou...");
 	}
 
@@ -404,16 +420,22 @@ function essaie_ajouter_liste_plugins($url) {
 
 // Recherche les enclosures de type zip dans un flux rss ou atom
 // les renvoie sous forme de tableau url => titre
+// si $desc on ramene aussi le descriptif du paquet desc
 // http://doc.spip.org/@chercher_enclosures_zip
-function chercher_enclosures_zip($rss) {
+function chercher_enclosures_zip($rss, $desc) {
 	$liste = array();
 	include_spip('inc/syndic');
 	foreach(analyser_backend($rss) as $item)
 		if ($item['enclosures']
 		AND $zips = extraire_balises($item['enclosures'], 'a'))
 			foreach ($zips as $zip)
-				if (extraire_attribut($zip, 'type') == 'application/zip')
-					$liste[extraire_attribut($zip, 'href')] = array($item['titre'], $item['url']);
+				if (extraire_attribut($zip, 'type') == 'application/zip') {
+					if ($url = extraire_attribut($zip, 'href')) {
+						$liste[$url] = array($item['titre'], $item['url']);
+						if ($desc == $url)
+							$liste[$url][] = $item;
+					}
+				}
 	spip_log(count($liste).' enclosures au format zip');
 	return $liste;
 }
@@ -421,8 +443,9 @@ function chercher_enclosures_zip($rss) {
 
 // Renvoie la liste des plugins distants (accessibles a travers
 // l'une des listes de plugins)
+// Si on passe desc = un url, ramener le descriptif de ce paquet
 // http://doc.spip.org/@liste_plugins_distants
-function liste_plugins_distants() {
+function liste_plugins_distants($desc = false) {
 	// TODO une liste multilingue a telecharger
 	$liste = array(
 		'http://files.spip.org/spip-zone/crayons.zip' =>
@@ -441,7 +464,7 @@ function liste_plugins_distants() {
 		foreach ($flux as $url => $c) {
 			if (file_exists($cache=_DIR_TMP.'syndic_plug_'.md5($url).'.xml')
 			AND lire_fichier($cache, $rss))
-				$liste = array_merge(chercher_enclosures_zip($rss),$liste);
+				$liste = array_merge(chercher_enclosures_zip($rss, $desc),$liste);
 		}
 	}
 
diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index 048b3cc5c226097d0467df6c48fbca56eb7c0e2a..1b684f81d4b3f82d5d8d2de542315d3f2508e02b 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -439,7 +439,7 @@ function _L($text, $args=array()) {
 	if ($GLOBALS['test_i18n'])
 		return "<span style='color:red;'>$text</span>";
 	else
-		return str_replace('_', ' ',$text);
+		return $text;
 }
 
 // Afficher "ecrire/data/" au lieu de "data/" dans les messages