<chapter id="editing">
<title
>Ferramentas de Edição</title>

<sect1 id="editing-snippets">
<title
>Excertos de Código</title>

<itemizedlist>
  <title
>Funcionalidades (introdução preliminar)</title>
  <listitem
><para
>O SnippetPart adiciona uma janela de ferramentas que fica acoplada por omissão à direita </para
></listitem>
  <listitem
><para
>A adição, edição e remoção de excertos de código está disponível através de um menu </para
></listitem>
  <listitem
><para
>Se fizer duplo-click sobre um excerto, introduzi-lo-á na área activa, na posição actual do cursor </para
></listitem>
  <listitem
><para
>As dicas mostram o conteúdo de um excerto </para
></listitem>
  <listitem
><para
>Os excertos são guardados na área pessoal dos utilizadores, como tal, cada utilizador poderá fazer os seus próprios excertos </para
></listitem>
  <listitem
><para
>Os excertos de código poderão conter variáveis do estilo $<varname
>NOME_VARIAVEL</varname
>$. Ao usar o excerto, o utilizador deverá preencher o valor de substituição das variáveis </para
></listitem>
</itemizedlist>
</sect1
> <!-- editing-snippets -->

<sect1 id="keyboardmapping">
<title
>Mapeamento do Teclado</title>
<indexterm zone="keyboardmapping"
><primary
>combinações de teclas</primary
></indexterm>

<para
>A seguir, serão listadas as combinações de teclas por omissão do editor predefinido. Poderá configurá-las como desejar (como?) </para>

<informaltable>
<tgroup cols="2">
<tbody>

<row
><entry
><para
><keycap
>Esquerda </keycap
></para
></entry>
<entry
><para
>Move-se um carácter para a esquerda </para
></entry
></row>

<row
><entry
><para
><keycap
>Direita </keycap
></para
></entry>
<entry
><para
>Move-se um carácter para a direita </para
></entry
></row>

<row
><entry
><para
><keycombo
>&Ctrl;<keycap
> Esquerda </keycap
></keycombo
></para
></entry>
<entry
><para
>Move-se uma palavra para a esquerda </para
></entry
></row>

<row
><entry
><para
><keycombo
>&Ctrl;<keycap
> Direita </keycap
></keycombo
></para
></entry>
<entry
><para
>Move-se uma palavra para a direita </para
></entry
></row>

<row
><entry
><para
><keycap
>Cima </keycap
></para
></entry>
<entry
><para
>Move-se uma linha para cima </para
></entry
></row>

<row
><entry
><para
><keycap
>Baixo </keycap
></para
></entry>
<entry
><para
>Move-se uma linha para baixo </para
></entry
></row>

<row
><entry
><para
><keycap
>Page Up </keycap
></para
></entry>
<entry
><para
>Move-se uma página para cima </para
></entry
></row>

<row
><entry
><para
><keycap
>Page Down </keycap
></para
></entry>
<entry
><para
>Move-se uma página para baixo </para
></entry
></row>

<row
><entry
><para
><keycombo
>&Ctrl;<keycap
> Page Down </keycap
></keycombo
></para
></entry>
<entry
><para
>Move-se para o início do ficheiro </para
></entry
></row>

<row
><entry
><para
><keycombo
>&Ctrl; <keycap
> Page Down </keycap
></keycombo
></para
></entry>
<entry
><para
>Move-se para o fim do ficheiro </para
></entry
></row>

<row
><entry
><para
><keycap
>Home </keycap
></para
></entry>
<entry
><para
>Move-se para o início da linha </para
></entry
></row>

<row
><entry
><para
><keycap
>End </keycap
></para
></entry>
<entry
><para
>Move-se para o fim da linha </para
></entry
></row>

</tbody>
</tgroup>
</informaltable>

<para
>Para todas as teclas acima, pode-se usar adicionalmente a tecla &Shift;, para marcar a partir da posição actual do cursor até à posição onde se for parar. </para>

<informaltable>
<tgroup cols="2">
<tbody>

<row
><entry
><para
><keycap
>Backspace </keycap
></para
></entry>
<entry
><para
>Apaga um carácter à esquerda </para
></entry
></row>

<row
><entry
><para
><keycap
>Delete </keycap
></para
></entry>
<entry
><para
>Apaga o carácter por baixo do cursor </para
></entry
></row>

<row
><entry
><para
><keycombo
>&Ctrl; <keycap
> C </keycap
></keycombo
></para
></entry>
<entry
><para
>Copia o texto seleccionado para a área de transferência </para
></entry
></row>

<row
><entry
><para
><keycombo
>&Ctrl;<keycap
> V </keycap
></keycombo
></para
></entry>
<entry
><para
>Cola o texto seleccionado da área de transferência </para
></entry
></row>

<row
><entry
><para
><keycombo
>&Ctrl;<keycap
> X </keycap
></keycombo
></para
></entry>
<entry
><para
>Apaga o texto seleccionado e coloca-o na área de transferência </para
></entry
></row>

<row
><entry
><para
><keycombo
>&Ctrl;<keycap
> Z </keycap
></keycombo
></para
></entry>
<entry
><para
>Desfazer </para
></entry
></row>

<row
><entry
><para
><keycombo
>&Shift;&Ctrl;<keycap
> Z </keycap
></keycombo
></para
></entry>
<entry
><para
>Refazer </para
></entry
></row>

</tbody>
</tgroup>
</informaltable>

</sect1
> <!-- keyboardmapping -->

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->

<sect1 id="editing-reporter">
<title
>O Sistema de Comunicação de Problemas</title>

<para
>(... ainda não escrito ...) </para>
</sect1
> <!-- editing-reporter -->

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->

<sect1 id="searchinggrepping">
<title
>Procurar e Descobrir</title>
<indexterm zone="searchinggrepping"
><primary
>procurar</primary
></indexterm>
<indexterm zone="searchinggrepping"
><primary
>descobrir</primary
></indexterm>

<sect2 id="searching">
<title
>Procurar por Texto</title>

<para
><keycombo
>&Ctrl;<keycap
>F</keycap
></keycombo
>- Procurar <keycombo
>&Ctrl;<keycap
>R</keycap
></keycombo
>- Substituir </para>

</sect2
> <!-- searching -->


<sect2 id="isearch">
<title
>ISearch</title>
<indexterm zone="isearch"
><primary
>isearch</primary
></indexterm>
<indexterm zone="isearch"
><primary
>pesquisa incremental</primary
></indexterm>
<indexterm zone="isearch"
><primary
>procurar</primary
><secondary
>incremental</secondary
></indexterm>

<para
>A forma convencional de procurar com a opção <menuchoice
><guimenu
>Editar</guimenu
> <guimenuitem
>Procurar</guimenuitem
></menuchoice
> necessita que você indique o termo a procurar por completo, antes de iniciar a pesquisa. A maior parte do tempo, é muito mais fácil procurar incrementalmente. Se carregar no campo de texto chamado <guilabel
>ISearch</guilabel
> da barra de ferramentas, a pesquisa é efectuada à medida que vai escrevendo. Irá concluir que o termo desejado poderá ser encontrado logo ao fim de escrever 3 ou 4 letras. </para>

</sect2
> <!-- isearch -->


<sect2 id="grep">
<title
>Grep</title>
<indexterm zone="grep"
><primary
>procurar</primary
><secondary
>nos ficheiros</secondary
></indexterm>

<para
>Ambos os mecanismos de procura descritos acima estão restringidos a procurar dento de um ficheiro de código. Existe uma outra ferramenta adicional que lhe permite procurar num (talvez grande) conjunto de ficheiros, através da opção do menu <guimenuitem
>Procurar nos Ficheiros...</guimenuitem
> do menu <guimenu
>Editar</guimenu
>. É, basicamente, uma interface para o programa &grep;(1). </para>

<para
>Na janela, poderá indicar os ficheiros onde deseja procurar. Existe um conjunto de padrões especiais disponíveis que poderá usar numa lista. Desta forma, poderá restringir facilmente o mecanismo de procura aos ficheiros de inclusão, por exemplo. Para além disso, existe uma pasta que poderá indicar onde começar a procura. Se assinalar a opção <guibutton
>Recursivo</guibutton
>, a pesquisa irá percorrer todas as pastas que estejam abaixo desta na hierarquia. </para>

<para
>O termo a procurar é, de um modo geral, uma expressão regular que segue a sintaxe do POSIX. Por exemplo, poderá usar o termo <literal
>"\&lt;K.*"</literal
> se desejar procurar todas as palavras que comecem pela letra K. Os seguintes caracteres são interpretados de uma forma especial: </para>

<informaltable>
<tgroup cols="2">
<tbody>

<row
><entry>
  <literal
>.</literal>
</entry
><entry
>Corresponde a qualquer carácter </entry
></row>
<row
><entry>
  <literal
>^</literal>
</entry
><entry
>Corresponde ao início de uma linha </entry
></row>
<row
><entry>
  <literal
>$</literal>
</entry
><entry
>Corresponde ao fim de uma linha </entry
></row>
<row
><entry>
  <literal
>\&lt;</literal>
</entry
><entry
>Corresponde ao início de uma palavra </entry
></row>
<row
><entry>
  <literal
>\&gt;</literal>
</entry
><entry
>Corresponde ao fim de uma palavra </entry
></row>
<row
><entry>
  <literal
>?</literal>
</entry
><entry
>O item antecedente corresponde menos que uma vez </entry
></row>
<row
><entry>
  <literal
>*</literal>
</entry
><entry
>O item antecedente corresponde zero ou mais vezes </entry
></row>
<row
><entry>
  <literal
>+</literal>
</entry
><entry
>O item antecedente corresponde uma ou mais vezes </entry
></row>
<row
><entry>
  <literal
>{n}</literal>
</entry
><entry
>O item antecedente corresponde exactamente 'n' vezes </entry
></row>
<row
><entry>
  <literal
>{n,}</literal>
</entry
><entry
>O item antecedente corresponde 'n' ou mais vezes </entry
></row>
<row
><entry>
  <literal
>{,n}</literal>
</entry
><entry
>O item antecedente corresponde menos de 'n' vezes </entry
></row>
<row
><entry>
  <literal
>{n,m}</literal>
</entry
><entry
>O item antecedente corresponde pelo menos <literal
>n</literal
> mas menos que <literal
>m</literal
> vezes </entry
></row>

</tbody>
</tgroup>
</informaltable>

<para
>As referências anteriores às expressões entre parêntesis estão também disponíveis, através da notação <literal
>\n</literal
>. </para>

<para
>Para os programadores em C++, como bónus especial, existem alguns modelos de procura disponíveis para procurar padrões típicos. Estes permitem-lhe procurar, por exemplo, todas as chamadas a funções pertencentes a um dado objecto. </para>

<para
>Logo que tenha iniciado a procura, após carregar no botão <guibutton
>Procurar</guibutton
>, esta será efectuada por um processo externo e assíncrono. Todos os itens encontrados irão aparecer na janela chamada <guilabel
>Grep</guilabel
>. Poderá então saltar para os itens encontrados, carregando neles. Lembre-se que o 'grep' procura os ficheiros da forma que eles estão guardados no sistema de ficheiros. Se tiver versões modificadas dos mesmos no seu editor, poderá ter algumas falhas de correspondência no número da linha ou mesmo obter alguns itens encontrados inválidos. Poderá evitar isto se gravar todos os ficheiros previamente. </para>

</sect2
> <!-- grep -->

</sect1
> <!-- searchinggrepping -->

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->

<sect1 id="code-completion">
<title
>Completação de Código</title>

<para
>(... ainda não escrito ...) </para>
</sect1
> <!-- code-completion -->

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->

<sect1 id="newfiles">
<title
>Criar Ficheiros e Classes Novos</title>

<para
>(... ainda não escrito ...) </para>

<sect2 id="newfiles-edittemplates">
<title
>Editar os Modelos</title>

<para
>(... ainda não escrito ...) </para>
</sect2
> <!-- newfiles-edittemplates -->

</sect1
> <!-- newfiles -->

</chapter
> <!-- editing -->
<!-- ====================================================================== -->
