# Plugin

&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.

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.

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.

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:

- Core

- Globale

- Progetto

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

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.

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.

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

I plugin disabilitati non disturberanno i menu e non verranno caricati in memoria.

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.

I plugin vengono raggruppati a seconda del loro ambito (core, globale, di progetto).

Ambito: Core

- ## Procedura guidata per le applicazioni

  Procedura guidata Nuovo Progetto

- ## Difference Viewer

  Visualizzatore differenze

- ## FileCreate

  FileCreate

- ## FullScreen

  FullScreen

- ## Tip of the Day

  Consiglio del giorno

- ## Selezione dell'interfaccia utente

  Fornisce una finestra di dialogo per la selezione della modalità dell'interfaccia utente

- ## VCSManager

  Gestore del sistema di controllo della versione

Ambito: Globale

- ## Espansione delle abbreviazioni

  Fornisce il supporto per le abbreviazioni personalizzabili - parole brevi che vengono espanse in strutture di codice usate frequentemente.

- ## Documentazione

  Il plugin Documentation permette di navigare e di effettuare ricerche nella documentazione locale e online con il supporto per vari sistemi di documentazione.

- ## ListaFile

  Fornisce un elenco di tutti i file attualmente aperti. (Comodo quando la barra delle schede non è abbastanza lunga).

- ## Selettore File

  Una potente utility trasparente alla rete per sfogliare i file.

- ## Inserimento e filtraggio da shell

  Permette di modificare il testo nell'editor usando strumenti a linea di comando. È presente nel menu Strumenti.

- ## Interfaccia a Grep

  Integra le funzioni di ricerca e del programma grep in KDevelop - permette la ricerca veloce in file multipli usando pattern o espressioni regolari.

- ## Konsole integrata

  Questo plugin fornisce una console integrata in KDevelop che permette un accesso facile e rapido alla linea di comando.

- ## Aggiunta al menu della voce "Apri con"

  Questo plugin fornisce varie alternative di apertura nei vari menu contestuali.

- ## Strumento per l'esplorazione di componenti

  Uno strumento a interfaccia grafica per effettuare interrogazioni di tipo KTrader ai servizi registrati.

- ## Convalidatore per espressioni regolari

  Strumento per scrivere e effettuare il test di espressioni regolari in base alle sintassi più comuni.

- ## Componente per sostituire

  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.

- ## Script

  Questo plugin fornisce le funzionalità di scripting basate su KScript

- ## Frammenti di codice

  Questo plugin permette di memorizzare i frammenti di codice e aggiungerli al proprio codice

- ## Struttura testo

  Fornisce una visualizzazione strutturata e la navigazione nei file HTML e TEX.

- ## Aggiunte al menu Strumenti

  Questo plugin fornisce un sistema semplice per aggiungere applicazioni esterne al menu strumenti e alla barra degli strumenti.

- ## Interfaccia a Valgrind

  Valgrind è uno strumento che aiuta a trovare i problemi di gestione della memoria nei programmi. http://developer.kde.org/~sewardj/

Ambito: Progetti

- ## Plugin annotation

  Descrizione di annotation

- ## Formattatore del codice sorgente

  Plugin per la formattazione del codice sorgente in base a specifiche regole. Quando viene caricato si trova nel menu Strumenti.

- ## Segnalibri

  Questo plugin permette la navigazione tra i segnalibri e li memorizza tra una sessione e l'altra.

- ## Visualizza Classe

  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.

- ## CopyTo

  Semplice plugin per il caricamento dei file (upload). Effettua la copia dei file attraverso qualunque protocollo supportato da KIO.

- ## Interfaccia a CTags

  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/

- ## Supporto finale per la creazione dei pacchetti

  Aiuta nella costruzione e pubblicazione del progetto finale. Per il momento è supportato solo il tipo di pacchetto RPM.

- ## Supporto Doxygen

  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.

- ## Apertura rapida

  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.

- ## Security Checker

  Controlla la sicurezza del codice

Per l'elenco dei plugin generato è tutto.

## Plugin per la gestione dei progetti in &kdevelop;

antproject | Gestore di progetto ANT (per applicazioni &Java;)
autoproject | Gestore di progetto Automake
customproject | Gestore di progetto personalizzato
trollproject | Gestore di progetto basato su QMake

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.

## Plugin per il supporto dei linguaggi in &kdevelop;

cppsupport | Supporto per C/C++
fortransupport | Supporto per Fortran
javasupport | Supporto per &Java;
perlsupport | Supporto per Perl
phpsupport | Supporto per PHP
pythonsupport | Supporto per Phyton

Di seguito verranno esaminati alcuni tra questi plugin.

- ## Il plugin `abbrev`

  Questo plugin espande le abbreviazioni in frammenti di codice molto usati. Si attiva premendo Ctrl Spazio. Per esempio, se si inserisce nell'editor `"ife"` in un file C++ e si preme Ctrl Spazio, si ottiene un modello di codice `if-else` 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;.

  L'insieme dei modelli di codice è configurabile. Se il plugin è abilitato, si possono vedere quelli disponibili in Impostazioni Configura KDevelop... in Abbreviazioni.

- ## Il plugin `filter`

  Questo plugin fornisce due funzioni. Se si seleziona Strumenti Esegui comando..., si può inserire un comando di shell. L'output del comando è inserito nel buffer dell'editor quando si preme il pulsante Avvia.

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

  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:

      <menuchoice><guimenu>Modifica</guimenu><guimenuitem>Copia</guimenuitem></menuchoice>

  . 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:

      sed s/"^\(.*\) - \(.*\)\$"/"<menuchoice><guimenu>\1<\/guimenu><guimenuitem>\2<\/guimenuitem><\/menuchoice>"/

  Non si deve dimenticare di renderlo eseguibile. Ora, nel file sorgente .docbook della documentazione si può scrivere "Modifica - Copia", selezionare questo testo, scegliere Strumenti Selezione filtro tramite comando... e chiamare il file ~/bin/mef. Istantaneamente il testo "Modifica - Copia" verrà sostituito dal testo

      <menuchoice><guimenu>Modifica</guimenu><guimenuitem>Copia</guimenuitem></menuchoice>

- ## Il plugin &doxygen;

  Questo plugin aiuta ad utilizzare lo strumento per la documentazione API &doxygen; (). Per generare la documentazione API del proprio progetto, in base alla configurazione contenuta nel file `Doxyfile` presente nella directory del progetto, selezionare Progetto Esegui doxygen.

  Inoltre, si può configurare &doxygen; nella finestra di dialogo Progetto Opzioni progetto..., che è molto simile allo strumento &doxywizard;.

- ## Il plugin &ctags;

  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.

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

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

  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.

  &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.

  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 `tags` ad intervalli regolari premendo il pulsante Rigenerare.

- ## Il plugin `astyle`

  Il plugin Astyle formatta il codice sorgente in base a specifiche regole.

- ## Il plugin `regexptest`

  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 Strumenti Debug dell'espressione regolare.

  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;.

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