<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Artisan Numérique</title>
  <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/92"/>
  <link rel="self" type="application/atom+xml" href="http://artisan.karma-lab.net/node/92/atom/feed"/>
  <id>http://artisan.karma-lab.net/node/92/atom/feed</id>
  <updated>2008-10-01T14:06:25+02:00</updated>
  <entry>
    <title>Avoir la plus belle console</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/92" />
    <id>http://artisan.karma-lab.net/node/92</id>
    <published>2006-04-05T02:48:04+02:00</published>
    <updated>2008-10-01T14:06:25+02:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="Le Bureau" />
    <category term="Aucun" />
    <category term="OK" />
    <category term="Tutoriel" />
    <summary type="html"><![CDATA[<p>
  La console est un élément central sous *nix. Pas par plus nostalgie que par l'extraordinaire puissance des commandes disponibles par ce biais. Les interface graphique montrent leur force pour toutes ces tâches courantes ou très visuelles (ex. traitement de texte) mais la ligne de commande reste la plus efficace pour traiter les milliers de besoins uniques ou particuliers.
</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>
  La console est un élément central sous *nix. Pas par plus nostalgie que par l'extraordinaire puissance des commandes disponibles par ce biais. Les interface graphique montrent leur force pour toutes ces tâches courantes ou très visuelles (ex. traitement de texte) mais la ligne de commande reste la plus efficace pour traiter les milliers de besoins uniques ou particuliers.
</p>
<!--break-->

<p>
  Donc cette console, on l'utilise souvent alors autant la bichonner. Ce qui suit n'a au fond rien de spécifique au Zaurus. Il s'agit de paramétrage propre à X11 connus de tout utilisateur de ce système. Sauf que ce sont ces choses là que je passait mon temps à rechercher et qu'il me paraissait donc intéressant de regrouper.
</p>


	<a name='chapter_1'></a>
  <h2>Paramétrage des application par défaut</h2>
	
<p>
  Une manière simple de prédéfinir l'aspect de certaines application X11 est de modifier le fichier <kbd>~/.Xdefaults</kbd>. Ainsi pour avoir une belle console <kbd>aterm</kbd> transparente, on ajouteras :
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  aterm*loginShell:true<br />
aterm*transparent:true<br />
aterm*shading:50<br />
aterm*background:Black<br />
aterm*foreground:White<br />
aterm*scrollBar:true<br />
aterm*scrollBar_right:true<br />
aterm*transpscrollbar:true<br />
aterm*saveLines:32767<br />
aterm*font:*-*-fixed-medium-r-normal--*-140-*-*-*-*-iso8859-1<br />
aterm*boldFont:*-*-fixed-bold-r-normal--*-*-140-*-*-*-*-iso8859-1<br />
aterm*geometry: 60x20+20+20
  </div>
  
  </div>
</p>
<p>
  Ces lignes ne change pas que le fond (transparent:true) mais aussi les couleurs, le nombre de lignes du buffer arrière (32767 !! <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/wink2.gif" title="Wink" alt="Wink" class="smiley-content"/> et surtout, vital pour un Zaurus, la position d'affichage (60 lignes x 20 colonnes en coordonnées 20-20), et la taille des fontes. En effet, celles par défaut sont à peu prés illisible avec des yeux humains standards.
</p>


	<a name='chapter_2'></a>
  <h2>Un meilleure console</h2>
	
<p>
  aterm/xterm ont le mérite d'exister mais il nous manque vite une console plus agréable, gérant par exemple les onglets. C'est ce que fait <kbd>mrxvt</kbd>. Attention cependant, cette console est beaucoup plus gourmande en mémoire ! Mais elle propose des onglets, une meilleur gestion des raccourcis clavier et les fontes TTF lissées. Pour ce dernier point, il est important d'installer les fontes <kbd>bitstream-vera</kbd> disponibles dans les feeds standards. Pour avoir un bon rendu visuel de <kbd>mrxvt</kbd> nous pouvons, comme pour <kbd>aterm</kbd> intégrer dans <kbd>~/.Xdefaults</kbd> les valeurs par défaut suivantes (je ne l'ai pas inventé, c'est volé quelque part <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/smile.gif" title="Smiling" alt="Smiling" class="smiley-content"/> :
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  mrxvt*vt0*saveLines: &nbsp; 1000 <br />
mrxvt*initTermNumber: &nbsp; 1 <br />
mrxvt*protectSecondary: &nbsp; true <br />
mrxvt*loginShell: &nbsp; true <br />
mrxvt*scrollBar: false <br />
mrxvt*transparent: &nbsp; true <br />
mrxvt*transparentScrollbar: true <br />
mrxvt*transparentTabbar: &nbsp; &nbsp;true <br />
mrxvt*transparentMenubar: &nbsp; true <br />
mrxvt*foreground: &nbsp; white <br />
mrxvt*background: &nbsp; darkblue <br />
mrxvt*backgroundFade: &nbsp; 90 <br />
mrxvt*fading: &nbsp; &nbsp; &nbsp;0 <br />
mrxvt*textShadow: &nbsp; black <br />
mrxvt*textShadowMode: &nbsp; botright <br />
mrxvt*tabForeground: &nbsp; white <br />
mrxvt*tabBackground: &nbsp; darkblue <br />
mrxvt*itabForeground: &nbsp; white <br />
mrxvt*itabBackground: &nbsp; darkblue <br />
mrxvt*tabPixmap: &nbsp; false <br />
mrxvt*syncTabTitle: &nbsp; true <br />
mrxvt*hideTabbar: &nbsp; false <br />
mrxvt*bottomTabbar: &nbsp; true <br />
mrxvt*windowsSwitch: &nbsp; false <br />
mrxvt*showMenu: &nbsp; &nbsp; &nbsp;false <br />
mrxvt*hideButtons: true <br />
mrxvt*xft: &nbsp; &nbsp; &nbsp;true <br />
mrxvt*xftFont: &nbsp; &nbsp; &nbsp;Bitstream Vera Sans Mono <br />
mrxvt*xftmFont: &nbsp; &nbsp; &nbsp;Bitstream Vera Sans Mono <br />
mrxvt*xftAntialias: &nbsp; true <br />
mrxvt*xftWeight: &nbsp; normal <br />
mrxvt*xftSlant: &nbsp; &nbsp; &nbsp;roman <br />
mrxvt*xftHinting: &nbsp; true <br />
mrxvt*xftAutoHint: &nbsp; true <br />
mrxvt*xftGlobalAdvance: &nbsp; true <br />
mrxvt*xftWidth: &nbsp; &nbsp; &nbsp;normal <br />
mrxvt*xftRGBA: &nbsp; &nbsp; &nbsp;rgb <br />
mrxvt*xftSize: &nbsp; &nbsp; &nbsp;14<br />
mrxvt*cursorBlink: &nbsp; false <br />
mrxvt*geometry: &nbsp; &nbsp; &nbsp;60x15+20+20<br />
mrxvt*multichar_encoding:noenc <br />
mrxvt*inputMethod: &nbsp; SCIM <br />
mrxvt*cursorColor: &nbsp; lightblue <br />
mrxvt*color0: &nbsp; &nbsp; &nbsp;black <br />
mrxvt*color1: &nbsp; &nbsp; &nbsp;#40e0d0 <br />
mrxvt*color2: &nbsp; &nbsp; &nbsp;#87cefa <br />
mrxvt*color3: &nbsp; &nbsp; &nbsp;#ffff00 <br />
mrxvt*color4: &nbsp; &nbsp; &nbsp;#d1eeee <br />
mrxvt*color5: &nbsp; &nbsp; &nbsp;#eed8ae <br />
mrxvt*color6: &nbsp; &nbsp; &nbsp;#b4eeb4 <br />
mrxvt*color7: &nbsp; &nbsp; &nbsp;gray <br />
mrxvt*color8: &nbsp; &nbsp; &nbsp;gray40 <br />
mrxvt*color9: &nbsp; &nbsp; &nbsp;#ee6363 <br />
mrxvt*color10: &nbsp; &nbsp; &nbsp;#c5f779 <br />
mrxvt*color11: &nbsp; &nbsp; &nbsp;#fff796 <br />
mrxvt*color12: &nbsp; &nbsp; &nbsp;#00b2ee <br />
mrxvt*color13: &nbsp; &nbsp; &nbsp;#cf9ebe <br />
mrxvt*color14: &nbsp; &nbsp; &nbsp;#71bebe <br />
mrxvt*color15: &nbsp; &nbsp; &nbsp;white
  </div>
  
  </div>
</p>
<p>
  Avec ce paramétrage, mrxvt devrait beaucoup plus agréable à utiliser. 
</p>


	<a name='chapter_3'></a>
  <h2>Installation de VIM</h2>
	
  <p>
    <umage name="vim.jpg" description="vim"/>
    Pour les gens normaux il y a les éditeurs de texte graphique comme celui intégré (Scise) dans pdaXrom. Mais pour les fous, il y a <kbd>vi</kbd>. Vi est un éditeur de texte à mis chemin entre le TOC, la drogue et la masochisme. Il permet d'exécuter des opération très complexes sur du texte si l'on peut mémoriser les séquences de touches qui vont avec. Mais une fois que l'on est rentré dedans, c'est inscrit directement dans l'ADN et il est à peu alors impossible de s'en passer. On est condamné à taper des <kbd>ESC :q!</kbd> dans les traitements textes jusqu'à la fin de sa vie...
  </p>
  <p>
    Maintenant que les gens normaux sont passé au chapitre suivant, nous allons remplacer le minable petit <kbd>vi</kbd> intégré à <kbd>busybox</kbd> par notre irremplaçable <kbd>vim</kbd>. Certes ce dernier est "un peu plus lourd" mais tellement plus stable et esthétique. Pensez à installer aussi le paquet de syntaxe. Ensuite, comme me l'a gentiment expliqué <kbd>dab</kbd>, il suffira d'ajouter un fichier <kbd>~/.vimrc</kbd> et d'y écrire <kbd>syntax on</kbd> pour avoir un vi avec coloration syntaxique !!! Pour terminer l'installation, vous pouvez remplacer l'ancien vi en tapant :
   
  <div class='code-block code-block-fragment'>
  <div class='container'>
  <a target="blank" href="http://pwet.fr/man/linux/commandes/mv"><span class="kw2">mv</span></a> <span class="sy0">/</span>bin<span class="sy0">/</span>vi <span class="sy0">/</span>bin<span class="sy0">/</span>vi.old<br />
<a target="blank" href="http://pwet.fr/man/linux/commandes/ln"><span class="kw2">ln</span></a> -s <span class="sy0">/</span>usr<span class="sy0">/</span>bin<span class="sy0">/</span>vim <span class="sy0">/</span>bin<span class="sy0">/</span>vi
  </div>
  
  </div>
    <br style="clear:left"/>
</p>


	<a name='chapter_4'></a>
  <h2>Un prompt plus sympathique</h2>
	
<p>
Le prompt c'est le petit indicateur, $ ou # qui précède la ligne de commande. Son apparence est contrôlé par la variable <kbd>PS1</kbd>. Au début, c'est moche et tout gris, mais comme les consoles sont toutes compatibles ANSI, il est possible d'ajouter un peu de couleur et rendre ainsi ce prompt vraiment utile. Pour mieux visualiser les couleurs disponibles et leur code ANSI respectives, le petit script suivant est bien utile :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="co0">#!/bin/bash</span><br />
<span class="co0">#</span><br />
<span class="co0"># &nbsp; This file echoes a bunch of color codes to the</span><br />
<span class="co0"># &nbsp; terminal to demonstrate what's available. &nbsp;Each</span><br />
<span class="co0"># &nbsp; line is the color code of one forground color,</span><br />
<span class="co0"># &nbsp; out of 17 (default + 16 escapes), followed by a</span><br />
<span class="co0"># &nbsp; test use of that color on all nine background</span><br />
<span class="co0"># &nbsp; colors (default + 8 escapes).</span><br />
<span class="co0">#</span><br />
<br />
<span class="re2">T=</span><span class="st0">'gYw'</span> &nbsp; <span class="co0"># The test text</span><br />
<br />
<span class="kw3">echo</span> -e <span class="st0">&quot;<span class="es0">\n</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 40m &nbsp; &nbsp; 41m &nbsp; &nbsp; 42m &nbsp; &nbsp; 43m<span class="es0">\</span><br />
&nbsp; &nbsp; &nbsp;44m &nbsp; &nbsp; 45m &nbsp; &nbsp; 46m &nbsp; &nbsp; 47m&quot;</span>;<br />
<br />
<span class="kw1">for</span> FGs <span class="kw1">in</span> <span class="st0">' &nbsp; &nbsp;m'</span> <span class="st0">' &nbsp; 1m'</span> <span class="st0">' &nbsp;30m'</span> <span class="st0">'1;30m'</span> <span class="st0">' &nbsp;31m'</span> <span class="st0">'1;31m'</span> <span class="st0">' &nbsp;32m'</span> \<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="st0">'1;32m'</span> <span class="st0">' &nbsp;33m'</span> <span class="st0">'1;33m'</span> <span class="st0">' &nbsp;34m'</span> <span class="st0">'1;34m'</span> <span class="st0">' &nbsp;35m'</span> <span class="st0">'1;35m'</span> \<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="st0">' &nbsp;36m'</span> <span class="st0">'1;36m'</span> <span class="st0">' &nbsp;37m'</span> <span class="st0">'1;37m'</span>;<br />
&nbsp; <span class="kw1">do</span> <span class="re2">FG=</span><span class="co1">${FGs// /}</span><br />
&nbsp; <span class="kw3">echo</span> -en <span class="st0">&quot; $FGs <span class="es0">\0</span>33[$FG &nbsp;$T &nbsp;&quot;</span><br />
&nbsp; <span class="kw1">for</span> BG <span class="kw1">in</span> 40m 41m 42m 43m 44m 45m 46m 47m;<br />
&nbsp; &nbsp; <span class="kw1">do</span> <span class="kw3">echo</span> -en <span class="st0">&quot;$EINS <span class="es0">\0</span>33[$FG<span class="es0">\0</span>33[$BG &nbsp;$T &nbsp;<span class="es0">\0</span>33[0m&quot;</span>;<br />
&nbsp; <span class="kw1">done</span><br />
&nbsp; <span class="kw3">echo</span>;<br />
<span class="kw1">done</span>
  </div>
  
  </div>
</p>
<p>
  Une séquence ANSI s'écrit en SH comme cela : <kbd>\033[xx;yyy;zzz..m</kbd>. <kbd>\033</kbd> correspond au code ESCAPE, d'où le nom de "code d'échappement". <kbd>xxx;yyy</kbd> sont des chiffres séparés en paramètre de la séquence d'échappement. Le tout est terminé par <kbd>m</kbd>. Ainsi, le rouge s'écrit <kbd>\033[0;31m</kbd>. 
</p>
<p>
  Maintenant il fait juste savoir une chose pour ne pas "perdre" la console avec des codes qui ne sont pas "réellement" affichés. Il faut toujours encadrer un séquence d'échappement comme cela :<kbd>\[SEQUENCE\]</kbd>. Ce qui nous donne pour notre rouge <kbd>\[\033[0;31m\]</kbd>. 
</p>
<p>
  Mettons cela en musique pour avoir un prompt, rouge...
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="kw3">export</span> <span class="re2">PS1=</span><span class="st0">&quot;<span class="es0">\[</span><span class="es0">\0</span>33[0;31m<span class="es0">\]</span>C'est rouge<span class="es0">\[</span><span class="es0">\0</span>33[0m<span class="es0">\]</span> <span class="es0">\$</span> &quot;</span>
  </div>
  
  </div>
</p>
<p>
  Nous remarquons deux chose, tout d'abord une séquence <kbd>\033[0m</kbd> qui va terminer de jouer avec les couleurs en faisant un "reset" pour revenir aux couleurs par défaut (généralement, blanc...). Sinon, tout ce que l'on taperait serait aussi rouge que le prompt. Ensuite le <kbd>\$</kbd> qui affiche simple.. le <kbd>$</kbd> à la fin du prompt <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/wink2.gif" title="Wink" alt="Wink" class="smiley-content"/>.  
</p>
<p>
  Nous pouvons insérer des choses plus dynamiques qu'un simple texte dans le prompt, par exemple <kbd>\@</kbd> pour l'heure, <kbd>\h</kbd> pour le nom de l'ordinateur, <kbd>\w</kbd> pour le chemin courant, <kbd>\u</kbd> pour l'utilisateur courant. Ainsi pour afficher l'heure en couleur, cela donne :  
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="kw3">export</span> <span class="re2">PS1=</span><span class="st0">&quot;<span class="es0">\[</span><span class="es0">\0</span>33[0;31m<span class="es0">\]</span>heure:<span class="es0">\[</span><span class="es0">\0</span>33[0;33m<span class="es0">\]</span><span class="es0">\@</span><span class="es0">\[</span><span class="es0">\0</span>33[0m<span class="es0">\]</span> <span class="es0">\$</span> &quot;</span>
  </div>
  
  </div>
</p>
<p>
  Maintenant pour que tout cela soit fait au démarrage d'une nouvelle session, il faut soit mettre notre code dans <kbd>~/.bashrc</kbd>, soit plus simplement, en tant que <kbd>root</kbd> pour que tout le monde en profite à la fin du fichier <kbd>/etc/profile</kbd> (ou encore mieux, dans un fichier <kbd>prompt.sh</kbd> dans le dossier <kbd>/etc/profile.d</kbd> si votre système en a un. A titre d'exemple, ce qui suit est le code de mon prompt :
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="kw1">function</span> prompt<br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">local</span> <span class="re2">RED=</span><span class="st0">&quot;<span class="es0">\[</span><span class="es0">\0</span>33[0;31m<span class="es0">\]</span>&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">local</span> <span class="re2">WHITE=</span><span class="st0">&quot;<span class="es0">\[</span><span class="es0">\0</span>33[1;39m<span class="es0">\]</span>&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">local</span> <span class="re2">GREEN=</span><span class="st0">&quot;<span class="es0">\[</span><span class="es0">\0</span>33[0;32m<span class="es0">\]</span>&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">local</span> <span class="re2">YELLOW=</span><span class="st0">&quot;<span class="es0">\[</span><span class="es0">\0</span>33[0;33m<span class="es0">\]</span>&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">local</span> <span class="re2">GRAY=</span><span class="st0">&quot;<span class="es0">\[</span><span class="es0">\0</span>33[1;30m<span class="es0">\]</span>&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">local</span> <span class="re2">LIGHT_GRAY=</span><span class="st0">&quot;<span class="es0">\[</span><span class="es0">\0</span>33[0;37m<span class="es0">\]</span>&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">local</span> <span class="re2">CYAN=</span><span class="st0">&quot;<span class="es0">\[</span><span class="es0">\0</span>33[0;36m<span class="es0">\]</span>&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">local</span> <span class="re2">LIGHT_CYAN=</span><span class="st0">&quot;<span class="es0">\[</span><span class="es0">\0</span>33[1;36m<span class="es0">\]</span>&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">local</span> <span class="re2">STOP=</span><span class="st0">&quot;<span class="es0">\[</span><span class="es0">\0</span>33[0m<span class="es0">\]</span>&quot;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#91;</span> <span class="re1">$USER</span> == <span class="st0">&quot;root&quot;</span> <span class="br0">&#93;</span> ; <span class="kw1">then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">export</span> <span class="re2">PS1=</span><span class="st0">&quot;${RED}<span class="es0">\u</span>${WHITE}@$YELLOW<span class="es0">\h</span>$WHITE [$GREEN<span class="es0">\W</span>$WHITE] # ${STOP}&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">export</span> <span class="re2">PS1=</span><span class="st0">&quot;${YELLOW}<span class="es0">\u</span>${WHITE}@${YELLOW}<span class="es0">\h</span>${WHITE} [${GREEN}<span class="es0">\w</span>${WHITE}] <span class="es0">\$</span> ${STOP}&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">fi</span><br />
<span class="br0">&#125;</span><br />
<br />
prompt
  </div>
  
  </div>
</p>    ]]></content>
  </entry>
</feed>
