> Drush Shell - La completion des commandes drush pour Bash (ou autre)

drush_shell

Drush shell est un projet tout simple dont le but est de fournir à drush une infrastructure d'auto-complètement utilisable notamment avec le shell bash.

<!--break-->

Installation

Tout d'abord récupérez les sources du module en passant par gitweb. Il suffit ensuite de décompresser l'archive n'importe où pour peu que ce soit accessible par drush (voir la documentation pour savoir où mettre les greffons drush).

Pour tester que l'installation fonctionne, vérifiez, en tapant drush que la commande complete apparaît bien. Si tel est le cas, il ne reste plus qu'à lier le script bash fournit dans le dossier des scripts d'auto-complètement

root#chmod +x /usr/share/local/drush/modules/drush_shell/bash_completion.sh
root#ln -s /usr/share/local/drush/modules/drush_shell/bash_completion.sh /etc/bash_completion.d/drush_shell.sh
 
# optionnel, lancer le script à la main pour ne pas avoir à relancer la session
. /usr/share/local/drush/modules/drush_shell/bash_completion.sh

Ceci fait, il vous faut relancer votre session pour que le script soit pris en compte (sauf si vous avez lancé le script à la main). Ensuite, vous pouvez normalement bénéficier de l'auto-complètement sur les commandes drush (ex. drush [tab]) et sur les paramètres de certaines commandes (pour l'instant pm-enabled et pm-disabled).

Étendre l'auto-complètement

Parti d'une discussion avec Greg Anderson, l'idée de ce module serait à terme d'être intégré à drush. Pour cela il exporte un hook drush_command_complete que n'importe quel autre module peut implémenter pour rajouter de l'auto-complètement à ses propres commandes.

    /**
 * Implementation of hook_drush_command_complete().
 */

function core_completion_drush_command_complete() {
  $args = func_get_args();
  switch (count($args)) {
    case 2 : // drush commands
      switch ($args[1]) {
        case 'pm-enable' :
        case 'pm-disable' :
          drush_bootstrap(DRUSH_BOOTSTRAP_DRUPAL_FULL);
          $modules = drush_pm_get_projects();
          $needed_status=in_array($args[1], array('pm-enable'))?0:1;
          foreach ($modules as $name => $module) {
            if ($module->type == 'module' && $module->status==$needed_status) {
              $result[]=$name;
            }
          }
          return $result;
          break;
      }
  }
}
Exemple de l'implémentation de drush_command_complete

Ce hook reçoit en paramètres tous les arguments de la ligne de commande déjà complétés en commençant par la commande drush elle-même. Ainsi si vous en êtres à drush en c[tab], il recevra drush et en mais pas c qui n'est pas encore complété. La raison à cela est que le complètement (filtrer une liste à partir du début d'un de ses membres) est gérée par le shell lui-même. Le hook fournit donc systématiquement des listes complètes (non filtrés).

Enfin, le hook, s'il reconnaît un séquence command/paramètres à prendre en charge, renverra un simple tableau de chaînes de caractères décrivant la liste des possibles. Sinon, il ne renverra rien.

Conclusion

Comme toujours, il ne faut pas hésiter à donner votre avis, proposer des patchs, des idées, etc.

Vus : 528
Publié par arNuméral : 54