<appendix id="plugin-tools">
<title
>Pluginværktøjer</title>

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

<para
>&kdevelop; indeholder et stort antal små værktøjer, som hjælper dig med at udføre visse opgaver. De fleste fungerer som plugin. Det betyder at hvis du ikke behøver et plugin kan du helt enkelt deaktivere det.</para>
<para
>Det betyder også at hvis du leder efter funktioner som skal findes, men ikke gør det, så er de måske implementerede i et plugin og dette plugin er deaktiveret. Der er for eksempel en funktion for hurtigåbning i menuen Fil, men kun hvis den er aktiveret i dialogen Projekt - Projektindstillinger. </para>
 
<para
>Teknisk er plugin baserede på klassen KDevPlugin definered i lib/interfaces/kdevplugin.h. Det følgende kommer fra en kommentar der.</para>

<para
>KDevPlugin er basisklassen for alle plugin i KDevelop. Et plugin er en komponent som indlæses i KDevelop-skallen ved start eller efter forespørgsel. Et plugin har en omfattelse som enten kan være: <itemizedlist>
<listitem
><simpara
>Kerne</simpara
></listitem>
<listitem
><simpara
>Global</simpara
></listitem>
<listitem
><simpara
>Projekt</simpara
></listitem>
</itemizedlist>
</para>

<para
>Kerneplugin er globale plugin som tilbyder nogle vigtige funktioner for "kernen", og derfor ikke kan vælges af brugeren på indstillingssiderne for plugin.</para>

<para
>Globale plugin er dem som kun kræver at skallen er indlæst og ikke benytter sig af grænsefladen KDevProject og/eller bruger information der berører hele projektet. For eksempel tillader pluginnet grafisk grænsefladetilstand udviklere at vælge hvilke brugergrænseflade de vil bruge. </para>

<para
>Projektplugin kræver at et projekt er indlæst, og indlæses eller fjernes  sammen med projektet. Hvis et plugin benytter sig af projektrelateret information er det et projektplugin. Håndtering af Automake behøver for eksempel kun være aktivt når et projekt baseret på Automake for øjeblikket er indlæst. </para>

<para
>Som nævnt ovenfor kan kerneplugin ikke deaktiveres. Globale plugin kan aktiveres eller deaktiveres med <menuchoice
><guimenu
>Opsætning</guimenu
> <guimenuitem
>Indstil KDevelop...</guimenuitem
></menuchoice
> under <guibutton
>plugin</guibutton
>. Projektplugin kan aktiveres eller deaktiveres med <menuchoice
><guimenu
>Projekt</guimenu
> <guimenuitem
>Projektindstillinger...</guimenuitem
></menuchoice
> under <guibutton
>plugin</guibutton
>. Aktive plugin kan give mange effekter i KDevelop. Afhængig af deres funktion kan de tilføje ekstra menuer, ekstra menupunkter, ekstra knapper i værktøjslinjen, osv. </para>

<para
>Plugin som er deaktiverede roder ikke menuerne til og indlæses ikke i hukommelsen. </para>


<para
>Følgende liste over plugin genereres af et lille script (listplugins.sh) skrevet af Volker Paul. Alle plugin har en .desktop-fil hvor information såsom navn og kommentarer skrives. Hvis kommentarerne i det følgende ikke er særligt nyttige, skyldes det på at pluginnets forfattere lavede dem på den måde.</para>
<para
>Pluginnerne er grupperede efter omfattelse (Kerne, Global, Projekt).</para>

<para
>Omfattelse: Kerne</para>
<itemizedlist>
<listitem
><formalpara id="KDevAppWizard">
<title
>Programguide</title>
<para
>Programguide</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevDiff">
<title
>Visning af forskelle</title>
<para
>Visning af forskelle</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevFileCreate">
<title
>Opret filer</title>
<para
>Opret filer</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevFullScreen">
<title
>Fuldskærm</title>
<para
>Fuldskærm</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevTipOfDay">
<title
>Dagens vink</title>
<para
>Dagens vink</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevUIChooser">
<title
>Valg af brugergrænseflade</title>
<para
>Sørger for en dialog til valg af brugergrænsefladetilstand.</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevVCSManager">
<title
>Håndtering af versionskontrolsystem</title>
<para
>Håndtering af versionskontrolsystem </para
></formalpara
></listitem>
</itemizedlist>

<para
>Omfattelse: Global</para>
<itemizedlist>
<listitem
><formalpara id="KDevAbbrev">
<title
>Ekspansion af forkortelser</title>
<para
>Giver understøttelse for indstillelige forkortelser: korte ord som ekspanderes til almindeligt brugte kodestrukturer.</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevDocumentation">
<title
>Dokumentation</title>
<para
>Dokumentationspluginnet tilbyder at browse og søge i lokal dokumentation og dokumentation på nettet, med understøttelse for flere dokumentationssystemer.</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevfilelist">
<title
>Filliste</title>
<para
>Sørger for en liste af alle for øjeblikket åbne filer. (Praktisk når fanebladslinjen ikke er rigtig bred nok.)</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevFileSelector">
<title
>Filvælger</title>
<para
>Kraftfuldt netværkstransparent filbrowserværktøj.</para
></formalpara
></listitem>
<listitem
><formalpara>
<title
>Skalfiltrering og indsætning</title>
<para
>Tilbyder en måde at behandle editortekst med kommandolinjeværktøj. Findes i værktøjsmenuen.</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevGrepView">
<title
>Grænseflade for grep</title>
<para
>Integrerer "find | grep" med KDevelop - tillader hurtig søgning i flere filer med mønster eller regulære udtryk.</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevKonsoleView">
<title
>Indlejret terminal</title>
<para
>Pluginnet giver KDevelop en indbygget terminal for hurtig og enkel adgang til kommandolinjen.</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevOpenWith">
<title
>Menutilføj "Åbn med"</title>
<para
>Pluginnet sørger for yderligere "åbn" alternativer i diverse sammenhængsafhængige menuer i KDevelop.</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevPartExplorer">
<title
>Part-udforskerværktøj</title>
<para
>Et grafisk værktøj til at udføre KTrader-lignende forespørgsler om registrerede tjenester.</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevRegexpTest">
<title
>Test af regulære udtryk</title>
<para
>Værktøj til at oprette og teste regulære udtryk mod almindelig syntaks for regulære udtryk.</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevReplace">
<title
>Erstatningspart</title>
<para
>Pluginnet er et interaktivt værktøj til at "søge og erstatte" i hele projektet. Søg med en streng eller et regulært udtryk, og vælg erstatningen som skal gøres ud fra en forhåndsvisning inden handlingen udføres. Når det er indlæst vises det i redigeringsmenuen.</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevscripting">
<title
>Scripter</title>
<para
>Skriptpluginnet tilbyder KScript-baseret styring af programmet KDevelop.</para
></formalpara
></listitem>
<listitem
><formalpara id="Code_Snippets">
<title
>Kodestumper</title>
<para
>Dette plugin gør det muligt at opbevare kodestumper og tilføje dem til din kode</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevTextTools">
<title
>Tekststruktur</title>
<para
>Sørger for en strukturoversigt og navigering for HTML- og TeX-filer</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevTools">
<title
>Tilføjelse i værktøjsmenuen</title>
<para
>Pluginnet sørger for en nem måde at tilføje eksterne programmer i værktøjsmenuen og værktøjslinjen.</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevvalgrind">
<title
>Valgrind-grænseflade</title>
<para
>Valgrind er et værktøj som hjælper dig med at finde hukommelseshåndteringsproblemer i programmer. http://developer.kde.org/~sewardj/</para
></formalpara
></listitem>
</itemizedlist>

<para
>Omfattelse: Projekt</para>
<itemizedlist>
<listitem
><formalpara id="KDevannotation">
<title
>noteringsplugin</title>
<para
>Noteringsbeskrivelse</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevAStyle">
<title
>Kildekodeformatering</title>
<para
>Et plugin til at formatere kildekode ifølge et givet sæt regler. Når det er indlæst findes det i værktøjsmenuen.</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevBookmarks">
<title
>Bogmærker</title>
<para
>Plugin som sørger for navigering og oversigt over aktive kildekodebogmærker og gør dem vedvarende mellem sessioner.</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevClassView">
<title
>Klassevisning</title>
<para
>Pluginnet viser et grafisk billede af alle klasser i et projekt, sammen med metoder og egenskaber, og giver mulighed for direkte navigering i kildekoden.</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevcopyto">
<title
>Kopiér til</title>
<para
>Enkelt plugin til overførsel af filer. Det udfører en filkopiering med alle protokoller som understøttes af KIO.</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevCTags2">
<title
>Ctags-grænseflade</title>
<para
>Ctags er et værktøj for kildekodenavigering med understøttelse for mange sprog. Når det er indlæst sørger det for en sammenhængsafhængig menu til at finde typedeklarationer eller definitioner, og desuden en spørgsmålsdialog. http://ctags.sourceforge.net/</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevdistpart">
<title
>Støtte for endelig pakning</title>
<para
>Hjælper til med at bygge og publicere det færdige projekt. Kun RPM-pakkeformatet understøttes for øjeblikket.</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevDoxygen">
<title
>Doxygen-understøttelse</title>
<para
>Doxygen-pluginnet sørger for en måde at angive og styre hvordan dokumenter skabes for et projekt, baseret på kildekodens indhold. Du skal have installeret Doxygen for at kunne bruge det. For mere information besøg http://www.doxygen.org.</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevQuickOpen">
<title
>Hurtigåbn</title>
<para
>Tilbyder en effektiv måde at finde og åbne filer, klasser og metoder i et stort projekt. Findes i menuen Fil og Værktøjer når det er indlæst.</para
></formalpara
></listitem>
<listitem
><formalpara id="KDevSecurity">
<title
>Sikkerhedskontrol</title>
<para
>Kodesikkerhedskontrol</para
></formalpara
></listitem>
</itemizedlist>
<para
>Indtil videre den genererede liste over plugin.</para>


<table id="table-project-parts">
<title
>Plugin for projekthåndtering i &kdevelop;</title>
<tgroup cols="2"
><tbody>
<row>
  <entry
>antproject</entry>
  <entry
>ANT-projekthåndtering (&Java;-programmer)</entry>
</row>
<row>
  <entry
>autoprojekt</entry>
  <entry
>Automake projekthåndtering</entry>
</row>
<row>
  <entry
>customproject</entry>
  <entry
>Egen projekthåndtering</entry>
</row>
<row>
  <entry
>trollproject</entry>
  <entry
>Qmake-baseret projekthåndtering</entry>
</row>
</tbody
></tgroup>
</table>
<para
>Ovenstående plugin er for øjeblikket (maj 2005) tomme. Måske vil projekthåndteringsunderstøttelse blive implementeret som plugin i fremtiden.</para>


<table>
<title
>Plugin for sprogunderstøttelse i &kdevelop;</title>
<tgroup cols="2">
<tbody>
<row
><entry
>cppsupport</entry
><entry
>Støtte for C/C++</entry
></row>
<row
><entry
>fortransupport</entry
><entry
>Støtte for Fortran</entry
></row>
<row
><entry
>javasupport</entry
><entry
>Støtte for &Java;</entry
></row>
<row
><entry
>perlsupport</entry
><entry
>Støtte for Perl</entry
></row>
<row
><entry
>phpsupport</entry
><entry
>Støtte for PHP</entry
></row>
<row
><entry
>pythonsupport</entry
><entry
>Støtte for Python</entry
></row>
</tbody
></tgroup>
</table>


<para
>Visse plugin beskrives i detalje i det følgende.</para>

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

<para
>Dette pluginprogram udfylder forkortelser af ofte brugte kodefragmenter. Det aktiveres ved at trykke på <keycombo
><keycap
>Ctrl</keycap
><keycap
>Mellemrum</keycap
></keycombo
>. Hvis du for eksempel skriver <literal
>"ife"</literal
> i C++ editoren, og trykker på <keycombo
><keycap
>Ctrl</keycap
><keycap
>Mellemrum</keycap
></keycombo
>, får du en <literal
>if-else</literal
> kodeskabelon og sparer nogle tastetryk. Opsætningen med forkortelser som understøttes afhænger af den redigerede fils programmeringssprog. For  eksempel til PHP er du naturligvis interesseret i andre kodeskabeloner end for &Java;. </para>
</formalpara>

<para
>Sættet af kodeskabeloner kan indstilles. Hvis pluginnet er aktiveret, kan du se hvilke der er tilgængelige med dialogen <menuchoice
><guimenu
>Opsætning</guimenu
> <guimenuitem
>Indstil KDevelop...</guimenuitem
></menuchoice
> under <guibutton
>Forkortelseer</guibutton
>. </para>
</listitem>

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

<para
>Dette tilbyder to funktioner. Hvis du vælger <menuchoice
><guimenu
>Værktøjer</guimenu
><guimenuitem
>Kør kommando</guimenuitem
></menuchoice
> kan du indtaste en skalkommando. Udskriften fra kommandoen indsættes i editorens buffer når du trykker på knappen <guibutton
>Start</guibutton
>. </para>
</formalpara>

<para
>En lignende funktion er tilgængelig med <menuchoice
><guimenu
>Værktøjer</guimenu
> <guimenuitem
>Filtrér markering ved kommando...</guimenuitem
></menuchoice
>. For at bruge den skal du markere et tekstområde i editoren. Hvis du nu skriver en skalkommando og klikker på knappen <guibutton
>Start</guibutton
>, startes kommandoen og markeringen bruges som standardindtastning til det. Standarduddata fra kommandoen indsættes derefter i editoren, og erstatter markeringen. </para>

<para
>Hvis du for eksempel skriver dokumentation, behøver du ofte at henvise til menupunkter. For at gøre dette på den rette måde for f.eks. kopieringskommandoen i menuen Redigér, skal du skrive <programlisting
>&lt;menuchoice&gt;&lt;guimenu&gt;Redigér&lt;/guimenu&gt;&lt;guimenuitem&gt;Kopiér&lt;/guimenuitem&gt;&lt;/menuchoice&gt;</programlisting
> Det er omstændeligt, altså skriver du hellere kun "Redigér" - "Kopiér" og lader maskinen udføre mærkningen. Du kan gøre dette sådan her: Du skriver et lille skalscript som hedder mef, som du for eksempel placerer i undermappen bin i din hjemmemappe: <programlisting
>sed s/"^\(.*\) - \(.*\)\$"/"&lt;menuchoice&gt;&lt;guimenu&gt;\1&lt;\/guimenu&gt;&lt;guimenuitem&gt;\2&lt;\/guimenuitem&gt;&lt;\/menuchoice&gt;"/</programlisting
> Glem ikke at gøre det kørbart. Det er alt. Nu skriver du "Redigér" - "Kopiér" i dokumentationens .dokbook-kildekode. Du markerer teksten du netop har indskrevet, vælger <menuchoice
><guimenu
>Værktøjer</guimenu
><guimenuitem
>Filtrér markering ved kommando...</guimenuitem
></menuchoice
> og kalder ~/bin/mef. Så erstattes med det samme "Redigér" - "Kopiér" med <programlisting
>&lt;menuchoice&gt;&lt;guimenu&gt;Redigér&lt;/guimenu&gt;&lt;guimenuitem&gt;Kopiér&lt;/guimenuitem&gt;&lt;/menuchoice&gt;</programlisting>
</para>


</listitem>

<listitem>
<formalpara>
<title
>Pluginprogrammet &doxygen;</title>
<indexterm zone="plugin-tools"
><primary
>&doxygen;</primary
></indexterm>
<indexterm zone="plugin-tools"
><primary
>dokumentationsværktøj</primary
></indexterm>
<indexterm zone="plugin-tools"
><primary
>API-dokumentation</primary
></indexterm>

<para
>Dette hjælper dig med at bruge API-dokumentationsværktøjet &doxygen; (<ulink url="http://www.doxygen.org"
></ulink
>). Du kan vælge <menuchoice
><guimenu
>Projekt</guimenu
><guimenuitem
>Kør Doxygen</guimenuitem
></menuchoice
> for at oprette API-dokumentation for det nuværende projekt baseret på konfigurationen som angives af filen <filename
>Doxyfile</filename
> i projektmappen. </para>
</formalpara>

<para
>Desuden kan du indstille &doxygen; med dialogen <menuchoice
><guimenu
>Projekt</guimenu
><guimenuitem
>Projektindstillinger...</guimenuitem
></menuchoice
>. Dialogen er meget lig værktøjet &doxywizard;. </para>
</listitem>

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

<para
>Selv om klassesøgeren giver dig et udførligt overblik over symboler og klasser i projektet, kan du også ville bruge ctags-værktøjet. Det understøtter i særdelshed mange flere sprog end klassesøgeren. </para>
</formalpara>

<para
>Du aktiverer pluginprogrammet under <menuchoice
><guimenu
>Værktøj</guimenu
><guimenuitem
>CTags...</guimenuitem
></menuchoice
>. Når du starter det for første gang, bliver du bedt om  først at oprette en søgedatabase. Når du accepterer dette, startes &ctags;-programmet og laver en fil som hedder <filename
>tags</filename
> i projektmappen. Dette er en tekstfil som indeholder alle symboler i kildekodefilerne. </para>

<para
>Du kan søge på to måder i symboldatabasen: når feltet <guilabel
>Matchning med regulært udtryk</guilabel
> er markeret, tolkes teksten som du skriver som et regulært udtryk (POSIX-varianten) og matches med eksisterende symboler. Teksten <literal
>.*Widget</literal
> søger for eksempel efter alle symboler som slutter med <literal
>Widget</literal
>. Hvis feltet ikke er markeret, er søgningen verbatim. </para>

<para
>Under søgningen vises en liste med matchende symboler, sammen med linjenummeret hvor de defineres. Du springer til respektive steder ved at klikke i listen. </para>

<para
>For visse sprog skelner &ctags; mellem forskellige typer af symboler. Python har for eksempel klasser og funktioner. Du kan søge kun efter klasser ved at afkrydse den tilsvarende type i dialogen. </para>

<para
>Symboldatabasen opdateres normalt ikke når kildekoden ændres. På grund af dette kommer linjenumrene ikke til at være rigtige længe efter et stykke tid, og nytilføjede klasser og funktioner vil mangles. Derfor bør du opdatere filen <filename
>tags</filename
> med regelmæssige intervaller, ved at trykke på knappen <guibutton
>Genopret</guibutton
>. </para>
</listitem>

<listitem>
<formalpara>
<title
>Pluginprogrammet <command
>astyle</command
></title>
<indexterm zone="plugin-tools"
><primary
><command
>a-stil</command
></primary
></indexterm>
<indexterm zone="plugin-tools"
><primary
><application
>Grafisk stil</application
></primary
></indexterm>
<indexterm zone="plugin-tools"
><primary
>indrykning</primary
></indexterm>

<para
>A-stil er et plugin til at formatere kildekoden ifølge et specifikt sæt regler. </para>
</formalpara>
</listitem>

<listitem>
<formalpara>
<title
>Pluginprogrammet <command
>regexptest</command
></title>
<indexterm zone="plugin-tools"
><primary
><command
>regexptest</command
></primary
></indexterm>
<indexterm zone="plugin-tools"
><primary
>fejlsøgning</primary
><secondary
>regulære udtryk</secondary
></indexterm>
<indexterm zone="plugin-tools"
><primary
>regulære udtryk</primary
><secondary
>fejlsøgning</secondary
></indexterm>

<para
>At konstruere regulære udtryk kan være et hårdt arbejde. Ofte matcher det første forsøg med et udtryk for mange strenge. I særdeleshed ved arbejde med et kompileret sprog kan cykeltiden ved fejlsøgning af et regulært udtryk være besværlig. Pluginprogrammet regexptest lader dig udforske ændringer i et regulært udtryk direkte. Det aktiveres ved at vælge <menuchoice
><guimenu
>Værktøj</guimenu
> <guimenuitem
>Fejlsøg regulært udtryk...</guimenuitem
></menuchoice
>. </para>
</formalpara>

<para
>I variantdropned-feltet kan du vælge hvilken variant af regulære udtryk der skal bruges. For øjeblikket understøttes varianten som defineres af POSIX-standarden, som bruges af programmet &grep;, og den udvidede POSIX-syntaks som bruges af programmet &egrep;. </para>

<para
>Når du indtaster et udtryk, får du umiddelbart tilbagemelding om eventuelle syntaksfejl i det. Ved at indtaste en tekst under <guilabel
>Teststreng</guilabel
>, kan du se om udtrykket matcher strengen. I særdeleshed om det regulære udtryk indeholder grupper, såsom <literal
>"([a-z])"</literal
>, vises indholdet af de matchede delgrupper i et listefelt. </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 -->

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