<appendix id="plugin-tools">
<title
>Plugin</title>

<indexterm zone="plugin-tools">
  <primary
>plugin</primary
></indexterm>

<para
>&kdevelop; contiene un grande numero di piccoli strumenti che aiutano ad eseguire alcuni compiti. La maggior parte di essi è realizzata come plugin, che quando non sono necessari possono essere disabilitati.</para>
<para
>Se si sta cercando un funzionalità che dovrebbe essere presente ma no lo è, allora potrebbe essere stata implementata in un plugin che è disattivato. Ad esempio, nel menu file è presente la funzionalità Apertura rapida file, ma solo se è stata abilitato nella finestra di dialogo Opzioni Progetto. </para>
 
<para
>Tecnicamente, i plugin sono costituiti dalla classe KDevPlugin definita nel file lib/interfaces/kdevplugin.h. Le informazioni seguenti sono tratte da un commento presente in quel file.</para>

<para
>KDevPlugin è la classe base per tutti i plugin di KDevelop. Un plugin è un componente che viene caricato nella shell di KDevelop all'avvio o su richiesta. Un plugin ha un ambito che può essere: <itemizedlist>
<listitem
><simpara
>Core</simpara
></listitem>
<listitem
><simpara
>Globale</simpara
></listitem>
<listitem
><simpara
>Progetto</simpara
></listitem>
</itemizedlist>
</para>

<para
>I plugin core sono plugin globali che forniscono alcune funzionalità fondamentali che non sono selezionabili dall'utente nella finestra di configurazione dei plugin.</para>

<para
>I plugin globali richiedono solo la shell per essere caricati, non funzionano con l'interfaccia di KDevProject e/o non usano le informazioni del progetto. Ad esempio, il plugin uimode permette allo sviluppatore di selezionare l'interfaccia utente desiderata. </para>

<para
>I plugin di progetto richiedono un progetto per essere caricati e sono normalmente caricati/scaricati assieme al progetto stesso. Se un plugin funziona con le informazioni relative ad un progetto allora è un plugin di progetto. Ad esempio, il gestore automake deve essere attivo solo quando viene caricato un progetto basato su automake. </para>

<para
>Come detto precedentemente, i plugin core non possono essere disabilitati. I plugin globali possono essere abilitati/disabilitati in <menuchoice
><guimenu
>Impostazioni</guimenu
> <guimenuitem
>Configura KDevelop...</guimenuitem
></menuchoice
> selezionando <guibutton
>Plugin</guibutton
>. I plugin di progetto possono essere abilitati/disabilitati in <menuchoice
><guimenu
>Progetto</guimenu
> <guimenuitem
>Opzioni Progetto...</guimenuitem
></menuchoice
> in <guibutton
>Plugin</guibutton
>. A seconda della loro funzione, i plugin abilitati possono avere molti effetti su KDevelop, come aggiungere menu, voci di menu, pulsanti, ecc. </para>

<para
>I plugin disabilitati non disturberanno i menu e non verranno caricati in memoria. </para>


<para
>Il seguente elenco di plugin è generato da un piccolo script (listplugins.sh) scritto da Volker Paul. Tutti i plugin possiedono un file .desktop contenente informazioni come il nome e i commenti. La eventuale scarsa utilità di quest'ultimi è da attribuire agli autori dei plugin.</para>
<para
>I plugin vengono raggruppati a seconda del loro ambito (core, globale, di progetto).</para>

<para
>Ambito: Core</para>
<itemizedlist>
<listitem
><formalpara id="KDevAppWizard">
<title
>Procedura guidata per le applicazioni</title>
<para
>Procedura guidata Nuovo Progetto</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevDiff">
<title
>Difference Viewer</title>
<para
>Visualizzatore differenze</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevFileCreate">
<title
>FileCreate</title>
<para
>FileCreate</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevFullScreen">
<title
>FullScreen</title>
<para
>FullScreen</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevTipOfDay">
<title
>Tip of the Day</title>
<para
>Consiglio del giorno</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevUIChooser">
<title
>Selezione dell'interfaccia utente</title>
<para
>Fornisce una finestra di dialogo per la selezione della modalità dell'interfaccia utente</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevVCSManager">
<title
>VCSManager</title>
<para
>Gestore del sistema di controllo della versione </para
></formalpara
></listitem>
</itemizedlist>

<para
>Ambito: Globale</para>
<itemizedlist>
<listitem
><formalpara id="KDevAbbrev">
<title
>Espansione delle abbreviazioni</title>
<para
>Fornisce il supporto per le abbreviazioni personalizzabili - parole brevi che vengono espanse in strutture di codice usate frequentemente.</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevDocumentation">
<title
>Documentazione</title>
<para
>Il plugin Documentation permette di navigare e di effettuare ricerche nella documentazione locale e online con il supporto per vari sistemi di documentazione.</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevfilelist">
<title
>ListaFile</title>
<para
>Fornisce un elenco di tutti i file attualmente aperti. (Comodo quando la barra delle schede non è abbastanza lunga).</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevFileSelector">
<title
>Selettore File</title>
<para
>Una potente utility trasparente alla rete per sfogliare i file.</para
></formalpara
></listitem>
<listitem
><formalpara>
<title
>Inserimento e filtraggio da shell</title>
<para
>Permette di modificare il testo nell'editor usando strumenti a linea di comando. È presente nel menu Strumenti.</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevGrepView">
<title
>Interfaccia a Grep</title>
<para
>Integra le funzioni di ricerca e del programma grep in KDevelop - permette la ricerca veloce in file multipli usando pattern o espressioni regolari.</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevKonsoleView">
<title
>Konsole integrata</title>
<para
>Questo plugin fornisce una console integrata in KDevelop che permette un accesso facile e rapido alla linea di comando.</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevOpenWith">
<title
>Aggiunta al menu della voce "Apri con"</title>
<para
>Questo plugin fornisce varie alternative di apertura nei vari menu contestuali.</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevPartExplorer">
<title
>Strumento per l'esplorazione di componenti</title>
<para
>Uno strumento a interfaccia grafica per effettuare interrogazioni di tipo KTrader ai servizi registrati.</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevRegexpTest">
<title
>Convalidatore per espressioni regolari</title>
<para
>Strumento per scrivere e effettuare il test di espressioni regolari in base alle sintassi più comuni.</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevReplace">
<title
>Componente per sostituire</title>
<para
>Questo plugin è uno strumento interattivo per effettuare ricerche e sostituzioni. Le ricerche sono basate su stringhe o espressioni regolari e le sostituzioni da effettuare possono essere visualizzate in un'anteprima. Quando il plugin viene caricato, appare nel menu Modifica.</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevscripting">
<title
>Script</title>
<para
>Questo plugin fornisce le funzionalità di scripting basate su KScript</para
></formalpara
></listitem>
<listitem
><formalpara id="Code_Snippets">
<title
>Frammenti di codice</title>
<para
>Questo plugin permette di memorizzare i frammenti di codice e aggiungerli al proprio codice</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevTextTools">
<title
>Struttura testo</title>
<para
>Fornisce una visualizzazione strutturata e la navigazione nei file HTML e TEX.</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevTools">
<title
>Aggiunte al menu Strumenti</title>
<para
>Questo plugin fornisce un sistema semplice per aggiungere applicazioni esterne al menu strumenti e alla barra degli strumenti.</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevvalgrind">
<title
>Interfaccia a Valgrind</title>
<para
>Valgrind è uno strumento che aiuta a trovare i problemi di gestione della memoria nei programmi. http://developer.kde.org/~sewardj/</para
></formalpara
></listitem>
</itemizedlist>

<para
>Ambito: Progetti</para>
<itemizedlist>
<listitem
><formalpara id="KDevannotation">
<title
>Plugin annotation</title>
<para
>Descrizione di annotation</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevAStyle">
<title
>Formattatore del codice sorgente</title>
<para
>Plugin per la formattazione del codice sorgente in base a specifiche regole. Quando viene caricato si trova nel menu Strumenti.</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevBookmarks">
<title
>Segnalibri</title>
<para
>Questo plugin permette la navigazione tra i segnalibri e li memorizza tra una sessione e l'altra.</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevClassView">
<title
>Visualizza Classe</title>
<para
>Questo plugin fornisce una visuale grafica di tutte le classi del progetto con i loro metodi e attributi, assieme ad un sistema per navigare direttamente nel codice sorgente.</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevcopyto">
<title
>CopyTo</title>
<para
>Semplice plugin per il caricamento dei file (upload). Effettua la copia dei file attraverso qualunque protocollo supportato da KIO.</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevCTags2">
<title
>Interfaccia a CTags</title>
<para
>CTags è uno strumento per la navigazione nel codice sorgente che supporta molti linguaggi. Quando è caricato fornisce un menu contestuale per trovare le definizioni/dichiarazioni e una finestra di dialogo per le interrogazioni (query). http://ctags.sourceforge.net/</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevdistpart">
<title
>Supporto finale per la creazione dei pacchetti</title>
<para
>Aiuta nella costruzione e pubblicazione del progetto finale. Per il momento è supportato solo il tipo di pacchetto RPM.</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevDoxygen">
<title
>Supporto Doxygen</title>
<para
>Il plugin doxygen consente di specificare e controllare la generazione della documentazione per un progetto, in base al contenuto del codice sorgente. È necessario avere installato doxygen: per ulteriori informazioni vedere http://www.doxygen.org.</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevQuickOpen">
<title
>Apertura rapida</title>
<para
>Permette di trovare e aprire in modo efficiente i file, le classi e i metodi in un progetto di grosse dimensioni. Quando viene caricato si trova nei menu File e Strumenti.</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevSecurity">
<title
>Security Checker</title>
<para
>Controlla la sicurezza del codice</para
></formalpara
></listitem>
</itemizedlist>
<para
>Per l'elenco dei plugin generato è tutto.</para>


<table id="table-project-parts">
<title
>Plugin per la gestione dei progetti in &kdevelop;</title>
<tgroup cols="2"
><tbody>
<row>
  <entry
>antproject</entry>
  <entry
>Gestore di progetto ANT (per applicazioni &Java;)</entry>
</row>
<row>
  <entry
>autoproject</entry>
  <entry
>Gestore di progetto Automake</entry>
</row>
<row>
  <entry
>customproject</entry>
  <entry
>Gestore di progetto personalizzato</entry>
</row>
<row>
  <entry
>trollproject</entry>
  <entry
>Gestore di progetto basato su QMake</entry>
</row>
</tbody
></tgroup>
</table>
<para
>I precedenti plugin sono attualmente (maggio 2005) vuoti. È possibile che il supporto per la gestione dei progetti venga in futuro implementato sotto forma di plugin.</para>


<table>
<title
>Plugin per il supporto dei linguaggi in &kdevelop;</title>
<tgroup cols="2">
<tbody>
<row
><entry
>cppsupport</entry
><entry
>Supporto per C/C++</entry
></row>
<row
><entry
>fortransupport</entry
><entry
>Supporto per Fortran</entry
></row>
<row
><entry
>javasupport</entry
><entry
>Supporto per &Java;</entry
></row>
<row
><entry
>perlsupport</entry
><entry
>Supporto per Perl</entry
></row>
<row
><entry
>phpsupport</entry
><entry
>Supporto per PHP</entry
></row>
<row
><entry
>pythonsupport</entry
><entry
>Supporto per Phyton</entry
></row>
</tbody
></tgroup>
</table>


<para
>Di seguito verranno esaminati alcuni tra questi plugin.</para>

<itemizedlist>
<listitem>
<formalpara>
<title
>Il plugin <command
>abbrev</command
></title>
<indexterm zone="plugin-tools"
><primary
><command
>abbrev</command
></primary
></indexterm>

<para
>Questo plugin espande le abbreviazioni in frammenti di codice molto usati. Si attiva premendo <keycombo
><keycap
>Ctrl</keycap
> <keycap
>Spazio</keycap
></keycombo
>. Per esempio, se si inserisce nell'editor <literal
>"ife"</literal
> in un file C++ e si preme <keycombo
><keycap
>Ctrl</keycap
><keycap
>Spazio</keycap
></keycombo
>, si ottiene un modello di codice <literal
>if-else</literal
> e si risparmia qualche battitura di tasti. L'insieme delle abbreviazioni supportate dipende dal linguaggio di programmazione del file che viene modificato. Per esempio, per PHP si sarà ovviamente interessati ad altri modelli di codice rispetto a quelli di &Java;. </para>
</formalpara>

<para
>L'insieme dei modelli di codice è configurabile. Se il plugin è abilitato, si possono vedere quelli disponibili in <menuchoice
><guimenu
>Impostazioni</guimenu
> <guimenuitem
>Configura KDevelop...</guimenuitem
></menuchoice
> in <guibutton
>Abbreviazioni</guibutton
>. </para>
</listitem>

<listitem>
<formalpara id="KDevFilter">
<title
>Il plugin <command
>filter</command
></title>
<indexterm zone="plugin-tools"
><primary
><command
>filter</command
></primary
></indexterm>

<para
>Questo plugin fornisce due funzioni. Se si seleziona <menuchoice
><guimenu
>Strumenti</guimenu
> <guimenuitem
>Esegui comando...</guimenuitem
></menuchoice
>, si può inserire un comando di shell. L'output del comando è inserito nel buffer dell'editor quando si preme il pulsante <guibutton
>Avvia</guibutton
>. </para>
</formalpara>

<para
>La funzione relativa è disponibile in <menuchoice
><guimenu
>Strumenti</guimenu
><guimenuitem
>Selezione filtro tramite comando...</guimenuitem
></menuchoice
>. Per usarla, si deve selezionare un'area di testo nell'editor. Se si inserisce un comando e si preme il pulsante <guibutton
>Avvia</guibutton
> esso verrà avviato e verrà usata la selezione come input. Lo standard output del comando viene quindi inserito nell'editor. </para>

<para
>Ad esempio, scrivendo della documentazione si deve fare spesso riferimento alle voci dei menu. Per farlo correttamente, considerando ad es. il comando Copia del menu Modifica, si deve scrivere: <programlisting
>&lt;menuchoice&gt;&lt;guimenu&gt;Modifica&lt;/guimenu&gt;&lt;guimenuitem&gt;Copia&lt;/guimenuitem&gt;&lt;/menuchoice&gt;</programlisting
>. Siccome è piuttosto complesso, si può invece scrivere semplicemente "Modifica - Copia" e lasciare che sia il computer ad aggiungere i tag in questo modo. Si scrive un piccolo script per la shell chiamato mef e lo si memorizza ad es. nella directory bin di home: <programlisting
>sed s/"^\(.*\) - \(.*\)\$"/"&lt;menuchoice&gt;&lt;guimenu&gt;\1&lt;\/guimenu&gt;&lt;guimenuitem&gt;\2&lt;\/guimenuitem&gt;&lt;\/menuchoice&gt;"/</programlisting
> Non si deve dimenticare di renderlo eseguibile. Ora, nel file sorgente .docbook della documentazione si può scrivere "Modifica - Copia", selezionare questo testo, scegliere <menuchoice
><guimenu
>Strumenti</guimenu
><guimenuitem
>Selezione filtro tramite comando...</guimenuitem
></menuchoice
> e chiamare il file ~/bin/mef. Istantaneamente il testo "Modifica - Copia" verrà sostituito dal testo <programlisting
>&lt;menuchoice&gt;&lt;guimenu&gt;Modifica&lt;/guimenu&gt;&lt;guimenuitem&gt;Copia&lt;/guimenuitem&gt;&lt;/menuchoice&gt;</programlisting>
</para>


</listitem>

<listitem>
<formalpara>
<title
>Il plugin &doxygen;</title>
<indexterm zone="plugin-tools"
><primary
>&doxygen;</primary
></indexterm>
<indexterm zone="plugin-tools"
><primary
>strumento per la documentazione</primary
></indexterm>
<indexterm zone="plugin-tools"
><primary
>documentazione API</primary
></indexterm>

<para
>Questo plugin aiuta ad utilizzare lo strumento per la documentazione API &doxygen; (<ulink url="http://www.doxygen.org"
></ulink
>). Per generare la documentazione API del proprio progetto, in base alla configurazione contenuta nel file <filename
>Doxyfile</filename
> presente nella directory del progetto, selezionare <menuchoice
><guimenu
>Progetto</guimenu
> <guimenuitem
>Esegui doxygen</guimenuitem
></menuchoice
>. </para>
</formalpara>

<para
>Inoltre, si può configurare &doxygen; nella finestra di dialogo <menuchoice
><guimenu
>Progetto</guimenu
> <guimenuitem
>Opzioni progetto...</guimenuitem
></menuchoice
>, che è molto simile allo strumento &doxywizard;. </para>
</listitem>

<listitem>
<formalpara>
<title
>Il plugin &ctags;</title>
<indexterm zone="plugin-tools"
><primary
>&ctags;</primary
></indexterm>

<para
>Anche se il browser per le classi fornisce una visione approfondita dei simboli e delle classi del progetto, si può utilizzare anche lo strumento ctags, che supporta molti più linguaggi. </para>
</formalpara>

<para
>Il plugin viene attivato in <menuchoice
><guimenu
>Strumenti</guimenu
> <guimenuitem
>CTags...</guimenuitem
></menuchoice
>. Al primo avvio verrà chiesto di generare un database di ricerca. Quando si accetta, il programma &ctags; verrà avviato e creerà un file chiamato <filename
>tags</filename
> nella directory del progetto. È un file di testo contenente tutti i simboli dei file sorgenti. </para>

<para
>Si possono effettuare ricerche nel database dei simboli in due modi: quando è marcata la casella <guilabel
>Regular expression match</guilabel
>, il testo inserito verrà interpretato come una espressione regolare (tipo POSIX) e confrontata con i simboli esistenti. Ad esempio, il testo <literal
>.*Widget</literal
> corrisponde a tutti i simboli che terminano con <literal
>Widget</literal
>. Se la casella non è marcata, la ricerca sarà effettuata letteralmente. </para>

<para
>Quando viene fatta una ricerca si riceverà una lista di simboli corrispondenti accompagnati dal numero di linea del punto dove sono definiti. Facendo clic sulla lista si passerà al punto relativo.  </para>

<para
>&ctags; per alcuni linguaggi distingue i vari tipi di simboli. Ad esempio, Python ha classi e funzioni: si può decidere di cercare solo le classi selezionando il tipo relativo nella finestra di dialogo. </para>

<para
>Normalmente il database dei simboli non viene aggiornato quando si modificano i file sorgente. Di conseguenza dopo un po' i numeri di linea non saranno più corretti e mancheranno le nuove classi e funzioni. Perciò si dovrebbe aggiornare il file <filename
>tags</filename
> ad intervalli regolari premendo il pulsante <guibutton
>Rigenerare</guibutton
>. </para>
</listitem>

<listitem>
<formalpara>
<title
>Il plugin <command
>astyle</command
></title>
<indexterm zone="plugin-tools"
><primary
><command
>astyle</command
></primary
></indexterm>
<indexterm zone="plugin-tools"
><primary
><application
>Artistic Style</application
></primary
></indexterm>
<indexterm zone="plugin-tools"
><primary
>indentazione</primary
></indexterm>

<para
>Il plugin Astyle formatta il codice sorgente in base a specifiche regole. </para>
</formalpara>
</listitem>

<listitem>
<formalpara>
<title
>Il plugin <command
>regexptest</command
></title>
<indexterm zone="plugin-tools"
><primary
><command
>regexptest</command
></primary
></indexterm>
<indexterm zone="plugin-tools"
><primary
>debug</primary
><secondary
>espressioni regolari</secondary
></indexterm>
<indexterm zone="plugin-tools"
><primary
>espressioni regolari</primary
><secondary
>debug</secondary
></indexterm>

<para
>La progettazione con le espressioni regolari può diventare un lavoro pesante. Spesso al primo tentativo l'espressione corrisponde a troppe stringhe. In particolare, quando si lavora con un linguaggio compilato, i tempi di debug di una espressione regolare possono essere scomodi. Il plugin regexptest permette di esplorare direttamente i cambiamenti in una espressione regolare. Viene attivato con <menuchoice
><guimenu
>Strumenti</guimenu
> <guimenuitem
>Debug dell'espressione regolare</guimenuitem
></menuchoice
>. </para>
</formalpara>

<para
>Nelle caselle si può scegliere il tipo di motore di espressioni regolari da usare. Attualmente sono supportati il tipo definito dallo standard POSIX, usato dal programma &grep;, e la sintassi POSIX estesa usata dal programma &egrep;. </para>

<para
>Quando si inserisce un'espressione si riceverà un feedback immediato su ogni errore di sintassi. Inserendo un testo in <guilabel
>Test stringa</guilabel
>, si può vedere se l'espressione corrisponde alla stringa. In particolare, se l'espressione regolare include gruppi come <literal
>([a-z])</literal
>, viene visualizzato il contenuto del sottogruppo corrispondente in un elenco. </para>
</listitem>

<!--
<listitem>
<formalpara>
<title
>The <command
>konsole</command
> Plugin</title>
<indexterm zone="plugin-tools"
><primary
><command
>konsole</command
></primary
></indexterm>
<indexterm zone="plugin-tools"
><primary
>terminal</primary
><secondary
>embedded</secondary
></indexterm>
<para
></para>
</formalpara>
</listitem>
-->

</itemizedlist>

</appendix
> <!-- plugin-tools -->

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