Vous êtes sur la page 1sur 45

Dialogtudo

AurelioMarinhoJargas 2003-2011

EsteartigosobreoDialogumresumodocaptulo11domeu livroShellScriptProfissional.Olivroenorme,soquase500 pginasdepuroshell,explicadodemaneiraclaraedidtica. Vocvaidominaroassunto,almdeaprenderaescrever programasdeverdadeemvezdemerosscriptstoscos.Sou escritoreganhoavidacommeuslivros,entocomprandoo livrovoctambmmeajudaamanteressesitenoareassim eucontinuoescrevendoparavocler.Combinado?:)

1. Prefcio 2. Introduo 2.1.OqueoDialog 2.2.BrevehistricodoDialog 2.3.SeuprimeirocomandocomoDialog 2.4.Listagemdos15tiposdecaixas 3. Exemplosdostiposdecaixa 3.1.Calendar 3.2.Checklist 3.3.Fselect 3.4.Gauge 3.5.Infobox 3.6.Inputbox,Passwordbox 3.7.Menu 3.8.Msgbox 3.9.Radiolist 3.10.Tailbox,Tailboxbg 3.11.Textbox 3.12.Timebox 3.13.Yesno 4. ComooDialogfunciona 4.1.Entendendoosparmetrosobrigatriosdalinhadecomando 4.2.ComoreconhecerrespostasSIMouNO 4.3.Comoobterotextoqueousuriodigitou 4.4.ComoobteroitemnicoescolhidodeumMenuouRadiolist 4.5.ComoobterositensmltiplosescolhidosdeumChecklist 4.6.EseousurioapertarobotoCANCELAR? 4.7.EseousurioapertarateclaESC? 4.8.EseousurioapertarobotoHELP? 4.9.Comotratartodososboteseteclasdeumavez? 5. MergulhandodecabeanoDialog 5.1.Exemplodemenuamarrado(emloop) 5.2.Exemplodetelasencadeadas(navegaosemvolta) 5.3.Exemplodetelascomnavegaocompleta(idaevolta) 5.4.Exemplodepedidodeconfirmao(umacaixasobreoutra) 5.5.Exemplodeposicionamentodecaixas(nocentralizado) 5.6.Exemplodevriascaixasnamesmatela(multicaixas!) 5.7.Exemplodemenucomitensdinmicos(definidosemexecuo) 5.8.Exemplodecpiadearquivoscombarradeprogresso(Gauge) 5.9.Configurandoascoresdascaixas 6. APNDICEA:Listadasopesdelinhadecomando 6.1.Opesparadefinirostextosdacaixa 6.2.Opesparafazerajustesnotextodacaixa 6.3.Opesparafazerajustesnacaixa 6.4.Opesrelativasaosdadosinformadospelousurio 6.5.Opesquedevemserusadassozinhasnalinhadecomando 6.6.Outrasopes 7. APNDICEB:Osclones:Xdialog,Kdialog,gdialog,... 7.1.Whiptail 7.2.Xdialog 7.3.Kdialog 7.4.gdialog

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

7.5.Zenity 7.6.Udpm 7.7.pythondialog 8. Sobreestedocumento 8.1.Disponibilidade(download) 8.2.Histricodeverses(Changelog) 8.3.Licena/Copyright 8.4.Ondeobtermaisinformaes

1.Prefcio Bemvindo(a) ao "Dialog tudo", uma documentao completa do programa Dialog escritaemportugus. O Dialog um programa usado para desenhar interfaces amigveis para o usurio, combotese menus,apartirdeumShellScript. UmShellScriptumprogramafeitoparafuncionar no interpretador de comandos (prompt) padrodo UNIX/Linux,comooBourneShell,ouoBash. Para obter os conhecimentos que estedocumento sepropeatransmitir,oleitordeveter: ConhecimentoprviodeprogramaoShell; UmaShelldisponvelparatestaros exemplos; ODialoginstaladoefuncionandoemsua mquina. SevocaindanotemoDialog,instaleoprograma diretodoCDdasuadistribuiodeLinux,oubaixe osfontes. Tudocerto?Entoboaleitura! 2.Introduo

2.1.OqueoDialog O Dialog um programa paraconsole (modo texto) que desenha caixas de dilogo ("dialog boxes") na tela, similares as do modo grfico, com botes, entradas para texto e menu. Essas caixas so utilizadas para compor interfaces amigveis com o usurio, para que ele responda perguntasouescolhaopes. O Dialog um executvel e recebe todos os parmetros via linha de comando, ento ele geralmente usadodentrodeumShellScript.Serve parafazerprogramasinterativos,queo usurio precisa operar durante sua execuo. Tarefas comuns feitascom o Dialog so escolher uma opo em um menu, escolher um arquivo, uma data,edigitarfrasesousenhas. Com o Dialog possvel fazer programas em shell quese"parecem" com programas grficos, onde o usuriovapenastelasenavegaentre elas apertando os botes de "OK" e "CANCELAR". Um exemplo clssico desse tipo de interface so os programasdeinstalaodesoftware. Utilizando este conceito de telas, possvel "amarrar" o usurio ao

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

possvel "amarrar" o usurio ao programa,lheapresentandoasopes disponveis, sem que ele precise ter acesso direto linha decomando.til para logins restritos e para ajudar iniciantes.

2.2.BrevehistricodoDialog ODialogoriginalantigoeno maisdesenvolvido,foiata verso0.3 Outrosprogramadoreso adotaramecontinuaramo desenvolvimentoataverso 0.7. Depoissurgiuo"cdialog" (ComeOnDialog),comoum Dialogmelhorado,baseadono original. Ocdialogcontinuouevoluindoe acabousetornandoooficial, sendorenomeadopara"dialog". EsteoDialogqueveremos aqui.

2.3.Seuprimeirocomandocomo Dialog Mas vamos direto a um exemplopara que voc conhea "a cara" doDialog. Sente numa posio confortvel e digitenashelloseguintecomando: $dialogmsgbox'minhaprimeiratela'540 Imediatamentesuatelaficarassim:

Fcil no? Desenhamos uma caixade mensagens (msgbox) de tamanho 5 por40. O Dialog reconhece vrios tipos de "caixas", e esta msgbox uma das mais simples. Os dois nmeros passados no final do comando definem o tamanho da caixa que queremos desenhar, nesse caso 5 linhas e 40 colunas (No confundir compixels,poisestamosnoconsole!).

2.4.Listagemdos15tiposdecaixas

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

2.4.Listagemdos15tiposdecaixas Para saciar a curiosidade do leitor, aqui esto listados todos os tipos de caixasuportadaspeloDialog:
Tipoda caixa calendar checklist fselect gauge infobox inputbox menu msgbox Desenhaumacaixaondeo usurio... Vumcalendrioeescolheuma data Vumalistadeopeseescolhe vrias Digitaouescolheumarquivo Vumabarradeprogresso (porcentagem) Vumamensagem,sembotes Digitaumtextoqualquer Vummenueescolheumitem Vumamensagemeapertao botoOK

passwordbox Digitaumasenha radiolist tailbox tailboxbg textbox timebox yesno Vumalistadeopeseescolhe uma Vasadadocomandotail-f Vasadadocomandotail-f(em segundoplano) Vocontedodeumarquivo Escolheumhorrio Vumaperguntaeapertaoboto YESouoNO

notvel que a variedade grandee temos caixas para vrios tipos de tarefas. Algumas caixas so novas e foram introduzidas em verses mais recentesdoDialog. Caso alguma dessas caixas no funcione na sua mquina, atualize o seu Dialog para a versomaisrecente ou confira se ele foi compilado com todasascaixasdisponveis.

3.Exemplosdostiposdecaixa Agora que j sabemos como a cara doDialog,e quais so todos os tipos de caixas disponveis, com certeza o leitor deve estar afoito para cruzar essas duas informaes e ver a cara de todasas caixas,no? isso o que veremos agora, uma listagem completa com um exemplo funcional de cadatipo de caixa, constando um foto da tela e a linhade comandousadaparagerla. Como uma maneira de contextualizar nossa listagem, inventamos o IIV, que o Instalador Imaginrio do Vi. As telas seguintes fazemparte desseinstalador,queinstalaeconfiguraoeditorde textosViemsuamquina.

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

InstruesImportantes: Novejaessalistacompressa. Analisecomatenoosdetalhesdecada tela,acompanhenalinhadecomandoas opeseparmetrosutilizados,redigite(ou copieecole)oscomandosnasuaShelle vejaosexemplos"aovivo". Experimentemudaralgunsparmetrosever oqueacontece,exploreaspossibilidades. Nosepreocupeagoraem"como"oDialog funciona,massimcom"oqu"elefaz. Descubrao,experimenteo,degraa! Faadessemomentoumaapresentao, imersoeaprendizado,paraentrarnomundo doDialog. IMPORTANTE:Releiaesigaasinstrues acima! Aofinaldessaviagem,sevocseguirasinstrues acima, com certeza voc ter uma boa idia dos poderesdoDialog,doquantoelepodelhesertile deondevocpoderapliclo. No se assuste se de repente voc ficarcheiode idias e ter vontade de fazer uns 5 programas diferentesagoramesmo,issonormal!:).ODialog temessepoderdeseduoporsuasimplicidadee flexibilidade. Nota:Aquebradoscomandosemvrias linhasapenasesttica,noobrigatria.

3.1.Calendar dialog\ title'Escolhaadata'\ calendar''\ 00\ 31121999

3.2.Checklist dialog\

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

title'SeleodosComponentes'\ checklist'Oquevocquerinstalar?'\ 000\ syntax'Arquivosdesintaxe'on\ mouse'Suporteamouse'off\ color'Suporteacores'on\ beep'Driveravanadodesom'off

3.3.Fselect dialog\ title'Escolhaondeinstalar'\ fselect/usr/share/vim/\ 00

3.4.Gauge dialog\ title'InstalaodosPacotes'\ gauge'\nInstalandoVim6.0a.tgz...'\ 84060

3.5.Infobox dialog\ title'Aguarde'\ infobox'\nFinalizandoem5segundos...'\ 00

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

3.6.Inputbox,Passwordbox dialog\ title'Confirmao'\ passwordbox'Porfavor,confirmeasenha:'\ 00

3.7.Menu dialog\ title'Perfil'\ menu'Escolhaoperfildainstalao:'\ 000\ mnima'Instalaomnimo'\ completa'Instalatudo'\ customizada'Vocescolhe'

3.8.Msgbox dialog\ title'Parabns'\ msgbox'Instalaofinalizadacomsucesso.'\ 640

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

3.9.Radiolist dialog\ title'Pergunta'\ radiolist'HquantotempovocusaoVi?'\ 000\ iniciante'at1ano'on\ experiente'maisde1ano'off\ guru'maisde3anos'off

3.10.Tailbox,Tailboxbg tailf/var/log/messages>out& dialog\ title'MonitorandoMensagensdoSistema'\ tailboxout\ 00

3.11.Textbox dialog\ title'VisualizandoArquivo'\ textbox/usr/share/vim/vim60/indent.vim\ 00

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

3.12.Timebox dialog\ title'AjusteoRelgio'\ timebox'\nDICA:UseassetaseoTAB.'\ 00\ 235930

3.13.Yesno dialog\ title'AVISO'\ yesno'\nOVifoiinstaladoeconfigurado. Vocquerexecutloagora?\n\n'\ 00

Agora que voc j ficou horas copiandoecolando os exemplos, ou redigitando os comandos, jest apto a conhecer o dialogtour, um script pronto para ser executado que mostra todas as caixas paravoc:) 4.ComooDialogfunciona Eento,jestcheiodeidias? Sim timo!Entovamoscontinuaroaprendizadoe conhecerosdetalhesdoDialogparapoder usloemscripts. No Vocseguiuasinstruesdotpicoanterior? Sim Entoinvistamaisumtemponashell, executandoosexemplos,modificandoos, avaliandoaspossibilidadesdoDialog.Veja asfiguras,imagineondevocpoderia utilizaraquelastelinhas,nosseus programasatuais,emprogramasnovos quevocpoderiafazer...Depoisvolteaqui econtinuamosaleitura.

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

No umapena.Nessepontododocumento vocjseriaumconhecedordoDialog. Considerevoltaraotpicoanterioretentar denovo. O Dialog relativamente simples de usar, mas como ele age um pouco "diferente" dos outros programas do sistema, pode assustar e parecer confusonumaprimeiratentativa. Como agora voc j sabe "o qu" o Dialogpode fazer,adianteveremosemdetalhescomoconstruir eobterdadosdascaixas,eaprenderemosalgumas caractersticasdoDialogcomo: Alinhadecomandolonga,cheiadeopes Eleredimensionaotextoeacaixa automaticamente UsacdigoderetornoparabotesSim/No, Ok/Cancel Usaasadadeerro(STDERR)paratextose itensescolhidos

4.1.Entendendoosparmetros obrigatriosdalinhadecomando NoDialog,obrigatriopassarotexto e o tamanho da caixa, sempre. Com isso, a cada chamada do programa, devem haver pelo menos 4 opesna linhadecomando. Oformatogenricodechamada: dialogtipodacaixa'<texto>'<altura><largura> texto Otextoapalavraoufraseque aparecenoinciodacaixa,logo apsaprimeiralinha(borda superior).Passeumastringvazia'' casonodesejetexto. Casootextosejamaiorqueo tamanhodajanela,eleser ajustadoautomaticamente, quebrandoalinha.Paracolocaras quebrasdelinhasmanualmente, insiraopadro'\n'(barraene) ondedesejarasquebras. Exemplo:'Primeira linha.\nSegunda.' altura Aalturaonmerodelinhasque seroutilizadasparadesenhara caixa,inclusiveaprimeiraea ltimaquefazemasbordas superioreinferior. Seinformadoonmerozero,o Dialogajustaautomaticamentea alturadacaixaparacabero contedo. largura Alarguraonmerodecolunas

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

Alarguraonmerodecolunas queseroutilizadasparadesenhar acaixa,inclusiveaprimeiraea ltimaquefazemasbordas esquerdaedireita. Seinformadoonmerozero,o Dialogajustaautomaticamentea larguradacaixaparacabero contedo. Na prtica, melhor deixar que o Dialog quebre o texto e ajuste o tamanho das caixas automaticamente. Entonosexemplosdessedocumento no haver quebras de linha manuais (\n) e os tamanhos sero sempre especificadoscomo"00"(zerozero). Nota:Emcaixascomoo menu,ondetambmpreciso passartodosositenspela linhadecomando,hmais parmetrosobrigatriosalm dosjcitados.Elessero abordadosadiante,no momentooportuno.

4.2.ComoreconhecerrespostasSIM ouNO A forma mais bsica de secomunicar com o usurio fazendo perguntas que ele possa responder com Simou No.possvelfazerumconfigurador, ou at mesmo um programinha simples com essas respostas. J foi visto como fazer uma telinha desse tipo: dialogyesno'simouno?'00 Mas, e dentro de um script, como saber qual foi a resposta do usurio? Qualfoiobotoqueeleapertou? O Dialog utiliza o cdigo de retorno ("Return Code") para informar qualfoi o boto apertado. Como sabemos, o shell guarda esse cdigo dentro da varivel$?. Ento que tal descobrirmos a soluo do problema testando? Execute o seguinte comando duas vezes, e note qual o cdigo de retorno que aparece quando se escolhe "Yes" e quandose escolhe"No". dialogyesno'simouno?'00echoRetorno:$?

Fcil!ZeroparaSim,umparano. Se lembrarmos que todos os comandos UNIX/Linux retornam zero

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

comandos UNIX/Linux retornam zero emsucessoequalquercoisadiferente de zero (geralmente 1) quandoocorre algum erro, fica fcil memorizar. O zero sempre positivo, beleza, sem erro,SIM.Oumproblema,erro,NO. Memorizando:SIM=0,NO=1 Agora que sabemos isso, fica fcil lidar com as respostas do usurio. Basta usar o if para testar o valordo $?.Umexemplobemsimples: dialogyesno'Querverashoras?'00 if[$?=0]then echo"Agoraso:$(date)" else echo'Ok,novoumostrarashoras.' fi Caso a mensagem do else no seja necessria, podemos usar o operador && (AND) e deixar o comando bem maissimples: dialogyesno'Querverashoras?'00&&echo"Agoraso:$(date)"

Usando o Dialog fica fcil definir variveisdeestado("flags")ouopes antes da execuo de um programa! Por exemplo, um programa simples paralistararquivosdodiretrioatual: #!/bin/sh #lsj.shoscriptdo"lsjoiado" #Estescriptfazpartedohttp://aurelio.net/shell/dialog #Zerandoasopes cor=ocultos=subdir=detalhes= #Obtendoasconfiguraesqueousuriodeseja dialogyesno'Usarcores?'00&&cor='color=yes' dialogyesno'Mostrararquivosocultos?'00&&ocultos='a' dialogyesno'Incluirsubdiretrios?'00&&subdir='R' dialogyesno'Mostrarvisodetalhada?'00&&detalhes='l' #Mostrandoosarquivos ls$cor$ocultos$subdir$detalhes Baixarestescript

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

4.3.Comoobterotextoqueousurio digitou AcaixaInputboxserveparapedirque o usurio digite algo. A sua prima a Passwordbox,quetemfuncionamento idntico, apenas no mostra na tela o queousuriodigita(tilparasenhas). Por exemplo, se quisermos que o usurio digite seu nome. Primeiro construmosatelinha: dialoginputbox'Digiteseunome:'00 Tudo bem, o usurio digita seunome, apertaOKepoft!Onomerepetidona tela e volta o prompt. Como guardaro que foi digitado numa varivel, para usardepois? O funcionamento padro do Dialog : aps o usurio digitar seu nome e apertar o OK, esse texto mandado para a sada de erro (STDERR). Temos trsmaneirasde"pescar"essetexto: 1. RedirecionaraSTDERRparaum arquivoelerocontedodesse arquivo 2. RedirecionaraSTDERRparaa STDOUT 3. UsaraopostdoutdoDialog Veremos ento essas trs tticas. A primeiraconsisteemredirecionarpara umarquivo,ecomcertezaamaneira mais incmoda por precisar de um arquivo temporrio, mas tambm mais portvel e que funciona em qualquer Shell. Como todos sabemos como fazer um redirecionamento, vamosdiretoaoexemplo: dialoginputbox'Digiteseunome:'002>/tmp/nome.txt nome=$(cat/tmp/nome.txt) echo"Oseunome:$nome"

Guardamos na varivel 'nome' o contedo do arquivo temporrio. A notao $(comando) para subshell ser a utilizada em todoodocumento. A similar usando crases tambm funciona,masfacilmenteconfundida com aspas simples, ento ser evitada. A segunda maneira mais limpa por no precisar criar o arquivo temporrio. Basta utilizar o operador 2>&1pararedirecionarasadadeerro para a sada padro. Com o texto desejado na sada padro, podemos definiravarivel'nome'diretamente: nome=$(dialoginputbox'Digiteseunome:'002>&1)

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

echo"Oseunome:$nome" Mas acaba sendo incmodo ter que ficar redirecionando a sada de erro sempre, a cada chamada do Dialog.A terceira maneira de obter o textoleva isso em conta e usa uma opo do prprio programa para redirecionar o textoparaasadapadro,astdout: nome=$(dialogstdoutinputbox'Digiteseunome:'00) echo"Oseunome:$nome" Dastrsformasapresentadas,estaa mais limpa. Assim, nos exemplos seguintes, a opo stdout ser sempreutilizada. Ah! A caixa Inputbox tambm aceita um ltimo parmetro opcional queo texto inicial j preechido no campo. Exemplo: dialogstdoutinputbox'Digiteseunome:'00"seunomeaqui"

4.4.Comoobteroitemnicoescolhido deumMenuouRadiolist J sabemos como fazer telas tipo Sim/No. Mas e se precisarmos ampliarolequederespostaspossveis do usurio, onde tambm poderamos ter "Talvez" ou "No sei" como respostas vlidas? Ou ainda, se precisarmosqueousurioescolhaum item de um menu para saber qualdas opeselequerexecutar? NessecasooSim/Noinsuficiente,e precisamosusaracaixadotipoMenu, onde podemos especificar vriositens diferentes e o usurio escolhe um (e apenas um). Para comear, vamos fazerumexemplobembobo: user=$(dialogstdoutmenu'Bobice:'0001um2dois3trs) echoVocescolheuonmero$user

Aprimeiragrandediferenaasenotar que a linha de comando do Dialog ficou gigante, cheia de parmetros! Vamosdestrinchla. At o 'Bobice:', nenhuma novidade. Mas seguido dele esto trs zeros onde geralmente s tinha dois! No, issonoerrodedigitao:) Os dois primeiros zeros continuam sendo a altura e largura dacaixa,isso nunca muda. J o terceiro zero uma

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

nunca muda. J o terceiro zero uma propriedade especial do Menu, que indica quantos itens sero "visveis" de uma vez na caixa. Veja a diferena detrocarestezeroporum: dialogstdoutmenu'Bobice:'0011um2dois3trs

Agora apenas um item visvel por vez, diminuindo o tamanho da caixa. Isso pode ser til quando oMenutem muitas opes, mas para que a caixa fique num tamanho aceitvel, mostra se apenas parte delas por vez edeve se fazer uma "rolagem" para ver o resto. Logo aps esta definio do nmero de itens, colocamos enfileiradostodos os itens do Menu, no formato "<item> <descrio>". Em nosso exemplo so trsitensnumricos. Este o formato genrico da linhade comandodacaixaMenu: dialogmenu'<texto>'00<nmitens><item1><desc1>...<itemN><descN> nm-itens Onmeromximodeitensdo menuqueseromostradosna caixa.Osdemaisficaroocultose podemseracessadosrolandoa listacomassetasdoteclado. Casoespecificadocomozero,o Dialogmostratodosositens,ou ajustaautomaticamenteonmero idealparaqueacaixacaibana tela. item Oitemdeveserumnomenico, diferenteparacadaitem. Oitemotextoretornadopelo Dialogaoscript,quandoousurio escolheumaopo. descrio Adescrioumtextoexplicativo queserveparadetalhardoquese trataoitem. Adescriopodeseromitida passandoastringvazia''. Exemplo: dialogmenu'texto'000item1''item2''item3'' Agora que sabemos compor esse monstro que a linha de comandode um Menu, vamos fazer mais um exemplo, com nomes ao invs de nmerosnositensdomenu: cor=$(dialogstdoutmenu'Ascores:'000amarelo'acordosol'verde'acordagrama'azul'acordocu')

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

echoVocescolheuacor$cor

No to difcil hein? A dicaparano se confundir enxergar a linha de comandocomovriaspequenapartes, identificando e isolando cada uma delas: dialog stdout#usaoSTDOUT menu'Ascores:'#textodomenu 000#altura,larguraenm.itens amarelo'acordosol'#item1 verde'acordagrama'#item2 azul'acordocu'#item3

Por isso que geralmente oscomandos Dialogsocolocadosemvriaslinhas, parafazeressaseparaoempartese facilitaroentendimento.Paratal,basta "escapar" o final de cada linha do comando (exceto a ltima) com uma barra \. Veja como fica o exemplo anteriorquebradoemvriaslinhas: cor=$(dialog\ stdout\ menu'Ascores:'\ 000\ amarelo'acordosol'\ verde'acordagrama'\ azul'acordocu') echoVocescolheuacor$cor Bem melhor no? Adicionalmente, podese alinhar os escapes e os itens parafacilitaraindamaisaleitura: cor=$(dialog\ stdout\ menu'Ascores:'\ 000\ amarelo'acordosol'\ verde'acordagrama'\ azul'acordocu') echoVocescolheuacor$cor Esta ser a notao utilizada nos exemplos,porseramaisdidtica. CUIDADO! No coloque comentrios ouespaosembrancoapsabarrade escape,eladeveseroltimocaractere dalinha. dialogstdout\#Essecomandoinvlido.Estes yesnotexto\#comentriosnopodemestaraqui. 00

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

O primo prximo do Menu o Radiolist. A nica diferena entre os dois, que no Radiolist possvel definir qual ser o item que jiniciar selecionado. Para isso, cada item composto por trs parmetros: nome, descrio,status.OstatusdeveserON ou OFF, para informar se o item est "ligado"(marcado)ouno. Como na Radiolist o usurio spode escolher um nico item, cuidado na hora de compor o comando, pois apenas um item pode ter o statusON, todos os outros devem ser OFF. Caso precise de uma lista de mltipla escolha, veja o Checklist no tpico seguinte. Usando o exemplo anterior, podemos iniciar a caixa com a cor "verde" j selecionada: dialogradiolist'Ascores:'000\ amarelo'acordosol'OFF\ verde'acordagrama'ON\ azul'acordocu'OFF

Ah!AoutradiferenadoRadiolistpara o Menu que ele usa os parnteses (X)paramarcaroitem.

4.5.Comoobterositensmltiplos escolhidosdeumChecklist AcaixaChecklistidnticaaRadiolist j vista, a nica diferena o usurio poder escolher mais de um item; umacaixademltiplaescolha. Primeiro, vamos fazer um menu com opesparaousurioescolher: estilos=$(dialogstdout\ checklist'Vocgostade:'000\ rock''ON\ samba''OFF\ metal''ON\ jazz''OFF\ pop''ON\ mpb''OFF) echo"Vocescolheu:$estilos"

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

A sintaxe a mesma da Radiolist,e compomosumalistaondeositensno tmdescrio(usandoasaspasvazias '').Adiferenaagoraquetemosmais deumitemselecionado. Note que o Dialog retorna todos na mesmalinha,comcadaitemescolhido entre aspas duplas. Esse retorno em apenas uma linha requer conhecimento em Sed, Awk ou outro editor programvel para se identificar e extrair corretamente os itens escolhidos. Como isso dificulta o uso do Dialog, ele possui uma opo de linha de comando chamada separateoutput, que ao invs de retornartudoemumalinha,retornaos itensselecionadosumporlinha,esem as aspas. Dessa maneira fica bem mais fcil varrer e descobrir ositens escolhidoscomo'while': estilos=$(dialogstdout\ separateoutput\ checklist'Vocgostade:'000\ rock''ON\ samba''OFF\ metal''ON\ jazz''OFF\ pop''ON\ mpb''OFF) echo"$estilos"|whilereadLINHA do echo"$LINHA" done

4.6.Eseousurioapertaroboto CANCELAR? Voc faz as telinhas, apronta os

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

Voc faz as telinhas, apronta os menus, deixa tudo certinho para funcionar redondo. Mas, no meio do programa, o usurio desiste de tudo e aperta o boto CANCELAR. Como detectarisso? Assim como acontece com os botes Yes/No, o Dialog usa os Cdigos de Retorno para informar se o usurio pressionouoOKouoCANCELAR. OK=0,CANCELAR=1 Ento sempre aps cada telinha do dialog, coloque o seguinte teste para saberseoCANCELARfoiapertado: [$?eq1]&&echo'BotoCANCELARapertado' Dependendo de como funciona seu programa,vocpodefazeroapertodo CANCELAR retornar tela anterior, ao menu principal, ou ainda ser mais drstico e abandonar o programa. Tudo depende do tipo de navegao quevocquerusar. AlmdeapertarobotoCANCELAR,o usurio tambm pode apertar a tecla Escdoteclado.Vejaotpicoseguinte.

4.7.Eseousurioapertaratecla ESC? Em qualquer tela do Dialog, apertara teclaEscgeraocdigoderetorno255, e abandona a caixa. Ento alm de tratar do boto OK (retorno zero) edo CANCELAR (retorno 1), tambm precisocuidardateclaEsc. Dependendo do tipo de suaaplicao, a tecla Esc pode gerar o mesmo procedimento que apertar o boto CANCELAR geraria. Ou ainda, voc pode ter dois procedimentos diferentes, um para cadaevento.Tudo dependedotipodenavegaoqueseu programautiliza,algumassugestes: NavegaoamarradaaumMenu Principal SeapertarCANCELARno MenuPrincipal,saido programa SeapertarCANCELARnuma telasecundria,voltaaoMenu Principal SeapertarESCemqualquer tela,saidoprograma NavegaotipoIdaeVolta SeapertarCANCELARvolta telaanterior SeapertarESCsaido programa

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

Vejaexemploscompletosdessestipos de navegao e do tratamento dos eventosnotpicoseguinte. Caso queira mapear o Esc para o mesmofuncionamentodoCANCELAR, voc pode fazer um teste mais genricocomo,"senoforoOK": [$?ne0]&&echo'EscouCANCELARapertado' Claro, se estiver usando boto de HELP, ele tambm ser mapeadopara oCANCELAR,entocuidado.

4.8.Eseousurioapertaroboto HELP? Obotodeajuda(HELP)foiadicionado no dialog0.9b, para uslo basta adicionar a opo helpbutton. O seu cdigo de retorno quando apertado dois. Vamos l, memorizandonovamente: OK=0,CANCELAR=1,HELP=2 O teste primrio para saber se elefoi apertado: [$?eq2]&&echo'BotoHELPapertado' Para mostrar o texto de ajuda parao usurio,bastausarumacaixaMsgbox se for curto, ou uma Textbox se for algo mais extenso. Depois svoltar paraacaixaanterior.

4.9.Comotratartodososbotese teclasdeumavez? case$?in 0)echoOusurioapertouobotoOK(ouoYes) 1)echoOusurioapertouobotoCANCELAR(ouoNo) 2)echoOusurioapertouobotoHELP 255)echoOusurioapertouateclaESC *)echoRetornodesconhecido esac

5.MergulhandodecabeanoDialog

5.1.Exemplodemenuamarrado(em

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

5.1.Exemplodemenuamarrado(em loop)

#!/bin/bash #tia.shoscriptdatiaqueprecisausarocomputador #Estescriptfazpartedohttp://aurelio.net/shell/dialog # #Exemplodecomoamarraroscriptnummenuprincipalusando #o'while'.O'case'usadoparaidentificarqualfoiaao #escolhida.Apscadaao,elesempreretornaaomenu #principal.Ssaidoscriptcasoescolhaaltimaopo, #aperteCANCELARouESC. # #tilparausarcomologinshelldepessoasinexperientesou #fazerutilitriosdeaesrestritasedefinidas. # #FLUXOGRAMA #INCIOFIM #++++ #+>|menu|Esc>|saido| #||principal|Cancel>|programa| #|+Ok++>++ #||| #+<1234+Zero>+ # #Loopquemostraomenuprincipal while:do #Mostraomenunatela,comasaesdisponveis resposta=$( dialogstdout\ title'MenudaTia'\ menu'OiTia,escolhaoquvocquerfazer:'\ 000\ 1'NavegarnaInternet'\ 2'Escreverumacarta'\ 3'Jogarpacincia'\ 4'Perdertempo'\ 0'Sair') #ElaapertouCANCELARouESC,entovamossair... [$?ne0]&&break #Deacordocomaopoescolhida,disparaprogramas case"$resposta"in 1)/usr/bin/mozilla'http://google.com.br' 2)/bin/mcedit/tmp/carta.txt 3)/usr/games/solitaire 4)/usr/X11R6/bin/xsnow/usr/X11R6/bin/xeyes 0)break esac

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

done #Mensagemfinal:) echo'TchauTia!' Baixarestescript

5.2.Exemplodetelasencadeadas (navegaosemvolta)

#!/bin/sh #encadeado.shoscriptquechegaatofinal #Estescriptfazpartedohttp://aurelio.net/shell/dialog # #Exemplodecomoencadeartelasusandoooperador&&(AND). #Casoousuriodesistaemqualquertela(apertandoCANCELAR #ouESC),oscriptexecutaoprimeirocomandoapsacadeia #de&&. # #tilparafazerprogramasoubrincadeirasondeshum #caminhocertoaseguirparachegaraofinal. # #FLUXOGRAMA #INCIO #++ #|tela1|Cancel/Esc>+ #+Ok+| #|tela2|Cancel/Esc>+++ #+Ok+|>|desistiu| #|tela3|Cancel/Esc>+++ #+Ok+| #|tela4|Cancel/Esc>+ #+Ok+ #|final| #++ #FIM # #FunorpidaparachamaracaixaYesNo simnao(){ dialogyesno"$*"00 } #Aquicomeaoencadeamentodetelascomo&&. #SomenteapertandoobotoOKvaiparaaprximatela. #Hum'exit'nofinal,quesaidoscriptcasoousurio #tenhachegadoatofimdacadeia. simnao'Quercontinuar?'&&

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

simnao'Estamosnasegundatela.Continua?'&& simnao'Terceira.Continuacontinuando?'&& simnao'Penltimatela!Eagora,continua?'&& echo'Vocchegouatofinal!'&&exit #Estetrechojnofazmaispartedoencadeamento,es #seralcanadocasoousuriotenhaapertadoCANCELAR/Esc. echoVocdesistiuantesdechegarnofinal... Baixarestescript

5.3.Exemplodetelascomnavegao completa(idaevolta)

fim

#!/bin/bash #navegando.shoscriptquevaievolta #Estescriptfazpartedohttp://aurelio.net/shell/dialog # #Exemplodecomoligartodasastelasdoprogramaentresi, #guardandoinformaesdeidaevolta.ObotoCANCELARfaz #voltarparaatelaanterioreoOKfazirprxima.Para #sairdoprogramaaqualquermomentobastaapertaroESC. # #tilparafazerprogramasinterativos,decontexto,ouque #sepodevoltarparacorrigirinformaes. # #FLUXOGRAMA #INCIO #++ #|primeira|Esc>+

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

#.>+Ok+| #`Cancel|nome|Esc>+ #.>+Ok+|++ #`Cancel|idade|Esc>+>|Saido| #.>+Ok+||Programa| #`Cancel|est.civil|Esc>+++ #.>+Ok+| #`Cancel|gostos|Esc>+ #+Ok+ #|final| #++ #FIM # proxima=primeira #loopprincipal while:do #Aquiidentificadaqualteladevesermostrada. #Emcadatelasodefinidasasvariveis'anterior' #e'proxima'#quedefinemosrumosdanavegao. case"$proxima"in primeira) proxima=nome dialogbacktitle'PegadordeDados'\ msgbox'Bemvindoaopegadordedados!'00 nome) anterior=primeira proxima=idade nome=$(dialogstdout\ backtitle'PegadordeDados'\ inputbox'Seunome:'00) idade) anterior=nome proxima=casado idade=$(dialogstdout\ backtitle'PegadordeDados'\ menu'Qualasuaidade?'000\ 'menosde15anos'''\ 'entre15e25anos'''\ 'entre25e40anos'''\ 'maisde40anos''') casado) anterior=idade proxima=gostos casado=$(dialogstdout\ backtitle'PegadordeDados'\ radiolist'Estadocivil:'000\ 'solteiro''livrelevesolto'ON\ 'noivo''quaseamarrado'OFF\ 'casado''jera'OFF\ 'vivo''livredenovo'OFF) gostos)

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

anterior=casado proxima=final gostos=$(dialogstdout\ separateoutput\ backtitle'PegadordeDados'\ checklist'Doquevocgosta?'000\ 'jogarfutebol'''off\ 'pescar'''off\ 'iraoshopping'''off\ 'andardebicicleta'''off\ 'ficarnainternet'''off\ 'dormir'''off) final) dialog\ crwrap\ sleep5\ backtitle'PegadordeDados'\ title'Obrigadoporresponder'\ infobox" Osdadosinformadosforam Nome:$nome Idade:$idade Casado:$casado Gostos:\n$gostos "1440 break *) echo"Janeladesconhecida'$proxima'." echoAbortandoprograma... exit esac #AquifeitootratamentogenricodeCdigodeRetorno #detodasastelas.Voltaparaatelaanteriorsefor #CANCELAR,saidoprogramaseforESC. retorno=$? [$retornoeq1]&&proxima=$anterior#cancelar [$retornoeq255]&&break#Esc done Baixarestescript

5.4.Exemplodepedidode confirmao(umacaixasobreoutra)

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

confirmao(umacaixasobreoutra)

#!/bin/sh #duas.shoscriptquepedeconfirmao #Estescriptfazpartedohttp://aurelio.net/shell/dialog # #Exemplodecomofazercaixassobrepostas,ondeanovacaixa #aparecesobreaprimeira,tpicodeavisoscomo: # #"Voctemcerteza?" # #Ofontedoprprioscriptusadocomoa"licena",masna #vidareal,bastatrocaro$0porumarquivocomooCOPYING # dialogtitle'LICENAdoSoftware'textbox$01665\ andwidget\ yesno'\nVocaceitaosTermosdaLicena?'830 Baixarestescript

5.5.Exemplodeposicionamentode caixas(nocentralizado)

#!/bin/sh #posicao.shoscriptqueposicionaajanela #Estescriptfazpartedohttp://aurelio.net/shell/dialog # #Comaopobegin,possveldefinirqualvaisero #posicionamentodacaixanatela.Asintaxe"beginXY", #ondeXeYsoascoordenadasdeLINHAeCOLUNAondevai #estarocantosuperioresquerdodacaixa. # #Porexemplo,paragrudaracaixanocantoesquerdodatela, #apartirdalinha5: dialogbegin50\ msgbox'Euestougrudadanocantoesquerdo'1030

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

Baixarestescript

5.6.Exemplodevriascaixasna mesmatela(multicaixas!)

#!/bin/sh #multi.shoscriptquedesenhavriasjanelas #Estescriptfazpartedohttp://aurelio.net/shell/dialog # #Exemplodecomodesenharvriascaixasnumamesmatela, #usandoaopoandwidgetparajuntarascaixaseoopo #beginparapocisionarasjanelas. # # #BrincandodePosicionarCaixas # # #Usandoaopobegin,definimosoposicionamentoda #caixa.Usandoaopoandwidget,colocamosmaisdeuma #caixanatela.Usandoessasduasopesjuntas,podemos #mostrarvriasjanelasinteirasnatelasemsobreposio! # #Porexemplo,quetaldividiratelaem4partesiguaise #colocarumajanelaemcadaumadessaspartes?Issopodeser #tilparamostraraousurioo"histrico"dastelasque #elejpassou. # #Oclculodeposicionamentosimples.Otamanhopadrode #teladoconsole80colunaspor25linhas.Parafacilitar, #consideremosotamanhodatelade80x24,parausarmos #nmerosparessomente.Altimalinhadatelanoser #usada. # #Sequeremos4caixas,bastadividirtantoascolunasquanto #aslinhaspor2eteremosquatro"pedaos"iguaisnatela:

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

# #80/2=40 #25/2=12 # #Comisso,sabemosquetodasasjanelastero12linhase40 #colunas.Essesnmerostambmdefinemascoordenadasde #posicionameto: # #04080colunas #Coordenadas:0+++ #(x,y)|0,0|0,40| #0,0|#1|#2| #0,4012+++ #12,0|12,0|12,40| #12,40|#3|#4| #24+++ #linhas # # #Obs.:Onoshadowusadoparaqueacaixanotenha #sombra. # dialognoshadow\ begin00msgbox'Janela#1(0,0)'1240andwidget\ begin040msgbox'Janela#2(0,40)'1240andwidget\ begin120msgbox'Janela#3(12,0)'1240andwidget\ begin1240msgbox'Janela#4(12,40)'1240 #Fracionandomaisascoordenadas,dprafazermuitasfirulas. #100%intil,maslegaldever&:) # dialognoshadow\ begin00infoboxDIALOG620andwidget\ begin040infoboxDIALOG620andwidget\ begin620infoboxDIALOG620andwidget\ begin660infoboxDIALOG620andwidget\ begin120infoboxDIALOG620andwidget\ begin1240infoboxDIALOG620andwidget\ begin1820infoboxDIALOG620andwidget\ sleep6begin1860infoboxDIALOG620 Baixarestescript

5.7.Exemplodemenucomitens dinmicos(definidosemexecuo)

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

dinmicos(definidosemexecuo)

#!/bin/bash #users.shCompemenuscomosusuriosdosistema #Estescriptfazpartedohttp://aurelio.net/shell/dialog # #Exemplodecomoconstruirmenusdinmicos,ondeositens #soasadadeumcomando.Nosexemplos,seroobtidosos #dadosdoarquivo/etc/passwd,comologin,UIDenome. # #Sotrsexemplos: # #1)Omaissimples.Ocomandoretornaumloginporlinha. #Comocadaentradadomenuprecisadedoiscampos,no #segundocampofoicolocadoumaletra'o',paraficar #esteticamentebonito.Poderiaserumponto'.'ou #qualqueroutrocaractereoutexto.Outraalternativa #repetirologin.Issopodeserfeitotrocandoo #comandosedpara's/.*/&&/'. # #2)Aqui,oprpriocomandojretornadoiscampospor #linha,noformatologin:uid.Depoisfoiusadootr #pratrocaros:porespaos,separandoosdadose #deixandoprontoparausarnomenu. # #3)Similaraosegundo,squeaoinvsdepegaro3o #campodopasswd(uid),foipegoo5o,queonome #completodousurio.Ograndeproblemaaquique #comoonometemespaosembranco,cadapalavra #encaradacomoumparmetroebagunaomenu.A #soluocolocaronomeentre\"aspasescapadas\" #eusaro'eval'paraexecutarocomando. # #Paraficarbemclarooqueestacontecendo,troque #o'eval'porum'echo'paraverqualocomandofinal #queestsendoexecutado.Aquiestele: # #dialogmenu"Doiscamposporlinha,2oitemcomespaos" #000root"root"bin"bin"daemon"daemon"adm"adm" #lp"lp"sync"sync"shutdown"shutdown"halt"halt" #mail"mail"news"news"uucp"uucp"operator"operator" #games"games"gopher"gopher"ftp"FTPUser"... # #12Agosto2004AurlioMarinhoJargas ARQUIVO=/etc/passwd dialogmenu'Listanormaldeumcampoporlinha'\ 0010$(cat$ARQUIVO|cutd:f1|sed's/$/o/')

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

dialogmenu'Doiscamposporlinha,semespaosnositens'\ 0010$(cat$ARQUIVO|cutd:f1,3|tr:'') eval\ dialogmenu\"Doiscamposporlinha,2oitemcomespaos\"\ 04010$( IFS=: whilereadloginsenhauidgidnomerestodo echo$login\"$nome\" done<$ARQUIVO ) Baixarestescript

5.8.Exemplodecpiadearquivos combarradeprogresso(Gauge)

#!/bin/bash #copydir.shCopiaodiretriomostrandoumabarradeprogresso #Estescriptfazpartedohttp://aurelio.net/shell/dialog # #Uso:copydir.sh<dirorigem><dirdestino> # #Exemplodeusodacaixadebarradeprogresso(gauge),que #diferenteemeiocomplicadadeusar.Elaesperarecebera #porcentagemdabarraviaSTDIN,sendoumnmerode0a100. # #OGaugesmostranatelaaporcentagemquevocinformar, #elenoteminteligncia,entotodoocontrolesobreo #processodeveserfeitomanualmentepeloprogramador. # #Oprocedimentoseresumeemduasaes: # #1)SabercomoquantificaroTOTAL,paraconhecero100%. #Nocasodeumacpiadearquivos,oTOTALotamanho #totaldetodososarquivosaseremcopiados. # #2)SabercomodescobrirdetemposemtemposoSTATUS #correntedoprocedimento,enquantoeleestsendo #executado,parapodercalcularoquantoaindafalta #paraofinal(100%).Nocasodeumacpiadearquivos, #oSTATUSaquantidadedearquivosquejfoicopiada,

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

#ouoespaoemdiscoocupadoporeles. # #Tendoosdoisdadosno,umasimplesregrinhadetrslhed #aporcentagematualdoandamento:STATUS*100/TOTAL. # #12Agosto2004AurlioMarinhoJargas #................................................................ TITLE='Copiando...' MSG='Copiandoodiretrio$ORIGEMpara$DESTINO' INTERVALO=1#intervalodeatualizaodabarra(segundos) PORCENTO=0#porcentageminicialdabarra #................................................................ ORIGEM="${1%/}" DESTINO="${2%/}" die(){echo"Erro:$*"exit1} sizeof(){dus"$1"|cutf1} running(){ps$1|grep$1>/dev/null} #................................................................ #temsomentedoisparmetros? ["$2"]||die"Uso:$0dirorigemdirdestino" #aorigemeodestinodevemserdiretrios [d"$ORIGEM"]||die"Aorigem'$ORIGEM'deveserumdiretrio" [d"$DESTINO"]||die"Odestino'$DESTINO'deveserumdiretrio" #mesmodir? ["$ORIGEM"="$DESTINO"]&& die"Aorigemeodestinosoomesmodiretrio" #odiretriodedestinoestvazio? DIR_DESTINO="$DESTINO/${ORIGEM##*/}" [d"$DIR_DESTINO"]&&[$(sizeof$DIR_DESTINO)gt4]&& die"Odirdedestino'$DIR_DESTINO'deveriaestarvazio" #................................................................ #expansodasvariveisdamensagem MSG=$(evalecho$MSG) #totalacopiar(embytes) TOTAL=$(sizeof$ORIGEM) #inciodacpia,emsegundoplano cpr$ORIGEM$DESTINO& CPPID=$! #casoousuriocancele,interrompeacpia trap"kill$CPPID"215 #................................................................

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

#loopdechecagemdestatusdacpia ( #enquantooprocessodecpiaestiverrodando whilerunning$CPPIDdo #quantojfoicopiado? COPIADO=$(sizeof$DIR_DESTINO) #qualaporcentagemdototal? PORCENTAGEM=$((COPIADO*100/TOTAL)) #enviaaporcentagemparaodialog echo$PORCENTAGEM #aguardaataprximachecagem sleep$INTERVALO done #cpiafinalizada,mostraaporcentagemfinal echo100 )|dialogtitle"$TITLE"gauge"$MSG"8400 #................................................................ echoOKDiretriocopiado Baixarestescript

5.9.Configurandoascoresdascaixas possvel configurar as cores de TODOS os componentes das caixas, comotextos,borda,botesefundoda tela. Dessa maneira podese personalizarosprogramasqueusamo Dialog para a empresa ou indivduo queoutilizar. Para obter o arquivo padro de configurao do Dialog, basta usar a opo createrc. Como o programa procura dentro de seu $HOME por um arquivo chamado .dialogrc, use este comando para comear a brincar de trocar ascores doDialog: dialogcreaterc$HOME/.dialogrc Agora basta editar o arquivo .dialogrc recmcriado no seu $HOME e executar o Dialog paravera diferena. As cores que elereconhece so:
CornoDialog BLACK RED Cor Preto Vermelho

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

GREEN YELLOW BLUE MAGENTA CYAN WHITE

Verde Amarelo Azul Rosa Ciano Branco

O formato das configuraes decores : nome_do_componente=(letra,fundo,letrabrilhante?) Onde para letra e fundo basta colocar os nomes das cores em ingls, e no terceiro parmetro, coloque ON ou OFF para que as letras fiquem brilhantes ou no (claras ouescuras). Exemplo:
(GREEN,BLACK, OFF) (GREEN,BLACK, ON) = fundopreto,letraverde escuro = fundopreto,letraverde claro

Depois de terminar de configurar as cores, voc pode salvar tudo num arquivo separado, e fazer vrios arquivos diferentes para vrios "temas"ouconfiguraesdiferentes. Para instruir o Dialog a utilizar um arquivo de configurao especfico, e no o padro $HOME/.dialogrc, basta definir a varivel de ambiente $DIALOGRC com o nome arquivo aser utilizado,porexemplo: exportDIALOGRC=$HOME/dialog/temaverde.cfg ./navegando.sh

Como exemplo, este o arquivo que configurou o Dialog para este tema tipoconsoleverde: #Tema"Verde"tipoconsoleparaoDialog. #Autor:AurelioMarinhoJargas #Salvarestearquivocomo$HOME/.dialogrc #oudefiniravarivel$DIALOGRC #screen use_shadow=OFF use_colors=ON

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

screen_color=(GREEN,BLACK,ON) #box dialog_color=(BLACK,GREEN,OFF) title_color=(BLACK,GREEN,OFF) border_color=(BLACK,GREEN,OFF) #button button_active_color=(BLACK,GREEN,OFF) button_inactive_color=(BLACK,GREEN,OFF) button_key_active_color=(GREEN,BLACK,OFF) button_key_inactive_color=(BLACK,GREEN,OFF) button_label_active_color=(GREEN,BLACK,OFF) button_label_inactive_color=(BLACK,GREEN,OFF) #input inputbox_color=(GREEN,BLACK,ON) inputbox_border_color=(GREEN,BLACK,ON) #textbox searchbox_color=(GREEN,BLACK,ON) searchbox_title_color=(GREEN,BLACK,OFF) searchbox_border_color=(GREEN,BLACK,OFF) position_indicator_color=(BLACK,GREEN,OFF) #Menubox menubox_color=(GREEN,BLACK,OFF) menubox_border_color=(GREEN,BLACK,OFF) #Menuwindow item_color=(GREEN,BLACK,OFF) item_selected_color=(BLACK,GREEN,OFF) tag_color=(GREEN,BLACK,OFF) tag_selected_color=(BLACK,GREEN,OFF) tag_key_color=(GREEN,BLACK,OFF) tag_key_selected_color=(BLACK,GREEN,OFF) check_color=(GREEN,BLACK,OFF) check_selected_color=(BLACK,GREEN,OFF) uarrow_color=(GREEN,BLACK,ON) darrow_color=(GREEN,BLACK,ON) #Menuitemhelp itemhelp_color=(GREEN,BLACK,ON) Baixarestearquivo

6.APNDICEA:Listadasopesdelinhade comando

6.1.Opesparadefinirostextosda caixa backtitle<texto> Especificaottulodotopodatela, queficanoplanodefundo,atrs dacaixa(Vejaexemplodo "PegadordeDados"). title<texto> Defineottulodacaixa,colocado centralizadonabordasuperior.

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

cancellabel<texto> Especificaotextoparaser mostradonoboto"Cancel". exitlabel<texto> Especificaotextoparaser mostradonoboto"Exit". helplabel<texto> Especificaotextoparaser mostradonoboto"Help". oklabel<texto> Especificaotextoparaser mostradonoboto"OK".

6.2.Opesparafazerajustesnotexto dacaixa crwrap Mantmasquebrasdelinha originaisdotextodacaixa,para noprecisarcolocaros'\n'.Mas lembresequecasoalinhafique muitogrande,oDialogaquebrar nomeioparacabernacaixa. nocollapse Mantmoespaamentooriginal dotexto,noretirandoosTABs nemosespaosembranco consecutivos. tabcorrect ConvertecadaTABparaN espaos.ONespecificadona opo'tablen'ouopadro8 assumido. tablen<N> Especificaonmerodeespaos queserocolocadosnolugarde cadaTAB,quandousaroopo' tabcorrect'. trim Limpaotextodacaixa,apagando espaosembranconoincio, espaosconsecutivosequebras delinhaliterais.

6.3.Opesparafazerajustesnacaixa

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

aspect<taxa> Taxaqueajustao dimensionamentoautomticodas caixas.arelaolargura/altura, sendoopadro9,quesignifica9 colunasparacadalinha. begin<y><x> Especificaaposioinicialda caixa,relativoaocantosuperior esquerdo. defaultno Fazoboto'No'seropadroda caixaYesNo. defaultitem<item> Definequalvaiseroitempr selecionadodoMenu.Seno especificado,oprimeiroitemser oselecionado. shadow Desenhaasombradacaixa. Opojusadanormalmente. noshadow Nodesenhaasombradacaixa. nocancelounocancel NomostraobotoCANCELAR nascaixasChecklist,Inputboxe Menu.AteclaEsccontinua valendoparasairdacaixa. itemhelp UsadanascaixasChecklist, RadiolistouMenu,mostrauma linhadeajudanorodapdatela paraoitemselecionado.Esse textodeclaradoseadicionando umanovacolunanofinalda definiodecadaitem. helpbutton Mostraumbotode"Help".Seu cdigoderetorno2.

6.4.Opesrelativasaosdados informadospelousurio separateoutput NacaixaChecklist,retornaos itensselecionados,umporlinhae semaspas.Bomparascripts! separatewidget<separador>

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

Defineoseparadorqueser colocadoentreosretornosde cadacaixa.tilquandosetrabalha commltiplascaixas.Oseparador padrooTAB. stderr RetornaosdadosnaSadade Erros(STDERR).Opojusada normalmente. stdout RetornaosdadosnaSadaPadro (STDOUT)aoinvsdaSTDERR. maxinput<tamanho> Tamanhomximodotextoqueo usuriopodedigitarnascaixas.O tamanhopadro2000 caracteres.

6.5.Opesquedevemserusadas sozinhasnalinhadecomando clear RestauraatelacasooDialoga tenhabagunado. createrc<arquivo> Geraumaarquivodeconfigurao doDialog. help Mostraaajudadodialog,comas opesdisponveis. printmaxsize Mostraotamanhoatualdatelana STDERR. printversion MostraaversodoDialogna STDERR. version Omesmoque'printversion'.

6.6.Outrasopes ignore Ignoraasopesinvlidas.Serve paramantercompatibilidade

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

paramantercompatibilidade apenas. sizeerr Opoantigaquenomais usada. beep Apitacadavezqueatela desenhada. beepafter ApitanasadacomoCtrl+C sleep<N> FazumapausadeNsegundos apsprocessaracaixa.tilparaa Infobox. timeout<N> Saidoprogramacomerrocasoo usurionofaanadaemN segundos. nokill ColocaacaixaTailboxbgem segundoplano(desabilitandoseu SIGHUP)emostraoIDdeseu processonaSTDERR. printsize Mostraotamanhodecadacaixa naSTDERR. andwidget Juntaumaoumaiscaixasnuma mesmatela(semlimpla).

7.APNDICEB:Osclones:Xdialog,Kdialog, gdialog,... Todososprogramaslistadosaquiso"clones"do Dialog,poisforamfeitosparasubstituiroDialog,ou dar uma nova roupagem a ele usandobibliotecas grficas. Os clones usam a mesma sintaxe, as mesmas opesdelinhadecomando,etodostmomesmo propsito:sercomooDialog,squediferente:) Alm de fazer tudo o que o Dialog faz, alguns clones evoluram e adicionaram novos tipos de caixaefuncionalidadesnovas. Dica:possvelfazerumShellScriptque escolhausaroDialogtextoouogrfico, dependendoseousurioestnoXou no.Bastachecaraexistnciadavarivel $DISPLAY,quesdefinidaquandooX estsendoexecutado.

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

7.1.Whiptail

Clonemodotexto,queusaabiblioteca newtaoinvsdancurses. Ele foi escrito pela Red Hat Software para ser utilizado na instalao modo texto do Red Hat Linux. Como baseado numa verso antiga do Dialog, no tem suporte s caixas novascomocalendar,fselectetailbox. PacoteDebian PginadeManual

7.2.Xdialog

oDialogparaainterfacegrfica,que usaabibliotecaGtk+. de longe o Dialog mais"turbinado", pois tambm tem o boto Help que chama a tela de Ajuda da caixa e introduziu vrios tipos novos de caixa como: treeview, buildlist, editbox, rangebox, logbox, spin boxes, combobox,colorsel,fontsel. tambm o clone mais bem documentado, possuindo uma excelente homepage e documentao online. Em especial esta parte da documentao mostra figuras (screenshots)detodasascaixasnovas implementadas. Siteoficial DocumentaoOnline

7.3.Kdialog

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

O Dialog do time do KDE, que usaa bibliotecaQt. Comoosgrandes"ambientesgrficos" gostam de reescrever todos os aplicativos existentes, com o Dialog no podia ser diferente. O Kdialog o DialogintegradocomoambienteKDE. FTP Tutorialbemcompletoemingls

7.4.gdialog

O antigo Dialog do time do Gnome, queusaabibliotecaGtk. AparentementeoZenity(veradiante) o novo "Dialog oficial" do Gnome eo gdialog vai ser aposentado. O interessantedesseclonequecarrega o nome do ilustre Alan Cox como desenvolvedorparticipante.

7.5.Zenity

ODialogdotimedoGnome,queusaa bibliotecaGtk. Foi projetado para ser mais limpo e bem escrito do que o gdialog, porm se tornou incompatvel com o dialog, poisusaopesdiferentesnalinhade comando (mais Zen e simples, segundoosautores).Humscriptque garante a compatibilidade com o gdialog. PginanoFreshMeat FTP

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

FTP CVS Artigoemportugus,com exemplos

7.6.Udpm O "User Dialog Perl Module" noum clone do Dialog, mas uma interface Perl para trabalhar de maneira padronizada com os seguintes "sabores": dialog, cdialog, whiptail, gdialogeKdialog. Siteoficial

7.7.pythondialog Mdulo em Python parausartrabalhar de maneira padronizada com os seguintes "sabores": dialog, whiptaile Xdialog. Siteoficial

8.Sobreestedocumento A primeira verso levou 5 dias para ser feita, totalizando 27 horas de escrita. Alm daescritado contedo,nessetempotambmforamfeitasoutras tarefasdignasdeumaprimeiraverso: (Re)aprendizadodoDialogeleituradesua documentao, Definiodoformatododocumento(ordem dostpicos,layout), Definiodoaspectododocumento(fazero arquivodeestiloCSS), Produodetodasasimagens(testes, screenshotetratamento). Este documento foi feito do zero, utilizando100% LinuxeSoftwaresLivres. Testes ConectivaLinux8comoSistema Operacional Bash2.04comoShell Dialogverso0.9a Texto Vimparaescreverostextos Txt2tagsparaconverterotextofontepara HTML Imagens XtermparaexecutaroDialognomodo grfico(xterm+sbb0) xwd(doXFree86)parafazerodumpda janeladoXterm(xwd>arquivo.xwd) ImageMagickparaconverterde.xwdpara .png(convertarquivo.xwdarquivo.png) Atualmente, os testes so feitos com o dialog verso 0.9b. As novidades em relao verso 0.9a so o boto de Help e as opes novas de

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

0.9a so o boto de Help e as opes novas de linha de comando, registradas no Changelog da verso5destedocumento.

8.1.Disponibilidade(download) Este documento est disponvel para leitura e download no formato HTML nesteendereo: http://aurelio.net/shell/dialog Para fazer o download dodocumento, de todas as suas figuras e scriptsde exemplo,useosseguintescomandos: mkdirdialog cddialog wgetmLhttp://aurelio.net/shell/dialog/

8.2.Histricodeverses(Changelog) verso125dejunhode2003 Versoiniciallanada. verso229dejunhode2003 Adicionadosubseo "Changelog"(estaaqui!) Adicionadaseo"Breve HistricodoDialog" Adicionadasinformaes resumidasdedownloade instalao Adicionado"ApndiceB"com informaessobreosclones doDialog(ObrigadoEri RamosBastospeladica) verso305dejulhode2003 Adicionadotpicosobre licena/copyright(Obrigado MarceloToledopeladica) Adicionadotpicosobre downloaddodocumento Reorganizaodetpicos, melhoriadaaparncia(CSS) verso427deagostode2003 Novoendereooficial: http://aurelio.net/shell/dialog Comandodedownload arrumado(wget) Osscriptsdeexemploforam reformatados Includososscripts:dialog tour,posicao,duasemulti Adicionadaaopoand widgetnoApndiceA CorrijidoserosdeProtugus:) (ObrigadoMarceloToledopor apont-los)

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

verso513deagostode2004 Adicionadosnomesacada ttulododocumento (#ncoras),paraficaremmais descritivososlinksdiretos paraseesespecficas Includoexemplofuncionalde Gauge:copydir Includoexemplofuncionalde MenuDinmico:users Adicionadotpicosobreo botoHELP Adicionadamenoaovalor inicialdotextodaInputbox OpesdoApndiceA reorganizadasporcategorias Adicionadosscreenshotsdos clones:whiptail,Xdialog, Kdialog,gdialogezenity Adicionadolinkparatutorial doKdialog Adicionadasinformaes sobreomduloemPythondo dialog AdicionadasnoApndiceAas opesnovasdelinhade comandodaverso0.9bdo dialog:cancellabel,exitlabel, helplabel,oklabel,no collapse,helpbutton,max inputetimeout verso6junhode2009 Corrigidooanodaverso5: s/2003/2004/(ObrigadoTiago FBianchiniporapont-lo) Ttuloscominiciais maisculas(enotodasas palavras) Documentoeexemplos convertidosparaUTF8 Melhoriasnaformatao (temanovo) ResumidooPrefcio,que estava"acadmico"demais

8.3.Licena/Copyright Este documento pode ser copiado, distribudo e divulgado livremente, parcial ou na ntegra, desde que no alteradoseucontedoecitadoonome doautor: AurlioMarinhoJargas Se voc encontrar erros, quiser adicionar contedo ou tiver qualquer alterao em mente, contate o autor <verde (a) aurelio net> para que o documentooriginalsejaeditadoetoda a comunidade possa usufruir de suas melhorias. Em vez de colocar uma cpia deste documento em seu site, faa um link para a verso original em http://aurelio.net/shell/dialog, para que seus usurios possam ler sempre a

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

seus usurios possam ler sempre a versomaisatualizada. O plgio (dizer que foi voc quem escreveu) e a utilizao desse documentoparafinscomerciais(sites, livros e apostilas nolivres) so abominados e sero tomadas as atitudescabveisparacoibilos.

8.4.Ondeobtermaisinformaes UmapesquisanoGooglemostraquea Internet est deficiente em documentao para o Dialog. O mais relevante um artigo introdutrio em inglsnoLinuxJournal. Junto com o programa Dialog, tem algumadocumentaoemingls.Tem a sua pgina de manual ("man page") que numa linguagem direta e sucinta traz detalhes sobre o seu funcionamento. H tambm um diretrio chamado "samples", onde tem scripts funcionais de exemplo de todosostiposdecaixa. Na pgina do Thomas Dickey, o mantenedoratualdoDialog,hpoucas informaes,pormlestolinkpara osfontesdoprograma. Em portugus, a melhor fonte de informaes utilizar a lista shell script para obter ajuda e compartilhar experincias com outros usurios do Dialog. Oendereooficialdestedocumento http://aurelio.net/shell/dialog/ Fim.

AprendamaissobreShellScript

AURELIO.NET Pesquisar Nerdices adventure applescript canivete capslock codare coluna curso cygw in dialog dort er log mac palestra perl pyobjc python sed shell sql Programas adiumbook css-sandbox embriagueitor emomemory engripeitor lelolab miguxeitor moneylog rac sedsed sedsokoban sedarkanoid txt2regex txt2tags zz mais... more... Livros guia-er regex sed shell Eu blog cv e-mail faq orkut raio-x recados tw itter Diversos 1012 adsense atacama baterna carve coisinha correria dumbs foto fvm musica pogo ramones sobre surf toyota umportugues valeta viagem

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

sql vim mais... more...

videogame

AURELIO.NETositepessoaldeAurelioMarinhoJargas. Maisde10anosnoar(desde1999),feitocomtxt2tagseDreamHost. Contato:e-mail,tw itter.

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

Vous aimerez peut-être aussi