Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 13/12/2018, à 00:51

fnux

Comment développer des scripts bash avec interface graphique ?

Bonjour,

Grâce à l'aide de très nombreux contributeurs de ce forum et de ceux d'autres fora, j'ai réussi à développer plusieurs scripts bash d'installation (et de désintallation) multi-lingues (Anglais, Allemand, Français, Italien, Portugais et Russe) de différents outils qui fonctionnent avec de nombreuses distributions Linux (Arch, Bridge, CentOS, Chakra, Debian, ElementaryOS, Fedora, LMDE, Manjaro, Mint, Q4OS, Ubuntu et ses dérivés, Zorin, etc. etc. etc.) en tenant compte des spécificités de ces différentes distributions (gestionnaires de paquets différents, noms de librairies différents, etc.).

Exemple : mon dernier script permet de télécharger et d'installer simplement et facilement l'IDE QB64 (compilateur du langage BASIC étendu, son éditeur à la Quick Basic 4.5 et les dépendances qui lui sont nécessaires), le GDE InForm qui permet de créer des applications graphiques événementielles avec le langage QB64 et le débugger temps réel vWATCH64 que vous pouvez télécharger ici : Script d'installation de QB64, InForm et vWATCH64.

Vous pouvez aussi voir une courte vidéo de l'installation et de l'utilisation de ces trois outils ici : Vidéo d'installation de QB64, InForm & vWATCH64

Mais j'aimerai maintenant réécrire ces scripts qui posent des questions et proposent des choix avec une interface graphique, pour qu'ils soient plus... comment dire... sexy (attractifs) tongue

Ma question : quel logiciel (ou solution) serait le(a) meilleur(e) à utiliser, sachant que j'aimerai que ces scripts fonctionnent de la même manière sur toutes les différentes interfaces de ces différentes distributions sans avoir à programmer des spécifications différentes en fonction de chaque interface et sans que je n'ai à passer par le développement d'un langage de programmation (compilé ou non) ?

Zenity serait-il un bon choix "cross platform" ?

Bien sur, je recherche aussi une solution qui propose une documentation détaillée si possible avec des exemples.

Merci d'avance de vos conseils toujours avisés et appréciés.

Très cordialement.
Fnux

Dernière modification par fnux (Le 13/12/2018, à 02:45)


N'engage pas un débat lors d'un dîner car celui qui n'a pas faim aura le dernier mot. - R. Whately
FWPBLA - The Froggies West Palm Beach Linux Association.

Hors ligne

#2 Le 13/12/2018, à 10:46

kholo

Re : Comment développer des scripts bash avec interface graphique ?

salut,
sans jouer les Normands,... ...
zenity semble une bonne solution...
python et tkinter aussi, par exemple...
dialog, si tu veux passer sur des machines sans X

MAIS

tu peux aussi faire des menus en pur script
voilà un exemple :

#!/bin/bash
# ----------------------------------------------
nomlogiciel="Kholo ${0##*/}"
FONCTION="un logiciel de lecture de 'radios'
NB ces 'radios' sont des liens lancés par vlc"
VERSION="0.026"
# NOTES DE VERSIONS KHOLO
# ----------------------------------------------
# 
# ----------------------------------------------
echo "lancement $nomlogiciel..."

# version "$VERSION" "$0" ; exit 0

# pour ouvrir un navigateur de fichier (debuggage)
# ******************************************************************
# nautilus "$PWD" ; exit 0

# ******************************************************************

fermerGUI () {
	# kill -9 $( ps -ef | grep $USER| grep term | grep kiradio | grep kradio | cut -d " " -f2 )
	screen -d
	}

# catch CTRL-C
# trap "echo ''; echo 'sortie avec CTR-C. on quitte' ; _quitter ; exit 1" 2
# trap "echo ''; echo 'sortie avec CTR-C. intersepté' ; " 2
# trap "echo le pid est $( ps -ef | grep $USER| grep term | grep kiradio | grep kradio | cut -d " " -f2 ) ; " 2
trap "fermerGUI ;" 2

# TODO : tester les dépendances
# check_dependances () {
# vlc nautilus trap sleep read cat
	# }

# compteur de temps pour le log 
START=$(date +%s.%N)

splashScreen () {
echo -e "${enJaune}${enGras}
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMWo;,cKMMMMMWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMM:     Nx'.    .XMkOWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMO.   cK.      lMx   :XMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMNdoo;  .;odxxMN.     lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMN.    .0MMMMMMMMWd    'Xo'.;OMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMM:    ,WMMMMMMMMMMMX.  0;     XMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMM.    0MMMMMMMMMMMMMo  c0'  .lMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMOOKXNWMMMMMMMMMMMMMc   .xMWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMM0..   0MMMMMMMMMMMx     0MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMM:     ;OWMMMMMNXWc    xMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMk.      .'''.  cNX;.0MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMWxododo'       .KMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMN'   .Ox';:lxKMMMMMMMMMMMMMMMMMMMMMMMNoOMMModMMMMMMMMMMMMMM
MMMd'  .oWMx.  :KK     dx:   ...;OMMMMMMMMMMMMMMMMMMMd. oMMX  NMMMMMMMMMMMMM
MMMMN  0MMMW..KMMMXocl0MMM. kMMx  oMMMMMMMMMMMMMMMMMMMo oMMMkkMMMMMMMMMMMMMM
MMMMM  KMMM:'NMMMMMMMMMMMM' kMMMo  NMMMMMMMMMMMMMMMMMMx oMMMMMMMMMMMMMMMMMMM
MMMMM  KMW;,WMMMMMMMMMMMMM' kMMMO  KMMMMMMMMMMMMMMMMMMx oMMMMMMMMMMMMMMMMMMM
MMMMM  KN';WMMMMMMMKc.MMMM' kMMMd  NMMMWl,;.:NMMMMd,;', oMM0:.MMMMK:;.'kMMMM
MMMMM  O.:WMMMMMMMKc  MMMM' kMMK. oMMMM, WMd cMMMc.XMX. oM0c  MMMO kMW; oMMM
MMMMM    ;WMMMMMMMMM  MMMM' ;l, 'kMMMMM..MMX 'MMO xMMMl oMMM  MMW.'MMMN  KMM
MMMMM  d  ,WMMMMMMMM. MMMM' oO  OMMMMMM0KMXl 'MM, NMMMx oMMM  MMk lMMMM: lMM
MMMMM  K0  'WMMMMMMM. MMMM' kMd .XMMMMMM0,:k 'MM. MMMMx oMMM  MMl lMMMMd ;MM
MMMMM  KMK. .NMMMMMM. MMMM' kMM: .WMMMMl 0MN 'MM  NMMMx oMMM  MMl :MMMMk :MM
MMMMM  KMMX. .NMMMMM. MMMM' kMMW. cMMM0 :MMN 'MM. xMMMx oMMM  MMk .MMMMd xMM
MMMMW  KMMMX. .KMMMM. MMMM. kMMMK  xMMk ,MMk .WKo .NMMo cMMM  MMW. xMMM;.WMM
MMMNd  cNMMW:   lKW0  OWNO  ;XWMMO  cKX  .'l  'XW,  c:.  oWO  0WMK. xKl.0MMM
MMMkkkkkkWMKkkkkkkKkkkkXOkkkkkNMMM0kkkWXooXMkoNMMMx::O0lXMXkkkkXMMWd::xWMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
$nomlogiciel v $VERSION"
sleep .5
	}
# echo "chargement ligne $LINENO"

remplir_radios_csv () {
# cette fonction crée un fichier par défaut de radios
echo "NOM_RADIO;FREQUENCE
100radio-albi;http://100radio-albi.ice.infomaniak.ch/100radio-albi-128.mp3
432Hz Radio;http://streaming.radionomy.com/AxelAime432Hz
4U Radios - All Funky Classics;http://streaming.radionomy.com/4U-Funky-Classics
666;http://radio666.net:8000
Addict Alternative;http://stream1.addictradio.net/addictalternative.mp3
Addict Lounge;http://stream1.addictradio.net/addictlounge.mp3
Addict Rock;http://stream1.addictradio.net/addictrock.mp3
Addict Star;http://stream1.addictradio.net/addictstar.mp3
Ado FM;http://start-adofm.ice.infomaniak.ch/start-adofm-high.mp3
Aleo;http://vt-net.org:8056
Aligre FM (Paris. Aligre FM);http://aligrefm.org/aligrefm.m3u
Alouette;http://alouette.ice.infomaniak.ch/alouette-high.mp3
Alpes 1 Gap;http://alpes1gap.ice.infomaniak.ch/alpes1gap-high.mp3
Alpes 1 Grenoble;http://alpes1grenoble.ice.infomaniak.ch/alpes1grenoble-high.mp3
Alta Canzona Corsa;https://altacanzona.streamakaci.com/altacanzona.mp3
Alta Frequenza;https://altafrequenza.streamakaci.com/altafrequenza.mp3
Aufilduson80s;http://diffusion.lafrap.fr/alternantes.ogg
Arvorig FM;http://arvorig-fm.online.stalig.net/live.mp3
Bayou Blue Radio;http://bayoublueradio.com:8000/live
Beur FM;http://broadcast.infomaniak.ch/beurfm-high.mp3
BFM;http://bfmbusiness.cdn.dvmr.fr/bfmbusiness
Bide et Musique;http://relay1.bide-et-musique.com:9100
Booster FM;http://giss.tv:8000/booster-tlse.mp3
C-Lab (Radio Campus Rennes);http://stream.c-lab.fr:8001/c-lab
CanalB;http://stream.levillage.org/canalb.m3u
C9 Radio;http://stream.c9.fr/c9.mp3
Canal Sud;http://91.224.148.160:8000/canalsud-live
Chante France;http://stream1.evasionfm.com/Chante_France
Chérie FM;http://cdn.nrjaudio.fm/audio1/fr/30201/mp3_128.mp3?origine=playerweb
Cristal FM;http://radiocristal.ice.infomaniak.ch/radiocristal-high.mp3
Collines;http://collineslaradio.ice.infomaniak.ch/collineslaradio-128.mp3
Contact;http://broadcast.infomaniak.ch/radio-contact-high.mp3
Couleur3.fr;http://broadcast.infomaniak.ch/rsr-couleur3-high.mp3
DHits;http://go.dhits.net/live.mp3
Divergence Fm;http://ridibundus.divergence-fm.org:8000/divergence.mp3
Djamradio ;http://ledjamradio.ice.infomaniak.ch/ledjamradio.mp3
Dogmazic/Radio Libre;http://radio.dogmazic.net:8000/stream.mp3
Dreyeckland;http://radiodreyeckland.ice.infomaniak.ch/radiodreyeckland-128.mp3
Euronews Radio;http://euronews-01.ice.infomaniak.ch/euronews-01.aac
Elium Club Dance;http://streaming.radionomy.com/Elium-ClubDance
Europe 1;http://mp3lg3.scdn.arkena.com/10489/europe1.mp3
Evasion FM;http://stream1.evasionfm.com/Yvelines
FG (FM);http://radiofg.impek.com/fg
FG Vlaanderen Belgium;http://radiofg.impek.com/fga
FG Chic;http://radiofg.impek.com:80/fgc
FG Club;http://radiofg.impek.com/fg6
FG Dance by Hakimakli;http://radiofg.impek.com/fgd
FG Non Stop;http://radiofg.impek.com/fge
FG Starter;http://radiofg.impek.com:80/fgv
FG Maxximun 90's;http://mp3lg3.tdf-cdn.com/6289/air_122002.mp3
FG Underground;http://radiofg.impek.com/ufg
FIP National;http://direct.fipradio.fr/live/fip-midfi.mp3
FIP Bordeaux;http://direct.fipradio.fr/live/fipbordeaux-midfi.mp3
FIP Strasbourg;http://direct.fipradio.fr/live/fipstrasbourg-midfi.mp3
FIP Nantes;http://direct.fipradio.fr/live/fipnantes-midfi.mp3
FIP Rock;http://direct.fipradio.fr/live/fip-webradio1.mp3
FIP Jazz;http://direct.fipradio.fr/live/fip-webradio2.mp3
FIP Groove;http://direct.fipradio.fr/live/fip-webradio3.mp3
FIP Monde;http://direct.fipradio.fr/live/fip-webradio4.mp3
FIP Nouveautés;http://direct.fipradio.fr/live/fip-webradio5.mp3
FIP Reggae;http://direct.fipradio.fr/live/fip-webradio6.mp3
Fox Radio;http://195.154.11.131:8000/foxradio
France 24;mms://stream1.france24.yacast.net/f24_livefr
France Bleu Alsace;http://direct.francebleu.fr/live/fbalsace-midfi.mp3
France Bleu Elsass ;http://direct.francebleu.fr/live/Fbelsass-midfi.mp3
France Bleu Armorique ;http://direct.francebleu.fr/live/fbarmorique-midfi.mp3
France Bleu Auxerre ;http://direct.francebleu.fr/live/fbauxerre-midfi.mp3
France Bleu Azur ;http://direct.francebleu.fr/live/fbazur-midfi.mp3
France Bleu Béarn ;http://direct.francebleu.fr/live/fbbearn-midfi.mp3
France Bleu Belfort-Montbéliard ;http://direct.francebleu.fr/live/fbbelfort-midfi.mp3
France Bleu Berry ;http://direct.francebleu.fr/live/fbberry-midfi.mp3
France Bleu Besançon ;http://direct.francebleu.fr/live/fbbesancon-midfi.mp3
France Bleu Bourgogne ;http://direct.francebleu.fr/live/fbbourgogne-midfi.mp3
France Bleu Breizh Izel ;http://direct.francebleu.fr/live/fbbreizizel-midfi.mp3
France Bleu Champagne Ardenne ;http://direct.francebleu.fr/live/fbchampagne-midfi.mp3
France Bleu Cotentin ;http://direct.francebleu.fr/live/fbcotentin-midfi.mp3
France Bleu Creuse ;http://direct.francebleu.fr/live/fbcreuse-midfi.mp3
France Bleu Drome Ardèche ;http://direct.francebleu.fr/live/fbdromeardeche-midfi.mp3
France Bleu Gard Lozère ;http://direct.francebleu.fr/live/fbgardlozere-midfi.mp3
France Bleu Gascogne ;http://direct.francebleu.fr/live/fbgascogne-midfi.mp3
France Bleu Gironde ;http://direct.francebleu.fr/live/fbgironde-midfi.mp3
France Bleu Hérault ;http://direct.francebleu.fr/live/fbherault-midfi.mp3
France Bleu Isère ;http://direct.francebleu.fr/live/fbisere-midfi.mp3
France Bleu La Rochelle ;http://direct.francebleu.fr/live/fblarochelle-midfi.mp3
France Bleu Limousin ;http://direct.francebleu.fr/live/fblimousin-midfi.mp3
France Bleu Loire Océan ;http://direct.francebleu.fr/live/fbloireocean-midfi.mp3
France Bleu Lorraine Nord ;http://direct.francebleu.fr/live/fblorrainenord-midfi.mp3
France Bleu Maine ;http://direct.francebleu.fr/live/fbmaine-midfi.mp3
France Bleu Mayenne ;http://direct.francebleu.fr/live/fbmayenne-midfi.mp3
France Bleu Nord ;http://direct.francebleu.fr/live/fbnord-midfi.mp3
France Bleu Normandie (Calvados - Orne) ;http://direct.francebleu.fr/live/fbbassenormandie-midfi.mp3
France Bleu Normandie (Seine-Maritime - Eure) ;http://direct.francebleu.fr/live/fbhautenormandie-midfi.mp3
France Bleu Orléans ;http://direct.francebleu.fr/live/fborleans-midfi.mp3
France Bleu Paris ;http://direct.francebleu.fr/live/fb1071-midfi.mp3
France Bleu Pays Basque ;http://direct.francebleu.fr/live/fbpaysbasque-midfi.mp3
France Bleu Pays d'Auvergne ;http://direct.francebleu.fr/live/fbpaysdauvergne-midfi.mp3
France Bleu Pays de Savoie ;http://direct.francebleu.fr/live/fbpaysdesavoie-midfi.mp3
France Bleu Périgord ;http://direct.francebleu.fr/live/fbperigord-midfi.mp3
France Bleu Picardie ;http://direct.francebleu.fr/live/fbpicardie-midfi.mp3
France Bleu Poitou ;http://direct.francebleu.fr/live/fbpoitou-midfi.mp3
France Bleu Provence ;http://direct.francebleu.fr/live/fbprovence-midfi.mp3
France Bleu RCFM Frequenza Mora ;http://direct.francebleu.fr/live/fbfrequenzamora-midfi.mp3
France Bleu Roussillon ;http://direct.francebleu.fr/live/fbroussillon-midfi.mp3
France Bleu Saint-Etienne Loire ;http://direct.francebleu.fr/live/fbstetienne-midfi.mp3
France Bleu Sud Lorraine ;http://direct.francebleu.fr/live/fbsudlorraine-midfi.mp3
France Bleu Toulouse ;http://direct.francebleu.fr/live/fbtoulouse-midfi.mp3
France Bleu Touraine ;http://direct.francebleu.fr/live/fbtouraine-midfi.mp3
France Bleu Vaucluse ;http://direct.francebleu.fr/live/fbvaucluse-midfi.mp3
France Culture ;http://direct.franceculture.fr/live/franceculture-midfi.mp3
France Info;http://direct.franceinfo.fr/live/franceinfo-midfi.mp3
France Inter;http://direct.franceinter.fr/live/franceinter-midfi.mp3
France Musique;http://direct.francemusique.fr/live/francemusique-midfi.mp3
French Kiss FM;http://178.63.62.145/;stream.mp3
Fréquence Jazz;http://broadcast.infomaniak.ch/frequencejazz-high.mp3
Frequence Luz;http://www.frequenceluz.com:8000/mobile
Fréquence Paris Plurielle;http://radio.toile-libre.org:8000/fpp.mp3
Frequence Plus;http://freqplus.ice.infomaniak.ch/freqplus-high.mp3
Frequence3;http://hd.stream.frequence3.net/frequence3-128.mp3
Fun Radio France;http://streaming.radio.funradio.fr:80/fun-1-44-128
Fuzzy & Groovy Rock Radio;http://listen.radionomy.com/fuzzy-and-groovy.m3u
Galaxie FM 95.30;http://91.121.22.39:8010/listen.pls
GENERATION SOUL DISCO FUNK - La Référence Soul;http://www.generationdiscofunk.com/pls/hd.m3u
Generations FM;http://generationfm.ice.infomaniak.ch/generationfm-high.mp3
Radiogalere FM88.4 Marseille;http://www.radiogalere.org:8080/galere.mp3
Graffiti Urban-Radio 88.6 FM La Roche sur Yon;http://www.urban-radio.com/128.m3u?PHPSESSID=d56d81aa478734fed860444e4f83bbd1
HAG FM;http://213.246.51.78:9290/;stream.mp3
Happy FM;http://happyfm.ice.infomaniak.ch/happyfm-128.mp3
Hit West;http://broadcast.infomaniak.ch/hitwest-high.mp3
Hotmix Radio;http://streamingads.hotmixradio.fm/hotmixradio-dance-128.mp3
Hotmix Radio 80's;http://streamingads.hotmixradio.fm/hotmixradio-80-128.mp3
Hotmix Radio 90's;http://streamingads.hotmixradio.fm/hotmixradio-90-128.mp3
Hotmix Radio Funky;http://streaming.hotmixradio.fm/hotmixradio-funky-128.mp3
Ici & Maintenant !;http://radio.rim952.fr:8000/stream.mp3
idFM Radio Enghien;http://live.idfm98.fr:8000/idfm.m3u
Intensité;http://intensite.net:9010/listen.pls
Jazz Radio;http://jazzradio.ice.infomaniak.ch/jazzradio-high.mp3
JetFm (Nantes);http://80.82.229.202:8000/jetfm.mp3
K6 FM;http://k6fm.ice.infomaniak.ch/k6fm-64.aac
Radio Kerne;http://kerne.online.stalig.net/live.mp3
Kiss FM;http://kissfm2.ice.infomaniak.ch/kissfm2-128.mp3
kisswestcoast;http://kisswestcoast.ice.infomaniak.ch/kisswestcoast-64.aac
La Clé des Ondes (Bordeaux. La Clé des Ondes);http://radio.lacdo.org/stream
Latina;http://broadcast.infomaniak.net/start-latina-high.mp3
L'Eko des Garrigues (Montpellier. Eko des garrigues);http://91.121.159.124:8000/eko-des-garrigues-256k.ogg
Le Mouv' ;http://direct.mouv.fr/live/mouv-midfi.mp3
Le Mouv' Xtra;http://direct.mouv.fr/live/mouvxtra-midfi.mp3
Let's Go Zik;http://stream.letsgozik.com:8000/letsgozik
Radio Liberté;http://radiolibertes.ice.infomaniak.ch/radiolibertes-128.mp3
Libre à toi (pro logiciels libres);http://audio.libre-a-toi.org:8000/voixdulat_ogg
Lor'FM;http://lorfm.ice.infomaniak.ch/lorfm-128.mp3
Maxi France;http://stream.maxifrance.fr:8358/stream
MBS Classic Gold;http://stream1.evasionfm.com/mbs
Mediterraneo Smooth Jazz ;http://streaming.radionomy.com/Mediterraneo-SMOOTHJAZZ
Morow - Rock Progressif;http://stream.fr.morow.com:8080/morow_med.mp3
MFM;http://mfm.ice.infomaniak.ch/mfm-128.mp3
Mixx Radio;http://mixxfmfr.ice.infomaniak.ch/mixxfmfr-192.mp3
Monte Carlo Doualiya (Anciennement RMC Moyen Orient);http://live02.mc-doualiya.com/mc-doualiya.mp3
Musical Spa Radio;http://streaming.radionomy.com/MusicalSpaRadio
Néoplanète;http://streaming.radionomy.com/Neoplanete
Nostalgie;http://cdn.nrjaudio.fm/audio1/fr/30601/mp3_128.mp3?origine=playerweb
NRJ;http://cdn.nrjaudio.fm/audio1/fr/30001/mp3_128.mp3?origine=playernrj
NEO;http://stream.radioneo.org:8000/
O2 Radio (Bordeaux);http://91.121.176.26:7900/listen.pls
Océane Fm;http://oceanefm.ice.infomaniak.ch/oceanefm-128.mp3
OÜI FM;http://stream.ouifm.fr/ouifm-high.mp3
OÜI FM Alternatif;http://alternatif.stream.ouifm.fr/ouifm2.mp3
OÜI FM Classic Rock;http://classicrock.stream.ouifm.fr/ouifm3.mp3
OÜI FM Blues'n'Rock;http://bluesnrock.stream.ouifm.fr/ouifmbluesnrock-128.mp3
OÜI FM Rock indé;http://rockinde.stream.ouifm.fr/ouifm5.mp3
OÜI FM Ganja;http://ganja.stream.ouifm.fr/ouifmganja-128.mp3
Guadeloupe 1ère;http://radios.la1ere.fr/guadeloupe
Guyane 1ère;http://radios.la1ere.fr/guyane
Martinique 1ère;http://radios.la1ere.fr/martinique
Mayotte 1ère;http://radios.la1ere.fr/mayotte
Nouvelle Calédonie 1ère;http://radios.la1ere.fr/nouvellecaledonie
Polynésie 1ère;http://radios.la1ere.fr/polynesie
Réunion 1ère;http://radios.la1ere.fr/reunion
Saint-Pierre-et-Miquelon 1ère;http://radios.la1ere.fr/saintpierremiquelon
Wallis et Futuna 1ère;http://radios.la1ere.fr/wallisfutuna
Oxy.Radio/Radio Libre ;http://www.oxyradio.net:8000/test.mp3
Podradio;http://radio.podradio.fr:8000/adsl
Plum fm;http://plumfm.online.stalig.net/live.mp3
Prun'92Fm;http://80.82.229.202:8000/streamprun
Radio Activ' (radio associative de St Brieuc qui a rejoint ferarock);http://stream.radio-activ.com
Radio87;http://live2.radio87.fr
Radio Arc-en-Ciel Strasbourg;http://str0.creacast.com/arcencielweb
Radio Campus Amiens;http://www.radiocampus.fr:8000/amiens
Radio Campus Angers;http://80.82.229.202/rca
Radio Campus Bordeaux;http://www.radiocampus.fr:8000/campus-bordeaux
Radio Campus Clermont;http://campus.abeille.com:8000/campus
Radio Campus Grenoble;http://live.campusgrenoble.org:9000/rcg112
Radio Campus Lille;http://radiocampuslille.ice.infomaniak.ch:80/radiocampuslille-128 MP3
Radio Campus Orléans;http://orleans.radiocampus.org:8000/stream_rco
Radio Campus Toulouse;http://live.radio-campus.org:8000/toulouse
Radio Campus Tours;http://37.59.38.203:8000/webradiocampustours
R-One Radio :: Listen Hits !;http://streaming.radionomy.com/R-One-Radio
Radio Bienvenue Strasbourg;http://www4.radiorbs.com:8000/RBS
Radio Canut;http://live.francra.org:8000/radiocanut
Radio Classique;http://radioclassique.ice.infomaniak.ch/radioclassique-high.mp3
Radio Courtoisie;http://www.tv-radio.com/cgi-bin/tagger.pl?tag=site&metafile=courtoisie/courtoisie-20k.asx
Radio Cristal;http://stream.inovacast.fr:8888/stream
Radio Dio;http://www.hosting-serv.com:9160
Radio EFM;http://efm.elliptic.fr:8030/
Radio Espace;http://radioespace.ice.infomaniak.ch/radioespace-high.mp3
Radio Flemme;http://str45.streamakaci.com:8014/
Radio Gerard;http://188.165.236.217:8000/
Radio Grenouille;http://live.radiogrenouille.com/live
Radio Junior;http://213.186.61.62:8080/listen.pls
Radio serenity;http://streaming.radionomy.com/wiccaradio
Radio Kreiz Breizh;http://rkb.online.stalig.net/live.mp3
Radio Larzac;http://stream.radiolarzac.org:8000/radiolarzac
Radio Latitude Troyes;http://latitude.ice.infomaniak.ch/latitude-128.mp3
Radio Libertaire;http://ecoutez.radio-libertaire.org/radiolib.m3u
Radio María - France;http://heberg.radioludo.com:8003/stream
Radio Maritima;http://radiomaritima.streamakaci.com/radiomaritima.mp3
Radio Metropolys;http://str0.creacast.com/metropolys
Radio Meuh;http://radiomeuh.ice.infomaniak.ch/radiomeuh-128.mp3
Radio Mont Blanc;http://radiomontblanc1.ice.infomaniak.ch/radiomontblanc1-128.mp3
Radio Nova;http://broadcast.infomaniak.net/radionova-high.mp3
Radio RVA;http://rva.ice.infomaniak.ch/rva-high.mp3
Radio Salve Regina;http://radiosalveregina.no-ip.org:8000/listen.pls
Radio Scoop Bourg en Bresse;http://radioscoopbourg-en-bresse.ice.infomaniak.ch/radioscoop-bourg-128.mp3
Radio Scoop Clermont-Ferrand;http://radioscoopclermont-ferrand.ice.infomaniak.ch/radioscoop-clermont-128.mp3
Radio Scoop Lyon;http://radioscooplyon.ice.infomaniak.ch/radioscoop-lyon-128.mp3
Radio Scoop Saint Etienne;http://radioscoopsaintetienne.ice.infomaniak.ch/radioscoop-stetienne-128.mp3
Radio Sensations;http://sensations.ice.infomaniak.ch/sensations.mp3
Radio SoLatino;http://94.23.26.193:9367/stream/2/
Radio Star;https://www.radioking.com/play/radio-star
Radio TeenTaal;http://www.radioteentaal.com:8000
Radio Zinzine;http://91.121.65.189:8000/3
Radio Zinzine Aix;http://91.121.65.189:8000/zinzine-aix
Rancho FM;http://streaming.radionomy.com/rancho
Radio Dreyeckland Libre 68 (RDL68);http://sv3.vestaradio.com:4060/;stream.mp3
RFI Afrique;http://live02.rfi.fr/rfiafrique-96k.mp3
RFI Monde;http://live02.rfi.fr/rfimonde-96k.mp3
RFM;http://rfm-live-mp3-128.scdn.arkena.com/rfm.mp3
RFM Night Fever;http://rfm-wr2-mp3-128.scdn.arkena.com/rfm.mp3
RFM Party 80;http://rfm-wr4-mp3-128.scdn.arkena.com/rfm.mp3
Rire et chansons;http://cdn.nrjaudio.fm/audio1/fr/30401/mp3_128.mp3?origine=playerweb
Rire et chansons 100% Sketches;http://185.52.127.157/fr/30407/mp3_128.mp3?origine=fluxradios
RMC Info Talk Sport;http://rmc.bfmtv.com/rmcinfo-mp3
RMV;http://91.121.7.61:8200/
RTL;http://streaming.radio.rtl.fr/rtl-1-44-128
RTL2;http://streaming.radio.rtl2.fr:80/rtl2-1-44-96
RTS FM;http://stream.rtsfm.com:8000/;stream/1
Radio Caroline;http://195.154.113.150:8000/caroline.mp3
Radio-Bro-Gwened;http://rbg.online.stalig.net/live.mp3
Revolution Sound Records (collectif d'artistes du mouvement libre);http://195.154.156.183/radio/411/stream/1670
Sing Sing;http://stream.sing-sing.org:8000/singsing128
Skyrock;http://icecast.skyrock.net/s/natio_mp3_128k
SOL-FM 100.7;http://stric6.streamakaci.com/solfm64.mp3
Soleil de Ré;http://91.121.144.141:8000/stream.mp3
SpuTnik France;https://nfw.ria.ru/flv/audio.aspx?ID=6854085&type=mp3
Sud Radio;https://start-sud.ice.infomaniak.ch/start-sud-high.mp3
Sun FM Le son Unique (radio FM) www.lesonunique.com;http://www.lesonunique.com/sunhd.m3u
Sweet FM;http://dedibox-linux.sweetfm.fr:8000/lms
Swing FM;http://swingfm.ice.infomaniak.ch:80/swingfm-128
Tendance Ouest;http://streaming.tendanceouest.com/tomanche.mp3
Tonic Radio;http://hit-sport.ice.infomaniak.ch/hit-sport-high.mp3
Top Music;http://str0.creacast.com/topmusic1
TSF Jazz;http://broadcast.infomaniak.net/tsfjazz-high.mp3
Vibration;http://vibration.ice.infomaniak.ch/vibration-high.mp3
Virgin Radio;http://mp3lg4.tdf-cdn.com/9243/lag_164753.mp3
Vmix - Accent Mix;http://www.vmix.fr/live/acc.m3u
Vmix - Afternoon Mix;http://www.vmix.fr/live/aft.m3u
Vmix - Late Mix;http://www.vmix.fr/live/lat.m3u
Voce Nustrale;http://213.186.61.62:8000/
Voltage 96.9 FM;http://broadcast.infomaniak.net/start-voltage-high.mp3
Welsass;http://www.welsass.fr/play.m3u
Wit FM;http://broadcast.infomaniak.net/start-witfm-high.mp3
Ze Radio;http://91.121.174.141:8676
" > "$1"
}

# gestion des parametres
conf_path="$HOME/.config/kholo/kiradio"
if [ ! -d "$conf_path" ] ; then
	mkdir -p "$conf_path"
fi

# radios.m3u8
fichier_radios="$conf_path/radio.csv"
virtOUT=/tmp/virtOUT
[ -f $virtOUT ] || >$virtOUT

# echo "chargement ligne $LINENO"

initialiser_variables () {
	# COULEURS

	fdNoir='\033[40m'
	fdRouge='\033[41m'
	fdVert='\033[42m'
	fdJaune='\033[43m'
	fdBleu='\033[44m'
	fdRose='\033[45m'
	fdCyan='\033[46m'
	fdGris='\033[47m'
	# fdDefaut='\033[49m'

	enNoir='\033[30m'
	enRouge='\033[31m'
	enVert='\033[32m'
	enJaune='\033[33m'
	enBleu='\033[34m'
	enRose='\033[35m'
	enCyan='\033[36m'
	enGris='\033[37m'
	# enDefaut='\033[39m'

	enGras='\033[1m'
	enSouligner='\033[4m'
	enClignotant='\033[5m'
	enSurligner='\033[7m'
	enCache='\033[8m'

	enDefaut='\033[0m'

	# GENERALES
	nbre_radios=0
	nbre_page_radio=0

	la_pageRadio=1
	# sous_recherche=" "
	fichier_log=""

	tete_de_page=""
	pied_de_page=""

	# affiche les fréquences ou non
	bool_show_freq=false # bool_show_freq=true

} # fin de initialiser_variables
# echo "chargement ligne $LINENO"
# JOURNAL 
initialiser_journal () {
	fichier_log="$conf_path/$nomlogiciel.log"
	# #[ ! -f "$fichier_log" ] && \#
	> "$fichier_log" 
	journal "*******************initialisation*******************"
	journal "chargement"
	}
journal () {
	local NOW=$(date +%s.%N)
	local DIFF=$(echo "${NOW} - ${START}" | bc)
	echo -e "[${DIFF}] ------------------\n${@}" >> "${fichier_log}"
	# echo -e "$@" >> "$fichier_log"
	}

# FONCTIONS
# echo "chargement ligne $LINENO"

string_to_int (){
	LANG=C
	printf %.0f ${1/,/.}
	}
# echo "chargement ligne $LINENO"
_quitter () {
	journal "appel de : ${FUNCNAME} ${@}"
	# mettre ici tout ce qui sera nescessaire à la bonne fermeture
	rm $virtOUT 2>/dev/null 
	# ...
	
	exit 0
	}
# echo "chargement ligne $LINENO"
pause () {
echo -e "	${enVert}${enGras}
			\r****************************************************************
			\rAppuyer sur une touche pour continuer...
			\r****************************************************************"
read -s -n 1
	}
# echo "chargement ligne $LINENO"
on_clear_terminal () {
	echo "${enDefaut}"
	reset > /dev/null
	}
# echo "chargement ligne $LINENO"


afficherMenuRadio () {
	# journal "appel de : ${FUNCNAME} ${@}"

	multiRadio=$1

tete_de_page="${enBleu}${enGras}$nomlogiciel v $VERSION $([ -f $virtOUT.pid ] && { echo -e "${enRouge}enregistrement en cours..." ; })
${enJaune}${enGras}-------------------------------------------"
	echo -e "$tete_de_page"

	for (( i=$(string_to_int $(($multiRadio-1))0); i<=$(string_to_int $(($multiRadio-1))9); i++ ))
	do
		[[ -n "${NOM_RADIO[$i]}" ]] && [ $i -ne 0 ] && \
			{
			echo -en "${enVert}${enGras}$i ${enJaune}${enGras}: ${NOM_RADIO[$i]##*/}${enDefaut}"
			# echo -e "${FREQUENCE[$i]}"
			if $bool_show_freq ; then echo -e " - ${FREQUENCE[$i]}" ; else echo -e "" ; fi
			}

	done
pied_de_page="${enJaune}${enGras}-------------------------------------------
${enVert}${enGras}p${enJaune}${enGras}récédent\tpage $multiRadio/$nbre_page_radio\t\
${enVert}${enGras}s${enJaune}${enGras}uivant
${enDefaut}
${enVert}r*${enDefaut}${enJaune} : rechercher (rfrance pour france)
${enVert}Px${enDefaut}${enJaune} : page (x de 0 à $nbre_page_radio)
${enVert}vx${enDefaut}${enJaune} : volume (x de 0 % à 200 %)
${enVert}h et H${enDefaut}${enJaune} : aides
${enVert}q${enDefaut}${enJaune} : quitter
${enVert}k${enDefaut}${enJaune} : arrêter la musique (tuer VLC)
${enJaune}-------------------------------------------
${enJaune}${enGras}votre choix : ${enDefaut}"
	echo -en "$pied_de_page"
	}
# echo "chargement ligne $LINENO"

page_suivanteRadio () {
	# journal "appel de : ${FUNCNAME} ${@}"
	if [ $la_pageRadio -lt $nbre_page_radio ] ; then let la_pageRadio++ ; fi
	}
# echo "chargement ligne $LINENO"
page_precedenteRadio () {
	# journal "appel de : ${FUNCNAME} ${@}"
	if [ $la_pageRadio -gt 1 ] ; then let la_pageRadio-- ; fi
	}
# echo "chargement ligne $LINENO"
aller_a_la_pageRadio () {
	# journal "appel de : ${FUNCNAME} ${@}"
	# if [ $1 -gt 1 ] && [ $1 -lt $(echo "$nbre_page_radio + 1 "| bc) ] ; then let la_pageRadio=$1 ; fi
	if [ $1 -gt 0 ] && [[ $nbre_page_radio -ge $1 ]] ; then let la_pageRadio=$1 ; fi
	}
# echo "chargement ligne $LINENO"

infos_vlc () {
	# { sleep .3 ; echo "0000" ; sleep .3 ; echo "info" ; sleep .3 ; echo "stats" ; sleep .3 ; echo "get_title" ; } | telnet localhost 9999 ;
local out
	out=$({ sleep .3 ; echo "0000" ; sleep .3 ; echo "get_title" ;  sleep .3 ;} | telnet localhost 9999 ; 2> /dev/null)
	IFS=$'\n' out=( $out )
	on_clear_terminal

local le_lien="${out[6]##*> }"
# echo "le_lien=$le_lien"
local ok=0
local n=0

# IFS=$'\n' 
if [[ -n ${le_lien} ]] ; then
	local i
	for i in ${FREQUENCE[@]} ; do
		if [ $(echo $i | grep "${le_lien}") ] ; then 
			((ok++))
			# lien joué : 
			echo -e "radio en cours d'écoute :"
			echo -e "${enVert}${enGras}${le_lien}"
			echo -e "num $n : ${NOM_RADIO[$n]}${enDefaut}"
			# sleep 0.5
		fi
		((n++))
	done 
else
	echo -e "${enRouge}${enGras}erreurs : "
	echo -e "${enDefaut}${enGras}pas de lien retourné :\n"
	local temp ;for temp in ${out[@]} ; do echo $temp ; done
fi 
	}
# echo "chargement ligne $LINENO"
rechercher_radio () {
	echo "on recherche : $@"
	IFS=$'\n'

	local n=0
	local out
	local trouve=0
	# local i
	for i in ${NOM_RADIO[*]}
	do
		# [ -n "$out" ] && ((trouve++)) && echo -e "$n : $out"
		out=$(echo "$i" | grep -i "$@")
		[ $? -eq 0 ] && {
			((trouve++)) 
			echo -e "$n : $out"
			}
		((n++))
	done

	echo "$trouve radio(s) trouvée(s)"
	pause
	}
# echo "chargement ligne $LINENO"
ajouter_radio () {
local ajout
local nom
local freq
echo -en "${enJaune}${enGras}Ajouter une radio
${enVert}1 ${enJaune}- nom : 		$1
${enVert}2 ${enJaune}- adresse : 	$2
${enVert}3 ${enJaune}- valider
${enVert}autre - ${enJaune}Annuler
${enDefaut}choix : "
read -r -n 1 ajout
echo ""
case "$ajout" in
	# 0)		;;
	1)
		echo "Entrez un nom"
		read -r nom
		clear
		ajouter_radio "$nom" "$2"
		;;
	2)
		echo "Entrez une fréquence"
		read -r freq
		clear
		ajouter_radio "$1" "$freq"
		;;
	3)
		[ -n "$1" ] && [ -n "$2" ] && {
			echo "$1;$2" >> "$fichier_radios"
			charger_radios_csv "$fichier_radios"
			} || ajouter_radio
		;;
	*)	echo "Ajout - action annulée"	; pause ;;
esac

}
# echo "chargement ligne $LINENO"
voirFrequence () { if $bool_show_freq ; then bool_show_freq=false ; else bool_show_freq=true ; fi ; }
# echo "chargement ligne $LINENO"

charger_radios () {
if [ -f "$fichier_radios" ]
then
	charger_radios_csv "$fichier_radios"
else
	> "$fichier_radios" 
	echo -e "nom;frequence\n"
	remplir_radios_csv "$fichier_radios"
	# sleep .1
	charger_radios_csv "$fichier_radios"
fi
	}
# echo "chargement ligne $LINENO"
charger_radios_m3u8 () {
IFS=$'\n' list_radios=( $( < "$fichier_radios" ) )

n=0
for (( i=0; i<=((${#list_radios[@]}-1)); i++ )) ; do
	case "${list_radios[$i]}" in
		"#EXTINF:"*)
			nom_temp="$(echo "${list_radios[$i]}" | cut -d, -f2)"
			NOM_RADIO[$n]="${nom_temp}"
			((n++))
			;;

		"http:"*|"https:"*|"mms:"*)
			FREQUENCE[$n]="${list_radios[$i]}"
			;;

		*)	;;
	esac
done

nbre_radios=${#NOM_RADIO[@]}
nbre_page_radio=$(( 1+$nbre_radios/10 ))
}
# echo "chargement ligne $LINENO"
JouerRadio () {
	tuer_vlc
	sleep .5
	cvlc -I telnet --telnet-password=0000 --telnet-port=9999 ${FREQUENCE[$1]}  2> /dev/null &
	volume 120
	}
# echo "chargement ligne $LINENO"
volume () {
	{ sleep .3 ; echo "0000" ; sleep .3 ; echo "volume $1" ; } | telnet localhost 9999 ;
	}
# echo "chargement ligne $LINENO"
tuer_vlc () { killall vlc 2> /dev/null ; }
# echo "chargement ligne $LINENO"
record_log () {
	# while : ; do tail -4 $virtOUT ; sleep 1 ; clear ; done
	# xterm -e "while : ; do tail -4 $virtOUT ; sleep 1 ; clear ; done" &
	xterm -e "while [ -f $virtOUT.pid ] ; do tail -4 $virtOUT ; sleep 1 ; clear ; done" &
}
# echo "chargement ligne $LINENO"
record_radio () {
echo "# module d'enregistrement"
if [ -z $1 ] ; then 
	# killall wget
	# killall curl
	
	# $(ps ax | grep matrix | grep -v grep | sed "s/^ *//" | cut -d " " -f1)
	kill -9 $(< $virtOUT.pid)
	rm $virtOUT.pid
else
	# To save stream:
	# curl
	# curl --output ~/Downloads/Radio/CostaDelMar.mp3 http://sc-costadelmar.1.fm:10156
	# Useful options are --max-time <seconds> and --max-filesize <bytes>. 
	# 
	# wget
	# wget -O stream.mp3 "http://stream-90.shoutcast.com:80"

	# wget -O $HOME/Musique/stream.mp3 "${FREQUENCE[$1]}"

	# curl --output $HOME/Musique/stream.mp3 http://stream1.addictradio.net/addictalternative.mp3

	# $( curl --output $HOME/Musique/stream.mp3 "${FREQUENCE[$1]}" > $virtOUT ) &
	curl --output $HOME/Musique/stream.mp3 "${FREQUENCE[$1]}" >>$virtOUT 2>&1 &
	echo $! > $virtOUT.pid 
	record_log
fi
	}

parser_choix_radio () {
	# journal "appel de : ${FUNCNAME} ${@}"
	case "$choixRadio" in
		0) 
			journal "choixRadio=${choixRadio}\nTODO : choisir une radio" ; 
			echo "# rien à faire encore avec les 0 des radios ;°)"
			sleep 2
			# pause ; 
			;;

		[1-9]|[0-9][0-9]|[0-9][0-9][0-9]) 
			journal "choixRadio=${choixRadio}\n${NOM_RADIO[$choixRadio]}"
			la_radio="${NOM_RADIO[$choixRadio]}"
			JouerRadio "$choixRadio" 
			# pause
			;;

		h|a|aide)
				_aide ; pause ;;
		H)		_aide2 ; pause ;;
		f)		voirFrequence ;;

		s)		page_suivanteRadio ;;
		p)		page_precedenteRadio ;;
		P*)		aller_a_la_pageRadio "${choixRadio#*P}" ;;

		v*)		volume "${choixRadio#*v}" ;;
		i)		infos_vlc ; pause ;;
		k)		tuer_vlc ;;

		z)		charger_radios_csv "$fichier_radios" ;;
		E)		gedit "$fichier_radios" & ;;

		A)		ajouter_radio ;;
		r*)		rechercher_radio "${choixRadio#*r}" ;;
		REC*)	record_radio "${choixRadio#*REC}" ;;
		log)	[ -f $virtOUT.pid ] && record_log || { echo "rien en enregistrement... " ; pause ; } ;;

		# q)		fermerGUI ;;
		# q)		screen -d ;;
		q)		_quitter ;;
		Q)		_quitter ;;
		# Q)		gedit "$fichier_radios" & ;;
		
		*)		;;
	esac
	
	}
# echo "chargement ligne $LINENO"
mainRadio () {
	# journal "appel de : ${FUNCNAME} ${@}"
	on_clear_terminal
	afficherMenuRadio $la_pageRadio

	# #saisie du choixRadio
	read -r choixRadio 

	on_clear_terminal
	parser_choix_radio
	mainRadio
	}
# echo "chargement ligne $LINENO"

_aide2 () {
echo -e "${enJaune}${enGras}"
cat << FIN 
je cherche à faire des choses simples, 
communes, lisible par un synthétiseur vocal, 
... et qui tiennent dans le temps.
... donc exit les interfaces graphiques :
des menus en texte et de la couleur pour attirer l'oeil sur l'essentiel
le moins de fonctions possible, une seule façon d'y accéder
et comme rien n'est compilé, facile à adapter.

ici c'est un joueur de liens avec VLC (un web radio player).

A partir d'un fichier de radios, 
on obtient automatiquement une liste de radios.
cette liste est par 10 lignes, on passe d'une page à une autre avec p ou s
pour précédent ou suivant, on accède à une page avec Px...

si on ferme le script, la musique continue.
pour l'arrêter, il suffit de relancer le script et d'utiliser k
ou tuer vlc (donc il est possible d'utiliser ce script à travers un tunnel ssh)
quelques touches et explications
[OPTIONS] : attention à la casse
h)	_aide ; pause	
H)	_aide2 ; pause	
f)	voirFrequence	 affiche les frequences à côté du nom dans la liste

s)	page_suivanteRadio	
p)	page_precedenteRadio	
P*)	aller_a_la_pageRadio "${choixRadio#*P}"	
aller directement à la page * [pe : P12]

v*)	volume	modifier le volume de vlc en % [pe : v80]
i)	infos_vlc	donne la station jouée par vlc
k)	tuer_vlc	ferme vlc

z)	charger_radios_csv "$fichier_radios" 	recharge le fichier radio
E)	gedit "$fichier_radios" &	éditer le fichier radio

A)	ajouter_radio	module d'ajout d'une radio
r*)	rechercher_radio "${choixRadio#*r}"	 [pe : rfrance pour france]

q)	_quitter

FIN
	}
_aide () {
echo -e "${enJaune}${enGras}"
cat << FIN 
[OPTIONS] :
h|a)	_aide ; pause ;;
H)		_aide2 ; pause ;;
f)		voirFrequence ;;

s)		page_suivanteRadio ;;
p)		page_precedenteRadio ;;
P*)		aller_a_la_pageRadio "${choixRadio#*P}" ;;

v*)		volume "${choixRadio#*v}" ;;
i)		infos_vlc ; pause ;;
k)		tuer_vlc ;;

z)		charger_radios_csv "$fichier_radios" ;;
E)		gedit "$fichier_radios" & ;;

A)		ajouter_radio ;;
r*)		rechercher_radio "${choixRadio#*r}" ;;
REC*)	record_radio "${choixRadio#*REC}" ;;
log)	[ -f $virtOUT.pid ] && record_log || { echo "rien en enregistrement... " ; pause ; } ;;

q)		_quitter ;;
# Q)		gedit "$fichier_radios" & ;;

*)		;;
FIN
	}

charger_radios_csv () {
	local tete="chargement des radios"
	NOM_RADIO=()
	FREQUENCE=()
	local ligne 

	local l=0
	while read ligne
	do
		IFS=';' read NOM_RADIO[$l] FREQUENCE[$l] <<<"$ligne"
		echo -en "\r$tete : ${NOM_RADIO[$l]}"
		sleep .001 # pour prendre le temps de voir le chargement
		# sleep .01 # pour prendre le temps de voir le chargement
		((l++))
	done < "$1"
	nbre_radios=$(($l-2))
	nbre_page_radio=$(( 1+$nbre_radios/10 ))
	clear
	echo -e "$((nbre_radios+1)) radio(s) chargée(s)..." # TODO bug ?
	# sleep .5
	}
# echo "chargement ligne $LINENO"

# echo "chargement ligne $LINENO"

initialiser_variables
splashScreen
initialiser_journal
charger_radios

mainRadio

# {
# for ((x=0 ; x<10; x++))
# for ((x=0 ; x<=$nbre_radios; x++))
# do
	# echo "$x - ${NOM_RADIO[$x]} - ${FREQUENCE[$((x+1))]}"
	# echo "${NOM_RADIO[$x]};${FREQUENCE[$((x+1))]}"
# done
# } > "$fichier_radios"

exit 0

là c'est lecteur radio qui fonctionne avec cvlc (vlc sans interface)...
NB : c'est écrit pour fonctionner dans un screen donc tu auras des trucs non fonctionnels
NB 2 : le script crée un dossier dans "$HOME/.config/kholo/kiradio" wink et y met sa config
bon, ça on s'en fout...
par contre tu as les couleurs, un splash screen, des menus, un journal horodaté, des fonctions simples voire plus complexes,...

NB : j'utilise pour débugguer : cool

# echo "chargement ligne $LINENO"

avec Ctrl + H je vire ou remet le #
et

# journal "appel de : ${FUNCNAME} ${@}"

pour journaliser mes fonctions cool cool cool

voilà c'est mon avis !

Hors ligne

#3 Le 13/12/2018, à 13:32

fnux

Re : Comment développer des scripts bash avec interface graphique ?

Bonjour Kholo,

Merci pour ton post.

Bravo pour ton script, mais ce n'est pas l'option que je cherche car je préfère une interface graphique simple avec par exemple des cases à cocher pour sélectionner les options.

Je vais donc regarder Zenity de plus près ou d'autres outils qui utilisent Zenity comme par exemple YAD.

Mais d'autres suggestions sont bienvenues aussi.

Merci encore.

Cordialement. Fnux.


N'engage pas un débat lors d'un dîner car celui qui n'a pas faim aura le dernier mot. - R. Whately
FWPBLA - The Froggies West Palm Beach Linux Association.

Hors ligne

#4 Le 13/12/2018, à 19:23

kholo

Re : Comment développer des scripts bash avec interface graphique ?

zenity,...
si si cé poussible !!!

#!/bin/bash
# ----------------------------------------------
logiciel_nom="${0##*/}"
logiciel_fonction=""
logiciel_version="0.001"
# NOTES DE VERSIONS
# ----------------------------------------------
# 
# ----------------------------------------------
echo "lancement $nomlogiciel..."

# set -o xtrace

_journal(){
    fichier_log="$nomlogiciel.log"
    > "$fichier_log"
}
echo "ouverture du journal"
_journal

journal(){ echo "$@" >> "$fichier_log" ; }


journal "*******************initialisation*******************"
journal "VARIABLES"
KA="Choix 1"
KB="Choix 2"
KC="Choix 3"
KD="Choix 4"
KE="Choix 5"
KF="Choix 6"
KG="Choix 7"
KH="Choix 8"
KI="Choix 9"

VA="Valeur 1"
VB="Valeur 2"
VC="Valeur 3"
VD="Valeur 4"
VE="Valeur 5"
VF="Valeur 6"
VG="Valeur 7"
VH="Valeur 8"
VI="double-cliquez ici !"

_quitter(){
journal "_quitter"
# mettre ici tout ce qui sera nescessaire à la bonne fermeture

    exit 0
}

frm_principale(){
journal "*******************frm_principale*******************"

LAQUESTION="
---------------------------------------------------------------------
Ce module crée une liste de choix

Tout à faire - <b>pas encore codé</b>"

zenity --list --width=600 --height=450 --text="$LAQUESTION" \
    --ok-label="Sélectionner" \
    --cancel-label="quitter" \
    --hide-column 1 --column "" --column "choix" --column "Valeur" \
    1 "$KA" "$VA" \
    2 "$KB" "$VB" \
    0 "" "on peut facilement mettre des blancs" \
    3 "$KC" "$VC" \
    4 "$KD" "$VD" \
    5 "$KE" "$VE" \
    6 "$KF" "$VF" \
    7 "$KG" "$VG" \
    0 "" "" \
    8 "$KH" "$VH" \
    9 "$KI" "$VI" 2>/dev/null ; # bug zenity

}

frm_principale_parser(){
journal "*******************frm_principale_parser*******************"
journal "frm_principale_parser : $1"

    case $1 in  
        1) action 1 ;;
        2) action 2 ;;
        3) action 3 ;;
        4) action 4 ;;
        5) action 5 ;;
        6) action 6 ;;
        7) action 7 ;;
        8) action 8 ;;
        9) 
            fonction_test
            ;;
        0) ;; # rien à faire
        *) 
            quitter="1"
            _quitter ;;
    esac

}

action(){
    zenity --info --text="vous avez choisi action $1 \n ... choisissez le 9 !" 2>/dev/null # bug zenity
}

fonction_test(){
    message="$(date)
    On peut mettre ce que l'on veut ici"
    echo "$message"
    zenity --info --text="$message" 2>/dev/null # bug zenity
}

main(){
journal "main" 
    menuchoice=$(frm_principale) 
    frm_principale_parser ${menuchoice%|*} # pour corriger le 1|1

    if [ $quitter!="1" ] ; then
        # on boucle _main tant que quitter est différent de 1
        main
    fi
}

# Programme principale
main

exit 0

Hors ligne