KDevelop4/Manual/Working with source code/da: Difference between revisions

From KDE UserBase Wiki
(Importing a new version from external source)
(Importing a new version from external source)
 
(163 intermediate revisions by 2 users not shown)
Line 11: Line 11:
Til arbejdet med projekter har '''KDevelop''' begrebet ''værktøjer''. Et værktøj giver dig en særlig visning af kildekoden eller en handling, som det kan udføre. Værktøjer repræsenteres af knapper, som findes rundt omkring i vinduets kant (med lodret tekst langs venstre og højre kant eller vandret langs bunden). Hvis du klikker på dem, så udvides de til et undervindue — en ''visning'' — indenfor hovedvinduet. Hvis du klikker på værktøjsknappen en gang til, så forsvinder visningen igen.  
Til arbejdet med projekter har '''KDevelop''' begrebet ''værktøjer''. Et værktøj giver dig en særlig visning af kildekoden eller en handling, som det kan udføre. Værktøjer repræsenteres af knapper, som findes rundt omkring i vinduets kant (med lodret tekst langs venstre og højre kant eller vandret langs bunden). Hvis du klikker på dem, så udvides de til et undervindue — en ''visning'' — indenfor hovedvinduet. Hvis du klikker på værktøjsknappen en gang til, så forsvinder visningen igen.  


{{Note/da|1=For at få et undervindue til af forsvinde kan du også klikke på knappen <menuchoice>x</menuchoice> øverst til højre i undervinduet; dette fjerner dog også den tilhørende værktøjsknap fra vindueskanten, i hvert fald i '''KDevelop''' 4.2.x; og den skal du bruge for at få undervinduet frem igen. Se herunder, hvordan du får knappen tilbage til vindueskanten på samme måde, som du får enhver anden værktøjsknap placeret der. Denne opførsel er rapporteret som [http://bugs.kde.org/show_bug.cgi?id=270018 bug 270018]}}  
{{Note/da|1=For at få et undervindue til af forsvinde kan du også klikke på knappen <menuchoice>x</menuchoice> øverst til højre i undervinduet}}  


Billedet ovenfor viser et eksempel på værktøjer placeret i den venstre og højre kant. I billeder er værktøjet <menuchoice>Klasser</menuchoice> åbent til venstre og værktøjet <menuchoice>Tekststumper</menuchoice> til højre sammen med en editor til en kildefil i midten. For det meste vil du nok kun have editoren åben og måske værktøjet <menuchoice>Klasser</menuchoice> eller <menuchoice>Kodebrowser</menuchoice> til venstre. Andre værktøjer vil sikkert kun være åbne midlertidigt mens du bruger dem, sådan at der bliver mere plads til editoren.
Billedet ovenfor viser et eksempel på værktøjer placeret i den venstre og højre kant. I billeder er værktøjet <menuchoice>Klasser</menuchoice> åbent til venstre og værktøjet <menuchoice>Tekststumper</menuchoice> til højre sammen med en editor til en kildefil i midten. For det meste vil du nok kun have editoren åben og måske værktøjet <menuchoice>Klasser</menuchoice> eller <menuchoice>Kodebrowser</menuchoice> til venstre. Andre værktøjer vil sikkert kun være åbne midlertidigt mens du bruger dem, sådan at der bliver mere plads til editoren.
Line 17: Line 17:
Når du kører '''KDevelop''' første gang, så skulle du allerede have værktøjsknappen <menuchoice>Projekter</menuchoice>. Klik på den: det vil åbne et undervindue, som forneden viser de projekter, som du har føjet til sessionen og en visning af mapperne i dit projekt for oven.
Når du kører '''KDevelop''' første gang, så skulle du allerede have værktøjsknappen <menuchoice>Projekter</menuchoice>. Klik på den: det vil åbne et undervindue, som forneden viser de projekter, som du har føjet til sessionen og en visning af mapperne i dit projekt for oven.


Der er mange andre værktøjer, som du kan bruge i '''KDevelop''', men deres knapper er ikke alle til stede i vindueskanten fra begyndelsen. For at føje flere til vælger du menuen <menuchoice>Vindue -> Tilføj værktøjsvisning...</menuchoice>. Her er nogle, som du sikkert vil få glæde af:
Der er mange [[Special:myLanguage/KDevelop4/Manual/Tool_list|andre værktøjer]], som du kan bruge i '''KDevelop''', men deres knapper er ikke alle til stede i vindueskanten fra begyndelsen. For at føje flere til vælger du menuen <menuchoice>Vindue -> Tilføj værktøjsvisning...</menuchoice>. Her er nogle, som du sikkert vil få glæde af:


* '''Klasser''': En fuldstændig liste af alle klasser, som bliver defineret i en af din sessions projekter med alle deres medlemsfunktioner og -variable. Klik på et medlem for at åbne kildeeditorens vindue med markøren på det sted, hvor det emne, du klikkede på er defineret.
* '''Klasser''': En fuldstændig liste af alle klasser, som bliver defineret i en af din sessions projekter med alle deres medlemsfunktioner og -variable. Klik på et medlem for at åbne kildeeditorens vindue med markøren på det sted, hvor det emne, du klikkede på er defineret.
Line 29: Line 29:
* '''Dokumentation''': Lader dig søge efter man-sider og andre hjælpedokumenter.
* '''Dokumentation''': Lader dig søge efter man-sider og andre hjælpedokumenter.


* '''Tekststumper''': Her kan du gemme tekststumper, som du ofte har brug for og ikke har lyst til at skulle skrive hver gang. I projektet, som vises i billedet ovenfor er der ofte brug for kode som dette:<br /><code>for (typename Triangulation&lt;dim&gt;::active_cell_iterator cell = triangulation.begin_active(); cell != triangulation.end(); ++cell)</code><br />Det er besværligt udtryk, med det ser næsten ud på samme måde, hver gang du har brug for sådan en løkke. Det gør udtrykket til en god kandidat til en tekststump.
* '''Tekststumper''': Her kan du gemme tekststumper, som du ofte har brug for og ikke har lyst til at skulle skrive hver gang. I projektet, som vises i billedet ovenfor er der ofte brug for kode som <br />
{{Input|1=<nowiki>for (typename Triangulation&lt;dim&gt;::active_cell_iterator cell  
      = triangulation.begin_active();  
  cell != triangulation.end();
  ++cell)</nowiki>}}<br />Det er besværligt udtryk, med det ser næsten ud på samme måde, hver gang du har brug for sådan en løkke. Det gør udtrykket til en god kandidat til en tekststump.


* '''Konsole''': Åbner et vindue med en kommandolinje i '''KDevelops''' hovedvindue til de situationer, hvor du blot skal have udført enkelte kommandoer (fx hvis du skal køre <code>./configure</code>).
* '''Konsole''': Åbner et vindue med en kommandolinje i '''KDevelops''' hovedvindue til de situationer, hvor du blot skal have udført enkelte kommandoer (fx hvis du skal køre <code>./configure</code>).
En fuldstændig liste med værktøjer og visninger findes [[Special:myLanguage/KDevelop4/Manual/Tool list|her]].


For mange programmører er det vigtigst at have god plads i lodret retning. For at opnå dette kan du arrangere dine værktøjsvisninger i venstre og højre vindueskant. For at flytte et værktøj højreklikker du på dets knap og vælger en ny position til det.
For mange programmører er det vigtigst at have god plads i lodret retning. For at opnå dette kan du arrangere dine værktøjsvisninger i venstre og højre vindueskant. For at flytte et værktøj højreklikker du på dets knap og vælger en ny position til det.
Line 43: Line 45:
'''KDevelop''' ''forstår'' kildekode og er derfor virkelig god til at at give dig information om  variable eller funktioner, som kan optræde i dit program. Her er for eksempel et øjebliksbillede af arbejdet med et stump kode, hvor musen svæver over symbolet <code>cell</code> i linje 1316 (hvis du foretrækker at bruge tastaturet, så kan du opnå det samme ved at holde <keycap>Alt</keycap>-tasten nede et stykke tid):
'''KDevelop''' ''forstår'' kildekode og er derfor virkelig god til at at give dig information om  variable eller funktioner, som kan optræde i dit program. Her er for eksempel et øjebliksbillede af arbejdet med et stump kode, hvor musen svæver over symbolet <code>cell</code> i linje 1316 (hvis du foretrækker at bruge tastaturet, så kan du opnå det samme ved at holde <keycap>Alt</keycap>-tasten nede et stykke tid):


[[image:kdevelop-13.png|thumb|600px|center]]
[[Image:kdevelop-13.png|thumb|600px|center]]


'''KDevelop''' viser dig et værktøjstip, som inkluderer variablens type (her <code>DoFHandler&lt;dim&rt;active_cell_iterator</code>), hvor denne variabel er erklæret (hvad den er ''indeholdt i'' &mdash; her den omgivende funktion <code>get_maximal_velocity</code>, eftersom det er en lokal variabel, ikke en funktion, klasse eller navnerum) og hvor den er erklæret (i linje 1314, blot nogle få linjer oppe i koden).
'''KDevelop''' viser dig et værktøjstip, som inkluderer variablens type (her <code>DoFHandler&lt;dim&gt;active_cell_iterator</code>), hvor denne variabel er erklæret (hvad den er ''indeholdt i'' &mdash; her den omgivende funktion <code>get_maximal_velocity</code>, eftersom det er en lokal variabel, ikke en funktion, klasse eller navnerum) og hvor den er erklæret (i linje 1314, blot nogle få linjer oppe i koden).


I den aktuelle sammenhæng har symbolet, som musen svæver over ingen tilknyttet dokumentation. Hvis musen havde svævet over symbolet <code>get_this_mpi_process</code> i linje 1318 i dette eksempel, så ville det have set sådan ud:
I den aktuelle sammenhæng har symbolet, som musen svæver over ingen tilknyttet dokumentation. Hvis musen havde svævet over symbolet <code>get_this_mpi_process</code> i linje 1318 i dette eksempel, så ville det have set sådan ud:
Line 55: Line 57:
Hvad der gør disse værktøjstips endnu nyttigere er, at de er dynamiske: Du kan klikke på linket <menuchoice>Container</menuchoice> for at få information om den kontekst, som variablen er erklæret i (fx om navnerummet <code>System</code>, så som hvor det bliver erklæret, defineret, brugt eller hvad dets dokumentation er) og du kan klikke på det blå link for at få flyttet tekstmarkøren hen til symbolets erklæring (i eksemplet til linje 289 i <code>utilities</code>) eller få en liste over steder, hvor dette symbol bruges i den aktuelle fil eller overalt i projekterne, som hører den aktuelle session. Det sidste er ofte nyttigt, hvis du for eksempel vil undersøge, hvordan en given funktion bruges i en større kodebase.
Hvad der gør disse værktøjstips endnu nyttigere er, at de er dynamiske: Du kan klikke på linket <menuchoice>Container</menuchoice> for at få information om den kontekst, som variablen er erklæret i (fx om navnerummet <code>System</code>, så som hvor det bliver erklæret, defineret, brugt eller hvad dets dokumentation er) og du kan klikke på det blå link for at få flyttet tekstmarkøren hen til symbolets erklæring (i eksemplet til linje 289 i <code>utilities</code>) eller få en liste over steder, hvor dette symbol bruges i den aktuelle fil eller overalt i projekterne, som hører den aktuelle session. Det sidste er ofte nyttigt, hvis du for eksempel vil undersøge, hvordan en given funktion bruges i en større kodebase.


{{Note/da|1=Informationen i værktøjstippet er flygtig &mdash; den er afhængig af, at du holder <keycap>Alt</keycap>-tasten nede eller holder musen svævende. Hvis du ønsker et mere permanent visning, så åbn værktøjsvisningen '''Kodebrowser''' i et af undervinduerne. For eksempel er markøren her på samme funktion som i eksemplet ovenfor og værktøjsvisningen til venstre giver den samme slags information som værktøjstippet før:<!--}}-->
{{Note/da|1=Informationen i værktøjstippet er flygtig &mdash; den er afhængig af, at du holder <keycap>Alt</keycap>-tasten nede eller holder musen svævende. Hvis du ønsker et mere permanent visning, så åbn værktøjsvisningen <menuchoice>Kodebrowser</menuchoice> i et af undervinduerne. For eksempel er markøren her på samme funktion som i eksemplet ovenfor og værktøjsvisningen til venstre giver den samme slags information som værktøjstippet før:<!--}}-->


[[Image:kdevelop-15.png|thumb|500px|center]]
[[Image:kdevelop-15.png|thumb|500px|center]]
Line 75: Line 77:
==== Information om projekter og sessioner ====
==== Information om projekter og sessioner ====


Der er mange måder at få information om et helt projekt (eller endda om alle projekter i en session). Den slags information gives som regel i en værktøjsvisning. For eksempel giver værktøjsvisningen '''Klasser''' dig en træstruktur over alle klasser og omgivende navnerum for alle projekter i en session sammen med hver enkelt klasses medlemsfunktioner og -variable:
Der er mange måder at få information om et helt projekt (eller endda om alle projekter i en session). Den slags information gives som regel i en værktøjsvisning. For eksempel giver værktøjsvisningen <menuchoice>Klasser</menuchoice> dig en træstruktur over alle klasser og omgivende navnerum for alle projekter i en session sammen med hver enkelt klasses medlemsfunktioner og -variable:


[[Image:kdevelop-17.png|thumb|600px|center]]
[[Image:kdevelop-17.png|thumb|600px|center]]
Line 81: Line 83:
Lader du musen svæve over et emne, så får du igen information om symbolet, hvor det bliver erklæret, defineret og brugt. Dobbeltklikker du på  et emne i trævisningen, så åbnes et editorvindue med markøren placeret der, hvor symbolet bliver erklæret eller defineret.
Lader du musen svæve over et emne, så får du igen information om symbolet, hvor det bliver erklæret, defineret og brugt. Dobbeltklikker du på  et emne i trævisningen, så åbnes et editorvindue med markøren placeret der, hvor symbolet bliver erklæret eller defineret.


Med der er andre måder at få vist global information. For eksempel giver værktøjsvisningen '''Dokumenter''' en oversigt over et projekt i form af de forskellige slags filer eller andre dokumenter, som indgår i projektet:
Med der er andre måder at få vist global information. For eksempel giver værktøjsvisningen <menuchoice>Dokumenter</menuchoice> en oversigt over et projekt i form af de forskellige slags filer eller andre dokumenter, som indgår i projektet:


[[Image:kdevelop-18.png|thumb|600px|center]]
[[Image:kdevelop-18.png|thumb|600px|center]]
==== Fremhævning med alle regnbuens farver ====
'''KDevelop''' bruger en række farver til at fremhæve forskellige objekter i kildekoden. Hvis du ved, hvad de forskellige farver betyder, så kan du lynhurtigt få en masse information fra kildekoden blot ved at se på farverne uden at læse en eneste tegn. Reglerne for fremhævning er som følger:
* Objekter af type Class, Struct og Enum  (værdierne og typen), (globale) funktioner og klassemedlemmer har fået tildelt hver deres farve (klasser er grønne, enums er mørkerøde og medlemmer er mørkegule eller violette, (global) funktioner er altid violette).
* Alle globale variable er mørkegrønne.
* Identifikatorer, som er typedefs for andre typer er grønblå.
* Alle erklæringer og definitioner af objekter er i fede typer.
* Hvis et medlem tilgås inde fra den kontekst, hvor det er defineret (base- eller afledet klasse) så vises det i gult, ellers er det violet.
* Hvis et medlem er private eller protected får det en lidt mørkere farve, når det bruges.
* For variable, som er lokale i en funktionskrops virkefelt vælges farver baseret på en hashværdi af identifikatoren. Dette gælder også funktionens parametre. En identifikator vil altid have den samme farve indenfor sit virkefelt (men den samme identifikator vil få en anden farve, hvis den repræsenterer et andet objekt, dvs. hvis den bliver omdefineret i et indlejret virkefelt), og du får som regel den samme farve for den samme identifikator i forskellige virkefelter. Hvis du således har flere funktioner, som tager parametre med de samme navne, så vil argumenterne altid få de samme farver.
* Identifikatorer, for hvilke '''KDevelop''' ikke kunne finde den tilsvarende erklæring farves hvide. Dette kan undertiden forårsages af manglende <code>#include</code>-erklæringer.
* Ud over denne farvning vil normal editor-syntaksfremhævning blive udført som det kendes fra '''Kate'''. '''KDevelops''' semantiske fremhævning vil altid have forrang for editorens fremhævning, hvis der er en konflikt.
{{Note/da|Farvning af lokale variable kan slås fra i <menuchoice>Indstillinger... -> Indstil KDevelop... -> Sprogunderstøttelse -> Lokal farvelægningsintensitet</menuchoice> ved at skubbe skyderen til sin mindste værdi. Tilsvarende kan farvning af globale variable, globale funktioner, klasser, structs, enumerationer og medlemmer af klasser kan slås fra i <menuchoice>Indstillinger... -> Indstil KDevelop... -> Sprogunderstøttelse -> Global farvelægningsintensitet</menuchoice>}}
<span id="Navigating in source code"></span>
<span id="Navigating in source code"></span>
=== Bevæg dig rundt i kildekoden ===
=== Bevæg dig rundt i kildekoden ===
Line 95: Line 121:
'''KDevelop''' er meget mere end en editor, men den er ''også'' er kildeeditor. Som sådan kan du selvfølge flytte markøren op, ned og til højre og venstre i kildefilen. Du kan også bruge tasterne <keycap>PageUp</keycap> og <keycap>PageDown</keycap> og alle de andre kommandoer, som du kender det fra enhver brugbar editor.
'''KDevelop''' er meget mere end en editor, men den er ''også'' er kildeeditor. Som sådan kan du selvfølge flytte markøren op, ned og til højre og venstre i kildefilen. Du kan også bruge tasterne <keycap>PageUp</keycap> og <keycap>PageDown</keycap> og alle de andre kommandoer, som du kender det fra enhver brugbar editor.


==== Navigatio på filniveau og i omrids-tilstand ====
==== Navigation på filniveau og i omrids-tilstand ====


På filniveau har '''KDevelop''' mange måder at navigere igennem kildekoden på, herunder følgende metoder til at hoppe rundt i en given fil:
På filniveau har '''KDevelop''' mange måder at navigere igennem kildekoden på, herunder følgende metoder til at hoppe rundt i en given fil:
Line 101: Line 127:
* '''Omrids''': Du kan få et overblik over, hvad der er i den aktuelle fil på mindst tre forskellige måder:
* '''Omrids''': Du kan få et overblik over, hvad der er i den aktuelle fil på mindst tre forskellige måder:
** Ved at klikke i tekstboksen <menuchoice>Omrids</menuchoice> øverst til højre i hovedvinduet eller taste <keycap>Alt + Ctrl + N</keycap> åbner du en dropned-liste med alle funktions- og klasseerklæringer:<br />[[image:kdevelop-19.png|thumb|600px|center]]<br />Du kan så vælge at hoppe til en af dem eller &mdash; hvis der er mange &mdash; begynde at skrive, hvorved listen bliver mindre og mindre efterhånden som de emner, som ikke passer med det du har skrevet forsvinder fra listen.
** Ved at klikke i tekstboksen <menuchoice>Omrids</menuchoice> øverst til højre i hovedvinduet eller taste <keycap>Alt + Ctrl + N</keycap> åbner du en dropned-liste med alle funktions- og klasseerklæringer:<br />[[image:kdevelop-19.png|thumb|600px|center]]<br />Du kan så vælge at hoppe til en af dem eller &mdash; hvis der er mange &mdash; begynde at skrive, hvorved listen bliver mindre og mindre efterhånden som de emner, som ikke passer med det du har skrevet forsvinder fra listen.
** Placér markøren på i linje på filniveau (dvs. udenfor erklæringer og definitioner af funktioner og klasser) mens værktøjsvisningen '''Kodebrowser''' er åben:<br />[[image:kdevelop-16.png|thumb|600px|center]]<br />Dette giver dig også et oberblik over den aktuelle fil og lader dig vælge, hvor du vil hoppe til.
** Placér markøren på i linje på filniveau (dvs. udenfor erklæringer og definitioner af funktioner og klasser) mens værktøjsvisningen <menuchoice>Kodebrowser</menuchoice> er åben:<br />[[image:kdevelop-16.png|thumb|600px|center]]<br />Dette giver dig også et oberblik over den aktuelle fil og lader dig vælge, hvor du vil hoppe til.
** Lader du musen svæve over fanebladet for en af de åbne filer, så får du også et omrids af filen i dette faneblad.
** Lader du musen svæve over fanebladet for en af de åbne filer, så får du også et omrids af filen i dette faneblad.


Line 108: Line 134:
==== Navigation i projekter og sessioner: Semantisk navigation ====
==== Navigation i projekter og sessioner: Semantisk navigation ====


Som nævnt andetsteds arbejder '''KDevelop''' normalt ikke men enkelte kildefiler men ser på projekter som et hele (eller snarere med alle de projekter, som er en del af den aktuelle session). Som konsekvens af det giver den dig mange muligheder for at navigere igennem hele projekter. Nogle af disse muligheder er afledt af de funktioner, som vi allerede har omtalt i afsnittet [[KDevelop4/Manual/Working with source code#Exploring source code|Udforsk kildekoden]], mens andre er helt nye. Det fælles tema er, at disse navigationsfunktioner er baseret på en ''semantisk forståelse'' af kildekoden, dvs. at hele projekteer med tilhørende data skal parses, for at de skal kunne fungere. Den følgende liste viser nogle af måderne, på hvilke du kan navigere igennem kildekode, som kan være spredt ud over et potentielt meget stort antal filer:
Som nævnt andetsteds arbejder '''KDevelop''' normalt ikke men enkelte kildefiler men ser på projekter som et hele (eller snarere med alle de projekter, som er en del af den aktuelle session). Som konsekvens af det giver den dig mange muligheder for at navigere igennem hele projekter. Nogle af disse muligheder er afledt af de funktioner, som vi allerede har omtalt i afsnittet [[Special:myLanguage/KDevelop4/Manual/Working with source code#Exploring source code|Udforsk kildekoden]], mens andre er helt nye. Det fælles tema er, at disse navigationsfunktioner er baseret på en ''semantisk forståelse'' af kildekoden, dvs. at hele projekteer med tilhørende data skal parses, for at de skal kunne fungere. Den følgende liste viser nogle af måderne, på hvilke du kan navigere igennem kildekode, som kan være spredt ud over et potentielt meget stort antal filer:


* Som vi så i afsnittet [[KDevelop4/Manual/Working with source code#Exploring source code|Udforsk kildekoden]] kan du få et værktøjstip, som forklarer individuelle navnerum, klasser, funktioner og variable ved at lade musen svæve over deres navn eller holde <keycap>Alt</keycap>-tasten nede et stykke tid. Her er et eksempel:<br />[[Image:kdevelop-14.png|thumb|500px|center]]<br />Klikker du på linkene for et symbols erklæring eller udvider du listen med anvendelser, så kan du hoppe til disse steder &mdash; den relevante fil åbnes, hvis det er nødvendigt &mdash; og placere markøren på det tilsvarende sted. En lignende effekt kan opnås ved at bruge værktøjsvisningen '''Kodebrowser''', som også er omtalt tidligere.
* Som vi så i afsnittet [[Special:myLAnguage/KDevelop4/Manual/Working with source code#Exploring source code|Udforsk kildekoden]] kan du få et værktøjstip, som forklarer individuelle navnerum, klasser, funktioner og variable ved at lade musen svæve over deres navn eller holde <keycap>Alt</keycap>-tasten nede et stykke tid. Her er et eksempel:<br />[[Image:kdevelop-14.png|thumb|500px|center]]<br />Klikker du på linkene for et symbols erklæring eller udvider du listen med anvendelser, så kan du hoppe til disse steder &mdash; den relevante fil åbnes, hvis det er nødvendigt &mdash; og placere markøren på det tilsvarende sted. En lignende effekt kan opnås ved at bruge værktøjsvisningen '''Kodebrowser''', som også er omtalt tidligere.


* '''Åbn hurtigt''': De forskellige ''åbn hurtigt''-metoder i '''KDevelop''' giver dig kraftfulde måder at hoppe til andre filer eller steder. Der er fire af dem:
* '''Åbn hurtigt''': De forskellige ''åbn hurtigt''-metoder i '''KDevelop''' giver dig kraftfulde måder at hoppe til andre filer eller steder. Der er fire af dem:
Line 118: Line 144:
** '''Universel åbn hurtigt''' (<menuchoice>Navigation -> Åbn hurtigt</menuchoice> eller <keycap>Alt + Ctrl + Q</keycap>): Hvis du glemmer, hvilken tastaturgenvej, der er bundet til hvilken af de foregående metoder, så er dette den universelle schweizerkniv &mdash; den giver dig en liste med alle filer, funktioner, klasser og andre ting, som du kan vælge fra.
** '''Universel åbn hurtigt''' (<menuchoice>Navigation -> Åbn hurtigt</menuchoice> eller <keycap>Alt + Ctrl + Q</keycap>): Hvis du glemmer, hvilken tastaturgenvej, der er bundet til hvilken af de foregående metoder, så er dette den universelle schweizerkniv &mdash; den giver dig en liste med alle filer, funktioner, klasser og andre ting, som du kan vælge fra.


<span class="mw-translate-fuzzy">
* '''Spring til erklæring eller definition''': Når man implementerer en (medlems)funktion, så har man ofte brug for at hoppe tilbage til det sted, hvor funktionen bliver erklæret for eksempel for at holde argumentlisten i funktionserklæringen synkroniseret med funktionsdefinition eller for at opdatere dokumentationen. For at gøre dette placerer du markøren på funktionens navn og vælger menuen <menuchoice>Navigation -> Spring til erklæring</menuchoice> (eller tast <keycap>Ctrl + .</keycap>) for at komme til det sted, hvor funktionen bliver erklæret. Der er flere måder at komme tilbage til det oprindelige sted:
* '''Spring til erklæring eller definition''': Når man implementerer en (medlems)funktion, så har man ofte brug for at hoppe tilbage til det sted, hvor funktionen bliver erklæret for eksempel for at holde argumentlisten i funktionserklæringen synkroniseret med funktionsdefinition eller for at opdatere dokumentationen. For at gøre dette placerer du markøren på funktionens navn og vælger menuen <menuchoice>Navigation -> Spring til erklæring</menuchoice> (eller tast <kaycap>Ctrl + .</keycap>) for at komme til det sted, hvor funktionen bliber erklæret. Der er flere måder at komme tilbage til det oprindelige sted:
** Vælg menuen <menuchoice>Navigation -> Spring til definitionen</menuchoice> (eller tast <keycap>Ctrl + ,</keycap>).
** Vælg menuen <menuchoice>Navigation -> Spring til definitionen</menuchoice> (eller tast <keycap>Ctrl + ,</keycap>.
** Vælg menuen <menuchoice>Navigation -> Forrige besøgte kontekst</menuchoice> (eller tast <keycap>Meta + pil til venstre</keycap>) som beskrevet længere nede.
** Vælg menuen <menuchoice>Navigation -> Forrige besøgte kontekst</menuchoice> (eller tast <keycap>Meta + pil til venstre</menuchoice>) som beskrevet længere nede.
</span>


{{Note/da|1=At springe til erklæringen af et symbol virker ikke blot med navne på funktioner, som du er i færd med at implementere. Det fungerer også med andre symboler: Placér markøren på en (lokal, global eller medlems-) variabel og hop til dens erklæring. På samme måde kan du placere markøren på en klasses navn for eksempel i en variabel eller funktionserklæring og hoppe til stedet, hvor den bliver erklæret.}}
{{Note/da|1=At springe til erklæringen af et symbol virker ikke blot med navne på funktioner, som du er i færd med at implementere. Det fungerer også med andre symboler: Placér markøren på en (lokal, global eller medlems-) variabel og hop til dens erklæring. På samme måde kan du placere markøren på en klasses navn for eksempel i en variabel eller funktionserklæring og hoppe til stedet, hvor den bliver erklæret.}}
Line 128: Line 152:
* '''Skift definering/erklæring''': I ovenstående eksempel skulle du først placere markøren på funktionens navn for at hoppe til erklæringen. For at undgå dette kan du vælge menuen <menuchoice>Navigation -> Skift definering/erklæring</menuchoice> (eller taste <keycap>Shift + Ctrl +C</keycap>) for at hoppe til erklæringen af den funktion, som markøren aktuelt befinder sig i. Vælg det samme menupunkt en gang til for at komme tilbage til det sted, hvor funktionen bliver defineret.
* '''Skift definering/erklæring''': I ovenstående eksempel skulle du først placere markøren på funktionens navn for at hoppe til erklæringen. For at undgå dette kan du vælge menuen <menuchoice>Navigation -> Skift definering/erklæring</menuchoice> (eller taste <keycap>Shift + Ctrl +C</keycap>) for at hoppe til erklæringen af den funktion, som markøren aktuelt befinder sig i. Vælg det samme menupunkt en gang til for at komme tilbage til det sted, hvor funktionen bliver defineret.


<span class="mw-translate-fuzzy">
* '''Forrige eller næste brugstilfælde''': Placér markøren på en lokal variabels navn og vælg menuen <menuchoice>Navigation -> Næste brugstilfælde</menuchoice> (eller tast <keycap>Meta + Shift + pil til højre</keycap>) for at hoppe til det næste sted, hvor variablen bruges. (Bemærk, at dette ikke blot søger efter fremkomster af variabelnavnet, men faktisk tager højde for, at variable med det samme navn men udenfor den aktuelle rækkevidde ikke er anvendelser af den samme variabel.) Det samme kan du gøre med funktionsnavne. Vælg menuen <menuchoice>Navigation -> Forrige brugstilfælde</menuchoice> (eller tast <keycap>Meta + Shift + pil til venstre</keycap>) for at komme til en tidligere anvendelse af symbolet.
* '''Forrige eller næste brugstilfælde''': Placér markøren på en lokal variabels navn og vælg menuen <menuchoice>Navigation -> Næste brugstilfælde</menuchoice> (eller tast <keycap>Meta + Shift + pil til højre</keycap>) for at hoppe til det næste sted, hvor variablen bruges. (Bemærk, at dette ikke blot søger efter fremkomster af variabelnavnet, men faktisk tager højde for, at variable med det samme navn men udenfor den aktuelle rækkevidde ikke er anvendelser af den samme variabel.) Det samme kan du gøre med funktionsnavne. Vælg menuen <menuchoice>Navigation -> Forrige brugstilfælde</menuchoice> (eller tast <keycap>Meta + Shift + pil til venstre</keycap> for at komme til en tidligere anvendelse af symbolet.
 
</span>
{{Note/da|1=For at se en liste med alle anvendelser af et navn, som disse kommandoer bevæger sig rundt imellem kan du placere markøren på navnet, åbne værktøjsvisningen <menuchoice>Kodebrowser</menuchoice> og holde <keycap>Alt</keycap>-tasten nede. Dette forklares i mere detalje i afsnittet om at [[Special:myLanguage/KDevelop4/Manual/Working_with_source_code#File_scope_information|udforske kildekoden]].}}


{{Note/da|1=For at se en liste med alle anvendelser af et navn, som disse kommandoer bevæger sig rundt imellem kan du placere markøren på navnet, åbne værktøjsvisningen '''Kodebrowser''' og holde <keycap>Alt</keycap>-tasten nede. Dette forklares i mere detalje i afsnittet om at [[Special:myLanguage/KDevelop4/Manual/Working_with_source_code#File_scope_information|udforske kildekoden]].}}
{{Note/da|Nogle genveje kan allerede være anvendt af dinvinduesmanager (fx bruges <keycap>Meta + Left</keycap> af LXDE/Openbox); du kan enten ændre tastekombinationerne for genvejen i KDevelop i <menuchoice>Indstillinger... -> Indstil genveje</menuchoice> eller i vinduesmanagerens indstillinger (fx .config/openbox/lubuntu-rc.xml)}}


* '''Kontekstlisten''': Webbrowsere har en funktion, hvor du kan gå frem og tilbage i listen over de senest besøgte sider. '''KDevelop''' har den samme slags funktion, hvor du istedet for websider besøger ''kontekster''. En kontekst er markørens aktuelle position, og du ændrer konteksten ved enhver form for navigering bortset fra markørkommandoerne &mdash; for eksempel ved at klikke på et link i et værktøjstip eller i værktøjsvisningen '''Kodebrowser''', vælge et punkt i menuen <menuchoice>Navigation</menuchoice> eller bruge en af de andre navigationskommandoer. Brug menuerne <menuchoice>Navigation -> Forrige besøgte kontekst</menuchoice> (<keycap>Meta + pil til venstre</keycap>) og <menuchoice>Navigation -> Næste besøgte kontekst</menuchoice> (<keycap>Meta + pil til højre</keycap>) til at gå igennem listen af besøgte kontekster ligesom <menuchoice>Frem</menuchoice>- og <menuchoice>Tilbage</menuchoice>-knapperne i en browser fører dig frem og tilbage i listen af besøgte websider.
* '''Kontekstlisten''': Webbrowsere har en funktion, hvor du kan gå frem og tilbage i listen over de senest besøgte sider. '''KDevelop''' har den samme slags funktion, hvor du i stedet for websider besøger ''kontekster''. En kontekst er markørens aktuelle position, og du ændrer konteksten ved enhver form for navigering bortset fra markørkommandoerne &mdash; for eksempel ved at klikke på et link i et værktøjstip eller i værktøjsvisningen <menuchoice>Kodebrowser</menuchoice>, vælge et punkt i menuen <menuchoice>Navigation</menuchoice> eller bruge en af de andre navigationskommandoer. Brug menuerne <menuchoice>Navigation -> Forrige besøgte kontekst</menuchoice> (<keycap>Meta + pil til venstre</keycap>) og <menuchoice>Navigation -> Næste besøgte kontekst</menuchoice> (<keycap>Meta + pil til højre</keycap>) til at gå igennem listen af besøgte kontekster ligesom <menuchoice>Frem</menuchoice>- og <menuchoice>Tilbage</menuchoice>-knapperne i en browser fører dig frem og tilbage i listen af besøgte websider.


* Endelig er der værktøjsvisninger, som lader dig navigere til forskellige steder i din kodebase. For eksempel giver værktøjsvisningen '''Klasser''' en liste med alle navnerum og klasser i alle projekter i den aktuelle session og lader dig folde listen ud, sådan at du kan se hver klasses medlemsfunktioner og -variable: [[Image:kdevelop-17.png|thumb|500px|center]] Du kan hoppe til edt sted, hvor et punkt erklæres ved at dobbeltklikke på de (eller bruge kontekstmenuen ved at højreklikke). Andre værktøjer har lignende funktioner; for eksempel giver værktøjsvisningen '''Projekter''' en liste med filer, som indgår i sessionen: [[image:kdevelop-13.png|thumb|500px|center]] Igen åbner du en fil ved at dobbeltklikke på den.
* Endelig er der værktøjsvisninger, som lader dig navigere til forskellige steder i din kodebase. For eksempel giver værktøjsvisningen '''Klasser''' en liste med alle navnerum og klasser i alle projekter i den aktuelle session og lader dig folde listen ud, sådan at du kan se hver klasses medlemsfunktioner og -variable: [[Image:kdevelop-17.png|thumb|500px|center]] Du kan hoppe til edt sted, hvor et punkt erklæres ved at dobbeltklikke på de (eller bruge kontekstmenuen ved at højreklikke). Andre værktøjer har lignende funktioner; for eksempel giver værktøjsvisningen <menuchoice>Projekter</menuchoice> en liste med filer, som indgår i sessionen: [[Image:kdevelop-13.png|thumb|500px|center]] Igen åbner du en fil ved at dobbeltklikke på den.




<span id="Modes and working sets"></span>
<span id="Writing source code"></span>
=== Skriv kildekode ===
=== Skriv kildekode ===


Line 155: Line 179:
};
};


Car my_ride;
void foo()
// ...do something with this variable...
{
std::string color = my_ride.ge
  Car my_ride;
</syntaxhighlight>}}<!--{{-->
  // ...do something with this variable...
 
  std::string color = my_ride.ge
In the last line, '''KDevelop''' will remember that the variable <code>my_ride</code> is of type <code>Car</code>, and will automatically offer to complete the name of the member function <code>ge</code> as <code>get_color</code>. In fact, all you have to do is to keep typing until the auto-completion feature has reduced the number of matches to one, and then hit the <code>Enter</code> key:
</syntaxhighlight>}}<!--{-->


[[Image:kdevelop-20.png|thumb|500px|center]]
I den sidste linje vil '''KDevelop''' huske, at variablen <code>my_ride</code> er af typen <code>Car</code> og vil automatisk tilbyde at færdiggøre navnet på medlemsfunktionen <code>ge</code> til <code>get_color</code>. Alt havd du behøver at gøre er faktisk at skrive, indtil funktionentil automatisk fuldførelse har reduceret antallet af matchende funktioner til en og så taste <keycap>Enter</keycap>:


Auto-completion can save you a lot of typing if your project uses long variable and function names; furthermore, it avoids mis-spelling names (and the resulting compiler errors) and it makes it much simpler to remember the exact names of functions; for example, if all of your getters start with <code>get_</code>, then the auto-completion feature will be able to only present you a list of possible getters when you have typed the first four letters, likely reminding you in the process which of the functions is the correct one. Note that for auto-completion to work, neither the declaration of the <code>Car</code> class nor of the <code>my_ride</code> variable need to be in the same file as where you are currently writing code. '''KDevelop''' simply has to know that these classes and variables are connected, i.e. the files in which these connections are made need to be part of the project you are currently working on.
[[Image:kdevelop-42.png|thumb|500px|center]]


{{Note|1='''KDevelop''' doesn't always know when to assist you in completing code. If the auto-completion tooltip doesn't automatically open, hit <code>Ctrl+Space</code> to open a list of completions manually.}}
Bemærk, at du kan klikke på værktøjstippet for at få mere information om funktionen ud over dens returtype og om den er "public":


==== Adding new classes and implementing member functions ====
[[Image:kdevelop-43.png|thumb|500px|center]]


'''KDevelop''' has a wizard for adding new classes. To add a new class, select <menuchoice>Code -> Create New Class</menuchoice> to get the following dialog box:
Automatisk fuldførelse kan spare dig en masse tasteanslag, hvis dit projekt bruger lange variabel- og funktionsnavne; desuden hjælper det med at undgå skrivefejl i navne (med dertil hørende compilerfejl), og det gør det meget lettere at huske funktionernes præcise navne. Hvis for eksempel alle dine getter-funktioners navne starter med <code>get_</code>, så bliver funktionen til automatisk fuldførelse i stand til at præsentere dig for en liste, som kun indeholder mulige gettere, efter at du blot har tastet de første fire bogstaver i navnet; i den forbindelse vil du nok blive mindet om, hvilken af funktionerne, der er den rigtige. Bemærk, at automatisk fuldførelse virker selv hvis den aktuelle fil hverken indeholder erklæringerne af klassen <code>Car</code> eller variablen <code>my_ride</code>. '''KDevelop''' skal blot vide, at disse klasser og variable er tilknyttede, dvs. at filerne, hvor de bliver erklærede skal være en del af projektet, som du aktuelt arbejder på.


[[Image:kdevelop-27.png|thumb|400px|center]]
{{Note/da|1='''KDevelop''' ved ikke altid, hvornår den skal hjælpe dig med at fuldføre kode. Hvis tooltippet med automatiske fuldførelse ikke åbnes automatisk, så tast <keycap>Ctrl + Mellemrum</keycap> for manuelt at åbne en liste med mulige fuldførelser. For at kunne udfør automatisk fuldførelse skal '''KDevelop''' fortolke din kildefil. Dette sker i baggrunden for alle filer, som hører til projekterne i den aktuelle session efter at du starter '''KDevelop''' samt når du stopper med at skrive i en brøkdel af et sekund (forsinkelsen kan indstilles).}}


Here, we have entered the new class's name <code>Bus</code> (you can also enter here which other classes this class should be derived from). The next page of the dialog allows us to select the standard member functions we will need:
{{Note/da|1='''KDevelop''' fortolker kun filer, som den betragter som kildekode, hvilket bestemmes af filens MIME-type. Denne type er ikke fastast før efter at filen er belvet gemt en gang; når du laver en ny fil og begynder at skrive kode i den, så udløser det ikke fortolkning med henblik på automatisk fuldførelse før efter, at filen er blevet gemt første gang.}}


[[Image:kdevelop-28.png|thumb|400px|center]]
{{Note/da|1=For at automatisk fuldførelse kan fungere, så skal '''KDevelop''' kunne finde erklæringer i headerfiler. Den vil søge i et antal standardmapper. Hvis den ikke automatisk finder en headerfil, så vil den understrege headerfilens navn med rødt; i så fald kan du højreklik på headerfilen for at fortælle'''KDevelop''', hvor denne fil findes og hvilken information den indeholder.}}


Here, we want a default constructor, a copy constructor, and a destructor. After the following pages of the dialog that allow you to select a license header and the location for the new files, '''KDevelop''' will generate two new tabs with the header and source files:
{{Note/da|1=Indstilling af den automatiske fuldførelse bliver forklaret i [[KDevelop4/Manual/Customizing_KDevelop#Customizing_code_auto-completion|dette afsnit af manualen]].}}


[[Image:kdevelop-29.png|thumb|500px|center]]
==== Tilføj nye klasser og implementér medlemsfunktioner ====


'''KDevelop''' her en guide til at tilføje nye klasser. Proceduren er beskrevet i  [[Special:myLanguage/KDevelop4/Manual/Code generation with templates#Creating a new class|Opret en ny klasse]]. En simpel C++-klasse kan oprettes ved at vælge skabelonen Basic C++ i kategorien <tt>Klasse</tt>. I guiden kan vu vælge nogle forud definerede funktioner, for eksemepel en tom konstruktør, en kopikonstruktør og en destruktør.


The header file already has include guards and the new class has all the member functions we selected. The next two steps would be to document the class and its member functions and to implement them. We will discuss aids for documenting classes and functions below. To implement the special functions already added, simply go to the <code>bus.cpp</code> tab where the skeleton of functions are already provided:
Efter at have afsluttet guiden oprettes filen og den åbnes i editoren. Headerfilen har allerede et "include-værn", og den nye klasse har alle de medlemsfunktioner, som vi valgte. De næste to skridt ville være at dokumentere klassen og dens medlemmer og at implementere dem. Vi vil diskutere funktionerne til at hjælpe med dokumentation nedenfor. For at implementere de funktioner, som allerede er tilføjet går du simpelt hen til fanebladet <menuchoice>bus.cpp</menuchoice>, hvor de allerede findes:


[[Image:kdevelop-30.png|thumb|500px|center]]
[[Image:kdevelop-30.png|thumb|500px|center]]


To add new member functions, go back to the <code>bus.h</code> tab and add the name of a function. For example, let us add this:
For at tilføje nye medlemsfunktioner går du tilbage til fanebladet <menuchoice>bus.h</menuchoice> og tilføjer funktionens navn. Lad os for eksempel tilføje dette:


[[Image:kdevelop-31.png|thumb|500px|center]]
[[Image:kdevelop-31.png|thumb|500px|center]]


Note how I have already started with the implementation. However, in many coding styles, the function shouldn't be implemented in the header file but rather in the corresponding <code>.cpp</code> file. To this end, locate the cursor on the name of the function and select <menuchoice>Code -> Move to source</menuchoice> or hit <code>Ctrl+Alt+S</code>. This remove the code between curly braces from the header file (and replaces it by a semicolon as necessary to terminate the function declaration) and moves it into the source file:
Bemærk, at jeg allered er begyndt at implementere. I mange kodningsstile skal funktioner dog ikke implementeres i headeren men snarere i den tilhørende .cpp-fil. For at gøre dette placerer du markøren på funktionens navn og vælger <menuchoice>Kode -> Flyt ind i kilden</menuchoice> eller tast <keycap>Ctrl + Alt + S</keycap>. Dette fjerner koden mellem de krøllede parenteser fra headerfilen (og erstatter den med et semikolon, som skal til for at afslutte funktionserklæringen) og flytter den ind i kildefilen:


[[Image:kdevelop-32.png|thumb|500px|center]]
[[Image:kdevelop-32.png|thumb|500px|center]]


Note how I have just started typing and that I meant to imply that the <code>students</code> variable should probably be a member variable of class <code>Bus</code> but that I haven't yet added it. Note also how '''KDevelop''' underlines it to make clear that it doesn't know anything about the variable. But this problem can be solved: Clicking on the variable name yields the following tooltip:
Bemærk, at jeg blot er begyndt at skrive, og at jeg forventer, at variablen <code>students</code> sandsynligvis skal være en medlemsvariabel i klassen <code>Bus</code>, men at jeg ikke har tilføjet den endnu. Bemærk også hvordan '''KDevelop''' understreger variablen for at gøre det klart, at den endnu ikke ved noget om variablen. Men dette problem kan løses: Klik på variablens navn for at få følgende værktøjstip frem:


[[Image:kdevelop-33.png|thumb|500px|center]]
[[Image:kdevelop-33.png|thumb|500px|center]]


(The same can be achieved by right clicking on it and selecting <menuchoice>Solve: Declare As</menuchoice>.) Let me select "3 - private unsigned int" (either by mouse, or by hitting <code>Alt+3</code>) and then see how it comes out in the header file:
(Det samme kan opnås ved at højreklikke på navnet og vælge <menuchoice>Løs: Erklær som</menuchoice>.) Lad mig vælge <menuchoice>3 - private unsigned int</menuchoice> (enten med musen eller ved at taste <keycap>Alt + 3</keycap>) og se, hvordan det viser sig i headerfilen:


[[Image:kdevelop-34.png|thumb|500px|center]]
[[Image:kdevelop-34.png|thumb|500px|center]]


It is worth noting that '''KDevelop''' extracts the type of the variable to be declared from the expression used to initialize it. For example, if we had written the addition in the following rather dubious way, it would had suggested to declare the variable as type <code>double</code>:
Det er værd at bemærke, at '''KDevelop''' udleder den type, som variablen skal erklæres til fra det udtryk, som bruges til at initialisere den. Hvis vi for eksempel havde skrevet følgende tvivlsomme tilføjelse, så ville den have foreslået at erklære variablen som typen <code>double</code>:


[[Image:kdevelop-35.png|thumb|500px|center]]
[[Image:kdevelop-35.png|thumb|500px|center]]


As a final point: The method using <menuchoice>Code -> Move to source</menuchoice> does not always insert the new member function where you may want it. For example, you may want it to be marked as <code>inline</code> and place it at the bottom of the header file. In a case like this, write the declaration and the start writing the definition of the function like this:
En sidste bemærkning: Funktionen <menuchoice>Kode -> Flyt ind i kilden</menuchoice> indsætter ikke altid medlemsfunktonen der, hvor du ønsker den. For eksempel ønsker du måske at den bliver markeret som <code>inline</code> og placeret nederst i headerfilen. I sådan et tilfælde kan du skrive erklæringen og begynde at skrive funktionsdefinitionen sådan her:


[[Image:kdevelop-36.png|thumb|500px|center]]
[[Image:kdevelop-36.png|thumb|500px|center]]


'''KDevelop''' automatically offers all possible completions of what might come here. Selecting one of the two <code>add_students</code> entries yields the following code that already fills in the complete argument list:
'''KDevelop''' giver dig automatisk alle de mulige fuldførelser af, hvad der kan komme her. Vælg et af de to punkter med <code>add_students</code> for at få følgende kode, som allerede udfylder den fuldstændige liste af argumenter:


[[Image:kdevelop-37.png|thumb|500px|center]]
[[Image:kdevelop-37.png|thumb|500px|center]]


==== Dokumentation af erklæringer ====


{{Note|1=The fact that the tooltip shows the same function twice has been reported as [https://bugs.kde.org/show_bug.cgi?id=274244 KDevelop Bug 274244].}}
God kode har god dokumentation både af funktionernes implementering af algoritmer og af interfacet &mdash; dvs. klasser (medlems- og globale) funktioner og (medlems- og globale) variable skal dokumenteres for at forklare deres formål, mulige værdier af argumenter, pre- og postbetingelser osv. Med hensyn til dokumentation af interfacet er [http://www.doxygen.org doxygen] blevet en de facto-standard for formatering af kommentarer, som kan trækkes ud og vises i søgbare websider.


{{Note|1=In the example, accepting one of the choices the auto-completion tool offers yields the correct signature but unfortunately deletes the <code>inline</code> marker already written. This has been reported as [https://bugs.kde.org/show_bug.cgi?id=274244 KDevelop Bug 274245].}}
'''KDevelop''' understøtter denne kommentarstil ved at give dig en genvej til at generere en skabelon til kommentarer, som dokumenterer en klasse eller medlemsfunktion. Antag for eksempel, at du allerede har skrevet denne kode:
 
==== Documenting declarations ====
 
Good code is well documented, both at the level of the implementation of algorithms within in functions as well as at the level of the interface &mdash; i.e., classes, (member and global) functions, and (member or global) variables need to be documented to explain their intent, possible values of arguments, pre- and postconditions, etc. As far as documenting the interface is concerned, [http://www.doxygen.org doxygen] has become the de facto standard for formatting comments that can then be extracted and displayed on searchable webpages.
 
'''KDevelop''' supports this style of comments by providing a short cut to generate the framework of comments that document a class or member function. For example, assume you have already written this code:


{{Input|<syntaxhighlight lang="cpp">
{{Input|<syntaxhighlight lang="cpp">
Line 233: Line 253:
</syntaxhighlight>}}
</syntaxhighlight>}}


You now want to add documentation to both the class and the member function. To this end, move the cursor onto the first line and select <menuchoice>Code -> Document Declaration</menuchoice> or hit <code>Alt+Shift+D</code>. '''KDevelop''' will respond with the following:
Nu vil du føje dokumentation til både klasse og medlemsfunktioner. For at gøre det flytter du markøren hen på første linje og vælger menuen <menuchoice>Kode -> Dokumentér erklæring</menuchoice> eller taster <keycap>Alt + Shift + D</keycap>. '''KDevelop''' vil reagere ved at tilføje følgende:


[[Image:kdevelop-23.png|thumb|550px|center]]
[[Image:kdevelop-23.png|thumb|550px|center]]


The cursor is already in the grayed out area for you to fill in the short description (after the doxygen keyword <code>@brief</code>) of this class. You can then continue to add documentation to this comment that gives a more detailed overview of what the class does:
Markøren er allerede i det grå område, sådan at du kan skrive en kort beskrivelse af denne klasse (efter doxygen-nøgleordet <code>@brief</code>). Du kan så fortsætte med at føje mere detaljeret dokumentation til denne kommentar.


[[Image:kdevelop-24.png|thumb|550px|center]]
[[Image:kdevelop-24.png|thumb|550px|center]]


While the editor is inside the comment, the comment text is highlighted in green (the highlighting disappears once you move the cursor out of the comment). When you get to the end of a line, hit enter and '''KDevelop''' will automatically start a new line that starts with an asterisk and place the cursor one character indented.
Mens markøren er inde i kommentaren, er teksten fremhævet med grønt (fremhævningen forsvinder, når du flytter markøren ud af kommentaren). Når du kommer til slutningen af en linje taster du <keycap>Enter</keycap>, så vil '''KDevelop''' automatisk starte en ny linje, som begynder med en asterisk og placere markøren et tegn længere inde.


Now let's document the member function, again by putting the cursor on the line of the declaration and selecting <menuchoice>Code -> Document Declaration</menuchoice> or hitting <code>Alt+Shift+D</code>:
Lad os nu dokumentere medlemsfunktionen. Flyt markøren til den linje, hvor funktionen erklæres og vælg menuen <menuchoice>Kode -> Dokumentér erklæring</menuchoice> ellet tast <keycap>Alt + Shift D</keycap>:


[[Image:kdevelop-25.png|thumb|550px|center]]
[[Image:kdevelop-25.png|thumb|550px|center]]


Again, '''KDevelop''' automatically generates the skeleton of a comment, including documentation for the function itself, as well as its return type. In the current case, the name of the function is pretty much self-explanatory, but oftentimes function arguments may not be and should be documented individually. To illustrate this, let's consider a slightly more interesting function and the comment '''KDevelop''' automatically generates:
Igen genererer '''KDevelop''' automatisk en kommentarskabelon, som inkluderer dokumentation af funktionen selv og af dens returtype. I det aktuelle tilfælde er fuktionens navn ret selvforklarende, men det er tit ikke tilfældet med argumenterne, så de skal dokumenteres hver for sig. For at illustrere dette betragter vi ee lidt mere interessant funktion og kommentaren, som '''KDevelop''' genererer automatisk:


[[Image:kdevelop-26.png|thumb|550px|center]]
[[Image:kdevelop-26.png|thumb|550px|center]]


Here, the suggested comment already contains all the Doxygen fields for the individual parameters, for example.
Her indeholder den foreslåede kommentar for eksempel allerede Doxygen-felterne til de enkelte parametre.


==== Renaming variables, functions and classes ====
==== Omdøb variable, funktioner og klasser ====


Sometimes, one wants to rename a function, class or variable. For example, let's say we already have this:
Undertiden ønsker man at omdøbe en funktion, klasse eller variabel. Lad os for eksempel sige, at du allerede har dette:


[[Image:kdevelop-38.png|thumb|550px|center]]
[[Image:kdevelop-38.png|thumb|550px|center]]


We then realize that we're unhappy with the name <code>remove_students</code> and would have rather called it, say, <code>throw_out_students</code>. We could do a search-replace for the name, but this has two drawbacks:
Du opdager så, at du ikke er glad for funktionsnavnet <code>remove_students</code> og fx hellere ville have kaldt den <code>throw_out_students</code>. Du kunne foretage en søgning-og-erstatning efter navnet, den det hat to ulemper:
* The function may be used in more than one file.
* We really only want to rename this function and not touch functions that may have the same name but are declared in other classes or namespaces.


Both these problems can be solved by moving the cursor on any of the occurrences of the name of the function and selecting <menuchoice>Code -> Rename declaration</menuchoice> (or right clicking on the name and selecting <menuchoice>Rename Bus::remove_students</menuchoice>). This brings up a dialog box where you can enter the new name of the function and where you can also see all the places where the function is actually used:
* Funktionen bliver måske bruge i flere filer.
 
* Vi vil kun omdøbe denne funktion og ikke berøre andre funktioner, som måske har samme navn men bliver erklærede i andre klasser eller navnerum.
 
Begge disse problemer kan løses ved at flytte markøren hen på et hvilken som helst sted, hvor funktionsnavnet optræder og så vælge menuen <menuchoice>Kode -> Omdøb erklæring</menuchoice> (eller højreklik på navnet og vælg <menuchoice>Omdøb Bus::remove_students</menuchoice>). Dette får en dialog til at dukke op, hvor du kan angive funktionens nye navn, og hvor du også kan se alle de steder, hvor funktionen faktisk bruges:


[[Image:kdevelop-39.png|thumb|550px|center]]
[[Image:kdevelop-39.png|thumb|550px|center]]


==== Code snippets ====
==== Tekststumper ====
 
De fleste projekter har kodestumper, som man ofte har brug for at skrive i kildekoden. Nogle eksempler: skriver man en kompiler, så har man brug for løkker over alle instruktioner; til en brugerflade skal man tjekke, at brugerinput er gyldigt og åbne en fejlmeddelelsesboks hvis ikke; i mit eget projekt forekommer denne slags linjer ofte:


Most projects have pieces of code that one frequently has to write in source code. Examples are: for compiler writers, a loop over all instructions; for user interface writers, checks that user input is valid and if not to open an error box; in the project of the author of these lines, it would be code of the kind
{{Input|<syntaxhighlight lang="cpp">
{{Input|<syntaxhighlight lang="cpp">
for (typename Triangulation<dim,spacedim>::active_cell_iterator
for (typename Triangulation<dim,spacedim>::active_cell_iterator
Line 277: Line 300:
</syntaxhighlight>}}
</syntaxhighlight>}}


Rather than typing this kind of text over and over again (with all the concomitant typos one introduces), the '''Snippets''' tool of '''KDevelop''' can help here. To this end, open the tool view (see [[Special:myLanguage/KDevelop4/Manual/Working with source code#Tools and views|Tools and views]] if the corresponding button isn't already on the perimeter of your window). Then click on the "Add repository" button (a slight misnomer &mdash; it allows you to create a named collection of snippets for source codes of a particular kind, e.g. C++ sources) and create an empty repository. Then click the button with the green '''+''' to add a snippet, to get a dialog like the following:
I stedet for at skrive denne tekst igen og igen (med alle de muligheder for tastefejl, som det medfører), så kan værktøjet <menuchoice>Tekststumper</menuchoice> være nyttigt her. Åbn værktøjsvisningen (se [[Special:myLanguage/KDevelop4/Manual/Working with source code#Tools and views|Værktøjer og visninger]], hvis den tilsvarende knap ikke allerede findes i vindueskanten) eller vælg <menuchoice>Vindue -> Værktøjsvisninger</menuchoice> i menulinjen og aktivér <menuchoice>Tekststumper</menuchoice>. Klik så på knappen <menuchoice>Tilføj depot</menuchoice> (et lidt misvisende navn &mdash; med den kan du lave en navngiven samling af tekststumper til en bestemt slags kildekode, fx C++) og lav et tomt depot. Klik så på knappen {{Plus}} for at kalde følgende dialog frem:


[[Image:kdevelop-40.png|thumb|500px|center]]
[[Image:kdevelop-40.png|thumb|500px|center]]


{{Note|1=The name of a snippet may not have spaces or other special characters because it must look like a normal function or variable name (for reasons that will become clear in the next paragraph). If the name of the snippet does contain spaces, the "OK" button will become inactive without any further explanation. This has been reported as [https://bugs.kde.org/show_bug.cgi?id=274299 KDevelop bug 274299].}}
{{Note/da|1=Tekststumpens navn må ikke indeholde blanktegn eller andre specielle tegn, fordi den skal ligne et almindeligt navn på en funktion eller variabel (det vil blive klart hvorfor i næste afsnit). Hvis navnet på en tekststump indeholder blanktegn, så bliver knappen <menuchoice>O.k.</menuchoice> blive inaktiv uden yderligere forklaring. Dette er blevet rettet i de seneste udgaver af KDevelop, (se [https://bugs.kde.org/show_bug.cgi?id=274299 KDevelop bug 274299]).}}


To use a snippet so defined, when you are editing code, you can just type the name of the snippet like you would any other function or variable name. This name will become available for auto-completion &mdash; which means that there is no harm in using a long and descriptive name for a snippet such as the one above &mdash; and when you accept the suggestion of the auto-completion tooltip (for example by just hitting <code>Enter</code>), the already entered part of the snippets' name will be replaced by the full expansion of the snippet and will be properly indented:
Når du skriver kode og skal bruge en tekststump, så skriver du blot tekststumpens navn på samme måde, som du ville med enhver funktion eller variabel. Navnet bliver så tilgængeligt for automatisk fuldførelse &mdash; det betyder, at du uden problemer kan bruge lange og beskrivende navne til tekststumper, som den ovenfor &mdash; og når du accepterer forslaget i værktøjstippet til automatisk fuldførelse (ved for eksempel at taste <keycap>Enter</keycap>), så bliver den allerede indtastede del af tekststumpens navn erstattet af tekststumpens fulde indhold, som bliver korrekt indrykket:


[[Image:kdevelop-41.png|thumb|500px|center]]
[[Image:kdevelop-41.png|thumb|500px|center]]


Note that for this to work, the '''Snippets''' tool view need not be open or visible: you only ever need the tool view to define new snippets. An alternative, if less convenient, way to expand a snippet is to simply click on it in the respective tool view.
Bemærk, at værktøjsvisningen <menuchoice>Tekststumper</menuchoice> ikke behøver at være åben for at dette skal virke: du har kun brug for værktøjsvisningen når du skal definere nye tekststumper. En alternativ, men måske knap så bekvem måde at indsætte tekststumper er simpelt hen at klikke på den i værktøjsvisningen.
 
{{Note|1=Snippets are much more powerful than just explained. For a full description of what you can do with them, see the [[KDevelop4/Manual/Tool_list#Snippets|detailed documentation of the '''Snippets''' tool]].}}


{{Note/da|1=Tekststumper kan meget mere, end hvad der lige er blevet forklaret. En fuld beskrivelse af, hvad du kan gøre med tekststumper finder du i [[Special:myLanguage/KDevelop4/Manual/Tool_list#Snippets|den detaljerede dokumentation af værktøjet Tekststumper]].}}<span id="Modes and working sets"></span>
=== Tilstande og arbejdssæt ===
=== Tilstande og arbejdssæt ===


Line 322: Line 344:
|-
|-


|       <keycap>Ctrl+Alt+O</keycap>
|<keycap>Ctrl+Alt+O</keycap>
| Åbn fil hurtigt: skriv en del af et filnavn og vælg blandt alle de filer i den aktuelle sessions projektmapper, som matcher strengen; filen bliver så åbnet
| Åbn fil hurtigt: skriv en del af et filnavn og vælg blandt alle de filer i den aktuelle sessions projektmapper, som matcher strengen; filen bliver så åbnet
|-
|-


|       <keycap>Ctrl+Alt+C</keycap>
|<keycap>Ctrl+Alt+C</keycap>
| Åbn klasse hurtigt: skriv en del af navnet på en klasse og vælg imellem de klasser der matcher; markøren vil hoppe til det sted, hvor klassen erklæres
| Åbn klasse hurtigt: skriv en del af navnet på en klasse og vælg imellem de klasser der matcher; markøren vil hoppe til det sted, hvor klassen erklæres
|-
|-


|       <keycap>Ctrl+Alt+M</keycap>
|<keycap>Ctrl+Alt+M</keycap>
| Åbn funktion hurtigt: skriv en del af navnet på en (medlems)funktion og vælg imellem de funktioner der matcher. Bemærk, at listen både viser erklæringer og definitioner. Markøren vil hoppe til det valgte sted
| Åbn funktion hurtigt: skriv en del af navnet på en (medlems)funktion og vælg imellem de funktioner der matcher. Bemærk, at listen både viser erklæringer og definitioner. Markøren vil hoppe til det valgte sted
|-
|-


|       <keycap>Ctrl+Alt+Q</keycap>
|<keycap>Ctrl+Alt+Q</keycap>
| Åbn hurtigt: skriv hvad som helst (filnavn, klassenavn, funktionsnavn) og få en liste over alt det, der matcher til at vælge fra
| Åbn hurtigt: skriv hvad som helst (filnavn, klassenavn, funktionsnavn) og få en liste over alt det, der matcher til at vælge fra
|-
|-


| <keycap>Ctrl+Alt+N</keycap>
|<keycap>Ctrl+Alt+N</keycap>
|Oversigt: Vis en liste over alt, hvad der sker i denne fil, dvs. klasseerklæringer og funktionsdefinitioner
|Oversigt: Vis en liste over alt, hvad der sker i denne fil, dvs. klasseerklæringer og funktionsdefinitioner
|-
|-


| <keycap>Ctrl+,</keycap>
|<keycap>Ctrl+,</keycap>
|Hop til definitionen af en funktion, hvis markøren i øjeblikket er på en funktionserklæring
|Hop til definitionen af en funktion, hvis markøren i øjeblikket er på en funktionserklæring
|-
|-


| <keycap>Ctrl+.</keycap>
|<keycap>Ctrl+.</keycap>
|Hop til en erklæring af en funktion eller variabel hvis markøren i øjeblikket er i en funktionsdefinition
|Hop til en erklæring af en funktion eller variabel hvis markøren i øjeblikket er i en funktionsdefinition
|-
|-


| <keycap>Ctrl+Alt+PageDown</keycap>
|<keycap>Ctrl+Alt+PageDown</keycap>
|Hop til den næste funktion
|Hop til den næste funktion
|-
|-


| <keycap>Ctrl+Alt+PageUp</keycap>
|<keycap>Ctrl+Alt+PageUp</keycap>
|Hop til den forrige funktion
|Hop til den forrige funktion
|-
|-


| <keycap>Ctrl+G</keycap>
|<keycap>Ctrl+G</keycap>
|Gå til linje
|Gå til linje
|-
|-
Line 366: Line 388:
|-
|-


| <keycap>Ctrl+F</keycap>
|<keycap>Ctrl+F</keycap>
|Find
|Find
|-
|-


| <keycap>F3</keycap>
|<keycap>F3</keycap>
|Find næste
|Find næste
|-
|-


| <keycap>Ctrl+R</keycap>
|<keycap>Ctrl+R</keycap>
|Erstat
|Erstat
|-
|-


| <keycap>Ctrl+Alt+F</keycap>
|<keycap>Ctrl+Alt+F</keycap>
|Find og erstat i flere filer  
|Find og erstat i flere filer  
|-
|-
Line 385: Line 407:
|-
|-


| <keycap>Ctrl+_</keycap>
|<keycap>Ctrl+_</keycap>
|Fold et lokalt niveau sammen: skjul denne blok, for eksempel hvis du ønsker at fokusere på det overordnede billede i en funktion
|Fold et lokalt niveau sammen: skjul denne blok, for eksempel hvis du ønsker at fokusere på det overordnede billede i en funktion
|-
|-


| <keycap>Ctrl++</keycap>
|<keycap>Ctrl++</keycap>
|Udfold et lokalt niveau: Omgør sammenfoldning
|Udfold et lokalt niveau: Omgør sammenfoldning
|-
|-


| <keycap>Ctrl+D</keycap>
|<keycap>Ctrl+D</keycap>
|Udkommentér den markerede tekst eller den aktuelle linje
|Udkommentér den markerede tekst eller den aktuelle linje
|-
|-


| <keycap>Ctrl+Shift+D</keycap>
|<keycap>Ctrl+Shift+D</keycap>
|Fjern udkommentering af den markerede tekst eller den aktuelle linje
|Fjern udkommentering af den markerede tekst eller den aktuelle linje
|-
|-


| <keycap>Alt+Shift+D</keycap>     
|<keycap>Alt+Shift+D</keycap>     
|Dokumentér erklæring. Hvis markøren er på  erklæringen af en funktion eller klasse, så laves der en doxygen-agtig kommentar med alle funktionens parametre, returværdi osv.
|Dokumentér erklæring. Hvis markøren er på  erklæringen af en funktion eller klasse, så laves der en doxygen-agtig kommentar med alle funktionens parametre, returværdi osv.
|-
|-


| <keycap>Ctrl+T</keycap><n|Byt det aktuelle og det forrige tegn
|<keycap>Ctrl+T</keycap>
|Byt det aktuelle og det forrige tegn
|-
|-


| <keycap>Ctrl+K</keycap>
|<keycap>Ctrl+K</keycap>
|Slet den aktuelle linje (bemærk: dette er ikke emacs' "slet herfra og til linjens afslutning")
|Slet den aktuelle linje (bemærk: dette er ikke emacs' "slet herfra og til linjens afslutning")
<!--{-->|}
<!--{-->|}


{{Prevnext2
{{Prevnext2
| prevpage=Special:MyLanguage/KDevelop4/Manual/Sessions_and_projects | nextpage=Special:MyLanguage/KDevelop4/Manual/Building_(compiling)_projects_with_custom_Makefiles
| prevpage=Special:MyLanguage/KDevelop4/Manual/Sessions_and_projects | nextpage=Special:MyLanguage/KDevelop4/Manual/Code_generation_with_templates
| prevtext=Sessioner og projekter | nexttext=Byg (kompilér) projekter med dine egne makefiler
| prevtext=Sessioner og projekter | nexttext=Kodegenerering med skabeloner
| index=Special:MyLanguage/KDevelop4/Manual | indextext=Tilbage til menuen
| index=Special:MyLanguage/KDevelop4/Manual | indextext=Indholdsfortegnelse
}}
}}


[[Category:Udvikling/da]]
[[Category:Udvikling/da]]

Latest revision as of 08:31, 3 July 2019

Arbejdet med kildekode

Ved siden af fejlsøgning er skrivning og læsning af kildekode det, som du vil bruge mest tid med, når du udvikler software. Til dette formål giver KDevelop dig mange forskelige måder at udforske kildekoden og effektivisere skrivning af den. Som det vises i detaljer i de følgende afsnit, så er KDevelop ikke blot en kodeeditor — den er et system til at håndtere kildekode, som giver dig forskellige visninger af information, som findes i de filer, som tilsammen udgør kildekoden i din session.

Værktøjer og visninger

Til arbejdet med projekter har KDevelop begrebet værktøjer. Et værktøj giver dig en særlig visning af kildekoden eller en handling, som det kan udføre. Værktøjer repræsenteres af knapper, som findes rundt omkring i vinduets kant (med lodret tekst langs venstre og højre kant eller vandret langs bunden). Hvis du klikker på dem, så udvides de til et undervindue — en visning — indenfor hovedvinduet. Hvis du klikker på værktøjsknappen en gang til, så forsvinder visningen igen.

Note

For at få et undervindue til af forsvinde kan du også klikke på knappen x øverst til højre i undervinduet


Billedet ovenfor viser et eksempel på værktøjer placeret i den venstre og højre kant. I billeder er værktøjet Klasser åbent til venstre og værktøjet Tekststumper til højre sammen med en editor til en kildefil i midten. For det meste vil du nok kun have editoren åben og måske værktøjet Klasser eller Kodebrowser til venstre. Andre værktøjer vil sikkert kun være åbne midlertidigt mens du bruger dem, sådan at der bliver mere plads til editoren.

Når du kører KDevelop første gang, så skulle du allerede have værktøjsknappen Projekter. Klik på den: det vil åbne et undervindue, som forneden viser de projekter, som du har føjet til sessionen og en visning af mapperne i dit projekt for oven.

Der er mange andre værktøjer, som du kan bruge i KDevelop, men deres knapper er ikke alle til stede i vindueskanten fra begyndelsen. For at føje flere til vælger du menuen Vindue -> Tilføj værktøjsvisning.... Her er nogle, som du sikkert vil få glæde af:

  • Klasser: En fuldstændig liste af alle klasser, som bliver defineret i en af din sessions projekter med alle deres medlemsfunktioner og -variable. Klik på et medlem for at åbne kildeeditorens vindue med markøren på det sted, hvor det emne, du klikkede på er defineret.
  • Dokumenter: Viser de filer, som du for nylig har arbejdet med ordnet efter type (fx kildefil, patchfil eller rent tekstdokument).
  • Kodebrowser: Dette værktøj viser ting, der er relaterede til det, som du aktuelt arbejder med afhængigt af, hvor markøren er placeret. Hvis den fx er på en #include linje, så vises information om den fil der bliver inkluderet, så som hvilke klasser, der erklæres i filen; hvis du er på en tom linje på filniveau, så vises de klasser og funktioner, som erklæres eller defineres i den aktuelle fil (alle vises som links: klikker du på dem, så bringes du til det sted i filen, hvor erklæringen eller definitionen er); hvis du er i en funktionsdefinition, så vises der, hvor funktionen erklæres og hvor den bruges.
  • Filsystem: Giver dig en trævisning af filsystemet.
  • Dokumentation: Lader dig søge efter man-sider og andre hjælpedokumenter.
  • Tekststumper: Her kan du gemme tekststumper, som du ofte har brug for og ikke har lyst til at skulle skrive hver gang. I projektet, som vises i billedet ovenfor er der ofte brug for kode som
for (typename Triangulation<dim>::active_cell_iterator cell 
      = triangulation.begin_active(); 
   cell != triangulation.end();
   ++cell)


Det er besværligt udtryk, med det ser næsten ud på samme måde, hver gang du har brug for sådan en løkke. Det gør udtrykket til en god kandidat til en tekststump.

  • Konsole: Åbner et vindue med en kommandolinje i KDevelops hovedvindue til de situationer, hvor du blot skal have udført enkelte kommandoer (fx hvis du skal køre ./configure).

For mange programmører er det vigtigst at have god plads i lodret retning. For at opnå dette kan du arrangere dine værktøjsvisninger i venstre og højre vindueskant. For at flytte et værktøj højreklikker du på dets knap og vælger en ny position til det.

Udforsk kildekoden

Lokal information

KDevelop forstår kildekode og er derfor virkelig god til at at give dig information om variable eller funktioner, som kan optræde i dit program. Her er for eksempel et øjebliksbillede af arbejdet med et stump kode, hvor musen svæver over symbolet cell i linje 1316 (hvis du foretrækker at bruge tastaturet, så kan du opnå det samme ved at holde Alt-tasten nede et stykke tid):

KDevelop viser dig et værktøjstip, som inkluderer variablens type (her DoFHandler<dim>active_cell_iterator), hvor denne variabel er erklæret (hvad den er indeholdt i — her den omgivende funktion get_maximal_velocity, eftersom det er en lokal variabel, ikke en funktion, klasse eller navnerum) og hvor den er erklæret (i linje 1314, blot nogle få linjer oppe i koden).

I den aktuelle sammenhæng har symbolet, som musen svæver over ingen tilknyttet dokumentation. Hvis musen havde svævet over symbolet get_this_mpi_process i linje 1318 i dette eksempel, så ville det have set sådan ud:

Her har KDevelop henvist til erklæringen i en anden fil (utilities.h, som endda hører til et andet projekt i den samme session) og vist den doxygen-agtige kommentar, som er knyttet til erklæringen der.

Hvad der gør disse værktøjstips endnu nyttigere er, at de er dynamiske: Du kan klikke på linket Container for at få information om den kontekst, som variablen er erklæret i (fx om navnerummet System, så som hvor det bliver erklæret, defineret, brugt eller hvad dets dokumentation er) og du kan klikke på det blå link for at få flyttet tekstmarkøren hen til symbolets erklæring (i eksemplet til linje 289 i utilities) eller få en liste over steder, hvor dette symbol bruges i den aktuelle fil eller overalt i projekterne, som hører den aktuelle session. Det sidste er ofte nyttigt, hvis du for eksempel vil undersøge, hvordan en given funktion bruges i en større kodebase.

Note

Informationen i værktøjstippet er flygtig — den er afhængig af, at du holder Alt-tasten nede eller holder musen svævende. Hvis du ønsker et mere permanent visning, så åbn værktøjsvisningen Kodebrowser i et af undervinduerne. For eksempel er markøren her på samme funktion som i eksemplet ovenfor og værktøjsvisningen til venstre giver den samme slags information som værktøjstippet før:
Flytter du mærkøren rundt i vinduet til højre, så ændres informationen tilsvarende i visningen til venstre. Desuden kan du klikke på knappen Lås nuværende visning øverst til højre i Kodebrowseren for at fastholde informationen og dermed gøre den uafhængig af markørens bevægelse mens du udforsker den givne information.


Note

Denne slags kontekstafhængig information er tilgængelig mange steder i KDevelop, ikke kun i kodeeditoren. Holder du for eksempel Alt-tasten nede, mens markøren er i en liste med forslag til færdiggørelse (fx når du foretager en hurtig åbning), så får du også information om det aktuelle symbol.


Information på filniveau

Går vi et niveau op, så kan du få information om hele den aktuelle kildefil ved at placere markøren i en linje på filniveau og se hvad værktøjsvisningen Kodebrowser viser:

Her vises en liste med navnerum, klasser og funktioner, som bliver erklæret eller defineret i den akuelle fil. Det giver dig et overblik over, hvad der sker i denne fil og en måde til hoppe direkte til enhver af disse erklæringer eller definitioner uden at skulle rulle op eller ned i filen eller søge efter et bestemt symbol.

Note

Informationen til at navigere i kildekoden, som vises på filniveau er den samme, som du får i tilstanden Omrids, som omtales nedenfor; forskellen er, at tilstanden Omrids kun er et midlertidigt værktøjstip.


Information om projekter og sessioner

Der er mange måder at få information om et helt projekt (eller endda om alle projekter i en session). Den slags information gives som regel i en værktøjsvisning. For eksempel giver værktøjsvisningen Klasser dig en træstruktur over alle klasser og omgivende navnerum for alle projekter i en session sammen med hver enkelt klasses medlemsfunktioner og -variable:

Lader du musen svæve over et emne, så får du igen information om symbolet, hvor det bliver erklæret, defineret og brugt. Dobbeltklikker du på et emne i trævisningen, så åbnes et editorvindue med markøren placeret der, hvor symbolet bliver erklæret eller defineret.

Med der er andre måder at få vist global information. For eksempel giver værktøjsvisningen Dokumenter en oversigt over et projekt i form af de forskellige slags filer eller andre dokumenter, som indgår i projektet:

Fremhævning med alle regnbuens farver

KDevelop bruger en række farver til at fremhæve forskellige objekter i kildekoden. Hvis du ved, hvad de forskellige farver betyder, så kan du lynhurtigt få en masse information fra kildekoden blot ved at se på farverne uden at læse en eneste tegn. Reglerne for fremhævning er som følger:

  • Objekter af type Class, Struct og Enum (værdierne og typen), (globale) funktioner og klassemedlemmer har fået tildelt hver deres farve (klasser er grønne, enums er mørkerøde og medlemmer er mørkegule eller violette, (global) funktioner er altid violette).
  • Alle globale variable er mørkegrønne.
  • Identifikatorer, som er typedefs for andre typer er grønblå.
  • Alle erklæringer og definitioner af objekter er i fede typer.
  • Hvis et medlem tilgås inde fra den kontekst, hvor det er defineret (base- eller afledet klasse) så vises det i gult, ellers er det violet.
  • Hvis et medlem er private eller protected får det en lidt mørkere farve, når det bruges.
  • For variable, som er lokale i en funktionskrops virkefelt vælges farver baseret på en hashværdi af identifikatoren. Dette gælder også funktionens parametre. En identifikator vil altid have den samme farve indenfor sit virkefelt (men den samme identifikator vil få en anden farve, hvis den repræsenterer et andet objekt, dvs. hvis den bliver omdefineret i et indlejret virkefelt), og du får som regel den samme farve for den samme identifikator i forskellige virkefelter. Hvis du således har flere funktioner, som tager parametre med de samme navne, så vil argumenterne altid få de samme farver.
  • Identifikatorer, for hvilke KDevelop ikke kunne finde den tilsvarende erklæring farves hvide. Dette kan undertiden forårsages af manglende #include-erklæringer.
  • Ud over denne farvning vil normal editor-syntaksfremhævning blive udført som det kendes fra Kate. KDevelops semantiske fremhævning vil altid have forrang for editorens fremhævning, hvis der er en konflikt.

Note

Farvning af lokale variable kan slås fra i Indstillinger... -> Indstil KDevelop... -> Sprogunderstøttelse -> Lokal farvelægningsintensitet ved at skubbe skyderen til sin mindste værdi. Tilsvarende kan farvning af globale variable, globale funktioner, klasser, structs, enumerationer og medlemmer af klasser kan slås fra i Indstillinger... -> Indstil KDevelop... -> Sprogunderstøttelse -> Global farvelægningsintensitet

Bevæg dig rundt i kildekoden

I det forrige afsnit har vi fortalt, hvordan man udforsker kildekoden, dvs. får information om symboler, filer og projekter. Næste skridt er at bevæge sig rundt i kildekoden. Der er igen forskellige niveauer, som det kan foregå på: lokalt, på filniveau og indenfor et helt projekt.

Note

Mange af de måder, som man kan navigere i koden på er tilgængelige i menuen Navigér i KDevelops hovedvindue.


Lokal navigation

KDevelop er meget mere end en editor, men den er også er kildeeditor. Som sådan kan du selvfølge flytte markøren op, ned og til højre og venstre i kildefilen. Du kan også bruge tasterne PageUp og PageDown og alle de andre kommandoer, som du kender det fra enhver brugbar editor.

Navigation på filniveau og i omrids-tilstand

På filniveau har KDevelop mange måder at navigere igennem kildekoden på, herunder følgende metoder til at hoppe rundt i en given fil:

  • Omrids: Du kan få et overblik over, hvad der er i den aktuelle fil på mindst tre forskellige måder:
    • Ved at klikke i tekstboksen Omrids øverst til højre i hovedvinduet eller taste Alt + Ctrl + N åbner du en dropned-liste med alle funktions- og klasseerklæringer:

      Du kan så vælge at hoppe til en af dem eller — hvis der er mange — begynde at skrive, hvorved listen bliver mindre og mindre efterhånden som de emner, som ikke passer med det du har skrevet forsvinder fra listen.
    • Placér markøren på i linje på filniveau (dvs. udenfor erklæringer og definitioner af funktioner og klasser) mens værktøjsvisningen Kodebrowser er åben:

      Dette giver dig også et oberblik over den aktuelle fil og lader dig vælge, hvor du vil hoppe til.
    • Lader du musen svæve over fanebladet for en af de åbne filer, så får du også et omrids af filen i dette faneblad.
  • Kildefiler er organiserede som en liste af erklæringer og definitioner af funktioner. Taster du Alt + Ctrl + PgUp eller Alt + Ctrl + PgDown, så hopper du til den forrige eller næste funktionsdefinition i denne fil.

Navigation i projekter og sessioner: Semantisk navigation

Som nævnt andetsteds arbejder KDevelop normalt ikke men enkelte kildefiler men ser på projekter som et hele (eller snarere med alle de projekter, som er en del af den aktuelle session). Som konsekvens af det giver den dig mange muligheder for at navigere igennem hele projekter. Nogle af disse muligheder er afledt af de funktioner, som vi allerede har omtalt i afsnittet Udforsk kildekoden, mens andre er helt nye. Det fælles tema er, at disse navigationsfunktioner er baseret på en semantisk forståelse af kildekoden, dvs. at hele projekteer med tilhørende data skal parses, for at de skal kunne fungere. Den følgende liste viser nogle af måderne, på hvilke du kan navigere igennem kildekode, som kan være spredt ud over et potentielt meget stort antal filer:

  • Som vi så i afsnittet Udforsk kildekoden kan du få et værktøjstip, som forklarer individuelle navnerum, klasser, funktioner og variable ved at lade musen svæve over deres navn eller holde Alt-tasten nede et stykke tid. Her er et eksempel:

    Klikker du på linkene for et symbols erklæring eller udvider du listen med anvendelser, så kan du hoppe til disse steder — den relevante fil åbnes, hvis det er nødvendigt — og placere markøren på det tilsvarende sted. En lignende effekt kan opnås ved at bruge værktøjsvisningen Kodebrowser, som også er omtalt tidligere.
  • Åbn hurtigt: De forskellige åbn hurtigt-metoder i KDevelop giver dig kraftfulde måder at hoppe til andre filer eller steder. Der er fire af dem:
    • Åbn klasse hurtigt (Navigation -> Åbn klasse hurtigt eller Alt + Ctrl + C): Du vil få en liste med alle klasserne i denne session. Når du begynd at skrive (en del af) klassens navn, så skrumper listen ind til kun at indeholde de klasser, hvis navne matcher det, som du har skrevet indtil nu. Når listen er kort nok, så kan du vælge et element ved brug af pil op- og ned-tasterne og KDevelop vil tage dig til det sted, hvor klassen bliver erklæret.
    • Åbn funktion hurtigt (Navigation -> Åbn funktion hurtigt eller Alt + Ctrl + M): Du vil få en liste med alle (medlems)funktionerne, som indgår i projekterne i den aktuelle session, og du kan vælge fra listen på samme måde som ovenfor. Bemærk, at listen kan inkludere både funktionserklæringer og -definitioner.
    • Åbn fil hurtigt (Navigation -> Åbn fil hurtigt eller Alt + Ctrl + O): Du vil få en liste med alle filerne, som indgår i projekterne i den aktuelle session, og du kan vælge fra listen på samme måde som ovenfor.
    • Universel åbn hurtigt (Navigation -> Åbn hurtigt eller Alt + Ctrl + Q): Hvis du glemmer, hvilken tastaturgenvej, der er bundet til hvilken af de foregående metoder, så er dette den universelle schweizerkniv — den giver dig en liste med alle filer, funktioner, klasser og andre ting, som du kan vælge fra.
  • Spring til erklæring eller definition: Når man implementerer en (medlems)funktion, så har man ofte brug for at hoppe tilbage til det sted, hvor funktionen bliver erklæret for eksempel for at holde argumentlisten i funktionserklæringen synkroniseret med funktionsdefinition eller for at opdatere dokumentationen. For at gøre dette placerer du markøren på funktionens navn og vælger menuen Navigation -> Spring til erklæring (eller tast Ctrl + .) for at komme til det sted, hvor funktionen bliver erklæret. Der er flere måder at komme tilbage til det oprindelige sted:
    • Vælg menuen Navigation -> Spring til definitionen (eller tast Ctrl + ,).
    • Vælg menuen Navigation -> Forrige besøgte kontekst (eller tast Meta + pil til venstre) som beskrevet længere nede.

Note

At springe til erklæringen af et symbol virker ikke blot med navne på funktioner, som du er i færd med at implementere. Det fungerer også med andre symboler: Placér markøren på en (lokal, global eller medlems-) variabel og hop til dens erklæring. På samme måde kan du placere markøren på en klasses navn for eksempel i en variabel eller funktionserklæring og hoppe til stedet, hvor den bliver erklæret.


  • Skift definering/erklæring: I ovenstående eksempel skulle du først placere markøren på funktionens navn for at hoppe til erklæringen. For at undgå dette kan du vælge menuen Navigation -> Skift definering/erklæring (eller taste Shift + Ctrl +C) for at hoppe til erklæringen af den funktion, som markøren aktuelt befinder sig i. Vælg det samme menupunkt en gang til for at komme tilbage til det sted, hvor funktionen bliver defineret.
  • Forrige eller næste brugstilfælde: Placér markøren på en lokal variabels navn og vælg menuen Navigation -> Næste brugstilfælde (eller tast Meta + Shift + pil til højre) for at hoppe til det næste sted, hvor variablen bruges. (Bemærk, at dette ikke blot søger efter fremkomster af variabelnavnet, men faktisk tager højde for, at variable med det samme navn men udenfor den aktuelle rækkevidde ikke er anvendelser af den samme variabel.) Det samme kan du gøre med funktionsnavne. Vælg menuen Navigation -> Forrige brugstilfælde (eller tast Meta + Shift + pil til venstre) for at komme til en tidligere anvendelse af symbolet.

Note

For at se en liste med alle anvendelser af et navn, som disse kommandoer bevæger sig rundt imellem kan du placere markøren på navnet, åbne værktøjsvisningen Kodebrowser og holde Alt-tasten nede. Dette forklares i mere detalje i afsnittet om at udforske kildekoden.


Note

Nogle genveje kan allerede være anvendt af dinvinduesmanager (fx bruges Meta + Left af LXDE/Openbox); du kan enten ændre tastekombinationerne for genvejen i KDevelop i Indstillinger... -> Indstil genveje eller i vinduesmanagerens indstillinger (fx .config/openbox/lubuntu-rc.xml)


  • Kontekstlisten: Webbrowsere har en funktion, hvor du kan gå frem og tilbage i listen over de senest besøgte sider. KDevelop har den samme slags funktion, hvor du i stedet for websider besøger kontekster. En kontekst er markørens aktuelle position, og du ændrer konteksten ved enhver form for navigering bortset fra markørkommandoerne — for eksempel ved at klikke på et link i et værktøjstip eller i værktøjsvisningen Kodebrowser, vælge et punkt i menuen Navigation eller bruge en af de andre navigationskommandoer. Brug menuerne Navigation -> Forrige besøgte kontekst (Meta + pil til venstre) og Navigation -> Næste besøgte kontekst (Meta + pil til højre) til at gå igennem listen af besøgte kontekster ligesom Frem- og Tilbage-knapperne i en browser fører dig frem og tilbage i listen af besøgte websider.
  • Endelig er der værktøjsvisninger, som lader dig navigere til forskellige steder i din kodebase. For eksempel giver værktøjsvisningen Klasser en liste med alle navnerum og klasser i alle projekter i den aktuelle session og lader dig folde listen ud, sådan at du kan se hver klasses medlemsfunktioner og -variable:
    Du kan hoppe til edt sted, hvor et punkt erklæres ved at dobbeltklikke på de (eller bruge kontekstmenuen ved at højreklikke). Andre værktøjer har lignende funktioner; for eksempel giver værktøjsvisningen Projekter en liste med filer, som indgår i sessionen:
    Igen åbner du en fil ved at dobbeltklikke på den.


Skriv kildekode

Eftersom KDevelop forstår dit projekts kildekode, så kan den hjælpe dig med at skrive yderligere kode. I det følgende skitseres nogle af de måder, som det sker på.

Automatisk fuldførelse

Automatisk fuldførelse er nok den nyttigste af alle funktionerne til at skrive ny kode er. Betragt for eksempel følge stump kode:

class Car {
  // ...
  public:
    std::string get_color () const;
};

void foo() 
{
  Car my_ride;
  // ...do something with this variable...
  std::string color = my_ride.ge

I den sidste linje vil KDevelop huske, at variablen my_ride er af typen Car og vil automatisk tilbyde at færdiggøre navnet på medlemsfunktionen ge til get_color. Alt havd du behøver at gøre er faktisk at skrive, indtil funktionentil automatisk fuldførelse har reduceret antallet af matchende funktioner til en og så taste Enter:

Bemærk, at du kan klikke på værktøjstippet for at få mere information om funktionen ud over dens returtype og om den er "public":

Automatisk fuldførelse kan spare dig en masse tasteanslag, hvis dit projekt bruger lange variabel- og funktionsnavne; desuden hjælper det med at undgå skrivefejl i navne (med dertil hørende compilerfejl), og det gør det meget lettere at huske funktionernes præcise navne. Hvis for eksempel alle dine getter-funktioners navne starter med get_, så bliver funktionen til automatisk fuldførelse i stand til at præsentere dig for en liste, som kun indeholder mulige gettere, efter at du blot har tastet de første fire bogstaver i navnet; i den forbindelse vil du nok blive mindet om, hvilken af funktionerne, der er den rigtige. Bemærk, at automatisk fuldførelse virker selv hvis den aktuelle fil hverken indeholder erklæringerne af klassen Car eller variablen my_ride. KDevelop skal blot vide, at disse klasser og variable er tilknyttede, dvs. at filerne, hvor de bliver erklærede skal være en del af projektet, som du aktuelt arbejder på.

Note

KDevelop ved ikke altid, hvornår den skal hjælpe dig med at fuldføre kode. Hvis tooltippet med automatiske fuldførelse ikke åbnes automatisk, så tast Ctrl + Mellemrum for manuelt at åbne en liste med mulige fuldførelser. For at kunne udfør automatisk fuldførelse skal KDevelop fortolke din kildefil. Dette sker i baggrunden for alle filer, som hører til projekterne i den aktuelle session efter at du starter KDevelop samt når du stopper med at skrive i en brøkdel af et sekund (forsinkelsen kan indstilles).


Note

KDevelop fortolker kun filer, som den betragter som kildekode, hvilket bestemmes af filens MIME-type. Denne type er ikke fastast før efter at filen er belvet gemt en gang; når du laver en ny fil og begynder at skrive kode i den, så udløser det ikke fortolkning med henblik på automatisk fuldførelse før efter, at filen er blevet gemt første gang.


Note

For at automatisk fuldførelse kan fungere, så skal KDevelop kunne finde erklæringer i headerfiler. Den vil søge i et antal standardmapper. Hvis den ikke automatisk finder en headerfil, så vil den understrege headerfilens navn med rødt; i så fald kan du højreklik på headerfilen for at fortælleKDevelop, hvor denne fil findes og hvilken information den indeholder.


Note

Indstilling af den automatiske fuldførelse bliver forklaret i dette afsnit af manualen.


Tilføj nye klasser og implementér medlemsfunktioner

KDevelop her en guide til at tilføje nye klasser. Proceduren er beskrevet i Opret en ny klasse. En simpel C++-klasse kan oprettes ved at vælge skabelonen Basic C++ i kategorien Klasse. I guiden kan vu vælge nogle forud definerede funktioner, for eksemepel en tom konstruktør, en kopikonstruktør og en destruktør.

Efter at have afsluttet guiden oprettes filen og den åbnes i editoren. Headerfilen har allerede et "include-værn", og den nye klasse har alle de medlemsfunktioner, som vi valgte. De næste to skridt ville være at dokumentere klassen og dens medlemmer og at implementere dem. Vi vil diskutere funktionerne til at hjælpe med dokumentation nedenfor. For at implementere de funktioner, som allerede er tilføjet går du simpelt hen til fanebladet bus.cpp, hvor de allerede findes:

For at tilføje nye medlemsfunktioner går du tilbage til fanebladet bus.h og tilføjer funktionens navn. Lad os for eksempel tilføje dette:

Bemærk, at jeg allered er begyndt at implementere. I mange kodningsstile skal funktioner dog ikke implementeres i headeren men snarere i den tilhørende .cpp-fil. For at gøre dette placerer du markøren på funktionens navn og vælger Kode -> Flyt ind i kilden eller tast Ctrl + Alt + S. Dette fjerner koden mellem de krøllede parenteser fra headerfilen (og erstatter den med et semikolon, som skal til for at afslutte funktionserklæringen) og flytter den ind i kildefilen:

Bemærk, at jeg blot er begyndt at skrive, og at jeg forventer, at variablen students sandsynligvis skal være en medlemsvariabel i klassen Bus, men at jeg ikke har tilføjet den endnu. Bemærk også hvordan KDevelop understreger variablen for at gøre det klart, at den endnu ikke ved noget om variablen. Men dette problem kan løses: Klik på variablens navn for at få følgende værktøjstip frem:

(Det samme kan opnås ved at højreklikke på navnet og vælge Løs: Erklær som.) Lad mig vælge 3 - private unsigned int (enten med musen eller ved at taste Alt + 3) og se, hvordan det viser sig i headerfilen:

Det er værd at bemærke, at KDevelop udleder den type, som variablen skal erklæres til fra det udtryk, som bruges til at initialisere den. Hvis vi for eksempel havde skrevet følgende tvivlsomme tilføjelse, så ville den have foreslået at erklære variablen som typen double:

En sidste bemærkning: Funktionen Kode -> Flyt ind i kilden indsætter ikke altid medlemsfunktonen der, hvor du ønsker den. For eksempel ønsker du måske at den bliver markeret som inline og placeret nederst i headerfilen. I sådan et tilfælde kan du skrive erklæringen og begynde at skrive funktionsdefinitionen sådan her:

KDevelop giver dig automatisk alle de mulige fuldførelser af, hvad der kan komme her. Vælg et af de to punkter med add_students for at få følgende kode, som allerede udfylder den fuldstændige liste af argumenter:

Dokumentation af erklæringer

God kode har god dokumentation både af funktionernes implementering af algoritmer og af interfacet — dvs. klasser (medlems- og globale) funktioner og (medlems- og globale) variable skal dokumenteres for at forklare deres formål, mulige værdier af argumenter, pre- og postbetingelser osv. Med hensyn til dokumentation af interfacet er doxygen blevet en de facto-standard for formatering af kommentarer, som kan trækkes ud og vises i søgbare websider.

KDevelop understøtter denne kommentarstil ved at give dig en genvej til at generere en skabelon til kommentarer, som dokumenterer en klasse eller medlemsfunktion. Antag for eksempel, at du allerede har skrevet denne kode:

class Car {
  public:
    std::string get_color () const;
};

Nu vil du føje dokumentation til både klasse og medlemsfunktioner. For at gøre det flytter du markøren hen på første linje og vælger menuen Kode -> Dokumentér erklæring eller taster Alt + Shift + D. KDevelop vil reagere ved at tilføje følgende:

Markøren er allerede i det grå område, sådan at du kan skrive en kort beskrivelse af denne klasse (efter doxygen-nøgleordet @brief). Du kan så fortsætte med at føje mere detaljeret dokumentation til denne kommentar.

Mens markøren er inde i kommentaren, er teksten fremhævet med grønt (fremhævningen forsvinder, når du flytter markøren ud af kommentaren). Når du kommer til slutningen af en linje taster du Enter, så vil KDevelop automatisk starte en ny linje, som begynder med en asterisk og placere markøren et tegn længere inde.

Lad os nu dokumentere medlemsfunktionen. Flyt markøren til den linje, hvor funktionen erklæres og vælg menuen Kode -> Dokumentér erklæring ellet tast Alt + Shift D:

Igen genererer KDevelop automatisk en kommentarskabelon, som inkluderer dokumentation af funktionen selv og af dens returtype. I det aktuelle tilfælde er fuktionens navn ret selvforklarende, men det er tit ikke tilfældet med argumenterne, så de skal dokumenteres hver for sig. For at illustrere dette betragter vi ee lidt mere interessant funktion og kommentaren, som KDevelop genererer automatisk:

Her indeholder den foreslåede kommentar for eksempel allerede Doxygen-felterne til de enkelte parametre.

Omdøb variable, funktioner og klasser

Undertiden ønsker man at omdøbe en funktion, klasse eller variabel. Lad os for eksempel sige, at du allerede har dette:

Du opdager så, at du ikke er glad for funktionsnavnet remove_students og fx hellere ville have kaldt den throw_out_students. Du kunne foretage en søgning-og-erstatning efter navnet, den det hat to ulemper:

  • Funktionen bliver måske bruge i flere filer.
  • Vi vil kun omdøbe denne funktion og ikke berøre andre funktioner, som måske har samme navn men bliver erklærede i andre klasser eller navnerum.

Begge disse problemer kan løses ved at flytte markøren hen på et hvilken som helst sted, hvor funktionsnavnet optræder og så vælge menuen Kode -> Omdøb erklæring (eller højreklik på navnet og vælg Omdøb Bus::remove_students). Dette får en dialog til at dukke op, hvor du kan angive funktionens nye navn, og hvor du også kan se alle de steder, hvor funktionen faktisk bruges:

Tekststumper

De fleste projekter har kodestumper, som man ofte har brug for at skrive i kildekoden. Nogle eksempler: skriver man en kompiler, så har man brug for løkker over alle instruktioner; til en brugerflade skal man tjekke, at brugerinput er gyldigt og åbne en fejlmeddelelsesboks hvis ikke; i mit eget projekt forekommer denne slags linjer ofte:

for (typename Triangulation<dim,spacedim>::active_cell_iterator
       cell = triangulation.begin_active();
     cell != triangulation.end(); ++cell)
  ... do something with the cell ...

I stedet for at skrive denne tekst igen og igen (med alle de muligheder for tastefejl, som det medfører), så kan værktøjet Tekststumper være nyttigt her. Åbn værktøjsvisningen (se Værktøjer og visninger, hvis den tilsvarende knap ikke allerede findes i vindueskanten) eller vælg Vindue -> Værktøjsvisninger i menulinjen og aktivér Tekststumper. Klik så på knappen Tilføj depot (et lidt misvisende navn — med den kan du lave en navngiven samling af tekststumper til en bestemt slags kildekode, fx C++) og lav et tomt depot. Klik så på knappen for at kalde følgende dialog frem:

Note

Tekststumpens navn må ikke indeholde blanktegn eller andre specielle tegn, fordi den skal ligne et almindeligt navn på en funktion eller variabel (det vil blive klart hvorfor i næste afsnit). Hvis navnet på en tekststump indeholder blanktegn, så bliver knappen O.k. blive inaktiv uden yderligere forklaring. Dette er blevet rettet i de seneste udgaver af KDevelop, (se KDevelop bug 274299).


Når du skriver kode og skal bruge en tekststump, så skriver du blot tekststumpens navn på samme måde, som du ville med enhver funktion eller variabel. Navnet bliver så tilgængeligt for automatisk fuldførelse — det betyder, at du uden problemer kan bruge lange og beskrivende navne til tekststumper, som den ovenfor — og når du accepterer forslaget i værktøjstippet til automatisk fuldførelse (ved for eksempel at taste Enter), så bliver den allerede indtastede del af tekststumpens navn erstattet af tekststumpens fulde indhold, som bliver korrekt indrykket:

Bemærk, at værktøjsvisningen Tekststumper ikke behøver at være åben for at dette skal virke: du har kun brug for værktøjsvisningen når du skal definere nye tekststumper. En alternativ, men måske knap så bekvem måde at indsætte tekststumper er simpelt hen at klikke på den i værktøjsvisningen.

Note

Tekststumper kan meget mere, end hvad der lige er blevet forklaret. En fuld beskrivelse af, hvad du kan gøre med tekststumper finder du i den detaljerede dokumentation af værktøjet Tekststumper.

Tilstande og arbejdssæt

Hvis du er kommet så langt, så se lidt på øverste højre hjørne af KDevelops hovedvindue. Som det ses i billedet finder du her de tre tilstande, som KDevelop kan være i: Kode (den tilstand, som vi diskuterer i dette kapitel om arbejdet med kildekoden), Fejlsøgning (se Fejlsøgning af programmer) og Eftersyn (se Arbejdet med versionskontrolsystemer).

Hver tilstand har sit eget sæt af værktøjer i vindueskanten og sit eget arbejdssæt af aktuelt åbne filer og dokumenter. Desuden er hvert arbejdssæt knyttet til en session, svarende til den sammenhæng, der vises i billedet ovenfor. Bemærk, at filerne i arbejdssættet hører til samme session med kan komme fra forskellige projekter, som hører til samme session.

Hvis du åbner KDevelop for første gang, så er arbejdssættet tomt — der er ingen åbne filer. Men idet du åbner filer for redigering (eller fejlsøgning eller eftersyn i de andre tilstande), så vokser dit arbejdssæt. Som du kan se på billedet herunder, så viser et symbol i fanebladet at arbejdssættet ikke er tomt. Bemærk, at nå du lukker KDevelop, gemmes arbejdssættet og det genetableres, når du genstarter programmet, dvs. at du får det samme sæt af åbne filer.

Hvis du lader musen svæve over symbolet for et arbejdssæt, så dukker der et værktøjstip frem, som viser dig hvilke filer, der aktuelt er åbne i dette arbejdssæt (her filerne step-32.cc og step-1.cc). Klikker du på det røde minustegn, så lukkes fanebladet med den tilsvarende fil. Klikker du på Luk, så lukkes hele arbejdssættet på en gang (dvs. alle åbne filer lukkes). Pointen med at lukke et arbejdssæt er, at det ikke bare lukker alle filer men faktisk gemmer det og åbner et nyt, endnu tomt sæt. Det kan du se her:

Bemærk de to symboler til venstre for det tre tilstandsfaneblade (hjertet og det uidentificérbare symbol til venstre for det). Hver af disse symboler repræsenterer et gemt arbejdssæt. Hvis du lader musen svæve over hjertesymbolet, så ser du noget i retning af dette:

Det viser dig, at det tilsvarende arbejdssæt indeholder to filer og deres tilsvarende projektnavne: Makefile og changes.h. Klikker du på Indlæs, så gemmes og lukkes det aktuelle arbejdssæt (i eksemplet her har det filerne tria.h og tria.cc åbne) og åbner i stedet det valgte arbejdssæt. Du kan også slette et arbejdssæt permanent.

Nogle nyttige tastaturgenveje

KDevelops editor bruger standard-tastaturgenveje til alle almindelige redigeringsoperationer. Den understøtter dog også et antal mere avancerede operationer, når man redigerer kode; nogle af disse er bundet til forskellige tastekombinationer. De følgende er ofte nyttige:

Hop rundt i kildekode
Ctrl+Alt+O Åbn fil hurtigt: skriv en del af et filnavn og vælg blandt alle de filer i den aktuelle sessions projektmapper, som matcher strengen; filen bliver så åbnet
Ctrl+Alt+C Åbn klasse hurtigt: skriv en del af navnet på en klasse og vælg imellem de klasser der matcher; markøren vil hoppe til det sted, hvor klassen erklæres
Ctrl+Alt+M Åbn funktion hurtigt: skriv en del af navnet på en (medlems)funktion og vælg imellem de funktioner der matcher. Bemærk, at listen både viser erklæringer og definitioner. Markøren vil hoppe til det valgte sted
Ctrl+Alt+Q Åbn hurtigt: skriv hvad som helst (filnavn, klassenavn, funktionsnavn) og få en liste over alt det, der matcher til at vælge fra
Ctrl+Alt+N Oversigt: Vis en liste over alt, hvad der sker i denne fil, dvs. klasseerklæringer og funktionsdefinitioner
Ctrl+, Hop til definitionen af en funktion, hvis markøren i øjeblikket er på en funktionserklæring
Ctrl+. Hop til en erklæring af en funktion eller variabel hvis markøren i øjeblikket er i en funktionsdefinition
Ctrl+Alt+PageDown Hop til den næste funktion
Ctrl+Alt+PageUp Hop til den forrige funktion
Ctrl+G Gå til linje
Søg og erstat
Ctrl+F Find
F3 Find næste
Ctrl+R Erstat
Ctrl+Alt+F Find og erstat i flere filer
Andre ting
Ctrl+_ Fold et lokalt niveau sammen: skjul denne blok, for eksempel hvis du ønsker at fokusere på det overordnede billede i en funktion
Ctrl++ Udfold et lokalt niveau: Omgør sammenfoldning
Ctrl+D Udkommentér den markerede tekst eller den aktuelle linje
Ctrl+Shift+D Fjern udkommentering af den markerede tekst eller den aktuelle linje
Alt+Shift+D Dokumentér erklæring. Hvis markøren er på erklæringen af en funktion eller klasse, så laves der en doxygen-agtig kommentar med alle funktionens parametre, returværdi osv.
Ctrl+T Byt det aktuelle og det forrige tegn
Ctrl+K Slet den aktuelle linje (bemærk: dette er ikke emacs' "slet herfra og til linjens afslutning")