====== MOC: jamais trop petit! ======
* Objet : Empêcher le lecteur de musique en console de devenir "too small" si la taille de terminal change
* Niveau requis : {{tag>avisé}}
* Commentaires : //Savoir lire un tuto :) //
* Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-)
===== Introduction =====
MOC est un lecteur musique en mode curses. Il est très simple et pratique et fait ce qu'on attend de lui.\\
Mais j'avais un petit soucis lors du redimensionnement automatique du terminal qui l'exécute par un gestionnaire de fenêtre, en deçà d'une certaine taille, il n'affiche plus rien que "...TERMINAL TOO SMALL..." alors qu'il y aurait raisonnablement la place. On va donc voir comment changer ça simplement.
Version Debian GNU/Linux: Wheezy / Version MOC: 2.5.0~alpha4
===== Mise en place de l'environnement de construction =====
Pour cela, nous allons récupérer les sources du paquet et ses dépendances, modifier le code et reconstruire le paquet.\\
=== Récupération des sources ===
On va chercher les sources sur les dépôts Debian (bien entendu les lignes **deb-src** de votre ///etc/apt/sources.list// doivent être actives).
apt-get source moc
cd moc-2.5.0~alpha4+svn20120224/debian
=== Récupération des dépendances de construction ===
Dans le fichier ** control** apparaissent les **build-deps**, c'est-à-dire les paquets nécessaires à la construction (build) du programme MOC.\\
Debian étant magique, nous allons les installer toutes en 2 secondes:
apt-get build-dep moc
===== Modification du code =====
=== Adaptation de la taille générale ===
Dans le répertoire contenant le code source, nous allons éditer (ici j'utilise emacs) le fichier **interface_elements.c** :\\
emacs interface_elements.c
et nous allons chercher la ligne (2518 chez moi):
mw->too_small = iw->too_small = COLS < 59 || LINES < 7;
puis remplacer tout bêtement les valeurs par des valeurs moindres; un minimum de 30 colonnes sur 5 lignes permet un affichage restreint mais raisonnable:
mw->too_small = iw->too_small = COLS < 30 || LINES < 5;
=== Adaptation du placement des éléments internes ===
Nous allons maintenant modifier les valeurs mini de placement de certains éléments:\\
__mixer_bar__:\\
Recherchez l'expression **COLS - 37** (ligne 2761, 3076 et 3434 chez moi) et remplacez chaque occurence par **COLS - 27**.\\
__mixer_frame__:\\
Recherchez l'expression **COLS - 38** (ligne 3384 chez moi) et remplacez la par **COLS - 28**.\\
Enregistrez vos modifications et quittez.\\
===== Construction du paquet =====
Nous avons modifié un fichier du code source et Debian, loin d'être bête, le sait! Il nous faut donc commiter nos changements avant construction:\\
dpkg-source --commit
Donnez un nom à votre commit, du style //term_too_small_fix//.
Puis nous allons construire, attention les yeux:\\
dpkg-buildpackage
Fixez attentivement votre écran et regardez la magie s'opérer 8-) \\
Ding, ☎, c'est prêt, votre paquet est disponible dans le répertoire supérieur:\\
cd ..
dpkg a également reconstruit le paquet **moc-ffmpeg-plugin** dont le code était inclus dans le paquet source, il n'est pas nécessaire de le réinstaller mais ça ne fait jamais de mal non plus.\\
===== Installation du nouveau paquet =====
Nous allons l'installer ainsi que le plugin, cela agira comme une mise à jour:\\
dpkg -i moc-ffmpeg-plugin_2.5.0~alpha4+svn20120224-1_amd64.deb
dpkg -i moc_2.5.0~alpha4+svn20120224-1_amd64.deb
Il peut être intéressant de "geler" cette version du paquet afin qu'elle ne soit pas écrasée lors d'une mise à jour:
apt-mark hold moc
// Merci à captnfab pour l'astuce. //
===== Conclusion =====
MOC, c'est cool!
=== Bonus track ===
Voici en bonus, le patch pour application cutanée directe:\\
--- interface_elements.c 2012-02-24 05:24:21.000000000 -0400
+++ ../tmp/moc-2.5.0~alpha4+svn20120224/interface_elements.c 2014-11-19 21:47:34.000000000 -0400
@@ -2515,7 +2515,7 @@
/* End the program if the terminal is too small. */
static void check_term_size (struct main_win *mw, struct info_win *iw)
{
- mw->too_small = iw->too_small = COLS < 59 || LINES < 7;
+ mw->too_small = iw->too_small = COLS < 30 || LINES < 5;
}
/* Update the title with the current fill. */
@@ -2758,7 +2758,7 @@
bar_set_title (&w->mixer_bar, name);
if (!w->in_entry && !w->too_small) {
- bar_draw (&w->mixer_bar, w->win, COLS - 37, 0);
+ bar_draw (&w->mixer_bar, w->win, COLS - 27, 0);
info_win_update_curs (w);
}
}
@@ -3073,7 +3073,7 @@
bar_set_fill (&w->mixer_bar, (double) value);
if (!w->in_entry && !w->too_small)
- bar_draw (&w->mixer_bar, w->win, COLS - 37, 0);
+ bar_draw (&w->mixer_bar, w->win, COLS - 27, 0);
}
/* Draw a switch that is turned on or off in form of [TITLE]. */
@@ -3381,7 +3381,7 @@
lines.ltee, lines.rtee, lines.llcorn, lines.lrcorn);
/* mixer frame */
- mvwaddch (w->win, 0, COLS - 38, lines.rtee);
+ mvwaddch (w->win, 0, COLS - 28, lines.rtee);
mvwaddch (w->win, 0, COLS - 17, lines.ltee);
/* playlist time frame */
@@ -3431,7 +3431,7 @@
if (w->in_entry)
entry_draw (&w->entry, w->win, 1, 0);
else
- bar_draw (&w->mixer_bar, w->win, COLS - 37, 0);
+ bar_draw (&w->mixer_bar, w->win, COLS - 27, 0);
bar_draw (&w->time_bar, w->win, 2, 3);
}