<chapter id="tinkering-under-the-hood">
<!-- Uncomment the <*info
> below and add your name to be -->
<!-- credited for writing this section. -->

<!--
<chapterinfo>
<authorgroup>
<author>
<firstname
>Your First Name here</firstname>
<surname
>Your Surname here </surname>
</author>
</authorgroup>
</chapterinfo>
-->

<title
>Trabalhando nos Bastidores do &kde;</title>

<sect1 id="hand-editing-config-files">

<sect1info>
<author
><personname
> <firstname
>Nicolas</firstname
> <surname
>Goutte</surname
> </personname
> <email
>goutte@kde.org</email
> </author>
</sect1info>

<title
>Editando Manualmente os Arquivos de Configuração</title>

<sect2 id="hand-editing-intro">
<title
>Introdução</title>
<para
>No &kde;, os arquivos de configuração são fáceis de alterar com um editor de texto simples como o &kate;, uma vez que que os arquivos de configuração são arquivos de texto.</para>

<para
>Um exemplo de um arquivo de texto:</para>

<programlisting
>[Geral]
AutoSalvar=1
UltimoArquivo=/var/tmp/teste.txt</programlisting>

<para
>Os arquivos de configuração de um usuário estão em <filename class="directory"
>.kde/share/config</filename
> (substitua o <filename
>.kde</filename
> pela sua variável de ambiente $<envar
>TDEHOME</envar
>) e os globais estão na sub-pasta <filename class="directory"
>share/config</filename
> do local onde o KDE foi instalado. (Você poderá encontrar esta localização executando o comando <command
>tde-config --prefix</command
>.) Os seus nomes terminam normalmente em 'rc' (sem um ponto inicial), como por exemplo <filename
>kopeterc</filename
>.</para>

<warning
><para
>Contudo, os arquivos de configuração editados manualmente, podem comprometer a estabilidade do seu &kde;. A maioria dos aplicativos não verificam o que lêem dos seus arquivos de configuração e poderão ser prejudicados pelo que obtêm da sua configuração, fazendo com que o aplicativo inclusive estoure.</para
></warning>

</sect2>

<sect2 id="hand-editing-backups">
<title
>Cópias de Segurança</title>

<para
>Por isso, a primeira regra é fazer uma cópia de segurança do seu arquivo antes de modificá-los. A cópia de segurança deverá ser guardada fora de qualquer sub-pasta da <filename class="directory"
>.kde</filename
> (ou da pasta correspondente a $<envar
>TDEHOME</envar
>). As cópias de segurança são sempre uma boa idéia no caso de uma falha geral do &kde; que destrua os arquivos de configuração importantes (como por exemplo as suas opções do &kmail;, que se encontram no arquivo <filename
>kmailrc</filename
>). (Uma falha grande dessas não deveria acontecer, mas ainda assim pode ocorrer.)</para>
</sect2>

<sect2 id="hand-editing">
<title
>Editando</title>

<para
>Assim, por que você mexeria nos arquivos de configuração? Bem, primeiro, é necessário se quiser obrigar o uso do modo KIOSK. Talvez um programador tenha lhe pedido para adicionar um item que o ajude a depurar um erro. Talvez queira recuperar de um problema sem ter que remover toda a pasta <filename class="directory"
>.kde</filename
>. Talvez queira aprender mais sobre os detalhes do &kde;.</para>

<para
>De qualquer forma, seja qual for a razão, você poderá desejar modificar manualmente um arquivo de configuração.</para>

<para
>Ao planejar editar um arquivo desses, certifique-se que o aplicativo que o usa não está rodando. Se for um dos arquivos de configuração básica, considere editar o arquivo enquanto o todo o &kde; não está rodando.</para>

<para
>Está pronto? Faça então uma cópia de segurança (já foi dito alguma vez?), inicie o seu editor favorito (assumiremos que neste caso é o &kate;), abra o arquivo (tenha o cuidado de carregá-lo como UTF-8, uma vez que que o &kate; exibe-o como <quote
>utf8</quote
>).</para>

<para
>Agora você terá um arquivo do tipo:</para>

<programlisting
>[Grupo]
Chave1=Valor1
Chave2=Valor2
Chave3=Valor3</programlisting>

<para
>Você poderá agora modificá-lo (com cuidado!) e depois salvá-lo (certificando-se novamente que é <acronym
>UTF-8</acronym
>).</para>

<para
>Agora, você poderá testar o aplicativo e, se ele não se executar mais corretamente, feche-o e restaure a cópia de segurança.</para>

<itemizedlist>
<title
>Informações Relacionadas</title>


<listitem
><para
><xref linkend="kde-for-administrators"/> existem mais informações sobre a estrutura de pastas do &kde;, de modo a ajudá-lo a encontrar o arquivo que precisa de editar.</para>
</listitem>

</itemizedlist>

</sect2>

</sect1>

<sect1 id="scripting-the-desktop">
<title
>Programando o Ambiente de Trabalho</title>

<para
>O &kde; oferece um sistema de comunicação entre processos poderoso chamado &DCOP;, o Desktop COmmunication Protocol. Usando o &DCOP;, você pode controlar uma grande quantidade de funções do &kde; a partir da linha de comando ou a partir de um programa feito na sua linguagem de programação favorita. Você poderá também obter informações a partir das aplicações do &kde;: por exemplo, vários leitores multimídia do &kde; oferecem métodos para pesquisar por determinada informação no leitor sobre a faixa que está sendo tocada no momento.</para>

<para
>Falando de um modo abrangente, cada aplicação do &kde; oferece uma ou mais <firstterm
>interfaces</firstterm
> de &DCOP; que, por sua vez, oferecem métodos (ou, se preferir, funções) que outra aplicação poderá então invocar. Assim, o primeiro passo ao usar o &DCOP; é descobrir o método apropriado para a tarefa. A forma mais simples de fazer isto é com a interface <application
>kdcop</application
> para os métodos de &DCOP; disponíveis.</para>

<para
>Execute o <application
>kdcop</application
> a partir de um &konsole; ou da mini-linha de comando (a janela que aparece com o <keycombo action="simul"
>&Alt;<keycap
>F2</keycap
> </keycombo
>). A janela do <application
>kdcop</application
> mostra as aplicações que estão rodando no momento e que oferecem interfaces de &DCOP;, usando uma árvore para isso. De um modo geral, a escolha do método correto obriga a alguma pesquisa pela árvore, mas uma sugestão útil é que a interface marcada como <quote
>(padrão)</quote
>, contém normalmente as funções usadas com mais frequência.</para>



<para
>Para testar se a função faz o que desejamos, faça um duplo-clique por exemplo no ítem <guilabel
>setColor</guilabel
>. Para escolher a cor <varname
>c</varname
>, clique no botão de seleção de cores e escolha uma. Indique se a cor deverá ser a cor A com a opção para assinalar. Clique <guilabel
>OK</guilabel
> para ver a cor de fundo modificada.</para>

<para
>Para acessar ao método de &DCOP; a partir da sua linguagem de programação favorita, você poderá tanto usar as interfaces de &DCOP; existentes, se estiverem disponíveis no módulo 'tdebindings', ou então invocar a aplicação da linha de comando <command
>dcop</command
>. Para uma utilização simples, a invocação da aplicação da linha de comando <command
>dcop</command
> é suficiente. Para invocar um método de &DCOP; desta forma, é necessário indicar a aplicação e a interface que possui o método, o método em si e os argumentos, num formato adequado para a linha de comando.</para>

<para
>Nós especificamos a aplicação, a interface e o método exatamente nessa ordem, seguido dos argumentos pela mesma ordem que são apresentados no <application
>kdcop</application
>. O <command
>dcop</command
> possui muitas outras opções: dê uma olhada no resultado do <userinput
><command
>dcop</command
> <option
>--help</option
></userinput
>.</para>

<para
>Já chega de teoria: está na hora de um exemplo:</para>

<example>
<title
>Um Programa de Mudança da Cor de Fundo com o &DCOP;</title>

<para
>Com a aplicação da linha de comando <command
>dcop</command
> e um pouco de Perl, vamos fazer então um pequeno programa que mude lentamente o fundo da tela, percorrendo o espectro de cores.</para>

<para
>Em primeiro lugar, nós procuraremos pelo método apropriado com o <application
>kdcop</application
>. Para este exemplo, encurtaremos a busca e iremos ao método diretamente: o método que desejamos é o <menuchoice
><guimenu
>kdesktop</guimenu
><guisubmenu
>KBackgroundIface</guisubmenu
><guimenuitem
>setColor</guimenuitem
> </menuchoice
>. Os argumentos e o tipo do valor devolvido da função são mostrados com o estilo da linguagem C++. Para o caso do <methodname
>setColor</methodname
>, os argumentos são uma cor <varname
>c</varname
> que define a nova cor de fundo e um valor booleano ('true' ou 'false'), <varname
>isColorA</varname
>, que define se a cor é a primeira ou a segunda (isto é útil para definir gradientes, por exemplo).</para>

<para
>Para usar o método <methodname
>setColor</methodname
> na linha de comando, usaremos o seguinte: <screen
><prompt
>%</prompt
> <userinput
><command
>dcop</command
> kdesktop KBackgroundIface setColor '#ffffff' false</userinput
>
</screen>
</para>

<para
>Para indicar a cor, é usado o valor RGB em hexadecimal, como é usado no &HTML;. Repare que ele está delimitado por aspas simples, para proteger o <token
>#</token
> da linha de comando.</para>

<para
>Para descobrir o valor RGB em hexadecimal de uma cor, abra qualquer janela de seleção de cores numa aplicação do &kde; (como, por exemplo, o &kcontrolcenter;, em <menuchoice
><guimenu
>Aparência &amp; Temas</guimenu
><guimenuitem
>Cores</guimenuitem
> </menuchoice
>), selecione a cor que deseja e use o valor indicado no campo de texto <guilabel
>HTML</guilabel
>.</para>


<para
>Assim, isto é tudo que precisamos do &DCOP;; agora, é apenas necessário criar um programa em torno dele. Aqui está uma implementação (muito!) rudimentar: <programlisting
><![CDATA[
$min=49;  # Valor mínimo da cor R, G ou B
$max=174; # Valor máximo da cor R, G ou B
$passo=5;  # Quantidade a incrementar em cada passo e cor
$espera=15; # Intervalo em segundos entre cada iteração

@inicio = ($max, $min, $min);
@cor = @inicio;

while (1) {
        foreach (0..5) {
                my $qual = $_ % 3; # Qual a cor (R, G ou B) a alterar
                my $cima_baixo = $_ % 2; # Se deseja aumentar ou diminuir o valor
                do {
                        if ($cima_baixo == 0) { $cor[$qual]+=$passo; }
                        if ($cima_baixo == 1) { $cor[$qual]-=$passo; }
                        my $chamada=sprintf "dcop kdesktop KBackgroundIface setColor '#%x%x%x' true\n", @cor;
                        system($chamada);
                        sleep $espera;
                        } while (($cor[$qual] 
>= $min) and ($cor[$qual] <= $max));
                }
}
]]>
</programlisting>
</para>

<para
>Basta executar o programa sem argumentos, para que ele alterne a cor de fundo em um espectro bem definido, até que seja morto. <foreignphrase
>Voil&agrave;</foreignphrase
>!</para>

</example>

<para
>Claro que o Perl não é a única linguagem que você poderá usar para fazer programas com o &DCOP;&mdash;se preferir o 'shell scripting', ele também está disponível:</para>

<example>
<title
>Aplicando um fundo da Internet</title>

<para
>O seguinte programa obtém a imagem principal da tira de quadrinhos  <quote
>User Friendly</quote
> e coloca-a como papel de parede da área de trabalho, usando as ferramentas normais disponíveis e um pouco de &DCOP;:</para>

<programlisting
><![CDATA[
#!/bin/sh
COMICURL=`wget -qO - http://www.userfriendly.org/static/index.html | \
          grep Latest | sed -e "s,.*SRC=\",," -e "s,\"
>.*,,"`
TMPFILE=`mktemp /tmp/$0.XXXXXX` || exit 1
wget -q -O $TMPFILE $COMICURL
dcop kdesktop KBackgroundIface setWallpaper $TMPFILE 1
]]>
</programlisting>

<para
>A primeira linha após o '#!/bin/sh' usa o <command
>wget</command
> e uma mágica das expressões regulares para extrair a localização da imagem do código em &HTML; da página principal. A segunda e terceira linhas irão obter a imagem e, finalmente, o <command
>dcop</command
> aplica a imagem transferida como papel de parede.</para>

</example>


<!-- <itemizedlist>
<title
>Related Information</title>
<listitem
><para
>to be written</para>
</listitem>
</itemizedlist
> -->


</sect1>


<sect1 id="adding-extra-keys">
<title
>Adicionando Atalhos de Teclado Extra para o &kde;</title>

<para
>Muitos teclados modernos contém teclas adicionais que não estão atribuídas por padrão a nenhuma ação.</para>

<para
>As teclas <quote
>Multimídia</quote
> geram normalmente um sinal e podem simplesmente ser escolhidas como uma combinação de teclas dentro de um aplicativo, como quem escolhe uma tecla qualquer. Algumas das teclas, todavia, não são detectadas e, pressionando-as no <guilabel
>Configurar Atalhos</guilabel
>, não acontecerá nada.</para>

<para
>Alguns portáteis da IBM, por exemplo, possuem teclas adicionais em torno dos cursores esquerdo e direito, e que parecem um <guiicon
>Page Left</guiicon
> e um <guiicon
>Page Right</guiicon
>.</para>

<procedure>
<step
><para
>Use o <command
>xev</command
> para descobrir o código das teclas. Neste caso, são o 233 e o 234, respectivamente </para
></step>
<step
><para
>Escolha os símbolos das teclas. Existe alguns intervalos que não são usados por padrão, por isso muitos estão livres. Você poderá encontrar a lista em <filename
>/usr/X11R6/include/X11/keysymdef.h</filename
> (ou o equivalente no seu sistema).</para
></step>
<step
><para
>Crie um arquivo na sua pasta pessoal chamado <filename
>.Xmodmap</filename
> e adicione o seguinte a ele:</para>
<screen
>keycode 233 = Next_Virtual_Screen
keycode 234 = Prev_Virtual_Screen</screen>
</step>
<step
><para
>Execute o comando <userinput
><command
>xmodmap</command
> <filename
>~/.Xmodmap</filename
></userinput
></para
></step>
</procedure>

<para
>Neste momento, você deverá ser capaz de executar o <command
>xev</command
> novamente e ver que as teclas geram agora o símbolo da tecla que atribuiu. Você poderá agora atribuir esses símbolos a qualquer ação, como de costume.</para>

<itemizedlist>
<title
>Informações Relacionadas</title>
<listitem
><para
>A página de manual do <command
>xev</command
>. Você poderá vê-la digitando <userinput
>man:/xev</userinput
> numa janela do &konqueror; ou digitando <userinput
><command
>man</command
> xev</userinput
> num terminal.</para
></listitem>
</itemizedlist>

</sect1>

<sect1 id="keys-for-scripts">
<title
>Adicionando Combinações de Teclas às Ações Novas</title>

<para
>A maioria das ações do ambiente de trabalho ou dos aplicativos estão imediatamente disponíveis para poder associar-se uma combinação de teclas. Se a ação a que deseja atribuir um atalho foi criada por você ou ainda não esteja disponível, você poderá ainda assim atribuir um atalho.</para>

<para
>Para reunir as duas seções anteriores, talvez você queira atribuir uma tecla não usada do seu teclado a um programa ou comando de DCOP. O exemplo aqui será então atribuir as duas teclas que foram adicionadas em <xref linkend="adding-extra-keys"/> para ir para a área de trabalho virtual anterior ou a seguinte, ou seja, duas funções para as quais irá precisar do DCOP (tal como foi descrito em <xref linkend="scripting-the-desktop"/>.</para>

<para
>Isto pode ser conseguido facilmente com o seguinte método:</para>

<procedure>
<step>
<para
>Abra o &kcontrol; na seção <guilabel
>Regional &amp; Acessibilidade</guilabel
>, e selecione <guilabel
>Ações de Entrada</guilabel
></para>
</step>
<step>
<para
>Escolha <guibutton
>Nova Ação</guibutton
></para>
</step>
<step>
<para
>Dê um nome à ação nova, &eg; <userinput
>Próxima Área de Trabalho Virtual</userinput
></para>
</step>
<step>
<para
>Selecione o <guilabel
>Atalho de teclado -> Comando/URL(simples)</guilabel
> para o <guilabel
>Tipo de ação:</guilabel
></para>
</step>
<step>
<para
>Na página do <guilabel
>Atalho do Teclado</guilabel
>, clique no botão que deseja usar para disparar o comando. Para este exemplo, você iria pressionar a tecla com a imagem do <guiicon
>Próxima Página</guiicon
> nele. O <keysym
>Next_Virtual_Screen</keysym
> aparecerá na imagem da tecla.</para>
</step>
<step>
<para
>Na página do <guilabel
>Configuração do Comando/URL</guilabel
>, insira o comando a executar no campo: <userinput
><command
>dcop twin default nextDesktop</command
></userinput
></para>
</step>
</procedure>

<para
>Repita os passos anteriores com a tecla <keysym
>Prev_Virtual_Screen</keysym
> key e a ação <userinput
><command
>dcop twin default previousDesktop</command
></userinput
>.</para>

<para
>Agora, pressionando as teclas <keysym
>Prev_Virtual_Screen</keysym
> ou <keysym
>Next_Virtual_Screen</keysym
>, mudará para a área de trabalho virtual anterior ou a próxima, respectivamente.</para>

<para
>Obviamente, você poderá atribuir qualquer tecla livre a qualquer ação.</para>

<itemizedlist>
<title
>Informações Relacionadas</title
> 
<listitem
><para
>Veja a documentação do <application
>KHotKeys</application
> no &khelpcenter;, ou digitando <userinput
>help:/khotkeys</userinput
> numa janela do &konqueror;.</para
></listitem
> 
<listitem
><para
><xref linkend="adding-extra-keys"/></para
></listitem>
<listitem
><para
><xref linkend="scripting-the-desktop"/></para
></listitem>
</itemizedlist>

</sect1>

<sect1 id="tdedebugdialog">
<sect1info>
<authorgroup>
<author
><personname
> <firstname
>Adriaan</firstname
> <surname
>de Groot</surname
> </personname
> <email
>groot@kde.org</email
> </author>
</authorgroup>
</sect1info>

<title
>&tdedebugdialog; - Controlando o Resultado da Depuração do &kde;</title>

<sect2 id="tdedebugdialog-basic-usage">
<title
>Utilização Básica</title>

<para
>O &tdedebugdialog; não está no &kmenu; por padrão. Você terá que executá-lo na linha de comando ou na mini-janela de execução de comandos com <userinput
><command
>tdedebugdialog</command
></userinput
>. O &tdedebugdialog; mostra uma janela com uma lista grande de áreas de depuração. Cada área tem uma opção que você poderá ligar ou desligar para ativar ou desativar o resultado de depuração dessa parte do &kde;.</para>

<para
>A lista de áreas de depuração vem ordenada numericamente, não alfabeticamente, assim o tdeio (127) vem antes do artskde (400). Os números vão até perto de 200 000, mas normalmente só existem 400 áreas. Você não terá que percorrer a lista completa para encontrar a área que precisa. Existe um campo de texto no topo da janela, onde poderá inserir uma parte do nome da área que deseja. A lista de itens que é apresentada é filtrada de modo a incluir apenas as áreas de depuração que contém o texto que introduziu, &eg; se inserir <userinput
>k</userinput
> não irá filtrar muito mas, se indicar <userinput
>kont</userinput
>, deverá aparecer apenas as áreas de depuração do &kontact;. Como uma forma mais rápida de ativar ou desativar o resultado de depuração, existe também os botões para <guibutton
>selecionar tudo</guibutton
> e <guibutton
>deselecionar tudo</guibutton
>, que fará com que o &kde; produza muitos dados de depuração, ou quase nenhum.</para>
</sect2>

<sect2 id="tdedebugdialog-fullmode">
<title
>O TDEDebugDialog no modo completo</title>

<!-- this text partly taken from the tdedebugdialog handbook -->

<para
>No modo completo, que é o que irá obter ao executar o TDEDebugDialog como <userinput
><command
>tdedebugdialog</command
> <option
>--fullmode</option
></userinput
>, fica disponível a mesma lista de áreas de depuração, podendo selecionar apenas uma de cada vez numa lista. Você poderá então definir o resultado para os vários tipos de mensagens: Informação, Aviso, Erro e Erro Fatal. Para cada um destes tipos, você poderá escolher para onde são enviadas as mensagens. As opções são:</para>

<para
>Arquivo, onde terá que inserir o nome de um arquivo. Ele será escrito na sua pasta $<envar
>HOME</envar
>.</para>

<para
>Caixa de Mensagem. Cada mensagem de depuração é mostrada num diálogo de informação, que você terá que pressionar <guibutton
>OK</guibutton
> para continuar com o aplicativo.</para>

<para
>Linha de Comando, a entrada padrão. As mensagens são impressas no 'stderr' e irão aparecer tanto na janela da linha de comado em que a aplicativo foi iniciado, como no <filename
>.xsession-errors</filename
>.</para>

<para
>Syslog. Isto envia cada mensagem de depuração para a funcionalidade de registro do systema ('syslog'), que poderá efetuar um processamento prévio da mensagem.</para>

<para
>Nenhum. Isto elimina o resultado deste tipo de mensagem.</para>

<para
>Para as mensagens geradas pelos erros fatais, é normalmente uma má idéia escolher o Nenhum ou o Syslog, uma vez que em ambos os casos poderá não ver a mensagem e o aplicativo que obtenha o erro fatal irá desaparecer sem deixar uma razão do seu desaparecimento. Se o aplicativo desaparecerá ou não no caso de um erro fatal, poderá ser definido na opção <guilabel
>Abortar nos erros fatais</guilabel
>, que está assinalada por padrão &mdash; mas você poderá esperar ainda que um aplicativo estoure (de forma confusa) se for encontrado ainda um erro.</para>

<!-- Add links to "further reading" here -->
<!-- <itemizedlist>
<title
>Related Information</title>
<listitem
><para
>to be written</para>
</listitem>
</itemizedlist
>-->



</sect2>
</sect1>
</chapter>

<!-- Keep this comment at the end of the file
Local variables:
mode: xml
sgml-omittag:nil
sgml-shorttag:nil
sgml-namecase-general:nil
sgml-general-insert-case:lower
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:0
sgml-indent-data:true
sgml-parent-document:("index.docbook" "book" "chapter")
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
-->