Sublime Text : détection des indentations tab/space

Alors voilà, vous vous êtes mis à Sublime Text 2 (http:// www. sublimetext.com/2), parce que c’est un éditeur de texte topissimissime.

Vous prévoyez de vous en servir pour un ensemble de projets et de fichiers de code existants, ayant des conventions différentes concernant les indentations en tabulations/espace. Pour diverses raisons, (justifiées ou non), vous n’avez pas envie de tout homogénéiser à grands coups de replace, alors vous avez gardé cette configuration :

"translate_tabs_to_spaces": false,

 

Le problème

Vous vous attelez à un projet indenté avec des espaces, vous y créez un nouveau fichier de code (mettons que ce soit du python). Dès la première définition de fonction, vous tapez manuellement les 4 espaces d’indentation, afin de bien indiquer à Sublime Text que c’est ça que vous voulez. Lorsque vous passez à la ligne suivante, c’est bien des espaces qui sont automatiquement ajoutés.

Ensuite, c’est la merde.

Pour reculer d’une indentation, vous êtes obligé d’appuyer 4 fois sur backspace. Et chaque fois que vous écrivez un if, un while ou autre, le niveau d’indentation automatiquement ajouté est écrit avec une tabulation.

Vous vous retrouvez donc avec de la cagassade comme ça :

screenshot_space_tab_02,

ce qui ne manque pas de faire hurler l’interpréteur python.

Vous êtes constamment obligé de remettre manuellement des espaces. Vous ne comprenez pas pourquoi cet abruti de Sublime Text ne comprend pas la convention de ce fichier en particulier, alors que celui-ci contient déjà trouzemille lignes de code indentées bien comme il faut.

 

L’interrogation existentielle

La configuration de Sublime Text est définie dans différents fichiers, qui se recouvrent les uns à la suite des autres (config globale, config d’un package, d’un projet, …). Ce n’est pas toujours évident de déduire les valeurs utilisées au final. Heureusement, il est possible de les vérifier.

Vous ouvrez la console, via l’option du Menu principal « View -> Show Console », puis vous tapez fébrilement les commandes suivantes :

view.settings().get("translate_tabs_to_spaces")
False
view.settings().get("tab_size")
4
view.settings().get("detect_indentation")
True
view.settings().get("auto_indent")
True
view.settings().get("smart_indent")
True

sublime_text_console

Tout semble normal.

Alors, vous décidez que Sublime Text n’est pas si génial que ce qu’on en dit, et vous reprenez ce bon vieux Notepad (pas Notepad++, Notepad tout court). C’est de la chiottasse, mais au moins, c’est de la chiottasse maîtrisée.

Notepad à l'apogée de son utilisation

Notepad à l’apogée de son utilisation

 

La solution

Sublime Text est capable de simplifier les ajouts et retraits d’indentation, qu’ils soient en tab ou en espace. Mais pour y parvenir, il doit préalablement déduire la convention du fichier à partir de son contenu actuel. Cette déduction n’est déclenchée qu’à l’ouverture. Comme il s’agit d’un fichier que vous aviez créé, rien n’a été déduit puisqu’il était vide au départ.

Il suffit de fermer puis réouvrir le fichier, et tout va mieux. (Pas la peine de redémarrer Sublime Text, juste l’onglet du fichier concerné). Il existe par ailleurs une commande pour relancer la déduction, mais je ne sais plus où elle est, et osef.

Il faut un nombre suffisant de lignes indentées (une dizaine) pour que cette déduction soit garantie. Naturellement, il faut qu’elles soient toutes homogènes, et si c’est des espaces, il en faut le même nombre à chaque fois.

 

La sodomie drosophilienne

(Ça veut dire « enculage de mouche »)

La déduction d’indentation est également déclenchée lorsqu’on copie-colle une quantité conséquente de texte dans un fichier vide. On va jouer un peu avec ça.

Créer un nouveau fichier (File -> New File, ou raccourci Ctrl+N). Copier-collez le texte suivant dedans :

def truc():
    1
    2
    3
    4
    5
    6
    7
    8
    9
    0

(Il y a 10 lignes indentées, chacune avec 4 espaces).

Placez votre curseur juste après le « 0 » de la dernière ligne.

Appuyez sur « Entrée ». Une ligne indentée s’ajoute. Elle comporte 4 espaces.

Appuyez sur Backspace.

Les 4 espaces sont retirés en une seule fois et le curseur revient au début de la ligne. Sublime Text a compris que l’indentation de ce fichier est sous forme de 4 espaces. Il n’est même pas nécessaire de préciser que la syntaxe est du python. (D’ailleurs c’en est pas vraiment, car écrire des lignes ne comportant qu’un chiffre n’a que peu de sens).

copypast_ok

Recréez ensuite un nouveau fichier. Ne repartez pas du fichier précédent, car Sublime Text lui a déjà attribué une convention.

Copier-collez le même texte mais sans la dernière ligne.

Placez votre curseur juste après le « 9 ».

Appuyez sur « Entrée ». Une ligne indentée s’ajoute. Elle comporte 4 espaces.

Appuyez sur Backspace.

Seul un espace est retiré. Sublime Text n’a pas compris que l’indentation de ce fichier est sous forme d’espaces. Il garde le comportement par défaut, qui est une indentation indéterminée.

copypast_fail

Pour info, j’utilise Sublime Text version 2.0.2, Build 2221.

Toute cette drosophilophilie pour dire qu’avec la dernière génération d’éditeurs de texte (Sublime, Atom, …), on n’a plus vraiment besoin de se soucier du choix tabulations/espaces. J’ai récemment créé un nouveau projet python + django, j’ai passé 3 jours dessus avant de m’apercevoir que certains fichiers étaient indentés avec des espaces et d’autres avec des tabulations !

Ça ne dérange ni python, ni Sublime Text, ni la personne qui code d’avoir des fichiers mixés. Cependant, il est toujours nécessaire d’appliquer la même convention au sein d’un même fichier, et il vaut mieux comprendre avec précision le comportement et l’intelligence de ces nouveaux éditeurs de texte.

Malgré ces petites gênes qui subsistent, il semble donc que la rivalité millénaire entre les tabulistes et les espaciens s’estompe progressivement, ce qui est à mon avis une bonne chose.

Strips-Indentation-600-final

 

Le réconfort

Maintenant que vous connaissez cette subtilité, à vos claviers, mesdames les codeuses et messieurs les codeurs !

moretomeasure_by_fatty_lover-d5stsk4

Je suis z’en r’tard ! z’en r’tard !

Le magazine 42 est mon berger, je n’en voudrais pas d’autres.

Il me guide vers les jeux vidéos auxquels mon esprit s’accrochera.

Il redirige mes yeux vers les comics, les musiques, les niouzes, et le n’importe-quoi qu’il est bon de découvrir, car cela est bon.

Tandis que je marche dans la vallée des zéros-sans-uns qui mène au bouton « démarrer-arrêter », je n’ai pas peur de voir mon âme se disperser et ma pseudo-morale s’étioler dans les aisselles de trolls.

Le visage rempli de quiétude et de bonheur sage, je parcours les forums et sillonne les blogs, les octets du magazine dans une main, mon clavier dans l’autre, et à tous les kevins que je croise, je dis : « tu es amour, reçois le miel de la connaissance dont sont imprégnées ces pages-partages, et partage-page-les avec tes proches, car ils ont le même amour dans leurs réseau social ».

Ça me fait plaisir de revenir ici, dit l’apôtre.

enhanced buzz Jesus 9667-1270841394-4

Comme vous l’avez non-deviné dans cette biblique introduction, j’ai un peu de retard dans mes récapitulatifs d’articles écrits pour le magazine 42. Rattrapons, et ron et ron, petit. Rattrapons.

Numéro 22

Le thème c’était l’école.

magazine 42 numéro 22 couverture

Si j’avais eu un peu moins de flemme et un peu plus de couilles, j’aurais pondu un article rempli de haine, catharsisant mon aversion pour les professeurs. Je déteste les profs. Pour tout un tas de raisons, de détails et de souvenirs, je les déteste. Je vous raconterais tout cela un jour. Mais ce ne sera pas dans le magazine 42, ce sera ici.

Or donc, récapitulons, et lon et lon, petit, récapitulons.

Page 13 : les fausses pubs.

La première est un peu cheap. Mais il faut noter qu’elle comporte 2 niveaux de lolitude. Le premier étant : « hahaha, du texte en 3D, it does not make sense. hahaha ». Le deuxième étant le texte en lui-même, qui est mâtiné d’une dose de n’importe-quoi tellement grosse qu’elle en est parodique. Je me moque de nous-mêmes, rédacteurs de 42, et du n’importe-quoi que nous rédactons. Hahaha, donc.

C’est drôle-drôle-drôle. Sauf que le fait d’avoir décrit pourquoi c’est drôle vient tout juste d’enlever le drôlisme. Ha zut. Pas grave, c’est justement ça qui constitue le troisième niveau de lolitude. Et maintenant, riez.

funny-smiling-laughing-animals-16 orang-outang

Voilà, merci.

L’autre fausse pub, c’est juste un ras-le-bol personnel rapport aux pubs Bouygues, qui nous prennent vraiment pour des cons. Je tiens à signaler que la photo du facepalm a été faite avec un humain réel, fabriqué à partir d’autres humains réels. Ouais, on a énormément investi pour cette pub. Ça valait le coup, n’est-ce pas ?

Ça me fait penser que personne de chez Bouygues ne s’immole par le feu. Alors qu’ils devraient. Bizarre. Faudra étudier la question.

Page 28 : ma minute FUUUUUU.

C’est un nouveau concept que nous instaurâmes. Nous choisissons quelque chose qui nous fait chier, et nous gerbons allégrement dessus. Moi j’ai parlé des marges de cahiers. Je pense réellement tout ce que je dis dans l’article. C’est une petite mise en bouche pour mon futur éventuel article relatant ma haine des profs.

J’en suis assez fier de cette minute FUUU. Je pense avoir adopté un ton suffisamment pamphlétaire pour que ce soit classe.

pamphlet

Le pamphlet : un mot à l’orthographe bizarre.

Page 42 : Michel Houellebecq au lycée.

(Haha, « page 42 », comme 42 ! Vive les maths !)

J’aime bien Michel Houellebecq. J’ai lu plein de ses livres. Il « dit tout haut ce que tout le monde pensent tout bas ». Je sais, la formule est pourrie, mais là, elle fonctionne. En particulier sur des sujets tels que : « la sexualité est un système de hiérarchie sociale », « les précurseurs ne sont rien de plus que les acteurs d’une décomposition historique », et autres. Je suis pas d’accord avec tout ce qu’il dit, et des fois j’y pige carrément que d’alle, mais y’en a des autres fois que si.

Et comme ce cher Houellebecq semblait avoir eu quelques moments difficiles à l’école, je me suis dit que ce serait drôle d’imaginer une vague histoire là-dessus. Je ne sais pas ce que le principal interessé en penserait. À mon avis il s’en branle complètement. Mais j’aimerais bien qu’il m’écrive juste pour me dire que je suis un cafard gélatineux et auto-suffisant qui n’a rien compris. Insultez-moi pour que j’existe ! Insultez-moi pour que j’exiiiiiiiiiiste ! Prouuuve que tu résiiiiiiiiiiste ! Va, bats-toi, refuse ce monde égoïïïïïste !

France Gall

Il n’y a pas de mauvaise photo de France Gall

Numéro 23

L’espace en était le thème.

magazine 42 numéro 23 couverture

Page 13 : les pubs.

Une fois de plus, je suis fier de mes conneries. Le Pikachu radioactif, c’est moi qui l’ai dessiné tout seul avec mes doigts du monde réel (fabriqué à partir d’autres doigts du monde réel). Et après j’ai fait un montage pourri pour rajouter le fond, le titre, quelques fioritures, et, petit détail subtil et cocasse, le « made in Japan ». Héhé.

La deuxième pub, c’en est une vraie, pour Blarg, mon splendide jeu vidéo que vous connaissez déjà. Si ce n’est pas encore le cas, cessez d’être un vilain et allez lire l’article précédent de ce blog.

Page 58 : la minute FUUUU.

Cette fois-ci, j’ai déversé ma haine et mon aigritude sur les mots « cosmonautes », « astronautes », « spationautes », etc.

Je la trouve vraiment débile cette distinction nationalitaire. Tout le monde s’en cogne. Mais quand les gens t’en parlent, ils font comme si c’était super important. Ils font les savants parce que eux se sont fait chier à apprendre ces mots, avec les pays correspondants, pour bien te faire sentir que toi t’es inférieur et que tu sais pas apprendre des mots.

Brûlons ces gens ! Brûlons les mots ! Tous ! Afin d’être sûr que d’autres imbéciles sortant de terre n’iront pas les réutiliser de manière pernicieuse et malsaine, pour nous faire nous sentir inférieur, encore et encore. Que brûûûûle !!!

bartimaus11 angry mob simpsons

Page 65 : comment faire un moteur 3D.

Qui a dit que ça n’avait rien à voir avec le thème du magazine ? Bien sur que si ! C’est de la géométrie dans l’espace. Yeeeaaahh !!

C’est un article avec des maths et de l’informatique dedans. Je conçois qu’il puisse être très chiant à lire, pour ceux qui ne s’intéressent à ces matières que de très loin, mais j’avais envie de l’écrire. Au cas où vous n’y auriez rien compris, dites-vous que c’est pour vous faire vous sentir inférieur. (Brûlons les maths, brûlons les maaaaaths !!)

Tout ça pour dire que la 3D, c’est bien. Ça permet des choses de ce genre, par exemple :

bombshells-024 uniquely made diva

D’autre part, si on essaie de transformer la 3D en 2D, on obtient ceci, ce qui est tout à fait bien également :

Summer Lashay 345

Il fallait que cela fut dit.

Il falloira aussi que fussera dit que l’article de 42 comporte une image de Kim Kardashian pas à poil. Voilà, c’est fallu.

Bien. Maintenant, il me reste à récapituler mes articles du numéro 24. (D’ailleurs, 42 = 24 à l’envers). Je le ferais plus tard. Ça peut attendre.

Et au fait, concernant les trucs pas intéressants ?

J’avais précédemment dit que j’éjaculais des macros Visual Basic en inter-contrat. Cette joyeuse et spermigène période est terminée. Je vais retourner à Merluchon Corp, toujours pour le compte de Deus Unlimited, à bosser sur des microcontrôleurs de tondeuse à gazon et de machines à laver (ou le contraire, je sais plus). Donc, pas trop de nouveaux articles corporate en vue. Désolé. Je vous donnâtes de faux espoirs. Cependant, j’ai encore en réserve quelques babillages répondant à cette taxonomie. Sûrement qu’ils s’éjaculeront un jour de mon cerveau.

Mais je vous rassure, ça reste un boulot de merde, hein. On change pas une merde qui merde.

Et pour reprendre ce que je disais au début, le truc avec Jésus et les apôtres :

À une époque, « espèce d’apôtre » était l’insulte à la mode. On est ensuite passé à « Baltringue », qui peut encore jouir de quelques instants de survie. « Pédé mou » marche plutôt pas mal. Je ne sais pas quelle sera la prochaine tendance. Peut-être « paillasson ».

tringle

balle-tringle !!!

C’est moi l’apôtre. Je suis une insulte. Je ne suis plus à la mode, mais ça n’a pas d’importance.

Merci et au revoir !