<chapter id="plugins">

<chapterinfo>
<authorgroup>
<author
>&Anders.Lund; &Anders.Lund.mail;</author>
<othercredit role="translator"
><firstname
>Lisiane</firstname
><surname
>Sztoltz</surname
><affiliation
><address
><email
>lisiane@conectiva.com.br</email
></address
></affiliation
><contrib
>Tradução</contrib
></othercredit
><othercredit role="translator"
><firstname
>André Marcelo</firstname
><surname
>Alvarenga</surname
><affiliation
><address
><email
>alvarenga@kde.org</email
></address
></affiliation
><contrib
>Tradução</contrib
></othercredit
><othercredit role="translator"
><firstname
>Antonio Henrique L.</firstname
><surname
>Rodrigues</surname
><affiliation
><address
><email
>ahlr_2000@yahoo.com</email
></address
></affiliation
><contrib
>Tradução</contrib
></othercredit
><othercredit role="translator"
><firstname
>Marcus</firstname
><surname
>Gama</surname
><affiliation
><address
><email
>marcus.gama@gmail.com</email
></address
></affiliation
><contrib
>Tradução</contrib
></othercredit
> 
</authorgroup>
</chapterinfo>

<title
>Trabalhando com plugins</title>

<para
>Você poderá ativar os plugins individualmente na <link linkend="configuring-kate-configdialog"
>caixa de diálogo de configuração</link
>, a qual também oferece acesso às opções de configuração adicionais dos plugins que necessitem delas.</para>

<sect1 id="kate-application-plugins">
<title
>Plugins do aplicativo &kate;</title>

<!-- from doc/kate-addons/index.docbook -->
<para
>Os plugins do &kate; são funções adicionais para o editor &kate;. Eles poderão adicionar menus e atalhos extra, assim como estender as funcionalidades do &kate;. Você poderá instalar ou desinstalar os que quiser, dentro do &kate;. Abra a janela de configuração do &kate; com a opção <menuchoice
><guimenu
>Configurações</guimenu
><guimenuitem
>Configurar o &kate;...</guimenuitem
></menuchoice
>. Selecione o <menuchoice
><guimenu
>Aplicativo</guimenu
><guimenuitem
>Plugins</guimenuitem
></menuchoice
> para escolher os plugins desejados. </para>

<para
>Os plugins do aplicativo disponíveis são: </para>
<itemizedlist>
<listitem>
<para
><link linkend="kate-application-plugin-external-tools"
>Ferramentas externas</link
> - Executa ferramentas e aplicativos externos</para>
</listitem>
<listitem>
<para
><link linkend ="kate-application-plugin-backtracebrowser"
>Navegador Backtrace</link
> - exibição da ferramenta de navegação Backtrace C/C++</para>
</listitem>
<listitem>
<para
><link linkend="kate-application-plugin-build"
>Plugin de compilação</link
>- Compila e mostra as mensagens de erro</para>
</listitem>
<listitem>
<para
><link linkend="kate-application-plugin-closeexceptlike"
>Fechamento com exclusão/inclusão</link
> - Fecha um grupo de documentos com base em uma extensão ou caminho comuns</para>
</listitem>
<listitem>
<para
><link linkend="kate-application-plugin-colorpicker"
>Seletor de cor</link
> - Exibe uma pré-visualização para nomes de cor conhecidos</para>
</listitem>
<listitem>
<para
><link linkend="kate-application-plugin-colored-brackets"
>Colchetes coloridos</link
> - Colchetes coloridos para facilitar a leitura</para>
</listitem>
<listitem>
<para
><link linkend="kate-application-plugin-ctags"
>CTags</link
> - Procurar definições/declarações com CTags</para>
</listitem>
<listitem>
<para
><link linkend="kate-application-plugin-preview"
>Visualização do documento</link
> -Visualize o documento no formato de destino.</para>
</listitem>
<listitem>
<para
><link linkend="kate-application-plugin-documentswitcher"
>Seletor de documento</link
> - Troca rápida de documentos  <keycombo action="simul"
>&Alt;&Tab;</keycombo
></para>
</listitem>
<listitem>
<para
><link linkend="kate-application-plugin-fsbrowser"
>Navegador do sistema de arquivos</link
> - Ferramenta de navegação no sistema de arquivos</para>
</listitem>
<listitem>
<para
><link linkend="kate-application-plugin-documents"
>Exibição da árvore de documentos</link
> - Exibe os arquivos abertos em uma árvore de arquivos</para>
</listitem>
<listitem>
<para
><link linkend="kate-application-plugin-gdb"
>&gdb;</link
> - Oferece uma interface simples para o &gdb;</para>
</listitem>
<listitem>
<para
><link linkend="kate-application-plugin-projects"
>Plugin do projeto</link
> - Integração com &git; e outros sistemas de controle de versão</para>
</listitem>
<listitem>
<para
>Replicode - linguagem construtivista AI em tempo real</para>
</listitem>
<listitem>
<para
><link linkend="kate-application-plugin-lspclient"
>Cliente LSP</link
> - cliente LSP que fornece navegação e conclusão de código para vários idiomas</para>
</listitem>
<listitem>
<para
><link linkend="kate-application-plugin-searchinfiles"
>Pesquisar e substituir</link
> - Pesquisa e substitui nos documentos, pastas ou projetos</para>
</listitem>
<listitem>
<para
><link linkend="kate-application-plugin-snippets"
>Ferramenta de visualização de Scripts &amp; Snippets</link
> - Cria ou baixa snippets de código e scripts do editor</para>
</listitem>
<listitem>
<para
><link linkend="kate-application-plugin-keyboardmacros"
>Macros de teclado</link
> - Grava e reproduz macros de teclado (ou seja, sequências de ações do teclado)</para>
</listitem>
<listitem>
<para
><link linkend="kate-application-plugin-sql"
>Plugin do SQL</link
> - Executa pesquisas em bancos de dados SQL</para>
</listitem>
<listitem>
<para
><link linkend="kate-application-plugin-symbolviewer"
>Visualizador de símbolos</link
> - Extrair e mostrar os símbolos de referência do código</para>
</listitem>
<listitem>
<para
><link linkend="kate-application-plugin-konsole"
>Visualização das ferramentas do Terminal</link
> - Tenha um terminal pronto, usando o widget do &konsole; do &kde;</para>
</listitem>
<listitem>
<para
><link linkend="kate-application-plugin-textfilter"
>Navegador do sistema de arquivos</link
> - Ferramenta de navegação no sistema de arquivos</para>
</listitem>
<listitem>
<para
><link linkend="kate-application-plugin-xmltools"
>Completamento de &XML;</link
> - Apresenta os elementos de &XML;, os seus atributos, valores e entidades permitidas pela DTD</para>
</listitem>
<listitem>
<para
><link linkend="kate-application-plugin-xmlcheck"
>Validação do &XML;</link
> -Valida arquivos &XML; usando xmllint</para>
</listitem>
<listitem>
<para
><link linkend="kate-application-plugin-compilerexplorer"
>Explorador do compilador</link
> - Interface para a ferramenta exploradora de compiladores</para>
</listitem>
<listitem>
<para
><link linkend="kate-application-plugin-formatting"
>Formatação</link
> - Plugin de formatação de código</para>
</listitem>
</itemizedlist>
</sect1>

<sect1 id="kate-application-plugin-external-tools">
<title
>Ferramentas externas</title>

<para
>O plugin <guilabel
>Ferramentas externas</guilabel
> permite invocar aplicativos externos com dados relacionados ao documento atual, por exemplo, seu URL, diretório, texto ou seleção. Uma vez ativado, uma página de configuração é exibida, como mostrado abaixo, permitindo alterar ou remover ferramentas existentes. Da mesma forma, novas ferramentas podem ser adicionadas conforme sua preferência. As ferramentas aparecerão então no submenu <guisubmenu
>Ferramentas externas</guisubmenu
> do menu <guimenu
>Ferramentas</guimenu
> do aplicativo. </para>

<mediaobject>
<imageobject>
<imagedata format="PNG" fileref="kateexternaltools.png"/>
</imageobject>
</mediaobject>

<para
>A página de configuração permite adicionar novas ferramentas externas clicando no botão <guilabel
>Adicionar</guilabel
>. Nesse caso, um menu pop-up aparece onde é possível adicionar uma nova ferramenta externa, adicionar uma ferramenta existente de uma lista predefinida ou adicionar uma nova categoria para organizar as ferramentas externas em categorias. Da mesma forma, as ferramentas existentes podem ser modificadas com um clique duplo ou invocando <guilabel
>Editar...</guilabel
>, e <guilabel
>Remover</guilabel
> remove as ferramentas selecionadas. </para>

<sect2 id="kate-application-plugin-external-tools-edit">
<title
>Configurando ferramentas externas</title>

<para
>Editar uma ferramenta abre uma caixa de diálogo de configuração que permite uma configuração detalhada da ferramenta.</para>

<mediaobject>
<imageobject>
<imagedata format="PNG" fileref="kateeditexternaltool.png"/>
</imageobject>
</mediaobject>

<variablelist>
<varlistentry>
<term
>Como se pode ver, muitos detalhes podem ser definidos, nomeadamente:</term>
<listitem>
<para
><userinput
>Nome</userinput
>, o nome da ferramenta, que aparecerá posteriormente no menu.</para>
<para
><userinput
>Ícone</userinput
>, ícone opcional que fica visível no menu.</para>
<para
><userinput
>Executável</userinput
>, executável incluindo um caminho completo, ou seu executável deve estar na variável de ambiente <envar
>PATH</envar
>.</para>
<para
><userinput
>Argumentos</userinput
>, argumentos opcionais que são passados ​​para o executável.</para>
<para
><userinput
>Entrada</userinput
>, entrada opcional que é passada para o processo via stdin.</para>
<para
><userinput
>Pasta de trabalho</userinput
>, o diretório de trabalho no qual a ferramenta será iniciada. Se estiver vazio, o diretório de trabalho será definido como o caminho do documento atual.</para>
<para
><userinput
>Tipos MIME</userinput
>, se definido, a ferramenta fica ativa somente se o tipo MIME do documento atual corresponder.</para>
<para
><userinput
>Salvar</userinput
>, quando invocado, não salva nada, salva o documento atual ou todos os documentos.</para>
<para
><userinput
>Gatilho</userinput
>, um gatilho para executar esta ferramenta. Um gatilhoafetará apenas o documento atualmente ativo e só será executado se o tipo MIME do documento atualmente ativo corresponder ao tipo MIME da ferramenta externa.</para>
    <variablelist
><varlistentry>
    <term
>Os seguintes gatilhos estão disponíveis:</term>
    <listitem>
    <para
><userinput
>Nenhum</userinput
>, este é o padrão, significa que a ferramenta não tem nenhum gatilho.</para>
    <para
><userinput
>Antes de salvar</userinput
>, este gatilho será executado imediatamente antes de salvar o documento.</para>
    <para
><userinput
>Após salvar</userinput
>, este gatilho executará a ferramenta depois que o documento for salvo.</para>
    </listitem>
    </varlistentry
></variablelist>
<para
><userinput
>Recarregar o documento atual após a execução</userinput
>, útil quando o arquivo atual é modificado no disco.</para>
<para
><userinput
>Saída</userinput
>, a saída define o destino do stdout. Ela pode ser definida como <userinput
>Ignorada</userinput
>, <userinput
>Inserir na posição do cursor</userinput
>, <userinput
>Substituir texto selecionado</userinput
>, <userinput
>Substituir documento atual</userinput
>, <userinput
>Anexar ao documento atual</userinput
>, <userinput
>Inserir em novo documento</userinput
>, <userinput
>Copiar para a área de transferência</userinput
> ou <userinput
>Mostrar no painel</userinput
>.</para>
<para
><userinput
>Comando do editor</userinput
>, comando opcional que pode ser usado para invocar a ferramenta externa através da <ulink url="help:/katepart/advanced.html#advanced-editing-tools-commandline"
>linha de comando</ulink
> embutida.</para>
</listitem>
</varlistentry>
</variablelist>

<para
>O botão <guilabel
>Padrões</guilabel
> só é visível para ferramentas que são disponibilizadas com o Kate. Ao clicar nele, todas as configurações da ferramenta são revertidas para os valores padrão (ou seja, de fábrica). </para>

</sect2>

<sect2 id="kate-application-plugin-external-tools-variables">
<title
>Expansão de variável</title>

<para
>Alguns campos de edição, como o <guilabel
>Executável</guilabel
>, os <guilabel
>Argumentos</guilabel
>, a <guilabel
>Entrada</guilabel
> e a <guilabel
>Pasta de trabalho</guilabel
>, suportam variáveis ​​que são expandidas ao invocar a ferramenta. Isso é indicado pelo ícone <guilabel
>{}</guilabel
> que aparece quando um desses campos de entrada de texto recebe o foco (veja o círculo vermelho): </para>

<mediaobject>
<imageobject>
<imagedata format="PNG" fileref="katevariableexpansion.png"/>
</imageobject>
</mediaobject>

<para
>Ao passar o cursor sobre um desses campos de entrada de texto, também é exibida uma dica de ferramenta com o texto expandido atual. Além disso, clicar na ação <guilabel
>{}</guilabel
> abrirá uma caixa de diálogo que lista todas as variáveis ​​disponíveis: </para>

<mediaobject>
<imageobject>
<imagedata format="PNG" fileref="kateexternaltoolvariablechooser.png"/>
</imageobject>
</mediaobject>

<para
>Esta funcionalidade oferece muita flexibilidade ao definir uma ferramenta externa, já que todas as variáveis ​​do formato <userinput
>%{...}</userinput
> são expandidas quando a ferramenta é invocada. Há dois tipos de variáveis ​​suportadas: <itemizedlist
> <listitem
><para
><userinput
>%{nome-variável}</userinput
></para
></listitem
> <listitem
><para
><userinput
>%{nome-variável:&lt;valor&gt;}</userinput
></para
></listitem
> </itemizedlist
> O primeiro formato, <userinput
>%{nome-variável}</userinput
>, simplesmente substitui a variável pelo seu conteúdo. Por exemplo, a variável <userinput
>%{Document:FileName}</userinput
> é substituída pelo nome do arquivo do documento atual, sem o seu caminho. O segundo formato <userinput
>%{nome-variável:&lt;valor&gt;}</userinput
> obtém o conteúdo <userinput
>&lt;valor&gt;</userinput
>. Por exemplo, isso pode ser usado para expandir uma variável de ambiente com <userinput
>%{ENV:HOME}</userinput
>, ou pode-se obter a data atual no formato desejado, como <userinput
>%{Date:yyyy-MM-dd}</userinput
>. </para>

<variablelist>
<varlistentry>
<term
>Variáveis suportadas incluem:</term>
<listitem>
<para
><userinput
>Document:FileBaseName</userinput
>: Nome base do arquivo sem o caminho e sufixo do documento atual.</para>
<para
><userinput
>Document:FileExtension</userinput
>: Extensão do arquivo do documento atual.</para>
<para
><userinput
>Document:FileName</userinput
>: Nome do arquivo sem o caminho do documento atual.</para>
<para
><userinput
>Document:FilePath</userinput
>: Caminho completo do documento atual incluindo o nome do arquivo.</para>
<para
><userinput
>Document:Text</userinput
>: Conteúdo do documento atual.</para>
<para
><userinput
>Document:Path</userinput
>: Caminho completo do documento atual excluindo o nome do arquivo.</para>
<para
><userinput
>Document:NativeFilePath</userinput
>: Caminho completo do documento, incluindo o nome do arquivo, com o separador de caminho nativo (barra invertida no Windows).</para>
<para
><userinput
>Document:NativePath</userinput
>: Caminho completo do documento, excluindo o nome do arquivo, com o separador de caminho nativo (barra invertida no Windows).</para>
<para
><userinput
>Document:Cursor:Line</userinput
>: Número da linha da posição do cursor de texto posição no documento atual (começa com 0).</para>
<para
><userinput
>Document:Cursor:Column</userinput
>: Número da coluna da posição do cursor de texto no documento atual (começa com 0).</para>
<para
><userinput
>Document:Cursor:XPos</userinput
>: Componente X das coordenadas da posição do cursor na tela global.</para>
<para
><userinput
>Document:Cursor:YPos</userinput
>: Componente X das coordenadas da posição do cursor na tela global.</para>
<para
><userinput
>Document:Selection:Text</userinput
>: Seleção de texto do documento atual.</para>
<para
><userinput
>Document:Selection:StartLine</userinput
>: Linha inicial do texto selecionado no documento atual.</para>
<para
><userinput
>Document:Selection:StartColumn</userinput
>: Coluna inicial do texto selecionado no documento atual.</para>
<para
><userinput
>Document:Selection:EndLine</userinput
>: Linha final do texto selecionado no documento atual.</para>
<para
><userinput
>Document:Selection:EndColumn</userinput
>: Coluna final do texto selecionado no documento atual.</para>
<para
><userinput
>Document:RowCount</userinput
>: Número de linhas do documento atual.</para>
<para
><userinput
>Document:Variable:&lt;variável&gt;</userinput
>: Expande <ulink url="help:/katepart/config-variables.html"
>variáveis do documento</ulink
> arbitrárias.</para>
<para
><userinput
>Date:Locale</userinput
>: A data atual no formato local atual.</para>
<para
><userinput
>Date:ISO</userinput
>: A data atual (ISO).</para>
<para
><userinput
>Date:&lt;valor&gt;</userinput
>: A data atual (<ulink url="https://doc.qt.io/qt-5/qdate.html#toString"
>formato do QDate</ulink
>).</para>
<para
><userinput
>Time:Locale</userinput
>: A hora atual no formato local atual.</para>
<para
><userinput
>Time:ISO</userinput
>: A hora atual (ISO).</para>
<para
><userinput
>Time:&lt;valor&gt;</userinput
>: A hora atual (<ulink url="https://doc.qt.io/qt-5/qtime.html#toString"
>formato do QTime</ulink
>).</para>
<para
><userinput
>ENV:&lt;valor&gt;</userinput
>: Acessa variáveis do ambiente.</para>
<para
><userinput
>JS:&lt;expressão&gt;</userinput
>: Avalia instruções JavaScript simples.</para>
<para
><userinput
>PercentEncoded:&lt;texto&gt;</userinput
>: Texto codificado como porcentagem.</para>
<para
><userinput
>UUID</userinput
>: Gera uma nova UUID.</para>
</listitem>
</varlistentry>
</variablelist>

 

</sect2>

<sect2 id="kate-application-plugin-external-tools-defaults">
<title
>Lista de ferramentas padrão</title>

<para
>Diversas ferramentas são fornecidas por padrão. No entanto, se você tiver ferramentas mais úteis, contribua com elas para <ulink url="https://invent.kde.org/utilities/kate"
>nosso projeto no GitLab</ulink
> para que possamos adicioná-las a esta lista. Todas as ferramentas padrão são visíveis na lista por padrão. No entanto, todas as ferramentas podem ser alteradas ao seu gosto, incluindo a categoria ou até mesmo excluindo ferramentas. As ferramentas excluídas podem ser adicionadas novamente clicando no botão <guibutton
>Adicionar</guibutton
> na página de configuração, conforme descrito acima. </para>

<variablelist>
<title
>git-cola</title>

<varlistentry>
<term
>O git-cola é um cliente gráfico do Git que permite preparar e enviar alterações com facilidade. Se instalado, ele também estará disponível pela linha de comando digitando <userinput
>git-cola</userinput
></term>
<listitem>
<para
><userinput
>Nome</userinput
>: git-cola</para>
<para
><userinput
>Ícone</userinput
>: git-cola</para>
<para
><userinput
>Executável</userinput
>: git-cola</para>
<para
><userinput
>Argumentos</userinput
>: -r %{Document:Path}</para>
<para
><userinput
>Comando do editor</userinput
>: git-cola</para>
</listitem>
</varlistentry>

</variablelist>


<variablelist>
<title
>gitk</title>

<varlistentry>
<term
>O gitk também é um cliente git que permite visualizar o histórico do git de forma organizada.</term>
<listitem>
<para
><userinput
>Nome</userinput
>: gitk</para>
<para
><userinput
>Ícone</userinput
>: git-gui</para>
<para
><userinput
>Executável</userinput
>: gitk</para>
<para
><userinput
>Pasta de trabalho</userinput
>: %{Document:Path}</para>
<para
><userinput
>Comando do editor</userinput
>: gitk</para>
</listitem>
</varlistentry>

</variablelist>


<variablelist>
<title
>git blame</title>

<varlistentry>
<term
>Inicia o comando `git blame` para acompanhar facilmente as alterações do Git no arquivo atual.</term>
<listitem>
<para
><userinput
>Nome</userinput
>: git blame</para>
<para
><userinput
>Executável</userinput
>: git</para>
<para
><userinput
>Argumentos</userinput
>: gui blame %{Document:FileName}</para>
<para
><userinput
>Salvar</userinput
>: Documento atual</para>
<para
><userinput
>Pasta de trabalho</userinput
>: %{Document:Path}</para>
<para
><userinput
>Comando do editor</userinput
>: git-blame</para>
</listitem>
</varlistentry>

</variablelist>


<variablelist>
<title
>Executar Shell Script</title>

<varlistentry>
<term
>Inicia um konsole externo no qual o documento atual é executado. O script precisa declarar o interpretador na primeira linha por meio de um shebang <userinput
>#!/path/interpreter</userinput
>.</term>
<listitem>
<para
><userinput
>Nome</userinput
>: Executar Shell Script</para>
<para
><userinput
>Ícone</userinput
>: system-run</para>
<para
><userinput
>Executável</userinput
>: konsole</para>
<para
><userinput
>Argumentos</userinput
>: -e sh -c &quot;cd %{Document:Path} &amp;&amp; pwd &amp;&amp; chmod -vc a+x %{Document:FileName} &amp;&amp; ./%{Document:FileName} ; echo Press any key to continue. &amp;&amp; read -n 1&quot;</para>
<para
><userinput
>Salvar</userinput
>: Documento atual</para>
<para
><userinput
>Pasta de trabalho</userinput
>: %{Document:Path}</para>
<para
><userinput
>Comando do editor</userinput
>: run-script</para>
</listitem>
</varlistentry>

</variablelist>


<variablelist>
<title
>Texto selecionado no Google</title>

<varlistentry>
<term
>Pesquisa o texto selecionado no Google.</term>
<listitem>
<para
><userinput
>Nome</userinput
>: Texto selecionado no Google</para>
<para
><userinput
>Ícone</userinput
>: globe</para>
<para
><userinput
>Executável</userinput
>: xdg-open</para>
<para
><userinput
>Argumentos</userinput
>: &quot;https://www.google.com/search?q=%{Document:Selection:Text}&quot;</para>
<para
><userinput
>Comando do editor</userinput
>: google</para>
</listitem>
</varlistentry>

</variablelist>


<variablelist>
<title
>Inserir UUID</title>

<varlistentry>
<term
>Insere uma nova UUID cada vez que esta ação é invocada.</term>
<listitem>
<para
><userinput
>Nome</userinput
>: Inserir UUID</para>
<para
><userinput
>Executável</userinput
>: echo</para>
<para
><userinput
>Argumentos</userinput
>: %{UUID}</para>
<para
><userinput
>Saída</userinput
>: Insere na posição do cursor</para>
<para
><userinput
>Comando do editor</userinput
>: uuid</para>
</listitem>
</varlistentry>

</variablelist>


<variablelist>
<title
>Arquivo completo do formato Clang</title>

<varlistentry>
<term
>Executa o clang-format no arquivo atual no disco. O documento é recarregado em seguida.</term>
<listitem>
<para
><userinput
>Nome</userinput
>: Arquivo completo do formato Clang</para>
<para
><userinput
>Executável</userinput
>: clang-format</para>
<para
><userinput
>Argumentos</userinput
>: -i %{Document:FileName}</para>
<para
><userinput
>Pasta de trabalho</userinput
>: %{Document:Path}</para>
<para
><userinput
>Salvar</userinput
>: Documento atual</para>
<para
><userinput
>Recarregar</userinput
>: Sim</para>
<para
><userinput
>Comando do editor</userinput
>: clang-format-file</para>
</listitem>
</varlistentry>

</variablelist>


<variablelist>
<title
>Texto selecionado no formato Clang</title>

<varlistentry>
<term
>Executa o clang-format apenas no texto selecionado no documento atual.</term>
<listitem>
<para
><userinput
>Nome</userinput
>: Texto selecionado no formato Clang</para>
<para
><userinput
>Executável</userinput
>: clang-format</para>
<para
><userinput
>Argumentos</userinput
>: -assume-fileName: %{Document:FileName}</para>
<para
><userinput
>Pasta de trabalho</userinput
>: %{Document:Path}</para>
<para
><userinput
>Entrada</userinput
>: %{Document:Selection:Text}</para>
<para
><userinput
>Saída</userinput
>: Substitui o texto selecionado</para>
<para
><userinput
>Comando do editor</userinput
>: clang-format-selection</para>
</listitem>
</varlistentry>

</variablelist>


<variablelist>
<title
>Visualização do Qt Quick 2 (qmlscene)</title>

<varlistentry>
<term
>Exibe uma prévia do arquivo qml atual em qmlscene.</term>
<listitem>
<para
><userinput
>Nome</userinput
>: Visualização do Qt Quick 2 (qmlscene)</para>
<para
><userinput
>Executável</userinput
>: qmlscene</para>
<para
><userinput
>Argumentos</userinput
>: %{Document:FileName}</para>
<para
><userinput
>Salvar</userinput
>: Documento atual</para>
<para
><userinput
>Pasta de trabalho</userinput
>: %{Document:Path}</para>
<para
><userinput
>Comando do editor</userinput
>: qml-preview</para>
</listitem>
</varlistentry>

</variablelist>


<variablelist>
<title
>Arquivo completo do formato JSON</title>

<varlistentry>
<term
>Formata todo o arquivo JSON.</term>
<listitem>
<para
><userinput
>Nome</userinput
>: Arquivo completo do formato JSON</para>
<para
><userinput
>Ícone</userinput
>: application-json</para>
<para
><userinput
>Executável</userinput
>: jq</para>
<para
><userinput
>Argumentos</userinput
>: %{Document:FileName}</para>
<para
><userinput
>Salvar</userinput
>: Documento atual</para>
<para
><userinput
>Pasta de trabalho</userinput
>: %{Document:Path}</para>
<para
><userinput
>Saída</userinput
>: Substitui o documento atual</para>
<para
><userinput
>Comando do editor</userinput
>: json-format-file</para>
</listitem>
</varlistentry>

</variablelist>


<variablelist>
<title
>Arquivo completo do formato XML</title>

<varlistentry>
<term
>Formata todo o arquivo XML.</term>
<listitem>
<para
><userinput
>Nome</userinput
>: Arquivo completo do formato XML</para>
<para
><userinput
>Ícone</userinput
>: application-xml</para>
<para
><userinput
>Executável</userinput
>: xmllint</para>
<para
><userinput
>Argumentos</userinput
>: --format %{Document:FileName}</para>
<para
><userinput
>Salvar</userinput
>: Documento atual</para>
<para
><userinput
>Pasta de trabalho</userinput
>: %{Document:Path}</para>
<para
><userinput
>Saída</userinput
>: Substitui o documento atual</para>
<para
><userinput
>Comando do editor</userinput
>: xml-format-file</para>
</listitem>
</varlistentry>

</variablelist>

</sect2>
</sect1>

<sect1 id="kate-application-plugin-backtracebrowser">
<!--https://kate-editor.org/2008/08/12/kate-fast-backtrace-navigation/-->
<title
>Plugin do navegador Backtrace</title>

<sect2 id="backtracebrowser-using">
<title
>Usando o plugin do navegador backtrace</title>

<para
>Este plugin é destinado a desenvolvedores e provavelmente de pouca utilidade para os usuários. Isto mostra um backtrace entregue pelo gdb em uma lista de exibição na janela de visualização do &kate; Clicar em um item abre o arquivo selecionado e salta para o número da linha correta. Ele funciona para rastreamentos gerados em sua própria máquina, mas também funciona para backtraces de outras pessoas, &ie; com <filename
>/home/dummy/qt-copy/…/qwidget.cpp</filename
> encontrados em outras máquinas. Para que funcione, você deve indexar os diretórios onde o código-fonte está localizado. </para>

<para
>Às vezes, existem vários arquivos com o mesmo nome, &eg;</para>

<simplelist>
<member
><filename
>kdegraphics/okular/generators/dvi/config.h</filename
></member>
<member
><filename
>kdepim-runtime/resources/gmail/saslplugin/config.h</filename
></member>
</simplelist>

<para
>Para escolher a opção certa, o plugin seleciona as duas últimas partes da &URL;, neste caso, isso seria</para>

<simplelist>
<member
><filename
>dvi/config.h</filename
></member>
<member
><filename
>saslplugin/config.h</filename
></member>
</simplelist>

<para
>Geralmente, o plugin correto é encontrado.</para>

<para
>A indexação da ramificação master e outra ramificação, é claro, gerará um conflito.</para>

</sect2>

<sect2 id="backtracebrowser-config">
<title
>Configuração</title>

<para
>Na  página de configuração, adicionar os diretórios contendo o código-fonte.</para>

<screenshot id="screenshot-backtrace-settings">
<screeninfo
>Navegador backtrace</screeninfo>
<mediaobject>
<imageobject
><imagedata fileref="backtrace-settings.png" format="PNG"/></imageobject>
<caption
>Configurar caminhos na exibição da ferramenta do navegador Backtrace</caption>
</mediaobject>
</screenshot>

<para
>Clicar em <guibutton
>OK</guibutton
> iniciará a indexação. Quando a indexação for finalizada, abra a ferramenta de visualização do <guilabel
>navegador backtrace</guilabel
>.</para>
<para
>Agora você pode carregar um backtrace da área de transferência (&eg;, quando clicar em<guibutton
> Copie para a área de transferência </guibutton
> no &drkonqi;) ou de um arquivo.</para>

</sect2>

</sect1>

<sect1 id="kate-application-plugin-build">
<!--https://kate-editor.org/2011/06/21/kate-plugin-updates-part-1/ -->
<sect1info>
<authorgroup>
<author
><firstname
>Salma</firstname
> <surname
>Sultana</surname
></author>
<author
>&TC.Hollingsworth; &TC.Hollingsworth.mail;</author>
</authorgroup>
</sect1info>
<title
>Plugin de compilação</title>

<sect2 id="build-intro">
<title
>Introdução</title>

<para
>O plugin de compilação permite executar ações como build, clean e compile em um projeto. Você também pode executar automaticamente os aplicativos gerados. O plugin basicamente oferece uma maneira de configurar conjuntos de comandos para serem executados e pode analisar a saída em busca de links para arquivos e linhas e colunas específicas nesses arquivos. Portanto, mesmo que o plugin tenha sido originalmente criado para compilar C/C++ e testado principalmente com essa linguagem, ele também pode ser útil para outros fins e linguagens.</para>

</sect2>

<sect2 id="build-using">
<title
>Usando o plugin de compilação</title>

<para
>O plugin de compilação adiciona uma área de ferramentas <guilabel
>Compilar</guilabel
> na parte inferior e um menu <guimenu
>Compilar</guimenu
> no menu principal. A área de ferramentas pode ser usada para selecionar e configurar alvos de compilação, enquanto o menu e seus atalhos podem ser usados ​​para selecionar e executar os comandos de shell configurados.</para>

<screenshot id="screenshot-build-output">
<screeninfo
>Criar saída</screeninfo>
<mediaobject>
<imageobject
><imagedata fileref="build-output.png" format="PNG"/></imageobject>
</mediaobject>
</screenshot>

<para
>A visualização da ferramenta <guilabel
>Compilar</guilabel
> possui duas abas:</para>

<itemizedlist>
<listitem
><para
><guilabel
>Configurações do alvo</guilabel
></para
></listitem>
<listitem
><para
><guilabel
>Saída</guilabel
></para
></listitem>
</itemizedlist>

<sect3 id="build-using-target-settings">
<title
>Aba das configurações do alvo</title>

<para
>A aba de configurações de alvo pode ser usada para configurar vários alvos e definir conjuntos de alvos.</para>

<para
>Um conjunto de alvos é um grupo de comandos que podem ser executados em uma pasta de trabalho específica. Os conjuntos de alvos podem ser adicionados em <guilabel
>Projetos</guilabel
> ou <guilabel
>Sessão</guilabel
>. Os conjuntos de alvos personalizados adicionados em <guilabel
>Projetos</guilabel
> são armazenados em um arquivo <guilabel
>.kateproject.build</guilabel
> na pasta raiz do projeto e são restaurados quando o projeto é reaberto. Os conjuntos de alvos adicionados em <guilabel
>Sessão</guilabel
> são armazenados na configuração atual da sessão Kate.</para>

<para
>A primeira linha, em um conjunto de alvos, contém um nome para o conjunto na primeira coluna, e na segunda coluna temos a pasta onde os comandos devem ser executados. Em cada linha seguinte, temos um nome para o comando na primeira coluna, um comando de compilação na segunda coluna e um comando de execução na terceira coluna. Para editar um deles, clique duas vezes na entrada ou use o atalho de edição (geralmente <keycap
>F2</keycap
>).</para>

<variablelist>
<varlistentry>
<term
><guilabel
>Pasta de trabalho</guilabel
></term>
<listitem
><para
>A segunda coluna da primeira linha em um conjunto de alvos é usada para configurar a pasta de trabalho usada para compilar e executar comandos. Se o plugin de projeto estiver habilitado, a string da pasta de trabalho também pode conter marcadores para o caminho da pasta base do projeto: <guilabel
>%B</guilabel
> e para o nome: <guilabel
>%b</guilabel
></para
></listitem>
</varlistentry>

<varlistentry>
<term
><guilabel
>Comando de compilação</guilabel
></term>
<listitem
><para
>A segunda coluna nas "linhas não iniciais" contém o comando do shell a ser executado na pasta de trabalho. Observe a palavra "shell". Quase qualquer comando do shell servirá. O comando de compilação pode conter marcadores. <guilabel
>%f</guilabel
> para o arquivo atual, <guilabel
>%d</guilabel
> para a pasta do arquivo atual e <guilabel
>%n</guilabel
> para o nome base do arquivo atual (nome do arquivo sem sufixo).</para
></listitem>
</varlistentry>

<varlistentry>
<term
><guilabel
>Comando de execução</guilabel
></term>
<listitem
><para
>A terceira coluna nas "linhas não iniciais" pode conter um comando shell para execução em um terminal real no diretório de trabalho definido. O terminal é aberto como uma aba. O plugin tentará reutilizar a aba do terminal se o mesmo comando for executado e o aplicativo anterior tiver sido encerrado.</para
></listitem>
</varlistentry>

</variablelist>

<para
>Na parte superior da aba <guilabel
>Configurações do alvo</guilabel
>, temos uma barra de ferramentas com um filtro de alvo e os seguintes botões:</para>

<simplelist>
<member
><guiicon
><inlinemediaobject
><imageobject
><imagedata fileref="run-build-22.png" format="PNG"/></imageobject
></inlinemediaobject
></guiicon
> Compilar o alvo selecionado</member>
<member
><guiicon
><inlinemediaobject
><imageobject
><imagedata fileref="media-playback-start-22.png" format="PNG"/></imageobject
></inlinemediaobject
></guiicon
> Compilar e executar o alvo selecionado</member>
<member
><guiicon
><inlinemediaobject
><imageobject
><imagedata fileref="list-add-22.png" format="PNG"/></imageobject
></inlinemediaobject
></guiicon
> Adicionar um novo alvo de compilação</member>
<member
><guiicon
><inlinemediaobject
><imageobject
><imagedata fileref="document-new-22.png" format="PNG"/></imageobject
></inlinemediaobject
></guiicon
> Criar um novo conjunto de alvos</member>
<member
><guiicon
><inlinemediaobject
><imageobject
><imagedata fileref="edit-copy-22.png" format="PNG"/></imageobject
></inlinemediaobject
></guiicon
> Copiar um comando ou conjunto de alvos</member>
<member
><guiicon
><inlinemediaobject
><imageobject
><imagedata fileref="edit-delete-22.png" format="PNG"/></imageobject
></inlinemediaobject
></guiicon
> Excluir o comando atual ou conjunto de alvos</member>
</simplelist>

</sect3>

<sect3 id="build-using-output">
<title
>Aba de saída</title>

<para
>A aba <guilabel
>Saída</guilabel
> mostra a saída do console gerada pelo comando (de compilação) em execução. Se uma linha contiver o caminho de um arquivo, essa linha será clicável. Se a linha na saída também mostrar um erro ou aviso, a linha terá uma cor diferente. </para>

<para
>Se a opção <guilabel
>Adicionar erros e avisos ao diagnóstico</guilabel
> estiver ativada na página de configurações do plugin nas configurações do Kate, os erros e avisos também serão adicionados à visualização de diagnóstico. Para navegar até o erro anterior na visualização de diagnóstico, pressione <keycombo action="simul"
>&Alt;&Shift;&Left;</keycombo
>. Para navegar até o próximo erro, pressione <keycombo action="simul"
>&Alt;&Shift;&Right;</keycombo
>.</para>

</sect3>
</sect2>

<sect2 id="build-menu">
<title
>Estrutura do menu</title>

<variablelist id="build-build">
<varlistentry>
<term
><menuchoice id="build-targets"
><guimenu
>Compilar</guimenu
><guisubmenu
>Selecionar alvo...</guisubmenu
> </menuchoice
></term>
<listitem
><para
>O filtro de seleção de alvos está focado na aba de configurações de alvo. Digitar um nome filtrará os alvos que não correspondem à string digitada. Também é possível usar as teclas de seta para navegar na árvore de alvos. Quando o alvo desejado for selecionado, pressionar <guilabel
>Enter</guilabel
> executará o alvo selecionado.</para
></listitem>
</varlistentry>

<varlistentry id="build-selected">
<term
><menuchoice
><guimenu
>Compilar</guimenu
><guimenuitem
>Compilar alvo selecionado</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Compila o último alvo selecionado. Se nenhum tiver sido selecionado, funciona como <guilabel
>Selecionar alvo...</guilabel
></para
></listitem>
</varlistentry>

<varlistentry id="build-selected-run">
<term
><menuchoice
><guimenu
>Compilar</guimenu
><guimenuitem
>Compilar e executar alvo selecionado</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Compila o último alvo selecionado e executa o comando de execução após a compilação. O comando de compilação terminou com sucesso.</para
></listitem>
</varlistentry>

<varlistentry id="build-currentfile">
<term
><menuchoice
><guimenu
>Compilar</guimenu
><guimenuitem
>Compilar arquivo atual</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Tente compilar o arquivo atual procurando um comando em um possível arquivo compile_commands.json.</para
></listitem>
</varlistentry>

<varlistentry id="build-stop">
<term
><menuchoice
><guimenu
>Compilar</guimenu
><guimenuitem
>Parar</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Parar a compilação de um alvo.</para
></listitem>
</varlistentry>

<varlistentry id="build-previous-run-tab">
<term
><menuchoice
><guimenu
>Compilar</guimenu
><guimenuitem
>Focar próxima aba à esquerda</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Foque na próxima aba do plugin de compilação à esquerda. Ou abre a visualização da ferramenta do plugin de compilação, se estiver oculta.</para
></listitem>
</varlistentry>

<varlistentry id="build-next-run-tab">
<term
><menuchoice
><guimenu
>Compilar</guimenu
><guimenuitem
>Focar próxima aba à direita</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Foque na próxima aba do plugin de compilação à direita. Ou abre a visualização da ferramenta do plugin de compilação, se estiver oculta.</para
></listitem>
</varlistentry>

<varlistentry id="build-load-cmake-targets">
<term
><menuchoice
><guimenu
>Compilar</guimenu
><guimenuitem
>Carregar alvos da pasta de compilação do CMake</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Abre a janela de arquivo e permite que o usuário selecione um <guilabel
>CMakeCache.txt</guilabel
>. Quando um arquivo é selecionado, o plugin gera comandos de compilação do CMake que podem ser executados na pasta de compilação para o projeto baseado em CMake.</para
></listitem>
</varlistentry>

</variablelist>
</sect2>

<sect2 id="build-ack">
<title
>Agradecimentos e reconhecimento</title>
<para
>O plugin Compilação do &kate; foi criado por Kåre Särs.</para>
<para
>Agradecimento especial a Salma Sultana, participante do Google Code-In 2011, por escrever grande parte desta seção.</para>
</sect2>
</sect1>

<sect1 id="kate-application-plugin-closeexceptlike">

<title
>Plugin de fechamento com exclusão/inclusão</title>

<sect2 id="closeexceptlike-intro">
<title
>Introdução</title>

<para
>Este plugin permite fechar um grupo de documentos com base em suas extensão e caminhos.</para>

</sect2>

<sect2 id="closeexceptlike-using">
<title
>Usando o plugin de fechamento com exclusão/inclusão</title>

<para
>Supondo que você tenha esses documentos abertos no &kate;:</para>

<simplelist>
<member
>/tmp/subfolder/test.h</member>
<member
>/tmp/test.cpp</member>
<member
>/tmp/test.txt</member>
</simplelist>

<para
>Em seguida, você tem as seguintes opções para fechar documentos, conforme exibido na captura de tela:</para>

<screenshot id="screenshot-closeexceptlike">
<screeninfo
>Fechar com exceção de</screeninfo>
<mediaobject>
<imageobject
><imagedata fileref="close-except-like.png" format="PNG"/></imageobject>
</mediaobject>
</screenshot>

<para
>Use a caixa de seleção no último item da lista para ativar ou desativar uma caixa de diálogo de confirmação. A opção selecionada será aplicada para fechar ações. </para>

</sect2>

<sect2 id="closeexceptlike-menu">
<title
>Estrutura do menu</title>

<variablelist>
<varlistentry id="file-close-except">
<term
><menuchoice
><guimenu
>Arquivo</guimenu
> <guisubmenu
>Fechar com exceção de</guisubmenu
> </menuchoice
></term>
<listitem>
<para
><action
>Fecha</action
> todos os documentos abertos, <emphasis
>exceto </emphasis
> aqueles que correspondem ao caminho ou extensão de arquivo selecionado no submenu.</para>
</listitem>
</varlistentry>

<varlistentry id="file-close-like">
<term
><menuchoice
><guimenu
>Arquivo</guimenu
> <guisubmenu
>Fechar os seguintes</guisubmenu
> </menuchoice
></term>
<listitem>
<para
><action
>Fechar</action
> todos os documentos abertos que correspondem ao caminho ou extensão de arquivo selecionado no submenu.</para>
</listitem>
</varlistentry>

</variablelist>

</sect2>

</sect1>

<sect1 id="kate-application-plugin-colorpicker">

<title
>Plugin do seletor de cor</title>

<sect2 id="colorpicker-intro">
<title
>Introdução</title>

<para
>Este plugin adiciona uma pré-visualização/seletor de cor embutido no texto (por exemplo, <literal
>#FFFFFF</literal
>, <literal
>branco</literal
>).</para>

<para
>Para carregar este plugin, abra a janela de configuração do &kate; em <menuchoice
><guimenu
>Configurações</guimenu
> <guimenuitem
>Configurar &kate;...</guimenuitem
></menuchoice
>. Em seguida, selecione <guilabel
>Seletor de cor</guilabel
> e feche a janela. </para>
</sect2>

<sect2 id="colorpicker-config">
<title
>Configuração</title>

<para
>Na página de configurações do seletor de cor na configuração do &kate;, você pode configurar as seguintes opções de comportamento do plugin.</para>

<variablelist>

<varlistentry>
<term
><guilabel
>Mostrar prévia para nomes de cores conhecidos</guilabel
></term>
<listitem>
<para
>Se deve mostrar o seletor de cor para nomes de cor conhecidos (por exemplo, <literal
>azul-celeste</literal
>). Consulte <ulink url="https://www.w3.org/TR/SVG11/types.html#ColorKeywords"
>esta página</ulink
> para obter a lista de cores.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><guilabel
>Colocar a prévia após o texto da cor</guilabel
></term>
<listitem>
<para
>Indica se a pré-visualização embutida deve ser colocada após a cor do texto.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><guilabel
>Correspondência de cor hexadecimal</guilabel
></term>
<listitem>
<para
>Aqui, você pode escolher a opção que melhor corresponde às cores usadas no seu código.</para>
</listitem>
</varlistentry>

</variablelist>

</sect2>

</sect1>

<sect1 id="kate-application-plugin-colored-brackets">
<title
>Colchetes coloridos</title>

<sect2
><title
>Introdução</title>
<para
>O plugin de colchetes coloridos colore pares de colchetes correspondentes com cores diferentes para melhorar a legibilidade. No entanto, nem todos os colchetes são coloridos. Um colchete cujo parêntese de abertura ou fechamento correspondente não estiver visível será ignorado. Da mesma forma, um par de colchetes que for o único par de colchetes em uma linha não será colorido. </para>
</sect2>

<sect2
><title
>Configuração</title>
<para
>O plugin não oferece nenhuma opção de configuração.</para>
</sect2>
</sect1>

<sect1 id="kate-application-plugin-ctags">
<!--https://kate-editor.org/2012/11/02/using-the-projects-plugin-in-kate/-->
<title
>Plugin do CTags</title>

<sect2 id="ctags-intro">
<title
>Introdução</title>

<para
><ulink url ="https://en.wikipedia.org/wiki/Ctags"
>CTags</ulink
> gera um arquivo de índice (ou tag) de objetos de idioma encontrado nos arquivos de origem que permite que esses itens sejam localizados rápida e facilmente usando esse plugin do &kate;. </para>
<para
>Uma tag significa um objeto de idioma para o qual uma entrada de índice está disponível (ou, alternativamente, a entrada de índice criada para esse objeto).</para>

<para
>A geração de tags é suportada para estas <ulink url="http://ctags.sourceforge.net/languages.html"
>Linguagens de programação</ulink
>. </para>
</sect2>

<sect2 id="ctags-config">
<title
>Configuração</title>

<para
>O plugin CTags usa dois arquivos de banco de dados diferentes para o índice.</para>

<para
>Na página de configurações do CTags na configuração do &kate;, você pode adicionar ou remover diretórios contendo o código-fonte e regenerar os CTags comuns do banco de dados.</para>

<sect3 id="ctags-config-common">
<title
>Index comum</title>

<screenshot id="screenshot-ctags-global-settings">
<screeninfo
>Configurações do CTags</screeninfo>
<mediaobject>
<imageobject
><imagedata fileref="ctags-global-setting.png" format="PNG"/></imageobject>
<caption
>Configuração do banco de dados do CTags</caption>
</mediaobject>
</screenshot>

<para
>Na parte inferior da página de configurações, você pode adaptar os <guilabel
>Comandos do CTags</guilabel
>. </para>

<para
>Para mais informações sobre todas as opções disponíveis, leia o manual do CTags. Esta página de manual está disponível no &khelpcenter; e você também pode inserir a &URL; <emphasis
>man:/ctags</emphasis
> diretamente no &konqueror; </para>

<para
>Clicar em <guibutton
>Atualizar</guibutton
> iniciará a indexação. Quando a indexação terminar, a caixa de diálogo será fechada.</para>
</sect3>

<sect3 id="ctags-config-session">
<title
>Índice da sessão</title>

<para
>Para configurar o índice da sessão, abra a visualização do <guilabel
>CTags</guilabel
>.</para>

<variablelist>
<varlistentry>
<term
><menuchoice>
<guimenu
>Alvo do index</guimenu>
</menuchoice
></term>
<listitem>
<para
>Nesta aba você pode adicionar ou remover diretórios que contêm o código-fonte gerar novamente, de forma manual, o banco de dados do CTags específico da sessão.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><menuchoice>
<guimenu
>Banco de dados</guimenu>
</menuchoice
></term>
<listitem>
<screenshot id="screenshot-ctags-session-settings">
<screeninfo
>Configurações do banco de dados</screeninfo>
<mediaobject>
<imageobject
><imagedata fileref="ctags-session-setting.png" format="PNG"/></imageobject>
<caption
>Configuração da sessão do banco de dados do CTags</caption>
</mediaobject>
</screenshot>
<para
>Seleciona outro arquivo do banco de dados do CTags, configura os comandos do CTags ou reverte para os comandos padrão.</para>
</listitem>
</varlistentry>

</variablelist>

</sect3>

</sect2>

<sect2 id="ctags-using">
<title
>Usando o plugin do CTags</title>

<para
>Você coloca o cursor do mouse sobre o objeto de linguagem de programação de seu interesse, como uma função, símbolo &etc; , em seguida, selecione uma das ações do <guimenu
>CTags</guimenu
> para pular para a linha e o arquivo em que o objeto é definido ou declarado.</para>
<para
>Por padrão, as ações no menu <guimenu
>CTags</guimenu
> não possuem atalhos atribuídos. Use o <ulink url="help:/fundamentals/shortcuts.html"
>Editor de atalhos de teclado</ulink
> para configurar seus próprios atalhos.</para>

<para
>Como alternativa, use o campo de pesquisa na guia <guilabel
> Pesquisa</guilabel
> doCTags.</para>
<para
>A inserção de caracteres no campo de pesquisa iniciará a pesquisa e exibiránomes correspondentes de objetos da linguagem, como funções, classes, símbolos &etc;junto com o tipo e o nome do arquivo.</para>
<para
>Selecione um item na lista para saltar para a linha correspondente no arquivo fonte.</para>
<!--FIXME why Tag Type here but Name Kind in Project plugin, is there really any difference?-->

<!--FIXME completion as in Project plugin? -->

</sect2>

<sect2 id="ctags-menu">
<title
>Estrutura do menu</title>

<variablelist>

<varlistentry id="ctags-jumpback">
<term
><menuchoice
><guimenu
>CTags</guimenu
> <guisubmenu
>pula um passo atrás</guisubmenu
> </menuchoice
></term>
<listitem>
<para
>Navegue para trás no histórico até a última tag visitada.</para>
</listitem>
</varlistentry>

<varlistentry id="ctags-lookup">
<term
><menuchoice
><guimenu
>CTags</guimenu
> <guisubmenu
>Pesquisa Texto Atual</guisubmenu
> </menuchoice
></term>
<listitem>
<para
>Abre a guia <guilabel
>Pesquisa</guilabel
> na aba de visualização do CTags e mostra todos os objetos da linguagem que correspondem à seleção de texto atual na lista.</para>
</listitem>
</varlistentry>

<varlistentry id="ctags-gotodeclaration">
<term
><menuchoice
><guimenu
>CTags</guimenu
> <guisubmenu
>Ir para declaração</guisubmenu
> </menuchoice
></term>
<listitem>
<para
>Se o cursor estiver em um objeto, isso abrirá o documento contendo a declaração correspondente, se necessário, ative sua visualização e coloque o cursor no início da declaração.</para>
</listitem>
</varlistentry>

<varlistentry id="ctags-gotodefinition">
<term
><menuchoice
><guimenu
>CTags</guimenu
> <guisubmenu
>Ir para definição</guisubmenu
> </menuchoice
></term>
<listitem>
<para
>Se o cursor estiver em um objeto, isso abrirá o documento contendo a declaração correspondente, se necessário, ative sua visualização e coloque o cursor no início da declaração.</para>
</listitem>
</varlistentry>

</variablelist>

<!--context menu with Lookup Current Text, Goto Declaration, Goto Definition -->

</sect2>

</sect1>
<!--https://frinring.wordpress.com/2017/11/07/ktexteditorpreviewplugin-0-2-1-last-stand-alone/-->
<!-- https://frinring.wordpress.com/2017/08/21/look-what-you-have-donewwdo/-->
<sect1 id="kate-application-plugin-preview">
<title
>Plugin de prévia de documentos</title>

<sect2 id="preview-introduction">
<title
>Introdução</title>
<para
>O plugin permite uma prévia em tempo real do documento de texto atualmente editado e no formato final na barra lateral. Então, ao editar por &eg; um texto em &Markdown; ou uma imagem &SVG;, o resultado é visível instantaneamente ao lado do texto de origem. </para>

<para
>Para a exibição, o plugin usa o plugin do &kparts;, atualmente selecionado como o preferido para o tipo &MIME; do documento. Se lá não existir um plugin do &kparts; para esse tipo, nenhuma visualização é possível. </para>

<para
>Para alterar o plugin preferido, abra o menu <guilabel
>Associações de arquivos</guilabel
> nas &systemsettings; e edite a <guilabel
>Ordem de preferência</guilabel
> dos serviços na aba <guilabel
>Incorporação</guilabel
>. </para>

<table>
<title
>Alguns plugins do &kparts; estão disponíveis</title>
<tgroup cols="2">
<tbody>
<row>
<entry
>Tipo &MIME;</entry
><entry
>Plugin do &kparts;</entry>
</row>
<row>
<entry
>Texto &Markdown;</entry
><entry
>KMarkdownWebViewPart ou OkularPart</entry>
</row>
<row>
<entry
>Imagem &SVG;</entry
><entry
>SVGPart</entry>
</row>
<row>
<entry
>Arquivos de interface do &Qt;</entry
><entry
>KUIViewerPart</entry>
</row>
<row>
<entry
>Arquivos de grafos &DOT;</entry
><entry
>KGraphviewerPart</entry>
</row>
</tbody>
</tgroup>
</table>
</sect2>

<sect2 id="preview-menu">
<title
>Estrutura do menu</title>
<variablelist>

<varlistentry id="view-toolviews-show-preview">
<term
><menuchoice
><guimenu
>Exibir</guimenu
> <guisubmenu
>Áreas de ferramentas</guisubmenu
> <guimenuitem
>Exibir prévia</guimenuitem
> </menuchoice
></term>
<listitem>
<para
>Alterne a exibição da visualização prévia de documentos do &kate; em uma barra lateral.</para>
</listitem>
</varlistentry>
</variablelist>
</sect2>

<sect2 id="preview-interface">
<title
>Interface</title>
<para
>Os botões na parte superior da janela de visualização prévia fornecem estas ações: </para>
<itemizedlist>
<listitem>
<para
>Bloqueie a visualização em um determinado documento. A seleção desta opção garante que, se mudar o foco para a visualização de outro documento na mesma janela do &kate;, a visualização não seguirá para esse documento, mas continue visualizando esse documento.</para>
</listitem>
<listitem>
<para
>Ativar ou desativar atualizações da visualização do conteúdo atual do documento.</para>
</listitem>
<listitem>
<para
>Atualizar manualmente a visualização do conteúdo do documento atual</para>
</listitem>
<listitem>
<para
>Um menu suspenso com ações do plugin do &kparts;</para>
</listitem>
</itemizedlist>
</sect2>

</sect1>

<sect1 id="kate-application-plugin-documentswitcher">

<title
>Plugin seletor de documentos</title>

<sect2 id="documentswitcher-menu">
<title
>Estrutura do menu</title>

<variablelist>

<varlistentry id="view-documentswitcher">
<term
><menuchoice
><shortcut
> <keycombo action="simul"
>&Ctrl;&Tab;</keycombo
> </shortcut
> <guimenu
>Visualizar</guimenu
> <guisubmenu
>Última visualização usada</guisubmenu
> </menuchoice
></term>
<term
><menuchoice
><shortcut
> <keycombo action="simul"
>&Ctrl;&Shift;&Tab;</keycombo
> </shortcut
> <guimenu
>Visualização</guimenu
> <guisubmenu
>Última visualização usada (Reverso)</guisubmenu
> </menuchoice
></term>
<listitem>

<para
><action
>Abre</action
> uma lista com os últimos documentos visualizados:</para>

<screenshot id="screenshot-documentswitcher">
<screeninfo
>Últimos documentos visualizados</screeninfo>
<mediaobject>
<imageobject
><imagedata fileref="documentswitcher.png" format="PNG"/></imageobject>
</mediaobject>
</screenshot>

<para
>Mantenha a tecla &Ctrl; pressionada e use a tecla &Tab; para avançar a lista. Além disso, pressione a tecla &Shift; para inverter a direção. </para>

<para
>Mantenha o atalho <keycombo action="simul"
>&Ctrl;&Tab;</keycombo
> pressionado e pode usar as teclas &Up;, &Down;, <keycap
>Home</keycap
> ou <keycap
>End</keycap
> para navegar na lista. Pressionar teclas consecutivamente e percorrerá todos os itens. Alternando entre os documentos da lista. Se você soltar as teclas, a tela escolhida será exibida. </para>
</listitem>
</varlistentry>

</variablelist>

</sect2>

</sect1>


<sect1 id="kate-application-plugin-fsbrowser">

<title
>Navegador do sistema de arquivos</title>

<para
>O navegador do sistema de arquivos é um visualizador de pastas, permitindo abrir arquivos de uma pasta exibida no quadro atual.</para>

<sect2 id="fsbrowser-menu">
<title
>Estrutura do menu</title>
<variablelist>

<varlistentry id="view-toolviews-show-filebrowser">
<term
><menuchoice
><guimenu
>Exibir</guimenu
><guisubmenu
>Áreas de Ferramentas</guisubmenu
><guimenuitem
>Mostrar o Navegador no sistema de arquivos</guimenuitem
> </menuchoice
></term>
<listitem>
<para
>Liga e desliga o navegador do sistema de arquivos do &kate;.</para>
</listitem>
</varlistentry>

</variablelist>
</sect2>

<sect2 id="fsbrowser-interface">
<title
>Interface</title>

<para
>De cima para baixo, o navegador do sistema de arquivos consiste nos seguintes elementos:</para>

<variablelist>
<varlistentry>
<term
>Uma barra de ferramentas</term>
<listitem>
<para
>Contém os botões de navegação padrão da ferramenta:</para>
<variablelist>
<varlistentry>
<term
><guiicon
><inlinemediaobject
><imageobject
><imagedata fileref="go-previous-22.png" format="PNG"/></imageobject
></inlinemediaobject
> Voltar</guiicon
></term>
<listitem
><para
>Faz com que a visão de pastas, com o comando <command
>cd</command
>, vá para a pasta exibida anteriormente no histórico. Este botão ficará desligado, se não existir o item anterior.</para
></listitem>
</varlistentry>
<varlistentry>
<term
><guiicon
><inlinemediaobject
><imageobject
><imagedata fileref="go-next-22.png" format="PNG"/></imageobject
></inlinemediaobject
> Avançar</guiicon
></term>
<listitem
><para
>Faz com que a visão de pastas, com o <command
>cd</command
>, mostre o próxima pasta do histórico. O botão é desabilitado, caso não exista a próxima pasta.</para
></listitem>
</varlistentry>
<!--varlistentry>
<term
><guibutton
>Parent Folder</guibutton
></term>
<listitem
><para
>This will cause the folder view to <command
>cd</command
> to the immediate parent of the currently displayed
folder if possible.</para
></listitem>
</varlistentry-->
<varlistentry>
<term
><guiicon
><inlinemediaobject
><imageobject
><imagedata fileref="bookmarks-22.png" format="PNG"/></imageobject
></inlinemediaobject
> Favoritos</guiicon
></term>
<listitem
><para
>Abre um submenu para editar ou adicionar favoritos e para adicionar uma nova pasta de favoritos.</para
></listitem>
</varlistentry>
<varlistentry>
<term
><guiicon
><inlinemediaobject
><imageobject
><imagedata fileref="system-switch-user-22.png" format="PNG"/></imageobject
></inlinemediaobject
> Pasta de documento atual</guiicon
></term>
<listitem
><para
>Este botão fará com que a visão de pastas, com o comando <command
>cd </command
>, vá para a pasta do documento atualmente ativo, se possível. Este botão é desabilitado se o documento ativo é um arquivo novo ou ainda não salvo, ou se a pasta no qual ele reside não pode ser definida.</para
></listitem>
</varlistentry>
<varlistentry>
<term
><guiicon
><inlinemediaobject
><imageobject
><imagedata fileref="games-config-options-22.png" format="PNG"/></imageobject
></inlinemediaobject
> Opções</guiicon
></term>
<listitem>
<variablelist>
<varlistentry>
<term
><guimenuitem
>Visão abreviada</guimenuitem
></term>
<listitem
><para
>Mostra apenas os nomes dos arquivos.</para
></listitem>
</varlistentry>
<varlistentry>
<term
><guimenuitem
>Visão detalhada</guimenuitem
></term>
<listitem
><para
>Mostra o <guilabel
>Nome</guilabel
>, <guilabel
>Data</guilabel
>, <guilabel
>Tamanho</guilabel
> e <guilabel
>Tipo</guilabel
> dos arquivos.</para
></listitem>
</varlistentry>
<varlistentry>
<term
><guimenuitem
>Visão em árvore</guimenuitem
></term>
<listitem
><para
>Como a visão abreviada, mas as pastas podem ser expandidas para ver seu conteúdo.</para
></listitem>
</varlistentry>
<varlistentry>
<term
><guimenuitem
>Visão em árvore detalhada</guimenuitem
></term>
<listitem
><para
>Isto também permite que as pastas sejam expandidas, mas exibe as colunas adicionais disponíveis na visão detalhada.</para
></listitem>
</varlistentry>
<varlistentry>
<term
><guimenuitem
>Mostrar arquivos ocultos</guimenuitem
></term>
<listitem
><para
>Mostra os arquivos normalmente ocultos pelo seu &OS;.</para
></listitem>
</varlistentry>
<varlistentry>
<term
><guimenuitem
>Sincronizar automaticamente com o documento atual</guimenuitem
></term>
<listitem
><para
>Quando esta opções estiver ativa, o navegador do sistema de arquivos fará um <command
>cd</command
> automaticamente para a pasta do documento atualmente aberto na área de edição toda vez que ele mudar.</para
></listitem>
</varlistentry>
</variablelist>
</listitem>
</varlistentry>
</variablelist>
</listitem>
</varlistentry>

<varlistentry>
<term
>Um entrada de localização</term>
<listitem>
<para
>Isto exibe uma navegação no estilo 'trilha de pão' para a pasta atualmente aberta, como no &dolphin;. Você pode clicar em qualquer pasta para navegar nela, ou clicar em uma das setas à esquerda de uma pasta para selecionar qualquer pasta a partir dela. Você pode também selecionar a partir de sua lista de locais clicando no ícone mais à esquerda na navegação em 'trilha de pão', que exibe um ícone que representa seu Local atual.</para>

<para
>Você pode também clicar na trilha de pão para mudar para uma caixa de texto de onde pode digitar a localização de uma pasta para navegar. O campo da &URL; mantém uma lista dos campos introduzidos anteriormente. Para escolher um, utilize o botão da seta à direita do campo.</para>
<tip
><para
>O campo da &URL; tem o completamento automático das pastas. O método de completamento pode ser definido usando o menu do &RMB; do campo.</para
></tip>
</listitem>
</varlistentry>

<varlistentry>
<term
>Uma visão de pastas</term>
<listitem
><para
>Esta é uma janela de pastas padrão do &kde;.</para
></listitem>
</varlistentry>

<varlistentry>
<term
>Uma entrada de filtro</term>
<listitem>
<para
>A entrada de Filtro permite a você digitar um filtro para arquivos exibidos na visão de pastas. O filtro está usando padrões, que devem estar separados por espaço em branco. Exemplo: <userinput
>*.cpp *.h *.moc</userinput
></para>
<para
>Para exibir todos os arquivos, digite um único asterisco - <userinput
>*</userinput
>.</para>
<para
>O campo do filtro salva os últimos 10 filtros inseridos entre sessões. Para usar um, clique no botão de setas à direita do campo e selecione o filtro desejado. Você poderá desativar o filtro se clicar no botão <guibutton
>Limpar o texto</guibutton
> à esquerda do botão de autocompletamento.</para>
</listitem>
</varlistentry>

</variablelist>
</sect2>


<sect2 id="fsbrowser-config">
<title
>Configuração</title>

<para
>Este plugin pode ser configurado na página do <guilabel
>Navegador do sistema de arquivos</guilabel
> da <link linkend="configuring-kate-configdialog"
>configuração do &kate;</link
>.</para>

<variablelist>
<varlistentry>
<term
><guilabel
>Barra de ferramentas</guilabel
></term>
<listitem
><para
>Configure os botões no navegador do sistema de arquivos, movendo os que deseja ativar para a lista de <guilabel
>Ações selecionadas</guilabel
> e ordenando-os com as setas ao lado da lista.</para>
 </listitem>
</varlistentry>

</variablelist>
</sect2>
</sect1>

<sect1 id="kate-application-plugin-documents">
<title
>A lista de documentos</title>
<!-- https://kate-editor.org/2010/09/12/kate-tree-view-plugin-update/-->
<sect2 id="documents-intro">
<title
>Introdução</title>

<para
><indexterm
><primary
>Lista de documentos</primary
></indexterm
> A lista de documentos exibe todos os documentos atualmente abertos no &kate;. Os arquivos modificados terão um pequeno ícone <guiicon
>disquete</guiicon
> à esquerda para indicar esse estado.</para>

<para
>Na parte superior da lista de documentos existe uma barra de ferramentas com os seguintes botões:</para>

<simplelist>
<member
><guiicon
><inlinemediaobject
><imageobject
><imagedata fileref="document-new-22.png" format="PNG"/></imageobject
></inlinemediaobject
></guiicon
> Criar novo documento</member>
<member
><guiicon
><inlinemediaobject
><imageobject
><imagedata fileref="document-open-22.png" format="PNG"/></imageobject
></inlinemediaobject
></guiicon
> Abre um documento existente</member>
<member
><guiicon
><inlinemediaobject
><imageobject
><imagedata fileref="go-up-22.png" format="PNG"/></imageobject
></inlinemediaobject
></guiicon
> Documento anterior</member>
<member
><guiicon
><inlinemediaobject
><imageobject
><imagedata fileref="go-down-22.png" format="PNG"/></imageobject
></inlinemediaobject
></guiicon
> Próximo documento</member>
<member
><guiicon
><inlinemediaobject
><imageobject
><imagedata fileref="document-save-22.png" format="PNG"/></imageobject
></inlinemediaobject
></guiicon
> Salva o documento atual</member>
<member
><guiicon
><inlinemediaobject
><imageobject
><imagedata fileref="document-save-as-22.png" format="PNG"/></imageobject
></inlinemediaobject
></guiicon
> Salva o documento atual com outro nome</member>
</simplelist>

<para
>Por padrão, a lista de documentos é exibida no <guimenuitem
>Modo árvore</guimenuitem
>, que exibe a estrutura de pastas em torno de todos osdocumentos abertos. Também está disponível <guimenuitem
>Modo lista</guimenuitem
>, que mostra em uma lista simples todos os documentos abertos. Você pode alternar os modos clicando com o botão direito do mouse na lista e selecionar no menu <guisubmenu
>Modo de exibição</guisubmenu
>.</para>

<para
>Se dois ou mais arquivos com o mesmo nome (localizados em pastas diferentes) são abertos no <guimenuitem
>Modo lista</guimenuitem
>, o nome do segundo aparecerá com o número <quote
>(2)</quote
>. A dica de ferramenta para o arquivo será exibir seu nome completo, incluindo o caminho, permitindo que você escolha uma.</para
> <para
>Para exibir um documento no quadro atualmente ativo, clique no nome do documento na lista.</para>

<para
>O menu de contexto possui algumas ações comuns do menu <guimenu
>Arquivo</guimenu
>.</para>

<para
>Além disso, existem ações do gerenciador de arquivos para renomear ou excluir o arquivo.Com <guimenuitem
>Copiar localização</guimenuitem
>, você pode copiar o caminho completo do documento para a área de transferência.</para>

<para
>Você pode classificar a lista de algumas maneiras diferentes clicando com o botão direito do mouse na lista eselecionando no menu <guisubmenu
> Classificar por</guisubmenu
>. As opções são: <variablelist>

<varlistentry>
<term
><guimenuitem
>Nome do documento</guimenuitem
></term>
<listitem
><para
>Lista os documentos em ordem alfabética por nome.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><guimenuitem
>Caminho do documento</guimenuitem
></term>
<listitem
><para
>Lista os documentos em ordem alfabética por seus caminhos.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><guimenuitem
>Ordem de abertura</guimenuitem
></term>
<listitem
><para
>Lista os documentos no ordem de abertura</para
></listitem>
</varlistentry>

</variablelist>

</para>

<para
>A lista de documentos, por padrão, visualiza seu histórico sombreando asentradas para os documentos mais recentes com uma cor de fundo. Se odocumento foi editado, uma cor extra é misturada. O documento mais recentetem a cor mais forte, para que você possa encontrar facilmente os documentos em que estátrabalhando. Esse recurso pode ser desativado na configuração <link linkend="config-dialog-documents"
>Documentos</link
> configuração da caixa de diálogo.</para>
<para
>A localização padrão da lista de documentos no &kate; está àesquerda da área de edição.</para>

</sect2>

<sect2 id="documents-menus">
<title
>Estrutura do menu</title>

<variablelist>

<varlistentry id="view-document-previous">
<term
><menuchoice
><shortcut
> <keycombo action="simul"
>&Alt;&Up;</keycombo
> </shortcut
> <guimenu
>Exibir</guimenu
> <guimenuitem
>Documento anterior</guimenuitem
> </menuchoice
></term>
<listitem>
<para
>Abre o arquivo da lista de documentos exibido acima do aberto atualmente aberto.</para>
</listitem>
</varlistentry>

<varlistentry id="view-document-next">
<term
><menuchoice
><shortcut
> <keycombo action="simul"
>&Alt;&Down;</keycombo
> </shortcut
> <guimenu
>Exibir</guimenu
> <guimenuitem
>Próximo documento</guimenuitem
> </menuchoice
></term>
<listitem>
<para
>Abre o arquivo da lista de documentos exibido abaixo do aberto atualmente aberto.</para>
</listitem>
</varlistentry>

<varlistentry id="view-active">
<term
><menuchoice
><guimenu
>Exibir</guimenu
> <guimenuitem
>Mostrar ativo</guimenuitem
> </menuchoice
></term>
<listitem>
<para
>Exibe o documento atualmente aberto na lista de documentos.</para>
</listitem>
</varlistentry>

</variablelist>

</sect2>

<sect2 id="config-dialog-documents">
<title
>Configuração</title>

<variablelist>
<varlistentry>
<term
><guilabel
>Sombreamento de fundo</guilabel
></term>
<listitem
><para
>Essa sessão permite habilitar ou desabilitar o sombreamento de fundo da sua atividade recente, e escolher quais cores utilizar caso habilitado.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><guilabel
>Organizar por</guilabel
></term>
<listitem
><para
>Define como você quer organizar a lista de documentos. Isso também pode ser definido pelo menu &RMB;  na lista de documentos.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><guilabel
>Modo de visualização</guilabel
></term>
<listitem
><para
>Isso fornece duas opções que afetam a exibição da ferramenta visão do documento.A opção <guilabel
> Visão em árvore</guilabel
> irá mostrar os documentosem uma árvore abaixo das pastas em que estão, enquanto a <guilabel
> Visualização de lista</guilabel
> exibirá uma lista simples de documentos. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><guilabel
>Mostrar caminho completo</guilabel
></term>
<listitem
><para
>Quando a visualização em árvore e esta opção estão ativadas, as entradas de pasta exibidas na visualização da ferramenta de documentos mostrarão o caminho completo do sistema de arquivos para a pasta, além do nome da pasta. Isso não tem efeito na visualização em lista.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><guilabel
>Mostrar barra de ferramentas</guilabel
></term>
<listitem
><para
>Quando a visualização em árvore e esta opção estão ativadas, uma barra de ferramentas com ações como <guibutton
>Salvar</guibutton
> é exibida acima da lista de documentos. Desmarque esta opção se a barra de ferramentas deve ser ocultada.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><guilabel
>Mostrar botão de fechar</guilabel
></term>
<listitem
><para
>Quando esta opção estiver ativada, o &kate; exibirá um botão de fechar para documentos abertos ao passar o cursor sobre eles.</para
></listitem>
</varlistentry>

</variablelist>

</sect2>

</sect1>

<sect1 id="kate-application-plugin-gdb">
<!--https://kate-editor.org/2011/06/23/kate-plugin-updates-part-2/-->
<sect1info>
<authorgroup>
<author
><firstname
>Martin</firstname
> <surname
>Gergov</surname
></author>
<author
>&TC.Hollingsworth; &TC.Hollingsworth.mail;</author>
</authorgroup>
</sect1info>
<title
>Plugin do &gdb;</title>

<sect2 id="gdb-intro">
<title
>Introdução</title>

<para
>O plugin &gdb; do &kate; fornece uma interface simples para qualquer depurador que suporte o <ulink url="https://microsoft.github.io/debug-adapter-protocol/"
>Protocolo de Adaptador de Depurador</ulink
>. Em particular, isso inclui o GNU Project Debugger, também conhecido como GDB, conforme <ulink url="https://sourceware.org/gdb/current/onlinedocs/gdb.html/Debugger-Adapter-Protocol.html"
>descrito aqui</ulink
>. </para>

<important>
<para
>Recomenda-se alguma experiência anterior com o &gdb;. Para mais informações sobre a utilização do &gdb;, visite o <ulink url="https://www.gnu.org/software/gdb/"
>site do &gdb;</ulink
>.</para>
</important>

<para
>Você poderá ativar o plugin do &gdb; na <link linkend="config-dialog-plugins"
>seção plugins da configuração do &kate;</link
>.</para>

<tip>
<para
>Se você compilar com o &gcc;/<command
>g++</command
>, poderá querer usar o argumento da linha de comando <command
><parameter
>-ggdb</parameter
></command
>. </para>
</tip>

<para
>Depois de efetuar estas preparações, abra o arquivo de código no &kate;, selecione o "perfil de depuração", insira a localização do executável na aba <guilabel
>Configurações</guilabel
> da área de <guilabel
>Depuração</guilabel
> e selecione a opção do menu <menuchoice
><guimenu
>Depuração</guimenu
><guimenuitem
>Iniciar depuração</guimenuitem
></menuchoice
> para começar.</para>

<para
>O "perfil de depuração" seleciona o servidor DAP a ser usado (por exemplo, GDB) e a forma de iniciar esse servidor. Um caso típico é o servidor iniciar um processo conforme especificado acima, mas ele também pode se conectar a um processo em execução (nesse caso, um PID deverá ser especificado em vez de um executável). Também podem existir outros modos específicos para a linguagem e o servidor DAP. Veja mais adiante para obter informações adicionais sobre o contexto e a configuração. </para>

</sect2>

<sect2 id="gdb-menus">
<title
>Estrutura do menu e da barra de ferramentas</title>

<para
>Todas estas opções estão disponíveis nos menus do &kate;, estando também muitas disponíveis na barra de Depuração.</para>

<variablelist>

<varlistentry id="gdb-menus-show-debug-view">
<term
><menuchoice
><guimenu
>Exibir</guimenu
><guisubmenu
>Áreas de ferramentas</guisubmenu
> <guimenuitem
>Mostrar a área de depuração</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Mostra uma área de ferramentas que contém o resultado do &gdb;, a linha de comando usada pelo &gdb; e outras opções.</para
></listitem>
</varlistentry>

<varlistentry id="gdb-menus-show-locals-and-stack">
<term
><menuchoice
><guimenu
>Exibir</guimenu
><guisubmenu
>Áreas de ferramentas</guisubmenu
> <guimenuitem
>Mostrar locais e a pilha</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Mostra uma lista com todas as variáveis carregadas no momento, os seus valores e o backtrace do &gdb;. </para
></listitem>
</varlistentry>

<varlistentry id="gdb-menus-targets">
<term
><menuchoice
><guimenu
>Depurar</guimenu
><guisubmenu
>Alvos</guisubmenu
> </menuchoice
></term>
<listitem
><para
>Um submenu que contém uma lista de alvos (executáveis). </para
></listitem>
</varlistentry>

<varlistentry id="gdb-menus-start">
<term
><menuchoice
><guimenu
>Depurar</guimenu
><guimenuitem
>Iniciar depuração</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Inicia o &gdb; com um determinado alvo.</para
></listitem>
</varlistentry>

<varlistentry id="gdb-menus-kill">
<term
><menuchoice
><guimenu
>Depurar</guimenu
><guimenuitem
>Matar / Parar depuração</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Para o &gdb;.</para
></listitem>
</varlistentry>

<varlistentry id="gdb-menus-restart">
<term
><menuchoice
><guimenu
>Depurar</guimenu
><guimenuitem
>Reiniciar depuração</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Reinicia o &gdb;.</para
></listitem>
</varlistentry>

<varlistentry id="gdb-menus-break">
<term
><menuchoice
><guimenu
>Depurar</guimenu
><guimenuitem
>Comutar o ponto de parada</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Define um ponto de parada na posição atual do cursor. </para
></listitem>
</varlistentry>

<varlistentry id="gdb-menus-step-in">
<term
><menuchoice
><guimenu
>Depurar</guimenu
><guimenuitem
>Avançar para</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Executa a instrução atual (a chamada à função será depurada). </para
></listitem>
</varlistentry>

<varlistentry id="gdb-menus-step-over">
<term
><menuchoice
><guimenu
>Depurar</guimenu
><guimenuitem
>Avançar sobre</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Executa a instrução atual (a chamada à função não será depurada).</para
></listitem>
</varlistentry>

<varlistentry id="gdb-menus-step-out">
<term
><menuchoice
><guimenu
>Depurar</guimenu
><guimenuitem
>Sair de</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Prossegue a execução até que o programa em execução termine.</para
></listitem>
</varlistentry>

<varlistentry id="gdb-menus-move-pc">
<term
><menuchoice
><guimenu
>Depurar</guimenu
><guimenuitem
>Mover o PC</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Move o contador do programa (execução seguinte).</para
></listitem>
</varlistentry>

<varlistentry id="gdb-menus-run-to-cursor">
<term
><menuchoice
><guimenu
>Depurar</guimenu
><guimenuitem
>Executar até ao cursor</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Executa o programa até que atinja a posição atual do cursor. </para
></listitem>
</varlistentry>

<varlistentry id="gdb-menus-continue">
<term
><menuchoice
><guimenu
>Depurar</guimenu
><guimenuitem
>Continuar</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Ignora os pontos de parada e executa o programa até que termine (com sucesso ou não).</para
></listitem>
</varlistentry>

<varlistentry id="gdb-menus-print-value">
<term
><menuchoice
><guimenu
>Depurar</guimenu
><guimenuitem
>Imprimir o valor</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Imprime o valor da variável para onde aponta o cursor no momento.</para
></listitem>
</varlistentry>

<varlistentry id="gdb-menus-toolbar">
<term
><menuchoice
><guimenu
>Configurações</guimenu
><guisubmenu
>Barras de ferramentas visíveis</guisubmenu
><guimenuitem
>plugin do &gdb;</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Mostra a barra de depuração.</para
></listitem>
</varlistentry>

</variablelist>

</sect2>

<sect2 id="gdb-debug-view">
<title
>Área de Depuração</title>

<para
>A <guilabel
>Área de Depuração</guilabel
> consiste em várias páginas: </para>

<variablelist>

<varlistentry>
<term
><guilabel
>Resultado do &gdb;</guilabel
></term>
<listitem>
<para
>Contém o resultado do &gdb; e uma linha de comando também do &gdb;.</para>

<screenshot id="screenshot-gdb-output">
<screeninfo
>A Página do Resultado</screeninfo>
<mediaobject>
<imageobject
><imagedata fileref="gdb-output.png" format="PNG"/></imageobject>
<textobject
><phrase
>A página do Resultado.</phrase
></textobject>
<caption
><para
>A página do <guilabel
>Resultado</guilabel
> mostra o resultado de uma sessão de depuração.</para
></caption>
</mediaobject>
</screenshot>

</listitem>
</varlistentry>

<varlistentry>
<term
><guilabel
>Configurações</guilabel
></term>
<listitem>
<variablelist>

<varlistentry>
<term
><guilabel
>Executável</guilabel
></term>
<listitem
><para
>Localização do alvo (executável) para depuração.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><guilabel
>Pasta de trabalho</guilabel
></term>
<listitem
><para
>A pasta de trabalho conferida ao alvo. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><guilabel
>Argumentos</guilabel
></term>
<listitem
><para
>Os argumentos passados ao programa.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><guilabel
>Manter o foco</guilabel
></term>
<listitem
><para
>Mantém a linha de comando do &gdb; em primeiro plano.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><guilabel
>Direcionar a E/S</guilabel
></term>
<listitem
><para
>Abre uma nova página de <guilabel
>E/S</guilabel
> na <guilabel
>Janela de Depuração</guilabel
>, onde poderá ver os resultados e inserir dados no programa em execução.</para
></listitem>
</varlistentry>

</variablelist>

<screenshot id="screenshot-gdb-settings">
<screeninfo
>O diálogo de configurações</screeninfo>
<mediaobject>
<imageobject
><imagedata fileref="gdb-settings.png" format="PNG"/></imageobject>
<textobject
><phrase
>O diálogo de configurações</phrase
></textobject>
<caption
><para
>A janela de <guilabel
>Configurações</guilabel
> mostra as definições de uma sessão de depuração.</para
></caption>
</mediaobject>
</screenshot>

</listitem>
</varlistentry>

<varlistentry>
<term
><guilabel
>E/S</guilabel
></term>
<listitem>
<para
>Contém uma área que mostra os resultados do programa em execução e uma linha de comando onde pode inserir dados para ele.</para>

<screenshot id="screenshot-gdb-io">
<screeninfo
>A Página de E/S</screeninfo>
<mediaobject>
<imageobject
><imagedata fileref="gdb-io.png" format="PNG"/></imageobject>
<textobject
><phrase
>A página de E/S.</phrase
></textobject>
<caption
><para
>A página do <guilabel
>E/S</guilabel
> mostra o resultado de um programa de testes simples.</para
></caption>
</mediaobject>
</screenshot>

</listitem>
</varlistentry>

</variablelist>

</sect2>

<sect2 id="gdb-other">
<title
>Pilha de chamadas e variáveis locais</title>

<para
>A área da <guilabel
>Pilha de chamadas</guilabel
> contém uma lista dos registros de chamadas que são devolvidos pelo &gdb;.</para>

<screenshot id="screenshot-gdb-call-stack">
<screeninfo
>A Área de Registros de Chamadas do &gdb;</screeninfo>
<mediaobject>
<imageobject
><imagedata fileref="gdb-call-stack.png" format="PNG"/></imageobject>
<textobject
><phrase
>A área de ferramentas para o registro de chamadas.</phrase
></textobject>
<caption
><para
>A área da <guilabel
>Pilha de chamadas</guilabel
> do plugin do &gdb;. </para
></caption>
</mediaobject>
</screenshot>

<para
>A área de <guilabel
>Locais</guilabel
> contém uma lista com todas as variáveis do programa carregadas no momento, bem como os seus valores correspondentes.</para>

<screenshot id="screenshot-gdb-locals">
<screeninfo
>A Área de Variáveis Locais do &gdb;</screeninfo>
<mediaobject>
<imageobject
><imagedata fileref="gdb-locals.png" format="PNG"/></imageobject>
<textobject
><phrase
>A área de ferramentas de Variáveis Locais.</phrase
></textobject>
<caption
><para
>A área de <guilabel
>Variáveis locais</guilabel
> do plugin do &gdb;. </para
></caption>
</mediaobject>
</screenshot>

</sect2>

<sect2 id="gdb-ack">
<title
>Agradecimentos e reconhecimento</title>

<para
>Agradecimentos especiais ao participante Martin Gergov do Google Code-In 2011 pela escrita de grande parte desta seção.</para>

</sect2>

<sect2 id="gdb-configuration">
<title
>Configuração</title>

<para
>A página de configuração do plugin define os "perfis de depuração" que podem ser selecionados. A configuração padrão (JSON) é exibida lá e pode ser "sobreposta" por uma configuração semelhante fornecida pelo usuário. Um exemplo de trecho é o seguinte: </para>

<screen
>{
    "dap": {
        "debugpy": {
            "url": "https://github.com/microsoft/debugpy",
            "run": {
                "command": ["python", "-m", "debugpy", "--listen", "${#run.port}", "--wait-for-client"],
                "port": 0,
                "supportsSourceRequest": false
            },
            "configurations": {
                "launch": {
                    "commandArgs": ["${file}", "${args|list}"],
                    "request": {
                        "command": "attach",
                        "stopOnEntry": true,
                        "redirectOutput": true
                    }
                },
                "attach": {
                    "commandArgs": ["--pid", "${pid}"],
                    "request": {
                        "command": "attach",
                        "stopOnEntry": true,
                        "redirectOutput": true
                    }
                },
        },
        "gdb": {
            "url": "gdb",
            "run": {
                "command": [
                    "gdb",
                    "-i",
                    "dap"
                ],
                "redirectStderr": true,
                "redirectStdout": true,
                "supportsSourceRequest": true
            },
            "configurations": {
                "launch (debug)": {
                    "request": {
                        "command": "launch",
                        "mode": "debug",
                        "program": "${file}",
                        "args": "${args|list}",
                        "cwd": "${workdir}"
                    }
                }
            }
        }
    }
}
</screen>

<para
>Cada uma das entradas em <literal
>configurations</literal
> é combinada com os dados de <literal
>run</literal
> e forma um "perfil". Isso especifica o servidor DAP a ser iniciado, juntamente com seus argumentos, sendo estes específicos para o perfil (<literal
>commandArgs</literal
>). As outras partes especificam a solicitação do protocolo DAP (<literal
>launch</literal
> ou <literal
>attach</literal
>), juntamente com extensões específicas do DAP. </para>

<para
>É claro que o servidor especificado deve estar instalado (e normalmente também estar no <literal
>PATH</literal
> para execução adequada). </para>

<para
>Várias etapas de sobreposição/fusão são aplicadas; a configuração do usuário (carregada de um arquivo) sobrepõe a configuração padrão (interna), e a entrada "dap" na configuração do projeto <literal
>.kateproject</literal
>, por sua vez, sobrepõe as demais. </para>


<sect3 id="gdb-exec">
<title
>Configuração do ambiente de execução</title>

<para
>Mais informações e detalhes podem ser encontrados na seção <link linkend="lspclient-exec"
>Ambiente de execução do cliente LSP</link
> abaixo. Mas basta dizer aqui que pode ser necessário executar o processo depurado (e o servidor DAP) em um "ambiente especial", seja definido por variáveis ​​de ambiente ou por algum contêiner (que forneça as dependências e circunstâncias necessárias para a execução adequada). </para>

<para
>Semelhante ao exemplo na seção referenciada, a seguinte configuração pode ser fornecida em um <literal
>.kateproject</literal
>. </para>

<screen
>{
    // isto pode também ser uma array de objetos
    "exec": {
        "hostname": "foobar"
        // o comando pode também ser uma array de string
        "prefix": "podman exec -i foobarcontainer",
        "mapRemoteRoot": true,
        "pathMappings": [
            // ambas as formas a seguir são possíveis
            // uma alternativa mais automágica também existe, veja a seção de referência
            [ "/dir/on/host", "/mounted/in/container" ]
            { "localRoot": "/local/dir", "remoteRoot": "/remote/dir" }
        ]
    },
    "dap": {
        "debugpy": {
            "run": {
                // nesta seção, aplica a todas as configurações
                // isto irá corresponder/juntar com o objeto acima
                "exec": { "hostname": "foobar" },
                // se o servidor está conectado,
                // opcionalmente especificar explicitamente a porta (que é adequada parapublicação/encaminhamento)
                "port": 5678,
                // o servidor pode então também ter que aceitar mais do que o localhost
                "host": "0.0.0.0"
            }
        }
    }
}
</screen>

<para
>A seção referenciada deve ser consultada para obter detalhes, mas, em essência, o <literal
>prefixo</literal
> será adicionado antes da linha de comando do servidor DAP especificada em outro local. O efeito é que o servidor é executado dentro do contêiner especificado e, por sua vez, também o processo iniciado. O <literal
>pathMapping</literal
> organiza a transformação de caminhos de arquivo entre a visualização do editor e a visualização do servidor DAP (contêiner), por exemplo, ao lidar com a definição de pontos de interrupção ou o tratamento de rastreamentos de pilha relatados. Observe que esse mapeamento é opcional e pode ou não ser útil. Ao lidar com código C/C++ compilado no "host", as informações do símbolo fazem referência a arquivos de origem no host que não existem no outro ambiente. No entanto, em outras circunstâncias de script (por exemplo, Python), os arquivos de tempo de execução reais são referenciados (no outro ambiente). </para>

<para
>É evidente que o seguinte deve ser levado em consideração. </para>

<itemizedlist>
<listitem>
<para
>O servidor DAP deve estar presente no ambiente/container, que deve ser configurado para suportar a operação adequada do depurador (portanto, se necessário, com privilégios e capacidades). </para>
</listitem>
<listitem>
<para
>A comunicação entre o editor e o DAP deve ser possível. No caso de um contêiner, este último deve usar a rede do host ou fornecer uma porta mapeada/publicada adequada, juntamente com o trecho de configuração correspondente, como no exemplo acima (já que uma porta selecionada automaticamente, no caso da porta 0, não funcionaria). </para>
</listitem>
<listitem>
<para
>Um executável/PID específico deve estar na perspectiva de "contêiner", assim como quaisquer argumentos (executável depurado). </para>
</listitem>
</itemizedlist>

<para
>Além disso, como no caso do LSP, algumas variáveis ​​de ambiente são definidas; <literal
>KATE_EXEC_PLUGIN</literal
> é definida como <literal
>dap</literal
>, <literal
>KATE_EXEC_SERVER</literal
> é definida como o tipo de depurador/linguagem (por exemplo, <literal
>python</literal
>) e <literal
>KATE_EXEC_PROFILE</literal
> é definida como a entrada de configuração (por exemplo, <literal
>launch</literal
>). </para>

</sect3>

</sect2>

</sect1>

<sect1 id="kate-application-plugin-projects">
<!--https://kate-editor.org/2012/11/02/using-the-projects-plugin-in-kate -->

<title
>Plugin de projeto</title>

<sect2 id="project-intro">
<title
>Introdução</title>

<para
>A ideia básica do plugin de projeto é ter uma lista estruturada de arquivos pertencentes ao projeto com as seguintes propriedades:</para>

<orderedlist>
<listitem
><para
>Fornecer uma visualização estruturada dos arquivos</para
></listitem>
<listitem
><para
>Tornar fácil e rápido abrir e mudar projetos</para
></listitem>
<listitem
><para
>Suporte a busca e substituição para um projeto</para
></listitem>
<listitem
><para
>Oferecer um autocompletar simples</para
></listitem>
<listitem
><para
>Tornar simples de abrir rapidamente arquivos em um projeto</para
></listitem>
<listitem
><para
>Suporte para compilar o projeto</para
></listitem>
</orderedlist>
</sect2>

<sect2 id="project-view">
<title
>Visualização estruturada dos arquivos</title>

<para
>Após o plugin de projeto ser carregado na página de configuração do &kate;, abra um arquivo em um projeto e uma barra lateral aparecerá listando todos os projetos, bem como os arquivos do projeto, da seguinte forma:</para>

<screenshot id="screenshot-project-view">
<screeninfo
>Visualização do projeto</screeninfo>
<mediaobject>
<imageobject
><imagedata fileref="project-view.png" format="PNG"/></imageobject>
</mediaobject>
</screenshot>

<para
>Como você pode ver, o projeto atualmente ativo é <quote
>Kate</quote
>, e seu conteúdo está listado na visualização em árvore. Clicar nos arquivos na visualização em árvore abre o arquivo no editor. Além disso, um menu de contexto é fornecido com o qual você pode abrir arquivos com outros aplicativos, como um arquivo <filename class="extension"
>.ui</filename
> com o Qt Designer.</para>
<para
>Você pode filtrar os itens digitando parte do nome que deseja buscar na barra de busca localizada a baixo da lista.</para>
</sect2>

<sect2 id="project-switch">
<title
>Alternando entre projetos</title>

<para
>A ideia é que você nunca precise abrir um projeto manualmente, isso nem sequer é suportado. Portanto, o que acontece quando você abre um arquivo é que o plugin de projeto verifica rapidamente a pasta e suas subpastas em busca de um arquivo <filename
>.kateproject</filename
>. Se encontrado, o projeto é carregado automaticamente.</para>

<para
>Além disso, se você abrir outro documento no &kate;, que pertence a outro projeto, o plugin de projeto alterna automaticamente para o projeto atual. Assim, intuitivamente, o projeto correto está sempre ativo. Claro, você também pode alternar o projeto ativo usando a caixa de combinação.</para>

</sect2>

<sect2 id="project-search-replace">
<title
>Pesquisar e substituir nos projetos</title>

<para
>O &kate; possui um plugin de busca e substituição que aparece na barra lateral inferior. Se um projeto estiver carregado, abra a barra lateral de busca e substituição e mude para o modo para buscar e substituir no projeto atual:</para>

<screenshot id="screenshot-projects-search">
<screeninfo
>Pesquisar nos projetos</screeninfo>
<mediaobject>
<imageobject
><imagedata fileref="project-search.png" format="PNG"/></imageobject>
</mediaobject>
</screenshot>

</sect2>

<sect2 id="project-autocompletition">
<title
>Simples autocompletar</title>

<para
>Com o conhecimento de todos os arquivos pertencentes a um projeto, o plugin de projeto fornece recursos simples de autocompletar baseados em CTags. Se um projeto for aberto inicialmente, o CTags analisa todos os arquivos do projeto em uma thread em segundo plano e salva as informações do CTags em <filename class="directory"
>/tmp</filename
>. Este arquivo é então usado para preencher o popup de autocompletar no &kate;.</para>

<para
>Em contraste, sem esse recurso de autocompletar, o &kate; só consegue exibir itens de autocompletar com base nas palavras do arquivo atual. Portanto, o recurso de autocompletar fornecido pelo plugin de projeto é muito mais poderoso.</para>

<screenshot id="screenshot-completion-search">
<screeninfo
>Completamento em projetos</screeninfo>
<mediaobject>
<imageobject
><imagedata fileref="project-completition.png" format="PNG"/></imageobject>
</mediaobject>
</screenshot>

<para
>Se o CTags estiver faltando, um pop-up discreto avisará sobre esse problema. Também é importante notar que o arquivo CTags em <filename class="directory"
>/tmp</filename
> é limpo quando o &kate; é encerrado, portanto, o plugin não polui nenhuma pasta com arquivos indesejados.</para>

</sect2>

<sect2 id="project-build">
<title
>Suporte para compilar um projeto</title>

<para
>Outra funcionalidade é o suporte ao <link linkend="projects-build-support"
>Plugin de compilar</link
>, para que ele seja configurado automaticamente corretamente.</para>

</sect2>

<sect2 id="project-create">
<title
>Criando projetos</title>

<sect3 id="project-autoload">
<!--https://kate-editor.org/2014/10/12/autoloading-projects-plugin-kate-5/-->
<title
>Carregando projetos automaticamente</title>

<para
>O plugin de projeto possui um recurso de carregamento automático. Você pode ler a lista de arquivos do sistema de controle de versão. Para isso, o carregamento automático para o respectivo sistema de controle de versão precisa ser ativado nas configurações (ativado por padrão): </para>

<screenshot id="screenshot-project-configure">
<screeninfo
>Configuração do plugin de projeto</screeninfo>
<mediaobject>
<imageobject
><imagedata fileref="project-configure.png" format="PNG"/></imageobject>
</mediaobject>
</screenshot>

</sect3>

<sect3 id="project-manual">
<title
>Criando projetos manualmente</title>
<para
>Basta criar um arquivo <filename
>.kateproject</filename
> na pasta raiz do projeto. Por exemplo, o arquivo <quote
>Kate</quote
><filename
>.kateproject</filename
> teria a seguinte aparência: </para>

<screen
>{
  "name": "Kate",
  "files": [
    {
      "git": 1
    }
  ]
}
</screen>

<para
>O conteúdo do arquivo está escrito em sintaxe &JSON;. O nome do projeto é <quote
>Kate</quote
>, e os arquivos contidos nele devem ser lidos do &git;. </para>

<para
>Além do <literal
>git</literal
>, também são suportados o Subversion através do <literal
>svn</literal
> e o Mercurial através do <literal
>hg</literal
>. Se você não quiser ler arquivos de um sistema de controle de versão, você pode simplesmente invocar o Kate a partir da linha de comando como: <screen>
kate /caminho/para/pasta
</screen
> ou você pode instruí-lo a carregar arquivos recursivamente de diretórios da seguinte forma: </para>

<screen
>{
  "name": "Kate",
  "files": [
    {
      "directory": "kate",
      "filters": [
        "*.cpp",
        "*.h",
        "*.ui",
        "CMakeLists.txt",
        "Find*.cmake"
      ],
      "recursive": 1,
      "hidden": 1
    }
  ],
  "exclude_patterns" : [
    "^build/.*"
  ]
}
</screen>

<para
>Aqui, subpastas e filtros definem o que faz parte do projeto. Você também pode misturar controle de versão e arquivos com base em filtros. Arquivos ocultos não serão recuperados se a opção <code
>"hidden"</code
> for 0. <code
>"exclude_patterns"</code
> é uma lista de padrões regex que podem ser usados ​​para excluir pastas e arquivos da árvore do projeto. Neste exemplo, todos os arquivos e pastas em um diretório <filename
>build</filename
> a partir da raiz serão excluídos. </para>

<para id="projects-build-support"
>Se você quiser adicionar suporte para compilação, pode escrever um <filename
>.kateproject</filename
> assim:</para>

<screen
>{
  "name": "Kate",
  "files": [
    {
      "git": 1
    }
  ],
  "build": {
    "directory": "build",
    "build": "make all",
    "clean": "make clean",
    "install": "make install",
    "targets": [
      {
        "name": "all",
        "build_cmd": "ninja"
        "run_cmd": "./bin/kate"
      },
      {
        "name": "kate",
        "build_cmd": "ninja kate-bin"
      }
    ]
  }
}
</screen>

<para
>Os alvos especificados acima aparecerão então no <link linkend="kate-application-plugin-build"
>Plugin Compilar</link
> em <emphasis role="bold"
> "Alvos do plugin de projeto"</emphasis
>. Se o array <code
>"targets"</code
> for especificado, então <code
>"build"</code
>, <code
>"clean"</code
> e <code
>"install"</code
> serão ignorados. Cada elemento no array especifica um alvo. <code
>"name"</code
> é o nome do alvo, <code
>"build_cmd"</code
> será usado para compilar o alvo, <code
>"run_cmd"</code
> será usado para executar o alvo. O mais importante de tudo é <code
>"directory"</code
>, onde os comandos serão executados. </para>

<para
>Caso você tenha um arquivo <filename
>.kateproject</filename
> rastreado por um sistema de controle de versão, mas precise ajustar a configuração para um espaço de trabalho específico, você pode salvar essas alterações em um arquivo separado chamado <filename
>.kateproject.local</filename
>. O conteúdo deste arquivo terá precedência sobre <filename
>.kateproject</filename
>. </para>

</sect3>

</sect2>

<sect2 id="project-current">
<title
>Projeto atual</title>

<para
>Usando <menuchoice
><shortcut
><keycombo action="simul"
>&Alt;<keycap
>1</keycap
></keycombo
></shortcut
> <guimenu
>Projetos</guimenu
><guimenuitem
>Ir para</guimenuitem
></menuchoice
> você pode abrir a visualização <guilabel
>Projeto atual</guilabel
> na parte inferior da janela do editor com quatro abas:</para>

<screenshot id="screenshot-project-current">
<screeninfo
>Projeto atual</screeninfo>
<mediaobject>
<imageobject
><imagedata fileref="project-current-analysis.png" format="PNG"/></imageobject>
</mediaobject>
</screenshot>

<variablelist>

<varlistentry>
<term>
<guimenu
>Painel do terminal</guimenu>
</term>
<listitem>
<para
>Um <link linkend="kate-application-plugin-konsole"
>Emulador de terminal</link
> iniciando na pasta raiz do projeto.</para>
</listitem>
</varlistentry>

<varlistentry>
<term>
<guimenu
>Índice de código</guimenu>
</term>
<listitem>
<para
>Ao inserir caracteres na barra de pesquisa, a busca será iniciada e serão exibidos os nomes correspondentes de funções, classes, símbolos &etc; juntamente com o tipo, nome do arquivo e número da linha.</para>
<para
>Selecione um item na lista para saltar para a linha correspondente no arquivo fonte.</para>
</listitem>
</varlistentry>

<varlistentry>
<term>
<guimenu
>Análise de código</guimenu>
</term>
<listitem>
<para
>Clique em <guilabel
>Iniciar análise</guilabel
> para executar uma análise estática de código para os arquivos C e C++ usando <command
>cppcheck</command
> e gerar um relatório mostrando o nome do arquivo, o número da linha, a gravidade (estilo, aviso etc.) e o problema encontrado.</para>
<para
>Selecione um item na lista para saltar para a linha correspondente no arquivo fonte.</para>
</listitem>
</varlistentry>
<!--FIXME options for cppcheck? configurable?-->
<varlistentry>
<term>
<guimenu
>Notas</guimenu>
</term>
<listitem>
<para
>O texto inserido nesta aba será salvo no arquivo <filename
>.kateproject.notes</filename
>.</para>
</listitem>
</varlistentry>

</variablelist>

</sect2>

<sect2 id="projects-menu">
<title
>O menu de projetos</title>

<para
>O menu <guimenu
>Projetos</guimenu
> permite alternar entre os projetos atualmente abertos. Ele é exibido pelo plugin de projeto.</para>

<variablelist>

<varlistentry id="projects-back">
<term
><menuchoice
><shortcut
> <keycombo action="simul"
>&Ctrl;&Alt;&Left;</keycombo
> </shortcut
> <guimenu
>Projetos</guimenu
> <guimenuitem
>Voltar</guimenuitem
> </menuchoice
></term>
<listitem>
<para
>Alterna para o projeto anterior.</para>
</listitem>
</varlistentry>

<varlistentry id="projects-forward">
<term
><menuchoice
><shortcut
> <keycombo action="simul"
>&Ctrl;&Alt;&Right;</keycombo
> </shortcut
> <guimenu
>Projetos</guimenu
> <guimenuitem
>Próximo</guimenuitem
> </menuchoice
></term>
<listitem>
<para
>Alterna para o projeto seguinte.</para>
</listitem>
</varlistentry>

<varlistentry id="projects-goto">
<term
><menuchoice
><shortcut
> <keycombo action="simul"
>&Alt;<keycap
>1</keycap
></keycombo
> </shortcut
> <guimenu
>Projetos</guimenu
><guimenuitem
>Ir para</guimenuitem
> </menuchoice
></term>
<listitem>
<para
>Abra a visualização <guilabel
>Projeto atual</guilabel
> na parte inferior da janela do editor.</para>
</listitem>
</varlistentry>

</variablelist>

</sect2>
<!--
context menu Project->Lookup:xxx
-->

</sect1>

<!--FIXME Replicode
Projects Replicode run / stop-->

<sect1 id="kate-application-plugin-lspclient">
<title
>Plugin do cliente LSP</title>

<para
>O plugin do cliente LSP fornece muitos funcionalidades de linguagem, como preenchimento automático de código, navegação de código ou localização de referências com base no <ulink url="https://microsoft.github.io/language-server-protocol/"
>Protocolo do Servidor de Linguagem</ulink
>.</para>

<para
>Depois de ativar o cliente LSP na página do plugin, uma nova página chamada Cliente LSP aparecerá na sua janela de configuração do &kate;. </para>

<sect2 id="lspclient-menu">
<title
>Estrutura do menu</title>

<para
>Se apropriado, um comando LSP correspondente também é mencionado na explicação abaixo, cuja documentação pode então fornecer informações adicionais e interpretação, embora possa variar dependendo da linguagem específica. A expressão 'símbolo atual' refere-se ao símbolo correspondente à posição atual do cursor, conforme determinado pela linguagem e pela implementação do servidor. </para>

<variablelist>

<varlistentry id="lspclient-definition">
<term
><menuchoice
><guimenu
>Cliente LSP</guimenu
> <guisubmenu
>Ir para definição</guisubmenu
> </menuchoice
></term>
<listitem>
<para
>[textDocument/definition] Vai para a definição do símbolo atual.</para>
</listitem>
</varlistentry>

<varlistentry id="lspclient-declaration">
<term
><menuchoice
><guimenu
>Cliente LSP</guimenu
> <guisubmenu
>Ir para declaração</guisubmenu
> </menuchoice
></term>
<listitem>
<para
>[textDocument/declaration] Vai para a declaração do símbolo atual.</para>
</listitem>
</varlistentry>

<varlistentry id="lspclient-typedefinition">
<term
><menuchoice
><guimenu
>Cliente LSP</guimenu
> <guisubmenu
>Ir para definição de tipo</guisubmenu
> </menuchoice
></term>
<listitem>
<para
>[textDocument/typeDefinition] Vai para a definição de tipo do símbolo atual.</para>
</listitem>
</varlistentry>

<varlistentry id="lspclient-references">
<term
><menuchoice
><guimenu
>Cliente LSP</guimenu
> <guisubmenu
>Encontrar referências</guisubmenu
> </menuchoice
></term>
<listitem>
<para
>[textDocument/references] Encontra referências para o símbolo atual.</para>
</listitem>
</varlistentry>

<varlistentry id="lspclient-implementation">
<term
><menuchoice
><guimenu
>Cliente LSP</guimenu
> <guisubmenu
>Encontrar implementações</guisubmenu
> </menuchoice
></term>
<listitem>
<para
>[textDocument/implementation] Encontra implementações do símbolo atual.</para>
</listitem>
</varlistentry>

<varlistentry id="lspclient-highlight">
<term
><menuchoice
><guimenu
>Cliente LSP</guimenu
> <guisubmenu
>Realce</guisubmenu
> </menuchoice
></term>
<listitem>
<para
>[textDocument/documentHighlight] Realça as referências de símbolos atuais no documento atual.</para>
</listitem>
</varlistentry>

<varlistentry id="lspclient-hover">
<term
><menuchoice
><guimenu
>Cliente LSP Client</guimenu
> <guisubmenu
>Sobre</guisubmenu
> </menuchoice
></term>
<listitem>
<para
>[textDocument/hover] Ativa a exibição de informações ao passar o cursor sobre o símbolo atual.</para>
</listitem>
</varlistentry>

<varlistentry id="lspclient-format">
<term
><menuchoice
><guimenu
>Cliente LSP</guimenu
> <guisubmenu
>Formato</guisubmenu
> </menuchoice
></term>
<listitem>
<para
>[textDocument/formatting] [textDocument/rangeFormatting] Formata o documento atual ou a seleção atual.</para>
</listitem>
</varlistentry>

<varlistentry id="lspclient-rename">
<term
><menuchoice
><guimenu
>Cliente LSP</guimenu
> <guisubmenu
>Renomear</guisubmenu
> </menuchoice
></term>
<listitem>
<para
>[textDocument/rename] Renomeia o símbolo atual.</para>
</listitem>
</varlistentry>

<varlistentry id="lspclient-quick-fix">
<term
><menuchoice
><guimenu
>Cliente LSP</guimenu
> <guisubmenu
>Correção rápida</guisubmenu
> </menuchoice
></term>
<listitem>
<para
>[textDocument/codeAction, workspace/executeCommand] Calcula e aplica uma correção rápida para um diagnóstico na posição (ou linha) atual.</para>
</listitem>
</varlistentry>

<varlistentry id="lspclient-completion-documentation">
<term
><menuchoice
><guimenu
>Cliente LSP</guimenu
> <guisubmenu
>Mostrar documentação de complementação da seleção</guisubmenu
> </menuchoice
></term>
<listitem>
<para
>Mostra a documentação para o item selecionado na lista de completamento.</para>
</listitem>
</varlistentry>

<varlistentry id="lspclient-signature-help">
<term
><menuchoice
><guimenu
>Cliente LSP</guimenu
> <guisubmenu
>Ativar ajuda de assinatura com completamento automático</guisubmenu
> </menuchoice
></term>
<listitem>
<para
>Mostra também a ajuda para assinatura na lista de completamento.</para>
</listitem>
</varlistentry>

<varlistentry id="lspclient-declaration-references">
<term
><menuchoice
><guimenu
>Cliente LSP</guimenu
> <guisubmenu
>Incluir declaração nas referências</guisubmenu
> </menuchoice
></term>
<listitem>
<para
>Solicita a inclusão da declaração de um símbolo ao solicitar referências.</para>
</listitem>
</varlistentry>

<varlistentry id="lspclient-completion-parens">
<term
><menuchoice
><guimenu
>Cliente LSP</guimenu
> <guisubmenu
>Adiciona parênteses com a função de completamento</guisubmenu
> </menuchoice
></term>
<listitem>
<para
>Adiciona automaticamente um par de parênteses após o completamento de uma função.</para>
</listitem>
</varlistentry>

<varlistentry id="lspclient-show-hover">
<term
><menuchoice
><guimenu
>Cliente LSP</guimenu
> <guisubmenu
>Mostrar informações sobre</guisubmenu
> </menuchoice
></term>
<listitem>
<para
>Mostra informações ao passar o cursor do mouse sobre o elemento. Independentemente dessa configuração, a solicitação sempre poderá ser iniciada manualmente. </para>
</listitem>
</varlistentry>

<varlistentry id="lspclient-format-typing">
<term
><menuchoice
><guimenu
>Cliente LSP</guimenu
> <guisubmenu
>Formatar ao digitar</guisubmenu
> </menuchoice
></term>
<listitem>
<para
>[document/onTypeFormatting] Formata partes do documento ao digitar determinados caracteres de gatilho. Por exemplo, isso pode aplicar recuo em novas linhas, ou conforme determinado pelo Servidor LSP. Observe que os scripts de recuo do editor podem tentar fazer o mesmo (dependendo do modo) e, portanto, pode não ser recomendável ter ambos ativados ao mesmo tempo. </para>
</listitem>
</varlistentry>

<varlistentry id="lspclient-incremental-sync">
<term
><menuchoice
><guimenu
>Cliente LSP</guimenu
> <guisubmenu
>Sincronização de documento incremental</guisubmenu
> </menuchoice
></term>
<listitem>
<para
>Envia edições parciais do documento para atualizar o servidor em vez do documento de texto inteiro (se suportado).</para>
</listitem>
</varlistentry>

<varlistentry id="lspclient-highlight-goto">
<term
><menuchoice
><guimenu
>Cliente LSP</guimenu
> <guisubmenu
>Destacar localização ir para</guisubmenu
> </menuchoice
></term>
<listitem>
<para
>Fornece uma indicação visual temporária após executar um comando "goto" para um local (de definição, declaração, etc.).</para>
</listitem>
</varlistentry>

<varlistentry id="lspclient-diagnostics">
<term
><menuchoice
><guimenu
>Cliente LSP</guimenu
> <guisubmenu
>Mostrar notificações de diagnósticos</guisubmenu
> </menuchoice
></term>
<listitem>
<para
>[textDocument/publishDiagnostics] Processa e exibe notificações de diagnóstico enviadas pelo servidor.</para>
</listitem>
</varlistentry>

<varlistentry id="lspclient-diagnostics-highlight">
<term
><menuchoice
><guimenu
>Cliente LSP</guimenu
> <guisubmenu
>Mostrar destaques de diagnósticos</guisubmenu
> </menuchoice
></term>
<listitem>
<para
>Adiciona destaques de texto para os intervalos indicados nos diagnósticos.</para>
</listitem>
</varlistentry>

<varlistentry id="lspclient-diagnostics-marks">
<term
><menuchoice
><guimenu
>Cliente LSP</guimenu
> <guisubmenu
>Mostrar marcas de diagnóstico</guisubmenu
> </menuchoice
></term>
<listitem>
<para
>Adiciona marcas de documento para as linhas indicadas no diagnóstico.</para>
</listitem>
</varlistentry>

<varlistentry id="lspclient-diagnostics-tab">
<term
><menuchoice
><guimenu
>Cliente LSP</guimenu
> <guisubmenu
>Alternar para aba de diagnóstico</guisubmenu
> </menuchoice
></term>
<listitem>
<para
>Acessa a aba de diagnóstico na visualização de ferramentas do plugin.</para>
</listitem>
</varlistentry>

<varlistentry id="lspclient-close-non-diagnostics">
<term
><menuchoice
><guimenu
>Cliente LSP</guimenu
> <guisubmenu
>Fechar todas as abas que não sejam de diagnóstico</guisubmenu
> </menuchoice
></term>
<listitem>
<para
>Fecha todas as abas que não sejam de diagnóstico (&eg; referências) na visualização da ferramentas do plugin.</para>
</listitem>
</varlistentry>

<varlistentry id="lspclient-restart">
<term
><menuchoice
><guimenu
>Cliente LSP</guimenu
> <guisubmenu
>Reiniciar o servidor LSP</guisubmenu
> </menuchoice
></term>
<listitem>
<para
>Reinicia o servidor LSP do documento atual.</para>
</listitem>
</varlistentry>

<varlistentry id="lspclient-restart-all">
<term
><menuchoice
><guimenu
>Cliente LSP</guimenu
> <guisubmenu
>Reiniciar todos os servidores LSP</guisubmenu
> </menuchoice
></term>
<listitem>
<para
>Para todos os servidores LSP, que serão então (re)iniciados conforme necessário.</para>
</listitem>
</varlistentry>

</variablelist>

</sect2>

<sect2 id="lspclient-go-to-symbol">
<title
>Suporte ao símbolo de "goto"</title>
<para
>O cliente LSP pode ajudá-lo a navegar até qualquer símbolo em seu projeto ou arquivo atual. Para navegar até qualquer símbolo no arquivo, use a ferramenta "Contorno de símbolo do cliente LSP" na borda direita do Kate. Esta ferramenta lista todos os símbolos encontrados pelo servidor no documento atual. </para>

<sect3 id="lspclient-symbol-outline-config">
<title
>Configurando o contorno de símbolo do cliente LSP</title>

<para
>Por padrão, os símbolos são classificados de acordo com sua ocorrência no documento, mas você pode alterar a classificação para ordem alfabética. Para isso, clique com o botão direito do mouse na janela de ferramentas e marque "Classificar alfabeticamente". </para>

<para
>A visualização de ferramentas mostra os símbolos no modo de árvore por padrão, porém você pode alterá-la para uma lista usando o menu de contexto. </para>
</sect3>

<sect3 id="lspclient-global-go-to-symbol">
<title
>Suporte ao símbolo "goto" global</title>
<para
>Para ir para qualquer símbolo em seu projeto, você pode abrir a caixa de diálogo do símbolo "Ir para" usando <keycombo action="simul"
>&Ctrl;&Alt;<keycap
>p</keycap
></keycombo
>. A caixa de diálogo está vazia quando é aberta, mas assim que você digita algo, ela começará a mostrar os símbolos correspondentes. A qualidade das correspondências, bem como os recursos de filtragem, dependem do servidor que você usa. Por exemplo, o clangd oferece suporte à filtragem aproximada, mas alguns outros servidores podem não oferecer. </para>
</sect3>

</sect2>

<sect2 id="lspclient-extra">
<title
>Outras funcionalidades</title>

<para
>O comando de troca de cabeçalho de origem do Clangd é suportado. Para trocar o cabeçalho de origem em um projeto C ou C++, use a opção "Trocar cabeçalho de origem" no menu de contexto ou o atalho <keycombo action="simul"
><keycap
>F12</keycap
></keycombo
>. </para>

<para
>Você pode ir rapidamente para um símbolo colocando o mouse sobre ele e pressionando <keycombo action="simul"
>&Ctrl;</keycombo
> + botão esquerdo do mouse. </para>

</sect2>

<sect2 id="lspclient-configuration">
<title
>Configuração</title>

<para
>A página de configuração do plugin permite, em sua maioria, a configuração persistente de alguns dos itens de menu acima. No entanto, há uma entrada adicional para especificar o arquivo de configuração do servidor. Este é um arquivo JSON que pode ser usado para especificar o servidor LSP a ser iniciado (e, em seguida, para se comunicar com ele via stdin/stdout). Para maior conveniência, algumas configurações padrão estão incluídas, as quais podem ser inspecionadas na página de configuração do plugin. Para auxiliar na explicação abaixo, um trecho dessa configuração é fornecido aqui: </para>

<screen
>{
    "servers": {
        "bibtex": {
            "use": "latex",
            "highlightingModeRegex": "^BibTeX$"
        },
        "c": {
            "command": ["clangd", "-log=error", "--background-index"],
            "commandDebug": ["clangd", "-log=verbose", "--background-index"],
            "url": "https://clang.llvm.org/extra/clangd/",
            "highlightingModeRegex": "^(C|ANSI C89|Objective-C)$"
        },
        "cpp": {
            "use": "c",
            "highlightingModeRegex": "^(C\\+\\+|ISO C\\+\\+|Objective-C\\+\\+)$"
        },
        "d": {
            "command": ["dls", "--stdio"],
            "url": "https://github.com/d-language-server/dls",
            "highlightingModeRegex": "^D$"
        },
        "fortran": {
            "command": ["fortls"],
            "rootIndicationFileNames": [".fortls"],
            "url": "https://github.com/hansec/fortran-language-server",
            "highlightingModeRegex": "^Fortran.*$"
        },
        "javascript": {
            "command": ["typescript-language-server", "--stdio"],
            "rootIndicationFileNames": ["package.json", "package-lock.json"],
            "url": "https://github.com/theia-ide/typescript-language-server",
            "highlightingModeRegex": "^JavaScript.*$",
            "documentLanguageId": false
        },
        "latex": {
            "command": ["texlab"],
            "url": "https://texlab.netlify.com/",
            "highlightingModeRegex": "^LaTeX$"
        },
        "go": {
            "command": ["go-langserver"],
            "commandDebug": ["go-langserver", "-trace"],
            "url": "https://github.com/sourcegraph/go-langserver",
            "highlightingModeRegex": "^Go$"
        },
        "python": {
            "command": ["python3", "-m", "pyls", "--check-parent-process"],
            "url": "https://github.com/palantir/python-language-server",
            "highlightingModeRegex": "^Python$"
        },
        "rust": {
            "command": ["rls"],
            "path": ["%{ENV:HOME}/.cargo/bin", "%{ENV:USERPROFILE}/.cargo/bin"],
            "rootIndicationFileNames": ["Cargo.lock", "Cargo.toml"],
            "url": "https://github.com/rust-lang/rls",
            "highlightingModeRegex": "^Rust$"
        },
        "ocaml": {
            "command": ["ocamlmerlin-lsp"],
            "url": "https://github.com/ocaml/merlin",
            "highlightingModeRegex": "^Objective Caml.*$"
        }
    }
}
</screen>

<para
>Observe que cada "command" pode ser uma matriz ou uma string (nesse caso, ele é dividido em uma matriz). Além disso, uma entrada "global" de nível superior (ao lado de "server") também é considerada (veja mais abaixo). O binário especificado é procurado da maneira usual, por exemplo, usando <literal
>PATH</literal
>. Se ele estiver instalado em um local personalizado, este último pode precisar ser estendido. Ou, alternativamente, um link simbólico ou um script wrapper pode ser usado em um local que esteja dentro do <literal
>PATH</literal
> usual. Como ilustrado acima, também é possível especificar um "caminho" que será procurado após os locais padrão. </para>

<para
>Todas as entradas em "command", "root" e "path" estão sujeitas à expansão de variáveis. </para>

<para
>A expressão regular "highlightingModeRegex" é usada para mapear o modo de realce usado pelo &kate; ao ID da linguagem do servidor. Se nenhuma expressão regular for fornecida, o próprio ID da linguagem será usado. Se uma entrada "documentLanguageId" for definida como falsa, nenhum ID de linguagem será fornecido ao servidor ao abrir o documento. Isso pode apresentar melhores resultados para alguns servidores que são mais precisos na determinação do tipo de documento do que fazê-lo com base em um modo do Kate. </para>

<para
>A partir do exemplo acima, a ideia principal provavelmente está clara. Além disso, cada objeto de entrada do servidor também pode ter uma entrada "initializationOptions", que é passada para o servidor como parte do método 'initialize'. Se presente, uma entrada "settings" é passada para o servidor por meio da notificação 'workspace/didChangeConfiguration'. "completionTriggerCharacters" ou "signatureTriggerCharacters" podem ser especificados como um objeto JSON com os membros de string "exclude" e/ou "include". Estes serão usados ​​para excluir ou adicionar caracteres ao conjunto de gatilhos correspondente, conforme fornecido pelo servidor. </para>

<para
>São aplicadas várias etapas de sobreposição/fusão; <itemizedlist>
<listitem>
<para
>configuração do usuário (carregada de um arquivo) substitui a configuração padrão (interna)</para>
</listitem>
<listitem>
<para
>entrada "lspclient" na configuração do projeto <filename
>.kateproject</filename
> substitui a acima</para>
</listitem>
<listitem>
<para
>a entrada "global" resultante é usada para complementar (não substituir) qualquer entrada do servidor</para>
</listitem>
</itemizedlist>
</para>

<para
>Uma instância de servidor é usada para cada combinação (raiz, tipo de servidor). Se "root" for especificado como um caminho absoluto, ele será usado como está; caso contrário, será relativo ao <quote
>projectBase</quote
> (conforme determinado pelo <link linkend="kate-application-plugin-projects"
>plugin de projeto</link
>), se aplicável, ou, caso contrário, relativo ao diretório do documento. Se não for especificado e "rootIndicationFileNames" for uma matriz de nomes de arquivos, um diretório pai do documento atual que contenha tal arquivo será selecionado. Alternativamente, se "root" não for especificado e "rootIndicationFilePatterns" for uma matriz de padrões de arquivo, um diretório pai do documento atual que corresponda ao padrão de arquivo será selecionado. Como último recurso, o diretório inicial é selecionado como "root". Para qualquer documento, o "root" resultante determina se uma instância separada é necessária ou não. Nesse caso, o "root" é passado como rootUri/rootPath. </para>

<para
>Em geral, recomenda-se deixar o diretório raiz sem especificação, pois não é tão importante para um servidor (embora isso possa variar). Menos instâncias de servidor são obviamente mais eficientes e também têm uma visão mais ampla do que a visão de muitas instâncias separadas. </para>

<para
>Como mencionado acima, várias entradas estão sujeitas à expansão de variáveis. Uma aplicação adequada disso, combinada com abordagens de "script wrapper", permite a personalização para uma grande variedade de circunstâncias. Por exemplo, considere um cenário de desenvolvimento em Python que consiste em múltiplos projetos (por exemplo, repositórios Git), cada um com sua própria configuração de ambiente virtual. Usando a configuração padrão, o servidor de linguagem Python não reconhecerá o ambiente virtual. No entanto, isso pode ser corrigido com a seguinte abordagem. Primeiro, o seguinte fragmento pode ser inserido nas "Configurações do servidor do usuário" do plugin LSPClient: </para>
<screen
>{
        "servers":
        {
                "python":
                {
                        "command": ["pylsp_in_env", "%{Project:NativePath}"],
                        "root": "."
                }
        }
}
</screen>
<para
>A entrada raiz acima é relativa ao diretório do projeto e garante que um servidor de linguagem separado seja iniciado para cada projeto, o que é necessário neste caso, pois cada um tem um ambiente virtual distinto. </para>
<para
><filename
>pylsp_in_env</filename
> é um pequeno "script auxiliar" que deve ser colocado em <literal
>PATH</literal
> com o seguinte conteúdo (a ser ajustado): </para>
<screen
>#!/bin/bash
cd $1
# executa o servidor (python-lsp-server) dentro de um virtualenv
# (i.e. com configuração de variáveis virtualenv)
# então ative o virtualenv
source XYZ
# disponibilidade do servidor ou os argumentos podem variar
exec meuservidor
</screen>
<para
>Este é apenas um exemplo de um padrão mais geral que pode ser tratado de forma um pouco mais confortável, conforme descrito na seção <link linkend="lspclient-exec"
>Ambiente de execução</link
> abaixo. </para>

<sect3 id="lspclient-customization">
<title
>Configurações do servidor LSP</title>

<para
>Cada servidor LSP específico possui sua própria forma de personalização e pode usar meios específicos de linguagem/ferramenta para configuração, &eg; <filename
>tox.ini</filename
> (entre outros, para Python) ou <filename
>.clang-format</filename
> para formato no estilo C++. Essa configuração também pode ser usada por outras ferramentas (não LSP), como <application
>tox</application
> ou <application
>clang-format</application
>. Além disso, alguns servidores LSP também carregam configurações de arquivos personalizados (&eg; <filename
>.ccls</filename
>). Ademais, a configuração personalizada do servidor também pode ser passada pelo LSP (protocolo), conforme mencionado nas entradas "initializationOptions" e "settings" na configuração do servidor. </para>

<para
>Como são aplicados vários níveis de sobrescrita/fusão, o exemplo a seguir de configuração de cliente especificada pelo usuário ajusta algumas configurações do servidor de linguagem Python. </para>

<screen
>{
    "servers": {
        "python": {
            "settings": {
                "pyls": {
                    "plugins": {
                        "pylint": {
                            "enable": true
                        }
                    }
                }
            }
        }
    }
}
</screen>

<para
>Infelizmente, a configuração/personalização do servidor LSP muitas vezes não é tão bem documentada, de forma que apenas a análise do código-fonte revela as abordagens de configuração e o conjunto de opções disponíveis. Em particular, o servidor do exemplo acima suporta muito mais opções em "configurações". Consulte a <ulink url="https://github.com/neoclide/coc.nvim/wiki/Language-servers"
>documentação de outro cliente LSP</ulink
> para vários outros exemplos de servidores de linguagem e configurações correspondentes, que podem ser facilmente transformadas na configuração &JSON; usada aqui e descrita acima. </para>

</sect3>

<sect3 id="lspclient-format-on-save">
<title
>Formatar o servidor LSP ao salvar</title>

<para
>Você pode ativar a opção "formatar ao salvar" nas configurações do LSP, na janela de configuração. </para>

</sect3>

<sect3 id="lspclient-diagnostics-suppression">
<title
>Supressão de diagnóstico de servidor LSP</title>

<para
>Pode acontecer de serem relatados diagnósticos que não sejam muito úteis. Isso pode ser bastante trabalhoso, especialmente se houver muitos (frequentemente do mesmo tipo). Em alguns casos, isso pode ser ajustado por meios específicos da linguagem (servidor). Por exemplo, o <ulink url="https://clangd.llvm.org/config.html"
>mecanismo de configuração do clangd</ulink
> permite o ajuste de alguns aspectos dos diagnósticos. Em geral, no entanto, pode nem sempre ser evidente como fazer isso, ou pode até não ser possível da maneira desejada devido a limitações ou bugs do servidor. </para>

<para
>Assim, o plugin suporta a supressão de diagnósticos semelhante, por exemplo, às supressões do Valgrind. A configuração mais detalhada pode ser fornecida em uma chave "suppressions" na configuração &JSON; (mesclada). </para>

<screen
>{
    "servers": {
        "c": {
            "suppressions": {
                "rulename": ["filename", "foo"],
                "clang_pointer": ["", "clang-tidy", "clear_pointer"],
            }
        }
    }
}
</screen>

<para
>Cada regra (válida) tem um nome arbitrário e é definida por uma matriz de comprimento 2 ou 3 que fornece uma expressão regular para corresponder ao nome do arquivo (completo), uma expressão regular para corresponder ao diagnóstico (texto) e uma expressão regular opcional que corresponde ao intervalo do código-fonte do texto ao qual o diagnóstico se aplica. </para>

<para
>Além da configuração detalhada acima, o menu de contexto na aba de diagnósticos também permite adicionar/remover supressões que correspondam exatamente a um diagnóstico específico (texto), seja globalmente (qualquer arquivo) ou localmente (o arquivo específico em questão). Essas supressões são armazenadas e carregadas da configuração da sessão. </para>

</sect3>

<sect3 id="lspclient-troubleshooting">
<title
>Solução de problemas com o servidor LSP</title>

<para
>Uma coisa é descrever como configurar um servidor LSP (personalizado) para qualquer linguagem específica, outra é conseguir que o servidor funcione sem problemas. Normalmente, felizmente, este último é o caso mais comum. Às vezes, porém, podem surgir problemas devido a alguma configuração incorreta "boba" ou a um problema mais fundamental com o próprio servidor. Este último pode se manifestar tipicamente como algumas tentativas de iniciar o servidor, conforme relatado na aba Saída. Esta última, no entanto, destina-se apenas a transmitir mensagens ou progresso de alto nível, e não a fornecer diagnósticos detalhados, e muito menos para o que é, na verdade, outro processo (o servidor LSP). </para>

<para
>A maneira usual de diagnosticar isso é adicionar alguma(s) flag(s) ao comando de inicialização (do servidor de linguagem) que habilite(m) o registro (adicional) em algum arquivo ou no erro padrão, caso isso não ocorra por padrão. Se o &kate; for iniciado na linha de comando, então poderemos obter mais informações sobre o que pode estar dando errado. </para>

<para
>Também pode ser informativo examinar a troca de mensagens do protocolo entre o cliente LSP do &kate; e o servidor LSP. Novamente, este último geralmente possui maneiras de rastrear isso. O cliente LSP também fornece rastreamento de depuração adicional (para stderr) quando o &kate; é invocado com a seguinte opção <literal
>LSPCLIENT_DEBUG=1</literal
> e devidamente <literal
>exportado</literal
>. </para>

</sect3>

<sect3 id="lspclient-exec">
<title
>Configuração do ambiente de execução</title>

<para
>O exemplo de virtualenv em Python acima é apenas um exemplo de um "ambiente de execução" que opera de forma distinta e separada do ambiente usual do host. Isso pode ser alcançado por meio de diferentes configurações de variáveis ​​(por exemplo, virtualenv), ou uma configuração (s)chroot (alternando para outro diretório como novo root), um contêiner (por exemplo, podman, docker) ou uma sessão ssh para outro host. Em cada caso, o "outro ambiente" é definido por um "prefixo de execução". Ou seja, algum programa pode ser invocado/executado no outro ambiente por meio de um "prefixo" (um programa e argumentos) anexado à invocação pretendida. Por exemplo, <literal
>podman exec -i nome_do_contêiner</literal
> ou <literal
>ssh usuário@host</literal
>. </para>

<para
>Em particular, como no exemplo anterior do virtualenv, pode-se optar/precisar executar um servidor LSP em um ambiente separado (por exemplo, um contêiner com todas as dependências necessárias para algum projeto). A abordagem "manual" descrita acima tem a desvantagem de substituir a linha de comando padrão do LSP, que precisa ser especificada e duplicada novamente no script wrapper. Além disso, em alguns dos outros exemplos mencionados acima, o "path namespace" do host (como visto pelo editor) pode ser diferente do do ambiente. Para lidar com essas questões de forma mais sistemática (do que uma abordagem "personalizada"), algumas configurações adicionais podem ser especificadas. </para>

<para
>Por exemplo, o seguinte pode ser especificado em uma configuração <literal
>.kateproject</literal
>. Obviamente, os comentários "falsos" não devem ser incluídos. </para>

<screen
>{
    // isto pode ser uma array de objetos
    "exec": {
        "hostname": "foobar"
        // o comando também pode ser uma array de string
        "prefix": "podman exec -i foobarcontainer",
        "mapRemoteRoot": true,
        "pathMappings": [
            // todas as formas a seguir são possíveis
            // um alternativa mais automágica existe também, veja a seguir/abaixo
            [ "/dir/on/host", "/mounted/in/container" ]
            { "localRoot": "/local/dir", "remoteRoot": "/remote/dir" }
        ]
    },
    "lspclient": {
        "servers": {
            "python": {
                // isto irá corresponder/juntar com o objeto acima
                "exec": { "hostname": "foobar" },
                // confina este servidor a sua raiz de projeto,
                // então ele não é usado para outros projetos que podem ser abertos
                // (outros servidores podem já empregar raízes específicas, mas o python generalmente não pode)
                "root": "."
            },
            "c": {
                // as above
                "exec": { "hostname": "foobar" },
                "root": "."
            }
        }
    }
}
</screen>

<para
>Então, o que acontece como resultado do exposto acima? Como mencionado, a parte <literal
>lspclient</literal
> acima é mesclada à configuração global, portanto, uma seção <literal
>exec</literal
> é encontrada (para as linguagens especificadas). Uma busca é realizada por outro objeto (que especifica <literal
>hostname</literal
> correspondente) na seção <literal
>exec</literal
> ou <literal
>lspclient</literal
>, e um objeto correspondente serve como base para uma mesclagem. Como resultado, um servidor LSP (para C e Python) terá sua linha de comando anexada ao prefixo especificado (variável substituída) e, portanto, será iniciado dentro do contêiner fornecido. Obviamente, o contêiner deve ter sido criado, estar em um estado iniciado corretamente e equipado com servidores LSP apropriados. Poderia ter havido a tentação de usar a seção <literal
>global</literal
> (dentro de <literal
>lspclient</literal
>). Isso também poderia funcionar, mas então <emphasis
>todos</emphasis
> os servidores LSP seriam iniciados com esse prefixo, incluindo aqueles para, por exemplo, Markdown, script Bash ou JSON. É mais provável que o host usual ainda forneça esses (se estiverem em uso). Portanto, como sempre, depende da sua configuração específica. </para>

<para
>No entanto, o servidor LSP agora pode observar caminhos (remotos) diferentes dos caminhos (locais) que são vistos e usados ​​pelo editor. Os <literal
>pathMappings</literal
> especificados são usados ​​para traduzir de um lado para o outro na comunicação com o servidor LSP. Isso é, obviamente, o máximo possível. Claramente, nem todos os caminhos locais têm uma representação remota, mas os ausentes também não são vistos (pelo servidor) e não representam um problema. Por outro lado, o servidor (remoto) agora pode ver e fornecer referências na "raiz remota" que não são evidentemente/facilmente representadas no sistema local. O <literal
>mapRemoteRoot</literal
> habilitado mapeia implicitamente a raiz remota para uma "URL local" <literal
>exec://foobar</literal
>, que é então tratada por um protocolo KIO simples. Este último utiliza essencialmente (por exemplo) <literal
>podman exec -i foobarcontainer cat somefile</literal
> para copiar de um arquivo remoto para um local (e outras variações semelhantes usando ferramentas do pacote <literal
>coreutils</literal
>). Basta dizer que não se destina ao uso geral e não promete qualquer desempenho, mas é suficiente para carregar um arquivo referenciado no editor de forma rápida e fácil. </para>

<para
>Agora é fácil perceber que uma versão simplificada da configuração acima (sem <literal
>hostname</literal
> ou <literal
>pathMappings</literal
>) poderia ser usada para lidar com o ambiente virtual sem precisar duplicar a linha de comando do servidor (no script wrapper). </para>

<para
>O que se segue pode não ser tão facilmente visível, por isso é mencionado aqui explicitamente. </para>
<itemizedlist>
<listitem>
<para
>Tanto o <literal
>hostname</literal
> quanto o <literal
>prefix</literal
> definem o ambiente de execução (o primeiro pelo nome, o segundo pelo conteúdo). Em uma instância de processo de editor, o mesmo <literal
>hostname</literal
> não deve ser associado a <literal
>prefix</literal
> diferentes, pois isso leva a um comportamento indefinido (sem necessidade de diagnóstico). </para>
</listitem>
<listitem>
<para
>Tanto <literal
>prefix</literal
> quanto <literal
>pathMappings</literal
> estão sujeitos à expansão de variáveis ​​(do editor) (mas leve em consideração o item anterior). </para>
</listitem>
<listitem>
<para
>Em tempo de execução, algumas variáveis ​​de ambiente também são definidas, as quais podem ser usadas para ajustar (sutilmente) o comportamento do "inicializador de prefixo" (embora, novamente, preste atenção ao primeiro item). Em particular, <literal
>KATE_EXEC_PLUGIN</literal
> é definido como <literal
>lspclient</literal
> e <literal
>KATE_EXEC_SERVER</literal
> é definido com o ID do servidor (por exemplo, <literal
>python</literal
>). </para>
</listitem>
<listitem>
<para
>Em particular, também <literal
>KATE_EXEC_INSPECT</literal
> é definido como <literal
>1</literal
>. Isso notifica o "inicializador de prefixo" de que o receptor (plugin Kate) aceita alguns dados fora de banda/protocolo. Isso permite que o inicializador use algum meio para determinar mapeamentos de caminho (por exemplo, <literal
>podman inspect</literal
>) e comunique isso em um formato adequado. Isso será então removido do fluxo que, de outra forma, está em conformidade com o protocolo LSP e usado para estender qualquer mapeamento de caminho definido. Isso pode servir como uma alternativa para especificar, por exemplo, montagens de ligação explicitamente (novamente, duplicando a definição do contêiner). Concretamente, o trecho acima poderia então ser usado em vez disso; <screen
>{
    // ...
    "exec": {
        "hostname": "foobar"
        // repetição infeliz do nome, mas o script auxiliar é simples e direto.
        "prefix": "exec_inspect.sh foobarcontainer podman exec -i foobarcontainer",
        "mapRemoteRoot": true,
        "pathMappings": []
    }
    // ...
}
</screen>
</para>
</listitem>
</itemizedlist>

<para
>Por último, mas não menos importante, e se a abordagem "KIO de fallback" não for considerada adequada? Na prática, muitas vezes é possível "montar" a raiz remota no sistema de arquivos local e, em seguida, especificar este último em um <literal
>pathMappings</literal
>. Para começar, o conhecido sistema de arquivos <literal
>sshfs</literal
> (fuse) pode montar um sistema (realmente) remoto no local. Para um contêiner (podman/docker), a maioria das configurações (de driver de sistema de arquivos) suporta o seguinte truque; <screen>
$ rootdir=/proc/`podman inspect --format '{{.State.Pid}}' containername`/root
# alguns links simbólicos podem causar problemas, veja também a alternativa abaixo
$ sudo mount --bind $rootdir /somewhere/containername
</screen
> Se isso falhar, pode-se recorrer ao <literal
>sshfs</literal
>, ou, na verdade, a um subconjunto dele para montar a raiz remota/do contêiner; <screen>
# consulte as respectivas páginas de manual; sftp-server é suficiente para o protocolo de operações de arquivo real (não criptografado)
$ socat 'exec:podman exec -i containername /usr/lib/openssh/sftp-server'
   'exec:sshfs -o transform_symlinks -o passive \:/ /somewhere/containername'
# ...
$ fusermount -u /somewhere/containername
</screen
> Observe que essa montagem da raiz remota no sistema de arquivos do host provavelmente será especificada manualmente e explicitamente em uma seção <literal
>pathMappings</literal
> (exceto em um inicializador de prefixo muito inteligente que organiza tudo isso automaticamente). </para>

</sect3>

</sect2>

<!--TODO: Supported languages, describe features and actions a bit -->

<!--<screenshot id="screenshot-rust-configuration">
<screeninfo
>Rust Configuration</screeninfo>
<mediaobject>
<imageobject
><imagedata fileref="rust-configuration.png" format="PNG"/></imageobject>
</mediaobject>
</screenshot>

<para
>Edit the command to run <ulink url="https://github.com/phildawes/racer"
>Racer</ulink
>,
an utility intended to provide Rust code completion for editors.</para>

<para
>You also need the Rust source code and have to provide the path to the source tree.
</para>

<para
>While typing code a popup list appears with items for completion:
</para>

<screenshot id="screenshot-rust-completion">
<screeninfo
>Rust Completion</screeninfo>
<mediaobject>
<imageobject
><imagedata fileref="rust-completion.png" format="PNG"/></imageobject>
</mediaobject>
</screenshot>

<para
>In addition to code completion popups, the plugin also installs
a <guimenuitem
>Go to Definition</guimenuitem
> action in the <guimenu
>Edit</guimenu
> menu and
in the context menu. You can configure a keyboard shortcut for it as well.
</para>

<para
>This action will open the document containing the definition if needed, activate
its view and place the cursor at the start of the definition.
</para
>-->

</sect1>

<sect1 id="kate-application-plugin-searchinfiles">
<sect1info>
<authorgroup
><author
>&TC.Hollingsworth; &TC.Hollingsworth.mail; </author
></authorgroup>
</sect1info>
<title
>Pesquisar e substituir</title>

<sect2 id="searchinfiles-intro">
<title
>Introdução</title>
<para
>O plugin Pesquisar e substituir do &kate; permite-lhe pesquisar por um texto ou <ulink url="help:/katepart/regular-expressions.html"
>expressões regulares</ulink
> em vários arquivos de uma só vez. Você pode pesquisar em todos os arquivos abertos, todos os arquivos de uma pasta e, opcionalmente, em suas subpastas, ou no arquivo ativo. Você pode até mesmo filtrar por nome de arquivo, para por exemplo pesquisar somente em arquivos que terminam com uma extensão de arquivo específica.</para>

</sect2>

<sect2 id="searchinfiles-ui">
<title
>Interface</title>

<sect3 id="searchinfiles-ui-query">
<title
>Parâmetros da pesquisa</title>

<para
>As opções a seguir são exibidas sempre no topo da ferramenta Pesquisar nos arquivos:</para>

<variablelist>

<varlistentry>
<term
><guiicon
><inlinemediaobject
><imageobject
><imagedata fileref="tab-new-22.png" format="PNG"/>
</imageobject
></inlinemediaobject
></guiicon
></term>
<listitem
><para
>Você pode ter tantas pesquisas quanto desejar abertas ao mesmo tempo. Basta clicar no botão Nova aba no canto superior esquerdo da ferramenta de Pesquisa e uma nova aba de resultados será aberta, permitindo que você realize outra pesquisa. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><guiicon
><inlinemediaobject
><imageobject
><imagedata fileref="games-config-options-22.png" format="PNG"/>
</imageobject
></inlinemediaobject
></guiicon
></term>
<listitem
><para
>O botão no canto superior direito da ferramenta Pesquisar nos arquivos alternará a metade inferior da ferramenta entre exibir opções adicionais para o modo Pesquisar na pasta e os resultados de sua pesquisa. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><guilabel
>Localizar</guilabel
></term>
<listitem
><para
>Aqui é onde você digita o que deseja encontrar. Você pode inserir um texto padrão ou uma expressão regular, se este recurso estiver ativo. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><guilabel
>Substituir</guilabel
> (campo de texto)</term>
<listitem
><para
>O texto de substituição que será adicionado ao(s) arquivo(s), em vez do texto no campo <guilabel
>Localizar</guilabel
>. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><guibutton
>Pesquisa</guibutton
></term>
<listitem
><para
>Quando terminar de configurar tudo, basta pressionar o botão <guibutton
>Pesquisar</guibutton
> para realizar a pesquisa; para realizar a pesquisa em uma nova aba, pressione e segure &Ctrl; antes de pressionar o botão <guibutton
>Pesquisar</guibutton
>. Você também pode pressionar &Enter; na caixa de texto <guilabel
>Localizar</guilabel
> para fazer o mesmo (da mesma forma, pressionar <keycombo action="simul"
>&Ctrl;&Enter;</keycombo
> realizará a pesquisa em uma nova aba). </para
></listitem>
</varlistentry>

<varlistentry>
<term
><guibutton
>Substituir</guibutton
></term>
<listitem
><para
>Quando você tiver terminado de configurar tudo, basta clicar no botão <guibutton
>Substituir</guibutton
> para substituir o texto introduzido no campo <guilabel
>Localizar</guilabel
> pelo conteúdo do campo <guilabel
>Substituir</guilabel
>. Você também pode pressionar &Enter; no campo <guilabel
>Substituir</guilabel
> para fazer o mesmo. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><guibutton
>Próxima</guibutton
></term>
<listitem
><para
>Vai para a próxima ocorrência da sua pesquisa, mudando de arquivo se necessário. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><guibutton
>Substituir marcados</guibutton
></term>
<listitem
><para
>Igual ao <guibutton
>Substituir</guibutton
>, mas só irá efetuar as substituições nos arquivos assinalados no painel abaixo. </para
></listitem>
</varlistentry>

</variablelist>
</sect3>

<sect3 id="searchinfiles-ui-folder">
<title
>Opções do Pesquisar na pasta</title>

<para
>Estas opções são exibidas abaixo das opções de consulta mencionadas anteriormente. Se os resultados da pesquisa estiverem sendo exibidos, pressione o botão <guiicon
><inlinemediaobject
><imageobject
> <imagedata fileref="games-config-options-22.png" format="PNG"/></imageobject
></inlinemediaobject
></guiicon
> para exibi-las.</para>

<variablelist>

<varlistentry>
<term
><guilabel
>Pesquisar em</guilabel
></term>
<listitem
><para
>Há três opções. Selecione <guilabel
>Arquivos abertos</guilabel
> para pesquisar em todos os arquivos atualmente abertos no &kate;. Selecione <guilabel
>Pasta</guilabel
> para pesquisar em uma pasta e opcionalmente em suas subpastas. Selecione <guilabel
>Arquivo atual</guilabel
> para pesquisar apenas no arquivo ativo. </para>
<para
>Se o plugin <guilabel
>Projetos</guilabel
> estiver carregado, você também poderá pesquisar no <guilabel
>Projeto atual</guilabel
> ou em <guilabel
>Todos os projetos abertos</guilabel
>. </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><guilabel
>Diferenciar maiúsculas de minúsculas</guilabel
></term>
<listitem
><para
>Restringe os resultados da pesquisa apenas aos que tiverem a combinação exata de letras maiúsculas e minúsculas do texto da sua pesquisa. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><guilabel
>Expressões regulares</guilabel
></term>
<listitem
><para
>Permite-lhe usar <ulink url="help:/katepart/regular-expressions.html"
>expressões regulares</ulink
>, em vez de texto simples, no seu texto de pesquisa. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><guilabel
>Expandir resultados</guilabel
></term>
<listitem
><para
>Mostra todos os resultados encontrados em cada arquivo, em vez de apenas uma lista dos arquivos que contêm o texto da pesquisa. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><guilabel
>Pasta</guilabel
></term>
<listitem
><para
>Você pode inserir a localização da pasta que deseja pesquisar. Por exemplo, você pode inserir <userinput
>~/development/kde/kate/</userinput
> se deseja pesquisar no código-fonte do &kate;. Esta opção só fica disponível ao usar o modo <guilabel
>na pasta</guilabel
>. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><guiicon
>Janela de abertura de arquivo</guiicon
></term>
<listitem
><para
>Clique nesse botão para localizar a pasta no navegador de pastas do seu computador. Esse botão só funciona quando estiver usando o modo <guilabel
>Pasta</guilabel
>. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><guiicon
><inlinemediaobject
><imageobject
><imagedata fileref="go-up-22.png" format="PNG"/>
</imageobject
></inlinemediaobject
></guiicon
></term>
<listitem
><para
>Clique neste botão para mudar a <guilabel
>Pasta</guilabel
> para a pasta pai da atualmente selecionada. Esse botão só funciona quando estiver usando o modo <guilabel
>Pasta</guilabel
>. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><guiicon
><inlinemediaobject
><imageobject
><imagedata fileref="view-refresh-22.png" format="PNG"/>
</imageobject
></inlinemediaobject
></guiicon
></term>
<listitem
><para
>Este botão definirá a entrada <guilabel
>Pasta</guilabel
> para a pasta na qual o documento atual está localizado. Esse botão só funciona quando estiver usando o modo <guilabel
>Pasta</guilabel
>. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><guilabel
>Filtro</guilabel
></term>
<listitem
><para
>Isto permite que você pesquise somente por nomes de arquivos que correspondam a um determinado padrão. Por exemplo, para pesquisar somente por arquivos escritos em C++, mude isto para <userinput
>*.cpp</userinput
>. Para pesquisar somente por arquivos começando com <literal
>kate</literal
>, mude isto para <userinput
>kate*</userinput
>. Você pode inserir vários filtros separados por vírgula (<userinput
>,</userinput
>). Esta opção não está disponível quando estiver usando o modo <guilabel
>Arquivos abertos</guilabel
>. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><guilabel
>Excluir</guilabel
></term>
<listitem
><para
>É o oposto do <guilabel
>Filtro</guilabel
>, impedindo que o &kate; pesquise por arquivos que correspondam aos padrões indicados. Como no <guilabel
>Filtro</guilabel
>, você poderá indicar vários padrões separados por vírgula (<userinput
>,</userinput
>). Essa opção não está disponível quando estiver usando o modo <guilabel
>Arquivos abertos</guilabel
>. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><guilabel
>Recursivo</guilabel
></term>
<listitem
><para
>Se esta opção estiver ativa, o &kate; pesquisará também em todas as subpastas da pasta selecionada. Essa opção só está disponível quando estiver usando o modo <guilabel
>Pasta</guilabel
>. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><guilabel
>Incluir ocultos</guilabel
></term>
<listitem
><para
>Se esta opção estiver ativa, o &kate; também pesquisará em arquivos ou pastas que estão normalmente ocultos pelo seu &OS;. Essa opção só está disponível quando estiver usando o modo <guilabel
>Pasta</guilabel
>. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><guilabel
>Seguir as ligações simbólicas</guilabel
></term>
<listitem
><para
>O plugin Pesquisar nos arquivos normalmente não segue <ulink url="https://en.wikipedia.org/wiki/Symbolic_link"
>ligações simbólicas</ulink
>. Quando esta opção estiver ativa, o plugin as seguirá ao invés de pesquisar dentro dos arquivos ou pastas às quais elas se referem. Essa opção só está disponível quando estiver usando o modo <guilabel
>Pasta</guilabel
>. </para>
<warning
><para
>É possível ligações simbólicas que se referem a uma pasta que é a pai da pasta que estiver atualmente sendo pesquisada, ou que outras pastas contenham ligações simbólicas para seus pais. Se existir este tipo de ligação na pasta que está sendo pesquisada e esta opção estiver ativa, o &kate; seguirá repetidamente a ligação e pesquisará a pasta, e a pesquisa nunca terminará.</para
></warning>
</listitem>
</varlistentry>

<varlistentry>
<term
><guilabel
>Incluir arquivos binários</guilabel
></term>
<listitem
><para
>Se esta opção estiver ativa, o &kate; pesquisará também irá pesquisar nos arquivos que não parecem ser de texto. </para
></listitem>
</varlistentry>

</variablelist>
</sect3>

<sect3 id="searchinfiles-ui-results">
<title
>Resultados da pesquisa</title>

<para
>Os resultados de sua pesquisa são exibidos abaixo das opções de consulta. Se as opções do modo de Pesquisa em pasta estiverem sendo exibidas, basta pressionar o botão <guiicon
><inlinemediaobject
><imageobject
><imagedata fileref="games-config-options-22.png" format="PNG"/></imageobject
></inlinemediaobject
></guiicon
> para exibi-los. Eles também serão automaticamente exibidos tão logo a pesquisa termine.</para>

<para
>Os resultados da pesquisa mostram uma lista de arquivos que contêm o texto que corresponde à sua pesquisa, seguido do número de ocorrências encontradas nesse arquivo.</para>

<para
>Para ver uma lista das ocorrências nesse arquivo, basta clicar na seta de expansão à esquerda do nome do arquivo. (Se você selecionou a opção <guilabel
>Expandir resultados</guilabel
>, isso já foi feito). Será apresentado o número da linha em que foi encontrada a ocorrência, seguido do conteúdo dessa linha, onde o texto da sua pesquisa será destacado em negrito.</para>

<para
>Para abrir o arquivo em que foi encontrado o seu resultado, basta clicar duas vezes sobre ele, para ser aberto pelo &kate;, se necessário. Você também pode mover o cursor para o local da ocorrência, com um clique duplo nessa lista, em vez de no nome do arquivo. </para>

</sect3>
</sect2>

<sect2 id="searchinfiles-menu">
<title
>Estrutura do menu</title>

<variablelist>

<varlistentry id="edit-searchinfiles">
<term
><menuchoice
><shortcut
> <keycombo action="simul"
>&Ctrl;&Alt;<keycap
>F</keycap
></keycombo
> </shortcut
> <guimenu
>Editar</guimenu
> <guimenuitem
>Pesquisar nos arquivos</guimenuitem
> </menuchoice
></term>
<listitem>
<para
>Abre a janela da ferramenta Pesquisar e substituir.</para>
</listitem>
</varlistentry>

<varlistentry id="edit-next-match">
<term
><menuchoice
><guimenu
>Editar</guimenu
> <guimenuitem
>Ir para a próxima ocorrência</guimenuitem
> </menuchoice
></term>
<listitem>
<para
>Vai para a ocorrência seguinte de uma pesquisa efetuada pelo plugin Pesquisar e substituir.</para>
</listitem>
</varlistentry>

<varlistentry id="edit-previous-match">
<term
><menuchoice
><guimenu
>Editar</guimenu
> <guimenuitem
>Ir para a ocorrência anterior</guimenuitem
> </menuchoice
></term>
<listitem>
<para
>Vai para a ocorrência anterior de uma pesquisa efetuada pelo plugin Pesquisar e substituir.</para>
</listitem>
</varlistentry>

<varlistentry id="view-toolviews-searchandreplace">
<term
><menuchoice
><guimenu
>Exibir</guimenu
><guisubmenu
>Visões da ferramenta</guisubmenu
> <guimenuitem
>Pesquisar e substituir</guimenuitem
> </menuchoice
></term>
<listitem>
<para
>Alterna a exibição da ferramenta <guilabel
>Pesquisar e substituir</guilabel
> do &kate;. </para>
</listitem>
</varlistentry>

</variablelist>

</sect2>
</sect1>

<sect1 id="kate-application-plugin-snippets">
<sect1info>
<authorgroup>
<author
><firstname
>Martin</firstname
> <surname
>Gergov</surname
></author>
<author
>&TC.Hollingsworth; &TC.Hollingsworth.mail;</author>
</authorgroup>
</sect1info>
<title
>Scripts e Snippets do &kate;</title>

<sect2 id="snippets-intro">
<title
>Introdução</title>
<para
>O plugin de Scripts &amp; Snippets do &kate; permite adicionar e gerenciar seus próprios trechos de automação. Isso pode variar de trechos estáticos reutilizáveis ​​de texto simples, passando por modelos sofisticados com campos personalizados, automatizados e programáveis, até scripts &javascript; totalmente personalizados para modificar o conteúdo do seu documento.</para>
<para
>Na maior parte dos casos, esses tipos de conteúdo são gerenciados exatamente da mesma maneira. Portanto, para facilitar a leitura, a discussão a seguir não diferencia entre trechos estáticos, trechos com script, snippets e scripts. Em vez disso, o termo <quote
>trecho</quote
> é usado para se referir a todos eles.</para>
<para
>O plugin também suporta a atribuição de atalhos de teclado e a inserção de trechos de código por meio do preenchimento automático. Além disso, você pode baixar coleções de trechos de código (os chamados repositórios) da internet.</para>
</sect2>

<sect2 id="snippets-menu">
<title
>Estrutura do menu</title>

<variablelist>
<varlistentry>
<term
><menuchoice
><guimenu
>Exibir</guimenu
> <guisubmenu
>Áreas de ferramentas</guisubmenu
> <guimenuitem
>Mostrar trechos</guimenuitem
></menuchoice
></term>
<listitem
><para
>Mostra o painel de trechos que contém todos os trechos no seu repositório que digam respeito ao tipo de arquivo que estiver aberto.</para
></listitem>
</varlistentry>

<varlistentry id="tools-create-snippet">
<term
><menuchoice
><guimenu
>Ferramentas</guimenu
> <guimenuitem
>Criar trecho</guimenuitem
> </menuchoice
></term>
<listitem>
<para
>Cria um novo trecho, que é um bloco de texto reutilizável que você pode inserir em qualquer parte de qualquer documento, ou um pequeno script.</para>
</listitem>
</varlistentry>

</variablelist>

</sect2>

<sect2 id="snippets-panel">
<title
>Painel de trechos</title>

<screenshot id="screenshot-snippets-panel">
<screeninfo
>Painel de trechos do &kate;</screeninfo>
<mediaobject>
<imageobject
><imagedata fileref="snippets-panel.png" format="PNG"/></imageobject>
<textobject
><phrase
>Painel de Trechos do Kate.</phrase
></textobject>
<caption
><para
>Painel de Trechos do &kate;.</para
></caption>
</mediaobject>
</screenshot>

<para
>No painel, você deverá ver uma lista de repositórios de trechos, em conjunto com as opções para criar os seus próprios, obtê-los da Internet ou carregá-los a partir de um arquivo local. Cada repositório tem uma opção de marcação que poderá ser usada para ativá-lo ou desativá-lo. Existem também botões para editar e excluir os repositórios existentes.</para>

<sect3 id="snippets-repo-internet">
<title
>Carregamento dos arquivos do repositório de trechos</title>
<para
>Você pode baixar repositórios de trechos a partir da Internet. Basta clica em <guibutton
>Baixar novos trechos</guibutton
> para abrir uma janela com uma lista de repositórios de trechos.  Depois de baixar o trecho desejado, certifique-se que foi ativado.</para>
<!--FIXME no way to load a local file ?
<para
>You can also load snippet repositories from a local file using the file
browser at the bottom of the panel.  Click <guibutton
>Copy to repository</guibutton>
when finished.</para
>-->
</sect3>

<sect3 id="snippets-repo-editor">
<title
>Criação e edição de repositórios</title>

<para
>Para criar um novo repositório de trechos, clique em <guibutton
>Adicionar repositório</guibutton
>. Você deverá ver uma caixa de diálogo que lhe pede o nome, licença e autor. Depois de escolher as opções desejadas, clique em <guibutton
>Ok</guibutton
>.</para>

<screenshot id="screenshot-snippets-repository">
<screeninfo
>Editor de trechos</screeninfo>
<mediaobject>
<imageobject
><imagedata fileref="snippets-repository.png" format="PNG"/></imageobject>
<textobject
><phrase
>O editor de repositório.</phrase
></textobject>
<caption
><para
>Interface do editor de repositório.</para
></caption>
</mediaobject>
</screenshot>

<para
>O editor de repositório de trechos contém as seguintes opções:</para>

<variablelist>

<varlistentry>
<term
><guilabel
>Nome</guilabel
></term>
<listitem
><para
>Aparece na lista de trechos na área de ferramentas e também é pesquisada quando for usada a funcionalidade de autocompletar o código.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><guilabel
>Espaço de nomes</guilabel
></term>
<listitem
><para
>Prefixo usado ao utilizar o completamento de código.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><guilabel
>Licença</guilabel
></term>
<listitem
><para
>Seleciona a licença para o seu repositório de trechos de código.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><guilabel
>Autores</guilabel
></term>
<listitem
><para
>Insira o nome do autor ou autores do arquivo de trecho.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><guilabel
>Tipos de arquivo</guilabel
></term>
<listitem
><para
>Selecione o(s) tipo(s) de arquivo(s) onde quer que o repositório de trechos se aplique. Por padrão, ele está configurado como <quote
>*</quote
>, o que se aplica a todos os arquivos. Você pode alterá-lo para algo como <userinput
>C++</userinput
>, por exemplo, ou selecionar a partir de uma lista, clicando nos itens. Poderá também indicar mais de um tipo de arquivo, pressionando &Shift; enquanto adiciona os tipos.</para
></listitem>
</varlistentry>

</variablelist>

</sect3>

<sect3 id="snippets-editor">
<title
>Criação e edição de trechos</title>

<screenshot id="screenshot-snippets-form">
<screeninfo
>Editor de trechos</screeninfo>
<mediaobject>
<imageobject
><imagedata fileref="snippets-form.png" format="PNG"/></imageobject>
<textobject
><phrase
>Editor de Trechos.</phrase
></textobject>
<caption
><para
>Interface do Editor de Trechos.</para
></caption>
</mediaobject>
</screenshot>

<variablelist>

<varlistentry>
<term
><guilabel
>Nome</guilabel
></term>
<listitem
><para
>O nome conforme mostrado na lista de trechos e na lista de completamento (obrigatório).</para
></listitem>
</varlistentry>

<varlistentry>
<term
><guilabel
>Tipo</guilabel
></term>
<listitem
><para
>Os trechos podem ser definidos como modelos de texto ou scripts. Ambos os tipos permitem o uso de funções &javascript; (veja detalhes abaixo) e, portanto, podem ser usados ​​com efeito semelhante. No entanto, como regra geral, os modelos de texto serão mais adequados se você quiser principalmente <emphasis
>inserir</emphasis
> texto, enquanto os scripts costumam ser uma solução mais fácil se você quiser <emphasis
>modificar</emphasis
> texto).</para>
<note
><para
>O Kate precisa ser compilada com o KTextEditor versão 6.15.0 ou superior para que este recurso esteja disponível. Para versões anteriores, somente trechos de modelo de texto podem ser usados.</para
></note
></listitem>
</varlistentry>

<varlistentry>
<term
>Atalho</term>
<listitem
><para
>Ao pressionar este atalho, o trecho de código será inserido (ou executado) no documento atual.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><anchor id="snippet-input-template"/><guilabel
>Trecho</guilabel
> (digite <userinput
>Modelo de texto</userinput
>)</term>
<listitem
><para
>O texto que seu trecho de código irá inserir no documento.</para>
<para
>Um trecho de código pode conter campos editáveis. É possível alternar entre eles pressionando a tecla &Tab;. As seguintes expressões podem ser usadas no texto do modelo para criar campos:</para>
<para
><userinput
>${<replaceable
>nome_campo</replaceable
>}</userinput
> cria um campo simples e editável. Todas as ocorrências subsequentes do mesmo <replaceable
>nome_campo</replaceable
> criam campos que espelham o conteúdo do primeiro durante a edição.</para>

<tip>
<para
>Os nomes dos campos podem conter qualquer caractere, exceto a chave de fechamento (<userinput
>}</userinput
>).</para>
<para
>Para inserir literalmente <userinput
>${texto}</userinput
> em um trecho de código, escape o sinal`<userinput
>$</userinput
> com uma barra invertida: <userinput
>\${texto}</userinput
>. O texto não será então transformado em um campo. Para inserir barras invertidas literais antes de um campo, escape cada barra invertida individual: <userinput
>\\${campo}</userinput
>, <userinput
>\\\\${campo}</userinput
>, e assim por diante.</para>
</tip>

<para
><userinput
>${func(<replaceable
>outro_campo1</replaceable
>, <replaceable
>outro_campo2</replaceable
>, ...)}</userinput
> cria um campo que avalia uma função &javascript; a cada edição e é substituído pelo valor de retorno dessa função. Consulte a aba da <link linkend="snippet-input-library"
><guilabel
>Biblioteca de Scripts</guilabel
></link
> para mais informações.</para>
<para
><userinput
>${<replaceable
>nome_campo=padrão</replaceable
>}</userinput
> define um valor padrão para o campo. <replaceable
>padrão</replaceable
> é uma expressão &javascript;. Use aspas (<userinput
>${<replaceable
>campo_nome</replaceable
>=<replaceable
>"texto"</replaceable
>}</userinput
>) para especificar uma string fixa como valor padrão.</para>

<tip>
<para
>Ao usar valores padrão (<userinput
>${<replaceable
>campo_nome=padrão</replaceable
>}</userinput
>), lembre-se de que o valor padrão é avaliado imediatamente quando o trecho é inserido no documento e não é atualizado posteriormente quando os campos são alterados.</para>
<para
>Você pode referenciar outros campos em valores padrão se eles forem definidos antes do valor padrão que está sendo avaliado. No entanto, isso lhe dará acesso apenas ao valor padrão desses campos.</para>
<para
>Caso nenhum valor padrão personalizado seja definido, o valor padrão será o nome do campo.</para>
</tip>

<para
><userinput
>${cursor}</userinput
> marca a posição final do cursor após todo o resto ter sido preenchido. Inserir texto nesta posição finalizará a edição. Além disso, após pressionar &Esc; para finalizar a edição, o cursor saltará para esta posição.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><anchor id="snippet-input-script"/><guilabel
>Trecho</guilabel
> (digite <userinput
>Script</userinput
>)</term>
<listitem
><para
>O código &javascript; a ser avaliado para este trecho</para>
<para
>Se este código contiver uma instrução <userinput
>return</userinput
>, a string retornada será inserida na posição atual do cursor. Você também pode usar a <ulink url="help:/katepart/dev-scripting.html#dev-scripting-api"
>API de scripting do &kate; </ulink
> para modificar o documento diretamente.</para>
<para
>Além disso, seu código pode usar funções definidas na aba da <link linkend="snippet-input-library"
><guilabel
>Biblioteca de scripts</guilabel
></link
>, que são compartilhadas entre todos os trechos em um repositório.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><anchor id="snippet-input-library"/><guilabel
>Biblioteca de scripts</guilabel
></term>
<listitem
><para
>Funções auxiliares em &javascript; para usar em seus trechos de código. Essas funções são compartilhadas entre todos os trechos de código em um repositório.</para>
<para
>Você pode usar a <ulink url="help:/katepart/dev-scripting.html#dev-scripting-api"
>API de script do &kate;</ulink
> para obter o texto selecionado, o texto completo, o nome do arquivo e muito mais, usando os métodos apropriados dos objetos <userinput
>document</userinput
> e <userinput
>view</userinput
>. Consulte a documentação da API de script para obter mais informações.</para>
<para
>Quando uma função é chamada em um campo de um trecho de <userinput
>Modelo de texto</userinput
>, seu valor de <emphasis
>retorno</emphasis
> é inserido no texto.</para>

<note>
<para
>Usando funções em trechos de código de <userinput
>Modelo de texto</userinput
>:</para>
<itemizedlist>
<listitem
><para
>As funções podem acessar o conteúdo atualizado de todos os campos por meio do objeto <userinput
>fields</userinput
>: use <userinput
>fields.meu_campo</userinput
> ou <userinput
>fields["meu_campo"]</userinput
>. Ao usar uma função como valor padrão para um campo, somente os campos definidos no texto antes estarão disponíveis.</para
></listitem>
<listitem
><para
>Os campos podem ser passados ​​como argumentos para funções. O nome do campo pode ser usado diretamente se for um identificador &javascript; válido e nenhuma variável com esse nome existir. Caso contrário, use o objeto <userinput
>fields</userinput
>: <userinput
>${func(field)}</userinput
>, <userinput
>${func(fields.document)}</userinput
>, <userinput
>${func(fields["meu_campo"])}</userinput
> </para
></listitem>
<listitem
><para
>Os campos de função (por exemplo, <userinput
>${func()}</userinput
>) são reavaliados sempre que o conteúdo de qualquer campo é alterado. No entanto, isso não se aplica a chamadas de função com valores padrão: elas são avaliadas apenas uma vez quando o trecho de código é inserido no documento.</para>
</listitem>
<listitem
><para
>Para scripts mais complexos, pode ser importante entender que <emphasis
>primeiro</emphasis
>, o trecho bruto é inserido no documento, e <emphasis
>depois</emphasis
> as funções são avaliadas. Por exemplo, se uma função recupera o texto na linha onde o trecho está sendo inserido, esse texto também conterá <userinput
>${functionCall()}</userinput
>. Quando isso causar complicações, considere usar um trecho do tipo <userinput
>Script</userinput
> em vez disso.</para
></listitem>
<listitem
><para
>Para simplesmente envolver o texto selecionado em tags, use: <userinput
>&lt;strong&gt;${view.selectedText()}&lt;/strong&gt;</userinput
></para
></listitem>
<listitem
><para
>Lembre-se de que apenas o <emphasis
>valor de retorno</emphasis
> de uma função é inserido em um campo.</para
></listitem>
</itemizedlist>
</note>

</listitem>
</varlistentry>

<varlistentry>
<term
><guilabel
>Descrição</guilabel
></term>
<listitem
><para
>Uma descrição opcional do que este trecho faz. Ela será exibida em dicas de ferramentas. A descrição pode conter formatação HTML básica.</para
></listitem>
</varlistentry>

<varlistentry>
<term
>Exemplo de uso</term>
<listitem
><para
>O exemplo a seguir invoca um script que envolve o texto selecionado ou - se não houver seleção - um texto padrão, em tags (Tipo de trecho: <userinput
>Script</userinput
>):</para>
<para>
<programlisting
>let range = view.hasSelection() ? view.selection() : new Range(view.cursorPosition(), view.cursorPosition());
let innertext = range.isEmpty() ? "Bold" : document.text(range);
document.removeText(range);
document.insertText(range.start, "&lt;strong&gt;" + innertext + "&lt;/strong&gt;");
</programlisting>
</para>
</listitem>
</varlistentry>

</variablelist>

</sect3>
</sect2>

<sect2 id="snippets-using">
<title
>Usando trechos</title>

<screenshot id="screenshot-snippets-usage">
<screeninfo
>Trechos do &kate; em ação</screeninfo>
<mediaobject>
<imageobject
><imagedata fileref="snippets-usage.png" format="PNG"/></imageobject>
<textobject
><phrase
>Acessando os trechos do &kate; a partir de uma área de ferramentas e de uma lista.</phrase
></textobject>
<caption
><para
>Selecionando a partir de uma lista de trechos.</para
></caption>
</mediaobject>
</screenshot>

<para
>Você pode chamar os trechos de diversas maneiras:</para>

<itemizedlist>
<listitem
><para
>Clicando no trecho a partir da área de ferramentas.</para
></listitem>
<listitem
><para
>Usando um atalho de teclado, caso tenha atribuído um.</para
></listitem>
<listitem
><para
>Enquanto estiver escrevendo, você pode pressionar <keycombo action="simul"
>&Ctrl; &Space;</keycombo
> para mostrar todos os trechos em uma janela conveniente onde poderá fazer a escolha. Essa combinação de teclas oferece uma funcionalidade semelhante a de autocompletar o código.</para
></listitem>
</itemizedlist>

<para
>Se o trecho conter variáveis (além do <literal
>${cursor}</literal
>), o cursor ficará automaticamente posicionado sobre a primeira ocorrência de uma variável, esperando que você digite algo. Quando terminar, você pode pressionar a tecla &Tab; para ir até a próxima variável, e assim por diante.</para>

</sect2>

<sect2 id="snippets-ack">
<title
>Agradecimentos e reconhecimento</title>
<para
>Trechos do &kate; foi escrito por Joseph Wenninger.</para>
<para
>Agradecimentos especiais ao participante Martin Gergov do Google Code-In 2011 pela escrita de grande parte desta seção.</para>
</sect2>

</sect1>

<sect1 id="kate-application-plugin-keyboardmacros">
<sect1info>
<authorgroup>
<!--author
>&Pablo.Rauzy; &Pablo.Rauzy.mail;</author--> <!-- TODO: use that when the version of KDocTools that Kate depends on has it -->
<author
><firstname
>Pablo</firstname
> <surname
>Rauzy</surname
> <email
>r .at. uzy.me</email
></author>
</authorgroup>
</sect1info>
<title
>Plugin de macros de teclado</title>

<sect2 id="keyboardmacros-intro">
<title
>Introdução</title>
<para
>Grava e reproduz macros de teclado (ou seja, sequências de ação de teclado).</para>
</sect2>

<sect2 id="keyboardmacros-basicusage">
<title
>Uso básico</title>

<sect3 id="keyboardmacros-basicusage-record">
<title
>Para começar a gravar uma macro de teclado:</title>
<para
><menuchoice
><guimenu
>Ferramentas</guimenu
><guimenuitem
>Macros de teclado</guimenuitem
><guimenuitem
>Gravar macro...</guimenuitem
></menuchoice
>(<keycombo action="simul"
>&Ctrl;&Shift;<keycap
>K</keycap
></keycombo
>). </para>
<para
>O plugin irá gravar todas as teclas pressionadas até que você encerre a gravação.</para>
</sect3>

<sect3 id="keyboardmacros-basicusage-record-end">
<title
>Para finalizar a gravação:</title>
<para
><menuchoice
><guimenu
>Ferramentas</guimenu
><guimenuitem
>Macros de teclado</guimenuitem
><guimenuitem
>Finalizar gravação de macro</guimenuitem
></menuchoice
>(<keycombo action="simul"
>&Ctrl;&Shift;<keycap
>K</keycap
></keycombo
>). </para>
<para
>O plugin irá parar de gravar as teclas pressionadas e salvar a sequência como a macro atual.</para>
</sect3>

<sect3 id="keyboardmacros-basicusage-record-cancel">
<title
>Para cancelar a gravação:</title>
<para
><menuchoice
><guimenu
>Ferramentas</guimenu
><guimenuitem
>Macros de teclado</guimenuitem
><guimenuitem
>Cancelar gravação de macro</guimenuitem
></menuchoice
> (<keycombo action="simul"
>&Ctrl;&Alt;&Shift;<keycap
>K</keycap
></keycombo
>). </para>
<para
>O plugin deixará de gravar as teclas pressionadas, mas a macro atual não será alterada.</para>
</sect3>

<sect3 id="keyboardmacros-basicusage-play">
<title
>Para executar a macro atual:</title>
<para
><menuchoice
><guimenu
>Ferramentas</guimenu
><guimenuitem
>Macros de teclado</guimenuitem
><guimenuitem
>Executar macro</guimenuitem
></menuchoice
> (<keycombo action="simul"
>&Ctrl;&Alt;<keycap
>K</keycap
></keycombo
>). </para>
<para
>O plugin irá executar a macro atual.</para>
<para
>O comando <userinput
>kmplay</userinput
> sem argumentos também irá também executar a macro atual.</para>
</sect3>

</sect2>

<sect2 id="keyboardmacros-namedmacros">
<title
>Macros nomeadas</title>

<para
>É possível salvar macros de teclado atribuindo-lhes um nome.</para>
<para
>As macros nomeadas são persistentes entre as sessões de Kate, sendo salvas no arquivo <filename
>keyboardmacros.json</filename
> na pasta de dados do usuário do Kate (geralmente <filename
>~/.local/share/kate/</filename
>).</para>

<sect3 id="keyboardmacros-namedmacros-save">
<title
>Para salvar a macro atual:</title>
<para
><menuchoice
><guimenu
>Ferramentas</guimenu
><guimenuitem
>Macros de teclado</guimenuitem
><guimenuitem
>Salvar macro atual</guimenuitem
></menuchoice
> (<keycombo action="simul"
>&Alt;&Shift;<keycap
>K</keycap
></keycombo
>). </para>
<para
>O plugin solicitará que você insira um nome e salvará a macro com esse nome.</para>
<para
>O comando <userinput
>kmsave <replaceable
>nome</replaceable
></userinput
> salvará a macro atual com o nome <userinput
><replaceable
>nome</replaceable
></userinput
>.</para>
</sect3>

<sect3 id="keyboardmacros-namedmacros-load">
<title
>Para carregar uma macro salva como a macro atual:</title>
<para
><menuchoice
><guimenu
>Ferramentas</guimenu
><guimenuitem
>Macros de teclado</guimenuitem
><guimenuitem
>Carregar macro nomeada...</guimenuitem
></menuchoice
>. </para>
<para
>O plugin lista as macros salvas como itens neste submenu; ativar um item carregará a macro correspondente como a macro atual.</para>
<para
>O comando <userinput
>kmload <replaceable
>nome</replaceable
></userinput
> carregará a macro salva com o nome <userinput
><replaceable
>nome</replaceable
></userinput
> como a macro atual.</para>
</sect3>

<sect3 id="keyboardmacros-namedmacros-play">
<title
>Para reproduzir uma macro salva sem carregá-la:</title>
<para
><menuchoice
><guimenu
>Ferramentas</guimenu
><guimenuitem
>Macros de teclado</guimenuitem
><guimenuitem
>Reproduzir macro nomeada...</guimenuitem
></menuchoice
>. </para>
<para
>O plugin lista as macros salvas como itens neste submenu; ativar um item irá executar a macro correspondente sem carregá-la.</para>
<para
>Observe que cada macro salva é uma ação que faz parte da coleção de ações atual, de modo que um atalho personalizado pode ser atribuído a ela por meio da interface <menuchoice
><guimenu
>Configurações</guimenu
><guimenuitem
>Configurar atalhos do teclado...</guimenuitem
></menuchoice
>.</para>
<para
>O comando <userinput
>kmplay <replaceable
>nome</replaceable
></userinput
>executará a macro salva com o nome <userinput
><replaceable
>nome</replaceable
></userinput
> sem carregá-la.</para>
</sect3>

<sect3 id="keyboardmacros-namedmacros-wipe">
<title
>Para limpar (ou seja, excluir) uma macro salva:</title>
<para
><menuchoice
><guimenu
>Ferramentas</guimenu
><guimenuitem
>Macros de teclado</guimenuitem
><guimenuitem
>Limpar macro nomeada...</guimenuitem
></menuchoice
>. </para>
<para
>O plugin lista as macros salvas como itens neste submenu; ativar um item irá limpar (ou seja, excluir) a macro correspondente.</para>
<para
>O comando <userinput
>kmwipe <replaceable
>nome</replaceable
></userinput
> irá apagar a macro salva com o nome <userinput
><replaceable
>nome</replaceable
></userinput
>.</para>
</sect3>

<sect3 id="keyboardmacros-namedmacros-command-tips">
<title
>Dicas para comandos:</title>
<para
>Observe que, após o prefixo <userinput
>km</userinput
>, todos esses comandos usam uma letra diferente para que você possa chamá-los de forma eficiente usando a função de autocompletar com a tecla Tab!</para>
</sect3>

</sect2>

<sect2 id="keyboardmacros-limitations">
<title
>Limitações</title>

<para
>Atualmente, as macros de teclado não funcionam corretamente se alguns tipos de widgets de GUI forem usados: QMenu, QuickOpenLineEdit ou TabSwitcherTreeView, por exemplo.Não sei o motivo, mas meu primeiro palpite é que esses widgets funcionam de maneira não padronizada em relação aos eventos de teclado.</para>

</sect2>

</sect1>


<sect1 id="kate-application-plugin-sql">
<sect1info>
<authorgroup>
<author
><firstname
>Ömer</firstname
> <othername
>Faruk</othername
> <surname
>ORUÇ</surname
></author>
<author
>&TC.Hollingsworth; &TC.Hollingsworth.mail;</author>
</authorgroup>
</sect1info>
<title
>Plugin do SQL</title>

<sect2 id="sql-intro">
<title
>Introdução</title>

<para
>O SQL (Structured Query Language) é uma linguagem especializada para atualizar, excluir e solicitar informações de bancos de dados.</para>

<para
>O plugin do SQL do &kate; permite-lhe:</para>

<itemizedlist>
<listitem
><para
>Criar um banco de dados</para
></listitem>
<listitem
><para
>Conectar-se a bancos de dados existentes</para
></listitem>
<listitem
><para
>Inserir e excluir dados do banco de dados</para
></listitem>
<listitem
><para
>Executar consultas</para
></listitem>
<listitem
><para
>Exibir resultados em uma tabela</para
></listitem>
</itemizedlist>

</sect2>

<sect2 id="sql-connecting">
<title
>Conectar-se a um banco de dados</title>

<para
>Selecione a opção <guibutton
>Adicionar conexão</guibutton
> do menu <guimenu
>SQL</guimenu
> ou na barra de ferramentas e depois selecione o controlador de banco de dados do &Qt; que você deseja usar (incluindo QSQLITE, QMYSQL3, QMYSQL, QODBC3, QODBC, QPSQL7 e QPSQL). Se você não conseguir ver o controlador desejado, será necessário instalar. Depois, clique em <guibutton
>Próximo</guibutton
>. </para>

<para
>Se o banco de dados que você selecionar usar um arquivo, basta indicar a localização do banco de dados e clicar no botão <guibutton
>Próximo</guibutton
>. Se ele precisar conectar-se a um servidor, você precisa indicar o nome do servidor, o seu usuário e senha, e quaisquer outras informações necessárias ao controlador. Depois, clique em <guibutton
>Próximo</guibutton
>.</para>

<para
>Finalmente, forneça um nome a sua conexão e clique em <guibutton
>Concluir</guibutton
>.</para>

</sect2>

<sect2 id="sql-querying">
<title
>Executando consultas</title>

<sect3 id="sql-querying-insert-delete-update">
<title
>INSERT/DELETE/UPDATE</title>

<para
>Você pode inserir, excluir e atualizar dados usando o plugin SQL da mesma forma que faria pela linha de comando ou dentro de um programa. Basta inserir uma consulta e pressionar o botão <guibutton
>Executar consulta</guibutton
> na barra de ferramentas ou usar <menuchoice
><guimenu
>SQL</guimenu
><guimenuitem
>Executar consulta</guimenuitem
></menuchoice
> (<keycombo action="simul"
>&Ctrl;<keycap
>E</keycap
></keycombo
>).</para>

<example>
<title
>Alguns exemplos de consultas</title>
<variablelist>

<varlistentry>
<term
><command
>INSERT</command
></term>
<listitem
><para
><programlisting
>INSERT INTO <replaceable
>nome_tabela</replaceable
> ("<replaceable
>campo1</replaceable
>", "<replaceable
>campo2</replaceable
>", "<replaceable
>campo3</replaceable
>", "<replaceable
>campo4</replaceable
>", "<replaceable
>campo5</replaceable
>")
VALUES ("<replaceable
>valor1</replaceable
>", "<replaceable
>valor2</replaceable
>", "<replaceable
>valor3</replaceable
>", "<replaceable
>valor4</replaceable
>", "<replaceable
>valor5</replaceable
>" )
</programlisting
></para
></listitem>
</varlistentry>

<varlistentry>
<term
><command
>DELETE</command
></term>
<listitem
><para
><programlisting
>DELETE FROM <replaceable
>nome_tabela</replaceable
> WHERE nome = "<replaceable
>texto</replaceable
>"
</programlisting
></para
></listitem>
</varlistentry>

<varlistentry>
<term
><command
>UPDATE</command
></term>
<listitem
><para
><programlisting
>UPDATE <replaceable
>nome_tabela</replaceable
> SET "<replaceable
>campo1</replaceable
>" = "<replaceable
>texto</replaceable
>", "<replaceable
>campo2</replaceable
>" = "<replaceable
>texto</replaceable
>", "<replaceable
>campo3</replaceable
>" = "<replaceable
>texto</replaceable
>", "<replaceable
>campo4</replaceable
>" = "<replaceable
>texto</replaceable
>", "<replaceable
>campo5</replaceable
>" = "<replaceable
>texto</replaceable
>"
</programlisting
></para
></listitem>
</varlistentry>

</variablelist>
</example>

</sect3>

<sect3 id="sql-querying-select">
<title
>SELECT</title>

<para
>Depois de executar uma consulta <command
>SELECT</command
>, você poderá ver o resultado como uma tabela, que aparecerá na área de ferramentas <guilabel
>Resultado dos dados em SQL</guilabel
> na parte inferior do &kate; ou como texto no <guilabel
>Resultado do texto em SQL</guilabel
>. Se ocorrer um erro, você poderá ver no resultado de texto.</para>

<example>
<title
>Exemplo de consulta <command
>SELECT</command
></title>
<para
><programlisting
>SELECT * FROM <replaceable
>nome_tabela</replaceable
>
</programlisting
></para>
</example>

<para
>Na área de ferramentas <guilabel
>Resultado dos dados em SQL</guilabel
> existem diversos botões:</para>

<variablelist>

<varlistentry>
<term
><guibutton
>Ajustar as colunas ao conteúdo</guibutton
></term>
<listitem
><para
>Altera o tamanho das colunas para caber o seu conteúdo.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><guibutton
>Ajustar as linhas ao conteúdo</guibutton
></term>
<listitem
><para
>Altera o tamanho das linhas para caber o seu conteúdo.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><guibutton
>Copiar</guibutton
></term>
<listitem
><para
>Seleciona todo o conteúdo da tabela e copia-o para a área de transferência.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><guibutton
>Exportar</guibutton
></term>
<listitem
><para
>Exporta todo o conteúdo da tabela para um arquivo, para a área de transferência ou para o documento atual, no formato de valores separados por vírgulas (CSV).</para
></listitem>
</varlistentry>

<varlistentry>
<term
><guibutton
>Limpar</guibutton
></term>
<listitem
><para
>Remove tudo da área da tabela.</para
></listitem>
</varlistentry>

<!--FIXME Use system locale -->

</variablelist>

<para
>Você pode agora alterar as cores apresentadas na tabela, na seção <guilabel
>SQL</guilabel
> da opção <menuchoice
><guimenu
>Configurações</guimenu
><guimenuitem
>Configurar &kate;...</guimenuitem
> </menuchoice
>.</para>

</sect3>
</sect2>

<sect2 id="sql-browsing">
<title
>Navegação</title>

<para
>Você pode navegar pelo seu banco de dados com a ferramenta de <guilabel
>Esquema de banco de dados</guilabel
> no lado esquerdo. A informação apresentada varia de acordo com o controlador de banco de dados que você estiver usando.</para>

<para
>Para atualizar esta lista, clique com o botão direito em qualquer lado da área da ferramenta e selecione a opção <guimenuitem
>Atualizar</guimenuitem
>. Para gerar uma pesquisa sobre qualquer item da lista, clique com o botão direito sobre um item, selecione <guisubmenu
>Gerar</guisubmenu
> e depois o tipo de instrução (<guimenuitem
>SELECT</guimenuitem
>, <guimenuitem
>UPDATE</guimenuitem
>, <guimenuitem
>INSERT</guimenuitem
> ou <guimenuitem
>DELETE</guimenuitem
>) no submenu que aparece.</para>

</sect2>

<sect2 id="sql-menus">
<title
>Estrutura do menu</title>
<variablelist>

<varlistentry>
<term
><menuchoice
><guimenu
>SQL</guimenu
><guimenuitem
>Adicionar conexão...</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Adiciona uma nova conexão usando um controlador de banco de dados. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><menuchoice
><guimenu
>SQL</guimenu
><guimenuitem
>Remover conexão</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Remove a conexão selecionada. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><menuchoice
><guimenu
>SQL</guimenu
><guimenuitem
>Editar conexão...</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Edita as configurações da conexão atual. </para
></listitem>
</varlistentry>

<varlistentry>
<term
>Conexões</term>
<listitem
><para
>Todas as conexões ao banco de dados que você criou são apresentadas entre os itens do menu <guimenuitem
>Editar conexão</guimenuitem
> e <guimenuitem
>Executar consulta</guimenuitem
>. Selecione uma para executar pesquisas ou efetuar modificações sobre elas. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><menuchoice
><shortcut
><keycombo action="simul"
>&Ctrl;<keycap
>E</keycap
></keycombo
></shortcut
> <guimenu
>SQL</guimenu
><guimenuitem
>Executar consulta</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Executa a sua consulta. </para
></listitem>
</varlistentry>

</variablelist>
</sect2>

<sect2 id="sql-ack">
<title
>Agradecimentos e reconhecimento</title>

<para
>O plugin do SQL foi criado por Marco Mentasti.</para>
<para
>Agradecimentos especiais ao participante Ömer Faruk ORUÇ do Google Code-In 2011 pela escrita de grande parte desta seção.</para>

</sect2>

</sect1>

<sect1 id="kate-application-plugin-symbolviewer">
<!--https://kate-editor.org/2010/10/27/php-treeview-improvements-in-kate/?-->
<title
>Plugin de visualizador de símbolo</title>

<sect2 id="symbolviewer-using">
<title
>Usando o plugin de fechamento com exclusão/inclusão</title>

<para
>Permite aos desenvolvedores visualizar símbolos (funções, macros e estruturas) a partir do código-fonte.</para>
<para
>Ao clicar nas informações analisadas, você pode navegar facilmente pelo código.</para>
<para
>Atualmente, os seguintes idiomas são suportados:</para>
<para
>C/C++, &Java;, Perl, PHP, Python, Ruby, XSLT, Tcl/Tk, Fortran</para>

<para
>Lista de funcionalidades:</para>
<simplelist>
<member
>Modo em Lista/Árvore</member>
<member
>Aivar/desativar ordenação</member>
<member
>Ocultar/mostrar parâmetros das funções</member>
<member
>Expandir/recolher modo em árvore</member>
<member
>Atualizar automaticamente ao alterar documento</member>
<member
>A análise sintática do código é baseada na estrutura de realce de sintaxe do &kde-frameworks;</member>
</simplelist>

</sect2>

<sect2 id="symbolviewer-menu">
<title
>Estrutura do menu</title>
<variablelist>

<varlistentry id="tools-symbolviewer">
<term
><menuchoice
><shortcut
> <keycombo action="simul"
>&Ctrl;<keycap
>\</keycap
></keycombo
> </shortcut
> <guimenu
>Exibir</guimenu
> <guisubmenu
>Visualizações de ferramenta</guisubmenu
> <guimenuitem
>Mostra lista de símbolos</guimenuitem
> </menuchoice
></term>
<listitem>
<para
>Alterna a exibição da lista de símbolos de &kate;, que mostra Funções, Macros e Estruturas do código-fonte no documento ativo.</para>
</listitem>
</varlistentry>

</variablelist>

</sect2>

<sect2 id="symbolviewer-config">
<title
>Configuração</title>

<screenshot id="screenshot-symbolviewer-settings">
<screeninfo
>Visualizador de símbolos</screeninfo>
<mediaobject>
<imageobject
><imagedata fileref="symbolviewer-settings.png" format="PNG"/></imageobject>
<caption
><para
>Seleciona as opções padrão do analisador</para
></caption>
</mediaobject>
</screenshot>

</sect2>

</sect1>


<sect1 id="kate-application-plugin-konsole">
<title
>Plugin da área da ferramenta Terminal</title>

<para
><indexterm
><primary
>Emulador de terminal</primary
></indexterm
> O Emulador de Terminal integrado é uma cópia do aplicativo &konsole; do &kde;; para sua conveniência. Ele está disponível no item de menu <menuchoice
><guimenu
>Exibir</guimenu
><guisubmenu
>Visualizações de ferramenta</guisubmenu
><guimenuitem
>Mostrar painel do terminal</guimenuitem
></menuchoice
> e receberá o foco se exibido. Adicionalmente, se a opção <link linkend="konsole-config"
>Sincronizar automaticamente o terminal com o documento ativo se possível</link
> estiver habilitada, ele irá para a pasta do documento atual, se possível, quando for exibido ou quando o documento atual for modificado.</para>

<para
>A localização padrão na janela do &kate; estará na base, abaixo da área de edição.</para>

<para
>Você poderá configurar o &konsole; com o seu menu de &RMB;; para mais informações, veja o  <ulink url="help:/konsole/index.html"
> manual do &konsole;</ulink
>.</para>

<para
>O emulador de terminal embutido é fornecido pelo plugin de ferramenta de visualização de terminal.</para>

<sect2 id="konsole-menus">
<title
>Estrutura do menu</title>

<variablelist>

<varlistentry id="view-toolviews-show-terminal">
<term
><menuchoice
><guimenu
>Exibir</guimenu
> <guisubmenu
>Visualizações de ferramentas</guisubmenu
> <guimenuitem
>Mostrar o painel de terminal</guimenuitem
> </menuchoice
></term>
<listitem>
<para
>Alterna para a exibição de um emulador de terminal integrado.</para>
<para
>Quando ativado pela primeira vez, o terminal será criado.</para>
<para
>Quando o emulador de terminal for mostrado, ele obterá o foco, e assim você pode iniciar imediatamente a digitação de comandos. Se a opção <link linkend="konsole-config"
>Sincronizar automaticamente o terminal com o documento ativo quando possível</link
> estiver habilitada na página <guilabel
>Terminal</guilabel
> do <link linkend= "config-dialog"
>Diálogo principal de configuração</link
>, a sessão shell irá para a pasta do documento ativo, se ele for um arquivo local.</para>
</listitem>
</varlistentry>

<varlistentry id="view-toolviews-pipe-to-terminal">
<term
><menuchoice
><guimenu
>Ferramentas</guimenu
> <guimenuitem
>Encaminhar para Terminal</guimenuitem
></menuchoice
></term>
<listitem
><para
>Fornece o texto selecionado ao emulador de terminal integrado. Não será adicionada nenhuma nova linha após o texto.</para
></listitem>
</varlistentry>

<varlistentry id="tools-sync-terminal-document">
<term
><menuchoice
><guimenu
>Ferramentas</guimenu
> <guimenuitem
>Sincronizar o terminal com documento atual</guimenuitem
></menuchoice
></term>
<listitem>
<para
>Isto fará com que o terminal integrado use <command
>cd</command
> para a pasta do documento ativo.</para>

<para
>Alternativamente, você pode configurar o &kate; para sempre manter o terminal em sincronia com o documento atual. Veja em <xref linkend="konsole-config"/> para mais informações.</para>
</listitem>
</varlistentry>

<varlistentry id="tools-run-current-document">
<term
><menuchoice
><guimenu
>Ferramentas</guimenu
> <guimenuitem
>Executar documento atual</guimenuitem
></menuchoice
></term>
<listitem>
<para
>Executa o documento atual no &konsole;. Somente documentos locais podem ser executados. O &kate; exibirá um aviso antes de executar o documento, pois esta ação pode representar uma séria ameaça à segurança.</para>
</listitem>
</varlistentry>

<varlistentry id="tools-focus-terminal">
<term
><menuchoice
><guimenu
>Ferramentas</guimenu
><guimenuitem
>Focar/Remover foco do painel de terminal</guimenuitem
> </menuchoice
></term>
<listitem>
<para
>Muda o foco do documento atual para o terminal e vice-versa. </para>
</listitem>
</varlistentry>

</variablelist>
</sect2>

<sect2 id="konsole-config">
<title
>Configuração</title>

<para
>Você pode configurar o plugin da área da ferramenta Terminal na página da <link linkend="configuring-kate"
>caixa de diálogo de configuração</link
>.</para>

<para
>Estão disponíveis as seguintes opções:</para>

<variablelist>
<varlistentry>
<term>
<guilabel
>Sincronizar automaticamente o terminal com o documento atual se possível</guilabel
></term>
<listitem
><para
>Isto causará a integração do terminal ao comando <command
>cd</command
> dentro da pasta do documento ativo quando lançado, e quando um novo documento obter o foco. Se não estiver habilitado, você terá que fazer toda a sua navegação pelo terminal sozinho. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><guilabel
>Definir a variável de ambiente EDITOR como sendo 'kate -b'</guilabel
></term>
<listitem
><para
>Isto define a variável de ambiente <envar
>EDITOR</envar
> de modo que programas executados no terminal embutido que abrem automaticamente um arquivo em um editor abrirão estes arquivos no &kate; ao invés do editor configurado em seu shell. Você não será capaz de continuar usando o terminal até que você feche o arquivo no &kate;, de modo que o programa que realizou a requisição saiba que você terminou a edição do arquivo.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><guilabel
>Oculta o &konsole; ao pressionar 'Esc'</guilabel
></term>
<listitem
><para
>Isso permite fechar o terminal integrado pressionando a tecla &Esc;. Pode causar problemas com aplicativos de terminal que usam a tecla &Esc;, por exemplo: <application
>vim</application
>. Adicione esses aplicativos na caixa de entrada de texto abaixo. Os itens da lista devem ser separados por vírgula.</para
></listitem>
</varlistentry>

</variablelist>
</sect2>

</sect1>

<sect1 id="kate-application-plugin-textfilter">

<title
>Plugin de filtro de texto</title>

<sect2 id="textfilter-using">
<title
>Usando o plugin de filtro de texto</title>

<para
>Você pode usar este plugin para processar o texto selecionado usando comandos do terminal. A seleção será usada como entrada para o comando e a saída substituirá a seleção ou será copiada para a área de transferência, dependendo das preferências do usuário. </para>

<itemizedlist>
<title
>Exemplos:</title>
<listitem
><para
><command
>less /etc/fstab</command
> - cola o conteúdo deste arquivo ou copia-o para a área de transferência </para
></listitem>
<listitem
><para
><command
>wc</command
> - conta linhas, palavras e caracteres da seleção e cola isso no documento ou copia para a área de transferência </para
></listitem>
<listitem
><para
><command
>sort</command
> - classifica as linhas da seleção e cola o resultado no documento ou copia para a área de transferência </para
></listitem>
</itemizedlist>

</sect2>

<sect2 id="textfilter-menu">
<title
>Estrutura do menu</title>

<variablelist>

<varlistentry id="tools-textfilter">
<term
><menuchoice
><shortcut
> <keycombo action="simul"
>&Ctrl;<keycap
>\</keycap
></keycombo
> </shortcut
> <guimenu
>Ferramentas</guimenu
> <guisubmenu
>Filtrar texto</guisubmenu
> </menuchoice
></term>
<listitem>

<para
><action
>Abre</action
> a janela para filtro de texto:</para>

<screenshot id="screenshot-filtertext">
<screeninfo
>Janela de filtro de texto</screeninfo>
<mediaobject>
<imageobject
><imagedata fileref="textfilter.png" format="PNG"/></imageobject>
</mediaobject>
</screenshot>

<para
>Insira o comando do shell na caixa de combinação ou selecione um comando anterior no histórico.</para>

<variablelist>

<varlistentry>
<term
><guilabel
>Copiar o resultado ao invés de colar ele</guilabel
></term>
<listitem>
<para
>Copia o resultado para a área de transferência deixando um documento inalterado.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><guilabel
>Mesclar STDOUT e STDERR</guilabel
></term>
<listitem>
<para
>Se selecionada, a saída de STDOUT e STDERR será mesclada e nenhum erro será relatado. Caso contrário, STDERR será exibido como uma mensagem passiva.</para>
</listitem>
</varlistentry>

</variablelist>

</listitem>
</varlistentry>

</variablelist>

</sect2>

</sect1>

<sect1 id="kate-application-plugin-xmlcheck">
<!-- from doc/kate-addons/xmlcheck.docbook -->
<sect1info>
<authorgroup
><author
>&Daniel.Naber; &Daniel.Naber.mail; </author
></authorgroup>
</sect1info>

<title
>Validação do &XML;</title>

<para
>Este plugin verifica se os arquivos XML são válidos e estão bem formados.</para>
<para
>Este plugin verifica o arquivo atual. Uma lista de avisos e erros aparecerá na parte inferior da janela principal do &kate;. Você pode clicar em uma mensagem de erro para ir para o local correspondente no arquivo. Se o arquivo tiver um <quote
>DOCTYPE</quote
>, o DTD fornecido com este doctype será usado para verificar a validade do arquivo. O DTD deve estar em uma posição relativa ao arquivo atual, &eg; se o doctype se referir a <quote
>DTD/xhtml1-transitional.dtd</quote
> e o arquivo for <filename
>/home/peter/test.xml</filename
>, o DTD deve estar localizado em <filename
>/home/peter/DTD/xhtml1-transitional.dtd</filename
>. No entanto, DTDs remotos especificados via HTTP também são suportados.</para>

<para
>Se o arquivo não tiver um doctype, será verificado se ele está bem formado.</para>

<para
>Para saber mais sobre &XML;, consulte as <ulink url="https://www.w3.org/XML/"
> páginas oficiais do W3C sobre &XML;</ulink
>.</para>

<para
>Internamente, este plugin chama o comando externo <command
>xmllint</command
>, que faz parte do libxml2. Se este comando não estiver corretamente instalado em seu sistema, o plugin não funcionará.</para>

<para
>Para carregar este plugin, abra a janela de configuração do &kate; em <menuchoice
><guimenu
>Configurações</guimenu
> <guimenuitem
>Configurar &kate;...</guimenuitem
></menuchoice
>. Em seguida, selecione <guilabel
>Validação XML</guilabel
> que aparecerá na seção <guilabel
>Aplicativo</guilabel
> / <guilabel
>Plugins</guilabel
> e feche a janela. </para>

<sect2 id="xmlcheck-menu">
<title
>Estrutura do menu</title>

<variablelist>
<varlistentry>
<term>
<menuchoice
><guimenu
>&XML;</guimenu
> <guimenuitem
>Validação do &XML;</guimenuitem
> </menuchoice>
</term>
<listitem
><para
>Isso iniciará a verificação, conforme descrito acima.</para
></listitem>
</varlistentry>
</variablelist>

</sect2>

<sect2 id="xmlcheck-thanks-and-acknowledgements">
<title
>Agradecimentos e reconhecimento</title>
<para
>&kate; Plugin <quote
>Validação &XML;</quote
> direitos autorais 2002 &Daniel.Naber; &Daniel.Naber.mail;. </para>
<para
>Copyright da Documentação 2001,2002 &Daniel.Naber;</para>

</sect2>
</sect1>

<sect1 id="kate-application-plugin-xmltools">
<!-- from doc/kate-addons/xmlcheck.docbook -->
<sect1info>
<authorgroup
><author
>&Daniel.Naber; &Daniel.Naber.mail; </author
></authorgroup>
</sect1info>
<title
>Completamento &XML;</title>

<para
>Este plugin dá pistas sobre o que é permitido em determinada posição de um arquivo &XML;, de acordo com o DTD do arquivo. Ele lista elementos, atributos, valores de atributos ou entidades válidas, dependendo da posição do cursor (&eg;, todas as entidades são mostradas se o caractere à esquerda do cursor for <quote
>&amp;</quote
>). Também é possível fechar a marca aberta mais próxima à esquerda.</para>

<para
>O <acronym
>DTD</acronym
> deve existir em formato &XML;, como produzido pelo programa Perl <command
>dtdparse</command
>. Chamaremos um DTD neste formato de <quote
>meta DTD</quote
>. Alguns meta DTDs são fornecidos. Eles estão instalados em <filename class="directory"
>katexmltools/</filename
> no <userinput
><command
>qtpaths</command
> <option
>--paths GenericDataLocation </option
></userinput
>, que também é a pasta padrão quando você escolhe <guimenuitem
>Designar Meta DTD...</guimenuitem
>. Para produzir seus próprios meta DTDs, baixe o <command
>dtdparse</command
> em <ulink url="http://dtdparse.sourceforge.net"
>http://dtdparse.sourceforge.net</ulink
>.</para>

<sect2 id="xmltools-how-to-use">
<title
>Como usar</title>

<para
>Inicie o &kate; e abra a janela de configuração em <menuchoice
><guimenu
>Configurações</guimenu
> <guimenuitem
>Configurar o &kate;...</guimenuitem
></menuchoice
>. Depois, selecione o <guilabel
>Completamento de &XML;</guilabel
> que irá aparecer na página <menuchoice
><guimenu
>Aplicativo</guimenu
> <guimenuitem
>Plugins</guimenuitem
></menuchoice
> e feche a janela. Depois disso, selecione a opção do menu <menuchoice
><guimenu
>&XML;</guimenu
><guimenuitem
>Atribuir uma Meta-DTD...</guimenuitem
></menuchoice
>. Se o seu documento não tiver nenhum <quote
>DOCTYPE</quote
> ou se ele for desconhecido, você terá que selecionar uma meta-DTD no sistema de arquivos. Caso contrário, será carregada automaticamente a meta-DTD que corresponder ao DOCTYPE do documento atual.</para>

<para
>Você pode agora usar o plugin enquanto digita seu texto:</para>

<variablelist>

<varlistentry>
<term
><keycap
>&lt;</keycap
> (chave menor que)</term>
<listitem
><para
>Isto disparará uma lista dos elementos possíveis a menos que o cursor esteja já dentro de uma tag. Note que você atualmente não pode usar isto para inserir os elementos de nível mais alto (&eg; <quote
>&lt;html&gt;</quote
>).</para
></listitem>
</varlistentry>

<varlistentry>
<term
><keycap
>&lt;</keycap
><keycap
>/</keycap
> (tecla 'menor que' + barra)</term>
<listitem
><para
>Inserir estes caracteres irá oferecer o fechamento do elemento atual (o mais próximo do que se encontra à esquerda do cursor). Pressione &Enter; para aceitar a sugestão. Ao contrário do item <guimenuitem
>Fechar o elemento</guimenuitem
>, isto funciona apenas com uma DTD atribuída.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><keycap
>"</keycap
> (chave de citação)</term>
<listitem
><para
>A chave de citação disparará uma lista dos valores de atributos possíveis (se existirem) se você estiver dentro de uma tag.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><keycap
>&nbsp;</keycap
> (chave espaço)</term>
<listitem
><para
>Isto disparará uma lista dos atributos possíveis para o elemento atual se você estiver dentro de uma tag.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><keycap
>&amp;</keycap
> (chave E comercial)</term>
<listitem
><para
>Isto disparará uma lista de entidades nomeadas.</para
></listitem>
</varlistentry>
</variablelist>

</sect2>

<sect2 id="xmltools-features-and-limitations">
<title
>Características e limitações</title>

<para
>Você pode testar todas as funções e limitações carregando <filename
>katexmltools/testcases.xml</filename
> em <userinput
><command
>qtpaths</command
> <option
>--paths GenericDataLocation </option
></userinput
> no &kate; e seguindo as instruções.</para>

</sect2>


<sect2 id="xmltools-menu">
<title
>Estrutura do menu</title>

<variablelist id="xml-insert-element">
<varlistentry>
<term
><menuchoice
><shortcut
> <keycombo action="simul"
>&Ctrl;&Enter;</keycombo
> </shortcut
> <guimenu
>&XML;</guimenu
> <guimenuitem
>Inserir elemento...</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Isto irá abrir uma janela que lhe permite inserir um elemento em &XML;. Os caracteres &lt;, &gt; e a marca de fecho serão inseridos automaticamente. Se você tiver selecionado algum texto quando tiver selecionado este item do menu, o texto selecionado será rodeado pela marca de abertura e de fecho. A janela também oferece o completamento de todos os elementos que poderão ser inseridos na posição atual do cursor, caso tenha atribuído uma meta-DTD com a opção <guimenuitem
>Atribuir uma Meta-DTD...</guimenuitem
>. </para
></listitem>
</varlistentry>

<varlistentry id="xml-close-element">
<term
><menuchoice
><shortcut
> <keycombo action="simul"
>&Ctrl;<keycap
>&lt;</keycap
></keycombo
> </shortcut
> <guimenu
>&XML;</guimenu
> <guimenuitem
>Fechar elemento</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Isto irá pesquisar em seu texto por uma tag que não está ainda fechada e irá fechá-la inserindo a tag de fechamento correspondente. A pesquisa inicia na posição do cursor e vai para a esquerda. Se não puder encontrar uma tag aberta nada acontecerá.</para
></listitem>
</varlistentry>

<varlistentry id="xml-assign-metadtd">
<term
><menuchoice
><guimenu
>&XML;</guimenu
> <guimenuitem
>Designar Meta DTD...</guimenuitem
> </menuchoice
></term>
<listitem
><para
>Isto irá dizer ao plugin qual meta DTD usar para o documento atual. Note que esta designação não será salva. Você terá que repetir isto quando você iniciar o &kate; na próxima vez.</para
></listitem>
</varlistentry>
</variablelist>

</sect2>

<sect2 id="xmltools-thanks-and-acknowledgements">
<title
>Agradecimentos e reconhecimento</title>
<para
>Plugin para o &kate; de <quote
>Completação de &XML;</quote
> copyright 2001,2002 &Daniel.Naber; &Daniel.Naber.mail;. </para>
<para
>Versão para o &kde; SC 4 com direitos autorais de 2010 de Tomáš Trnka</para>
<para
>Copyright da Documentação 2001,2002 &Daniel.Naber;</para>
</sect2>
</sect1>

<sect1 id="kate-application-plugin-compilerexplorer">
<title
>Plugin de explorador de compilador</title>

<para
>O plugin de explorador de compilador permite que você use o explorador de compilador de dentro do Kate. O explorador de compilador geralmente é limitado a apenas um arquivo e é difícil usá-lo para visualizar a geração de código de um arquivo em seu projeto. Este plugin visa simplificar esse processo, detectando automaticamente os comandos de compilação do seu arquivo.</para>

<sect2 id="ce-how-to-use">
<title
>Uso</title>

<para
>A primeira coisa que você precisa fazer é abrir uma aba do explorador de compiladores. Pressione <keycombo action="simul"
>&Ctrl;&Alt;<keycap
>I</keycap
></keycombo
> para abrir a barra de comandos e procure por "Abrir arquivo atual no explorador de compiladores" e pressione Enter. Você pode adicionar essa ação à barra de ferramentas ou atribuir um atalho a ela para facilitar o acesso. </para>

<para
>Em seguida, você precisa configurar uma instância local do explorador de compiladores ou usar a instância pública <ulink url="https://godbolt.org/"
>https://godbolt.org/</ulink
>. Consulte <ulink url="https://github.com/compiler-explorer/compiler-explorer"
>https://github.com/compiler-explorer/compiler-explorer</ulink
>. Depois de ter uma instância, clique na caixa de combinação <guilabel
>Opções</guilabel
> na aba do explorador de compiladores que você abriu anteriormente e selecione <guilabel
>Alterar URL...</guilabel
> e, em seguida, insira a URL do servidor do explorador de compiladores.</para>

<para
>Em seguida, você precisa de um arquivo compile_commands.json se precisar visualizar a geração de código para um arquivo em seu projeto. Caso contrário, você pode pular esta parte. Isso pode ser facilmente obtido se você estiver usando um sistema de compilação moderno como CMake ou Meson. Para o CMake, basta passar <code
>-DCMAKE_EXPORT_COMPILE_COMMANDS=ON</code
> ao invocar o cmake. O arquivo <code
>compile_commands.json</code
> deve ser colocado na raiz do seu projeto. Feche e abra novamente a aba do explorador de compiladores no Kate. Após reabrir a aba, ela deverá mostrar os comandos de compilação necessários para compilar o arquivo.</para>

<para
>Se você estiver usando o explorador de compiladores apenas para visualizar a geração de código de algo temporário, basta digitar os comandos de compilação para o seu arquivo e clicar em <guilabel
>Compilar</guilabel
>. Observe que a recompilação automática durante a edição não é suportada. Você precisa clicar em Compilar sempre que quiser recompilar o arquivo.</para>

<para
>Após a compilação do arquivo, você deverá ver o código gerado no lado direito. Você pode clicar com o botão direito e selecionar <guilabel
>Revelar código vinculado</guilabel
> para ver o código gerado de uma linha específica. Da mesma forma, no lado direito, você pode clicar com o botão direito e selecionar <guilabel
>Rolar até o código-fonte</guilabel
> para exibir o código-fonte de uma determinada linha gerada.</para>

</sect2>

</sect1>

<!-- BEGIN Format plugin -->

<sect1 id="kate-application-plugin-formatting">
<title
>Plugin de formatação</title>

<para
>O plugin de formatação permite formatar código facilmente. O objetivo do plugin é preservar o histórico de desfazer do documento e a posição do cursor do usuário ao formatar o código, para que a formatação não interrompa o trabalho do usuário. Isso é especialmente importante para a formatação automática ao salvar.</para>

<sect2 id="formatting-how-to-use">
<title
>Uso</title>

<para
>Ele permite ao usuário formatar o código de duas maneiras: <itemizedlist>
<listitem
><para
>Utilizando manualmente a ação "Formatar Documento".</para
></listitem>
<listitem
><para
>Automaticamente ao salvar</para
></listitem>
</itemizedlist>
</para>

<tip
><para
>Você pode pesquisar essa ação na barra de comandos e associar um atalho a ela para facilitar o acesso</para
></tip>

</sect2>

<sect2 id="formatting-supported-langs-formatters">
<title
>Linguagens suportadas e formatadores</title>

<para
>A lista atual de idiomas e formatadores suportados é a seguinte: <itemizedlist>

<listitem
><para
>C/C++/ObjectiveC/ObjectiveC++/Protobuf/GLSL/Java - <command
>clang-format</command
> </para
></listitem>

<listitem
><para
>Javascript/Typescript/JSX/TSX - <command
>prettier</command
> </para
></listitem>

<listitem
><para
>JSON <itemizedlist>
  <listitem
><para
><command
>prettier</command
></para
></listitem>
  <listitem
><para
><command
>clang-format</command
></para
></listitem>
  <listitem
><para
><command
>jq</command
></para
></listitem>
</itemizedlist>
</para
></listitem>

<listitem
><para
>Dart - <command
>dartfmt</command
></para
></listitem>
<listitem
><para
>Rust - <command
>rustfmt</command
></para
></listitem>
<listitem
><para
>Go - <command
>gofmt</command
></para
></listitem>
<listitem
><para
>XML - <command
>xmllint</command
></para
></listitem>
<listitem
><para
>Zig - <command
>zigfmt</command
></para
></listitem>
<listitem
><para
>CMake - <command
>cmake-format</command
></para
></listitem>
<listitem
><para
>D - <command
>dfmt</command
></para
></listitem>
<listitem
><para
>Fish Shell - <command
>fish_indent</command
></para
></listitem>
<listitem
><para
>Bash - <command
>shfmt</command
></para
></listitem>
<listitem
><para
>Nix - <command
>nixfmt</command
></para
></listitem>
<listitem
><para
>QML - <command
>qmlformat</command
></para
></listitem>
<listitem
><para
>HTML - <command
>prettier</command
></para
></listitem>
<listitem
><para
>Swift - <command
>swiftformat</command
></para
></listitem>
<listitem
><para
>Erlang - <command
>erlfmt</command
></para
></listitem>
<listitem
><para
>Godot Script - <command
>gdformat</command
></para
></listitem>

<listitem
><para
>Python <itemizedlist>
  <listitem
><para
><command
>autopep8</command
></para
></listitem>
  <listitem
><para
><command
>ruff</command
></para
></listitem>
</itemizedlist>
</para
></listitem>

<listitem
><para
>YAML <itemizedlist>
  <listitem
><para
><command
>yamlfmt</command
></para
></listitem>
  <listitem
><para
><command
>prettier</command
></para
></listitem>
</itemizedlist>
</para
></listitem>

</itemizedlist>
</para>

</sect2>

<sect2 id="formatting-plugin-configuring">
<title
>Configurando</title>

<para
>O plugin pode ser configurado de duas maneiras: <itemizedlist>
<listitem
><para
>Globalmente, a partir da janela de configuração</para
></listitem>
<listitem
><para
>Para cada projeto, usando o arquivo <filename
>.kateproject</filename
></para
></listitem>
</itemizedlist>
</para>

<para
>Ao ler a configuração, o plugin primeiro tentará ler a configuração do arquivo <filename
>.kateproject</filename
> e, em seguida, lerá a configuração global. Exemplo: </para>

<screen
>{
    "formatOnSave": true,
    "formatterForJson": "jq",
    "cmake-format": {
        "formatOnSave": false
    },
    "autopep8": {
        "formatOnSave": false
    }
}
</screen>

<para
>A configuração acima: <itemizedlist>
<listitem
><para
>ativa a opção "formatar ao salvar" globalmente</para
></listitem>
<listitem
><para
>especifica "jq" como o formatador para JSON</para
></listitem>
<listitem
><para
>desativa a opção "formatar ao salvar" para cmake-format e autopep8</para
></listitem>
</itemizedlist>
</para>

<para
>Para configurar a formatação de um projeto, primeiro crie um arquivo <filename
>.kateproject</filename
> e, em seguida, adicione um objeto <code
>"formatting"</code
> a ele. No objeto <code
>"formatting"</code
>, você pode especificar suas configurações, como mostrado no exemplo anterior. Exemplo: </para>
<note
><para
>Você precisa habilitar o <link linkend="kate-application-plugin-projects"
>plugin de projeto</link
> para que isso funcione</para
></note>

<screen
>{
    "name": "Meu Projeto Legal",
    "files": [
        {
            "git": 1
        }
    ],
    "formatting": {
        "formatterForJson": "clang-format",
        "autopep8": {
            "formatOnSave": false
        }
    }
}
</screen>

</sect2>

<sect2 id="formatting-plugin-temp-disable-autosave-format">
<title
>Desativa temporariamente a formatação ao salvar</title>

<para
>Durante o trabalho, você frequentemente precisará desativar a formatação por um curto período de tempo por algum motivo. Você pode fazer isso na barra de menus, em <menuchoice
><guimenu
>Ferramentas</guimenu
> <guimenuitem
>Formatar ao salvar</guimenuitem
></menuchoice
>. Você também pode acionar essa ação na <guilabel
>Barra de comandos</guilabel
>. </para>

</sect2>

</sect1>

<!-- END Format plugin -->

</chapter>
