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.
Pour cela, nous allons récupérer les sources du paquet et ses dépendances, modifier le code et reconstruire le paquet.
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
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
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;
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.
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
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.
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.
MOC, c'est cool!
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); }