Pliage de code dans Emacs

Emacs, comme tout éditeur de texte digne de ce nom, propose plusieurs méthodes de pliage de code. Certaines sont conscientes du langage de programmation utilisé et adaptent le pliage en conséquence (en masquant les blocs de code détectés), d'autres sont assez bêtes et se contentent de plier suivant des marques pré-établies.

Je n'ai jamais été un grand fan du pliage de code, trouvant qu'un code raisonnablement structuré n'a pas besoin de pliage pour être lisible. Néanmoins il y a des situations dans lesquelles masquer une partie du code peut être utile. Considérons l'exemple suivant:

class HttpResponse
{
    public function generate()
    {
        $http = "HTTP/1.1 $this->status_code\\r\\n";
        $http.= "Date: ".date('r')."\\r\\n";
        $http.= "Content-Length: ".strlen($this->body)."\\r\\n";
        $http.= "\\r\\n";
        $http.= $this->body;
 
        return $http;
    }
 
    // Informational
    const STATUS_CONTINUE                        = '100 Continue';
    const STATUS_REQUEST_URI_TOO_LONG            = '122 Request-URI too long';
 
    // Success
    const STATUS_OK                              = '200 OK';
    const STATUS_CREATED                         = '201 Created';
    const STATUS_ACCEPTED                        = '202 Accepted';
 
    // Redirections
    const STATUS_MULTIPLE_CHOICES                = '300 Multiple Choices';
    const STATUS_MOVED_PERMANENTLY               = '301 Moved Permanently';
    const STATUS_FOUND                           = '302 Found';
    const STATUS_SEE_OTHER                       = '303 See Other';
    const STATUS_NOT_MODIFIED                    = '304 Not Modified';
 
    // Client error
    const STATUS_BAD_REQUEST                     = '400 Bad Request';
    const STATUS_UNAUTHORIZED                    = '401 Unauthorized';
    const STATUS_PAYMENT_REQUIRED                = '402 Payment Required';
    const STATUS_FORBIDDEN                       = '403 Forbidden';
    const STATUS_NOT_FOUND                       = '404 Not Found';
    const STATUS_METHOD_NOT_ALLOWED              = '405 Method Not Allowed';
    const STATUS_NOT_ACCEPTABLE                  = '406 Not Acceptable';
 
    // Server errors
    const STATUS_INTERNAL_SERVER_ERROR           = '500 Internal Server Error';
    const STATUS_NOT_IMPLEMENTED                 = '501 Not Implemented';
    const STATUS_BAD_GATEWAY                     = '502 Bad Gateway';
    const STATUS_SERVICE_UNAVAILABLE             = '503 Service Unavailable';
    const STATUS_GATEWAY_TIMEOUT                 = '504 Gateway Timeout';
    const STATUS_HTTP_VERSION_NOT_SUPPORTED      = '505 HTTP Version Not Supported';
}

Ici, les codes d'erreur HTTP sont juste du bruit et sont nuisibles à la lisibilité du code, et je ne vois pas vraiment comment améliorer ça (même les mettre sous le code comme ci-dessus ne change pas grand chose). Du coup c'est une bonne occasion d'utiliser le pliage dans Emacs.

Le mode mineur pour le pliage est folding-mode. Si votre distribution ne l'a pas installé avec emacs, vous pouvez le trouver ici et entrez les lignes suivantes dans votre fichier ~/.emacs:

(load "folding" 'nomessage 'noerror)
(folding-mode-add-find-file-hook)
(add-hook 'php-mode-hook 'folding-mode)

À présent, quand vous visitez un fichier, folding-mode va se charger si les variables locales indiquent que le fichier est pliable. Pour cela ajoutez la ligne suivante au début du fichier:

// -*- folded-file: t -*-

Pour plier le code lui-même, utilisez des marques comme suit:

<?php // -*- folded-file: t -*-
$msg = 'hello world';
// {{{ affichage
echo $msg;
// }}}
?>

Ce qui s'affichera ainsi une fois folding-mode chargé:

<?php // -*- folded-file: t -*-
$msg = 'hello world';
// {{{ affichage...
?>

Pour plier/déplier un bloc de code, mettez le pointer dessus et entrez la combinaison C-c @ C-q, ou alors vous pouvez cliquer-droit sur le bloc.

Vus : 1036
Publié par Etenil : 58