# Het handboek van &kdiff3;

## Inleiding

### Alweer een front-end voor diff?

Er bestaan diverse grafische hulpmiddelen voor diff. Waarom &kdiff3; gebruiken? Laat me uitleggen waarom ik het geschreven heb.

&kdiff3; begon omdat ik een moeilijke samenvoegoperatie moest doen. Samenvoegen is nodig als diverse mensen aan dezelfde bestanden in een project werken. Een samenvoeging kan enigszins geautomatiseerd worden, als het samenvoeghulpmiddel daartoe niet alleen de nieuwe, gewijzigde bestanden heeft ("takken") maar ook het originele bestand ("basis"). Het samenvoeghulpmiddel kiest automatisch een verandering die alleen in één tak is gedaan. Als diverse mensen dezelfde regels veranderen, detecteert het samenvoeghulpmiddel een conflict dat handmatig opgelost moet worden.

De samenvoeging was moeilijk omdat één van de helpers veel dingen had gewijzigd en de insprong op veel plaatsen had verbeterd. Een andere helper had ook veel tekst in hetzelfde bestand veranderd, hetgeen in diverse samenvoegconflicten resulteerde.

Het hulpmiddel dat ik toen gebruikte toonde alleen de gewijzigde regels, maar niet wat er in die regels was gewijzigd. En er was geen informatie over of alleen de insprong gewijzigd was. Het samenvoegen was een kleine ramp.

Dus dat was het begin. De eerste versie kon verschillen binnen een regel en verschillen in witruimte tonen. Later werden veel andere mogelijkheden toegevoegd om het nut te vergroten.

Als u bijvoorbeeld snel wat tekst wilt vergelijken, kunt u het naar het klembord kopiëren en in een van de vergelijkingsvensters plakken.

Een optie die veel werk vereiste was het vergelijken en samenvoegen van mappen, dat het programma bijna in een bestandsverkenner veranderde.

Ik hoop dat &kdiff3; ook voor u werkt. Veel plezier!

Joachim Eibl (2003)

### Schermafdrukken en mogelijkheden

Deze schermafdruk toont het verschil tussen twee tekstbestanden

(met een vroegere versie van &kdiff3;):

3-voudig samenvoegen wordt volledig ondersteunt. Dit is nuttig als twee mensen code onafhankelijk wijzigen. Het originele bestand (de basis) wordt gebruikt om &kdiff3; te helpen bij het automatisch selecteren van de goede wijzigingen. In de samenvoeg-editor onder de verschillenvensters kunt u conflicten oplossen, terwijl u de uitvoer ziet die dat oplevert. U kunt zelfs de uitvoer wijzigen. Deze schermafdruk toont het samenvoegen van drie invoerbestanden:

&kdiff3; helpt u ook bij het vergelijken en samenvoegen van complete mappen. Deze schermafdruk toont &kdiff3; gedurende het samenvoegen van een map.

### Meer mogelijkheden

#### Verschillen regel-voor-regel en teken-voor-teken tonen

Door de mogelijkheden van een grafisch kleurenbeeldscherm te gebruiken toont &kdiff3; u precies wat het verschil is. U zult dit prettig vinden als u veel code moet doornemen.

#### Verschillen in witruimte in één oogopslag zien

Spaties en tabs die verschillen worden getoond. Als regels alleen in de hoeveelheid witruimte verschillen kunt u dit in één oogopslag zien in de overzichtskolom aan de linkerkant. (Geen zorgen meer als mensen de insprong veranderen.)

#### Drievoudig verschil

Drie bestanden analyseren en zien waar ze verschillen.

De vensters links, midden en rechts heten A, B en C en zijn respectievelijk blauw, groen en magenta gekleurd.

Als één bestand hetzelfde is en één bestand verschilt op een regel geeft de kleur aan welk bestand verschilt. De rode kleur geeft aan dat beide andere bestanden verschillen.

#### Comfortabel samenvoegen van twee of meer invoerbestanden

U kunt &kdiff3; gebruiken om twee of drie invoerbestanden samen te voegen en het samenvoegen zo veel mogelijk automatisch te laten verlopen. Het resultaat wordt getoond in een bewerkbaar venster waarin de meeste conflicten met een enkele muisklik opgelost kunnen worden: kies de knoppen A/B/C uit de knoppenbalk om de bron te kiezen die gebruikt moet worden. U kunt hier ook meer dan één bron kiezen. Aangezien dit uitvoervenster een editor is, kunnen ook conflicten die verdere correctie vereisen hier uitgevoerd worden zonder een extra hulpmiddel.

#### En...

- Snelle navigatie via knoppen.

- Een muisklik in een samenvattingskolom synchroniseert alle vensters om dezelfde positie te laten zien.

- Selecteer en kopieer vanuit elk venster en plak het in het samengevoegde resultaatvenster.

- Een overzichtskolom die toont waar de wijzigingen en conflicten zijn.

- De kleuren zijn aan te passen aan uw specifieke voorkeuren.

- Aanpasbare tabgrootte.

- Een optie om spaties in plaats van tabs in te voegen.

- Bestanden comfortabel openen via een dialoogvenster of bestanden opgeven op de opdrachtregel.

- Zoeken naar tekenreeksen in alle tekstvensters. Zoek (Ctrl-F) en Volgende zoeken (F3).

- De regelnummers voor elke regel tonen.

- Het klembord plakken of tekst in een verschil-invoervenster slepen.

- Netwerktransparantie via KIO.

- Kan gebruikt worden als verschillentoner in KDevelop 3.

- Regelafbreking voor lange regels.

- Ondersteuning voor Unicode, UTF-8 en andere coderingen.

- Ondersteuning voor talen die rechts-naar-links schrijven.

- ...

## Vergelijken en samenvoegen van bestanden

### Opdrachtregel-opties

#### 2 bestanden vergelijken:

    kdiff3 bestand1 bestand2

#### 2 bestanden samenvoegen:

    kdiff3 bestand1 bestand2 -m
       kdiff3 bestand1 bestand2 -o uitvoerbestand

#### 3 bestanden vergelijken:

    kdiff3 bestand1 bestand2 bestand3

#### 3 bestanden samenvoegen:

    kdiff3 bestand1 bestand2 bestand3 -m
       kdiff3 bestand1 bestand2 bestand3 -o uitvoerbestand

Merk op dat `bestand1` als basisbestand voor `bestand2` en `bestand3` gebruikt zal worden.

#### Speciaal geval: bestanden met dezelfde naam

Als alle bestanden dezelfde naam hebben maar zich in verschillende mappen bevinden, kunt u typewerk besparen door de bestandsnaam alleen voor het eerste bestand op te geven. Bijvoorbeeld:

    kdiff3 map1/bestandsnaam map2 map3

#### Opdrachtregel voor het vergelijken of samenvoegen van mappen:

Dit lijkt er erg op, maar gaat nu over mappen.

    kdiff3 map1 map2
       kdiff3 map1 map2 -o doelmap
       kdiff3 map1 map2 map3
       kdiff3 map1 map2 map3 -o doelmap

Voor het vergelijken en samenvoegen van mappen kunt u hier verder lezen.

#### Overige commandoregel-opties

Voor meer informatie over opdrachtregel-opties gebruikt u:

    kdiff3 --help

Voorbeeld uitvoer:

    Opties:
      -m, --merge               De invoer samenvoegen.
      -b, --base bestand        Expliciet basisbestand. Voor compatibiliteit met bepaalde hulpmiddelen.
      -o, --output bestand      Uitvoerbestand. Impliceert -m. Bijv: -o nieuwbestand.txt
      --out bestand             Uitvoerbestand. Voor compatibiliteit met bepaalde programma's.)
      --auto                    Geen GUI als alle conflicten automatisch te doen zijn. (Vereist -o)
      --qall                    Los conflicten niet automatisch op. (Voor compatibiliteit...)
      --L1 alias1               Zichtbare naamvervanging voor invoerbestand1 (basis).
      --L2 alias2               Zichtbare naamvervanging voor invoerbestand 2.
      --L3 alias3               Zichtbare naamvervanging voor invoerbestand 3.
      -L, --fname alias         Alternatieve zichtbare naamvervanging. Eenmaal voor elke invoer opgeven..
      --cs string               Vervang een config instelling. Voor elke instelling er één gebruiken. Bijv.: --cs "AutoAdvance=1"
      --confighelp              Toon een lijst met config instellingen en huidige waarden.
      --config file             Gebruik een ander config-bestand.

De optie `--cs` maakt het mogelijk om een configuratie-waarde aan te passen die anders alleen via de configuratiedialoog veranderd kan worden. Let op: bij het beëindigen van &kdiff3; wordt de aangepaste waarde samen met de andere instellingen opgeslagen. De namen van de beschikbare configuratie-waarden en de waarden daarvan kunt U te weten komen door het gebruik van `--confighelp`.

Via `--config` kunt u een ander config-bestand specificeren. Wanneer u &kdiff3; vaak gebruikt met compleet andere instellingen dan stelt dit u in staat om gemakkelijk tussen hen te wisselen.

#### Opdrachtregel-opties die genegeerd mogen worden

Vele mensen willen &kdiff3; in combinatie met een versiecontrolesysteem gebruiken. Maar wanneer dit versiecontrolesysteem &kdiff3; aanroept door gebruik van parameters op de commandoregel, die &kdiff3; niet herkent, dan eindigt &kdiff3; met een foutmelding. U kunt bij de instellingen voor integratie commandoregelargumenten opgeven die door &kdiff3; genegeerd moeten worden. Ze zullen in de help voor gebruik verschijnen zoals in dit voorbeeld:

    --foo                     Genegeerd (gebruikergedefinieerd).

Te negeren commandoregelopties:

- Een lijst opties, gescheiden door puntkomma's ';'. Wanneer een van deze opties op de commandoregel verschijnt zal &kdiff3; deze negeren en draaien zonder een fout te geven. (Standaard is het "u;query;html;abort").

Wanneer dit niet genoeg is, dan wordt het schrijven van een shell-script aanbevolen die de vertaling van de optie doet.

### Het venster "Openen"

Aangezien veel bestanden geselecteerd moeten kunnen worden, heeft het programma een speciaal dialoogvenster hiervoor:

In dit dialoogvenster kunt u de bestandsnamen met de hand wijzigen, een bestand via de bladeraar kiezen ("Bestand...") of recente bestanden via de afrolmenu's kiezen. Als u het dialoogvenster opnieuw opent, blijven de huidige bestandsnamen staan. Het derde invoerbestand is niet verplicht. Als het item bij "C" leeg blijft, wordt slechts een verschillenanalyse op twee bestanden uitgevoerd.

U kunt ook een map kiezen met "Map...". Als voor A een map opgegeven is wordt een vergelijking/samenvoeging op mappen gestart. Als A een bestand opgeeft maar B, C of de uitvoer een map opgeeft, gebruikt &kdiff3; de bestandsnaam van A in de opgegeven mappen.

Als "Samenvoegen" geselecteerd is, kunt u de regel "Uitvoer" bewerken. Maar het is niet nodig om direct de uitvoerbestandsnaam op te geven. U kunt hiermee ook wachten tot bij het opslaan.

De knop "Instellen..." opent het optievenster, waarmee u de opties kunt instellen voordat de analyse gestart wordt.

### Invoer plakken en slepen

Soms wilt u tekstdelen die niet in een eigen bestand staan vergelijken. &kdiff3; biedt u ook de mogelijkheid tekst vanaf het klembord in een vergelijkingsvenster, dat de focus heeft, te plakken. De vergelijkingsanalyse begint dan direct. In het venster "Openen" hoeft u dan geen bestanden op te geven, sluit dit gewoon met "Annuleren".

U kunt ook slepen en neerzetten: Sleep een bestand uit een bestandsbeheerder of geselecteerde tekst uit een editor en zet deze neer in een verschillenvenster.

Wat is het idee? Soms bevat een bestand twee gelijksoortige functies, maar bekijken hoe gelijk ze werkelijk zijn is een grote moeite als u eerst twee bestanden moet maken en deze dan moet laden. Nu kunt u eenvoudigweg de relevante secties kopiëren, plakken, en vergelijken.

Opmerking: Momenteel kunt u niets uit &kdiff3; slepen. Alleen slepen naar de vergelijkingsinvoer wordt ondersteund.

Waarschuwing: Sommige editors interpreteren slepen en neerzetten in een ander programma nog steeds als knippen (in plaats van kopiëren) en plakken. Uw originele gegevens kunnen daardoor verloren gaan.

### Bestanden vergelijken en de informatie in de invoervensters interpreteren

#### Inforegel

Bovenaan elk tekstvenster staat de "inforegel". De inforegels van de invoervensters bevatten een letter "A", "B" of "C", de te bewerken bestandsnaam, een knop voor bladeren en het regelnummer van de eerste zichtbare regel in het venster. (Merk op dat venster "C" optioneel is.) Elke inforegel verschijnt in een aparte kleur.

Als u een ander bestand heeft geselecteerd door zoeken of door na het invoeren van de bestandsnaam op de toets Enter te drukken, dan zal het nieuwe bestand geladen worden en vergeleken met de al eerder geladen bestanden.

#### Kleuren

De drie invoervensters krijgen de letters "A", "B" en "C". "A" heeft de kleur blauw, "B" is groen en "C" is magenta. (Dit zijn de standaard kleuren, u kunt ze wijzigen via het menu Instellingen.)

Als er een verschil opgemerkt wordt, toont de kleur welk invoerbestand er verschilt. Als beide andere invoerbestanden verschillen is de kleur die dit aangeeft standaard rood ("Conflictkleur" in Instellingen). Dit kleurenschema is vooral handig in het geval van drie invoerbestanden, hetgeen u zult zien in de volgende sectie (Samenvoegen).

#### Samenvattingskolom

Links van elke tekst staat een "samenvattingskolom". Als er verschillen op een regel opgetreden zijn geeft deze kolom de respectievelijke kleur aan. Voor een verschil alleen in witruimte is de samenvatting geblokt. Voor programmeertalen waar witruimte niet zo belangrijk is, is dit nuttig om te zien of er iets belangrijks veranderd is. (In C/C++ is witruimte alleen interessant binnen tekenreeksen, commentaar, voor de preprocessor en sommige zeer uitzonderlijke situaties.)

De verticale lijn die de overzichtskolom en de tekst scheidt wordt onderbroken als het invoerbestand daar geen regels heeft. Als regelafbreking ingeschakeld is, wordt deze lijn gestippeld voor afgebroken regels.

#### Overzichtskolom

Aan de rechterkant is een "overzichts"-kolom zichtbaar, links van de verticale schuifbalk. Deze toont gecomprimeerd de samenvattingskolom van invoer "A". Alle verschillen en conflicten zijn in één oogopslag zichtbaar. Als er slechts twee invoervensters gebruikt worden, verschijnen alle verschillen in rood omdat elk verschil dan een conflict is. Een zwarte rechtoek omrandt het zichbare deel van de invoer. Voor zeer lange invoerbestanden, waarbij het aantal regels groter is dan de hoogte van de overzichtskolom in pixels, delen diverse invoerregels één overzichtsregel. Een conflict heeft dan topprioriteit boven eenvoudige verschillen, die prioriteit hebben boven geen wijziging, zodat geen verschil of conflict verloren gaat. Door in deze overzichtskolom te klikken wordt de bijbehorende tekst getoond.

#### Handmatig regels uitlijnen

Soms plaatst het algoritme de verkeerde regels naast elkaar. Of u wilt een stuk tekst vergelijken met een ander stuk tekst op een compleet andere locatie in het andere bestand. Voor dit soort situaties kunt u handmatig &kdiff3; bepaalde regels naast elkaar laten uitlijnen. Markeer met de muis de tekst die u wilt uitlijnen alsof u het wilt kopiëren en kies vervolgens Handmatige uitlijning van vergelijking toevoegen in het menu "Verschilweergave" (sneltoets &Ctrl;Y). Er zal een oranje balk in de samenvattingskolom naast de gekozen tekst verschijnen. Herhaal dit voor de tweede en (indien aanwezig) derde venster met verschillen. &kdiff3; zal iedere keer onmiddellijk de verschillen herberekenen en de aangewezen regels uitlijnen. Natuurlijk zullen sommige regels die voorheen wel uitgelijnd waren en nu niet meer uitgelijnd zijn.

Op dit moment ondersteunt samenvoegen het handmatig uitlijnen niet.

#### Handmatig samenvoegen en opsplitsen van secties met verschillen

In sommige gevallen heeft &kdiff3; te veel of te weinig secties om te kunnen samenvoegen. In dergelijke gevallen kunt u bestaande secties opsplitsen of juist samenvoegen.

Voeg nieuwe secties toe door tekst in de regels die bij elkaar horen te selecteren in beide invoervensters (op dezelfde manier als kopiëren naar het klembord). Kies vervolgens "Vergelijking bij selectie splitsen" in het menu "Samenvoegen". Splitsingen worden boven de eerste regel en onder de laatste regel van de geselecteerde tekst geplaatst. Als u maar één sectie wilt toevoegen, dan moet u vanaf een andere sectie-splitsing de tekst selecteren.

Voor het samenvoegen van secties in beide invoervenster selecteert u iets in de regels uit de samen te voegen secties. (U kunt ook meerdere secties in één bewerking samenvoegen). Kies vervolgens "Geselecteerde verschillen samenvoegen" in het menu "Samenvoegen".

### Samenvoegen en het editorvenster voor samenvoegingsuitvoer

Het editorvenster voor de samenvoegingsuitvoer (onder de verschil-invoervensters) heeft ook een inforegel bovenaan met "Uitvoer:", de bestandsnaam en "[Gewijzigd]" als u iets bewerkt hebt. Meestal bevat dit wat tekst door de automatische samenvoegingsfunctie, maar vaak bevat het ook conflicten.

!!! Opslaan is uitgeschakeld totdat alle conflicten opgelost zijn !!! (Gebruik de knoppen "Ga naar vorig/volgend onopgelost conflict" om de overgebleven conflicten te vinden.)

Met maar twee invoerbestanden is elk verschil ook een conflict dat handmatig opgelost moet worden.

Met drie invoerbestanden wordt het eerste bestand als basis gebruikt, en het tweede en derde bestand bevatten wijzigingen. Als op een bepaalde regel alleen invoer B of C gewijzigd is, maar niet beide, wordt de veranderde bron gekozen. Alleen als B en C op dezelfde regel veranderd zijn, detecteert het hulpmiddel een conflict dat handmatig opgelost moet worden. Als B en C hetzelfde zijn, maar niet hetzelfde als A, wordt C gekozen.

#### De kolom Samenvatting

Het editorvenster voor samenvoegingsuitvoer heeft ook links een samenvattingskolom. Deze toont de letter van de invoer waaruit een regel geselecteerd is of niets als alle drie de bronnen gelijk waren op die regel. Bij conflicten wordt een vraagteken "?" getoond en de regel toont dan "<Samenvoegconflict>", het geheel in rood. Omdat conflicten regel voor regel oplossen erg lang duurt, worden de regels gegroepeerd in groepen die dezelfde verschil- en conflictkenmerken hebben, Alleen witruimte-conflicten worden gescheiden van niet-witruimte-conflicten om het samenvoegen van bestanden waarin de insprong gewijzigd is, gemakkelijker te maken.

#### De huidige groep instellen en zichtposities van samenvoegen en verschillen synchroniseren

Als u met de linkermuisknop in een samenvattingskolom klikt, wordt de groep die bij die regel hoort geselecteerd in alle vensters en wordt het begin van de groep getoond. Deze groep wordt dan de "huidige groep". Deze wordt geaccentueerd met de "Achtergrondkleur voor Huidig bereik (diff)" en er verschijnt een zwarte balk links van de tekst.

#### Kies invoer A, B of C voor het huidige conflict en bewerking

De knoppenbalk onder de menubalk heeft drie selectieknoppen voor invoer met de letters "A", "B" en "C". Klik op de keuzeknop voor invoer om de regels uit de desbetreffende bron te plakken (of na het plakken weer te verwijderen). Voor gebruik van regels uit verschillende bronnen klikt u op de knoppen in de gewenste volgorde. Als u bijvoorbeeld wilt dat de regels van "B" boven de regels van "A" in de uitvoer verschijnen, klik dan eerst op "B" en daarna op "A".

Als u de optie auto-advance ("Automatisch na bronselectie naar volgende onopgeloste conflict gaan") gebruikt, is het verstandig om dit uit te schakelen voordat u uit diverse bronnen regels selecteert en deze daarna wilt gaan bewerken. Als u dit nalaat zal &kdiff3; naar het volgende conflict springen na het selecteren van de eerste invoer.

Het is vaak handig om de samenvoegingsuitvoer te kunnen bewerken. In de samenvattingskolom is een "m" te zien voor iedere regel die handmatig is bewerkt. Wanneer bijvoorbeeld de verschillen zodanig zijn uitgelijnd dat eenvoudig de invoer kiezen niet het gewenste resultaat oplevert, dan kunt u de gewenste tekst markeren en de normale manier van kopiëren en plakken gebruiken voor het samenvoegen.

Soms verschijnt de tekst "<Geen regel in de bron>" in een regel als die ofwel door automatisch samenvoegen ofwel door bewerken verwijderd is, en er geen andere regels in die groep overblijven. Dit is een plaatshouder voor de groep voor als u zich bedenkt en weer een bron aangeeft. De tekst verschijnt niet in het opgeslagen bestand of in gekopieerde of geplakte selecties.

De tekst "<Samenvoegconflict>" verschijnt in het klembord als u tekst met zo'n regel kopieert en plakt. Maar wees alsnog voorzichtig.

#### Kiezen van invoer A, B, of C voor alle conflicten

Het normale samenvoegen begint door het automatisch oplossen van eenvoudige conflicten. Maar het menu "Samenvoegen" biedt wat acties voor andere veelvoorkomende zaken. Als u dezelfde bron voor de meeste conflicten wilt gebruiken, kunt u "A", "B" of "C" overal kiezen, of alleen voor de overgebleven niet-opgeloste conflicten, of voor de niet-opgeloste witruimteconflicten. Als u elk apart onderscheid zelf wilt bepalen, kunt u "Elk onderscheid maken bij conflicten" instellen. Of als u terug wilt gaan naar de automatische keuzes van &kdiff3; kiest u "Eenvoudige conflicten automatisch oplossen". &kdiff3; herstart het samenvoegen dan. Voor acties die uw vorige wijzigingen aanpassen vraagt &kdiff3; om uw instemming alvorens door te gaan.

Merk op: als u één van de bronnen voor onopgeloste witruimte-conflicten kiest, en de optie "Getallen negeren" of "C/C++ commentaar negeren" is gekozen, dan worden wijzigingen in getallen respectievelijk commentaar ook als witruimte behandeld.

#### Automatisch samenvoegen van trefwoorden en geschiedenis (Log) uit versiebeheer

Veel systemen voor versiecontrole gebruiken speciale trefwoorden in het bestand. (Bijvoorbeeld "$Date$", "$Header$", "$Author$", "$Log$" enz.). Deze regels worden aangepast tijdens het inchecken in het version control system (VCS). Bijvoorbeeld "$Date$" zal veranderen naar "$Date: 2005/03/22 18:45:01 $". Omdat deze regel in iedere versie van het bestand verschillend is, is daarom het handmatig ingrijpen noodzakelijk tijdens het samenvoegen.

&kdiff3; heeft de mogelijkheid om dit soort items automatisch samen te voegen. Bij eenvoudige regels die overeenkomen met de instellingen voor "Reguliere expressie voor automatisch samenvoegen" voor alle invoerbestanden, zal &kdiff3; kiezen voor de regel uit B of - indien beschikbaar - uit C. (Het is bovendien noodzakelijk dat voor de vergelijking de regels uitgelijnd zijn en dat de voorgaande regels geen conflicten hebben). Dit automatisch samenvoegen kunt u naar keuze onmiddellijk na het starten van het samenvoegen uitvoeren (door het inschakelen van de keuze "Bij starten van samenvoegen automatisch reguliere expressie gebruiken") of later via "Automatisch samenvoegen d.m.v. reguliere expressie uitvoeren" in het menu Samenvoegen.

Ook het automatisch samenvoegen van de geschiedenis van versiebeheer (ook "log" genoemd) is ondersteund. De geschiedenis samenvoegen kunt u naar keuze onmiddellijk na het starten van het samenvoegen uitvoeren door het inschakelen van de keuze "Geschiedenis versiebeheer samenvoegen bij aanvang van samenvoegen" of later via het "Automatisch geschiedenisconflicten oplossen" in het menu Samenvoegen.

Meestal begint de geschiedenis van het versiebeheer met een regel waarin het trefwoord "$Log$"voorkomt. Dit moet overeenkomen met de "Reguliere expressie voor begin van geschiedenis". &kdiff3; bepaalt welke opvolgende regels ook in de geschiedenis thuishoren door te kijken naar de voorafgaande karakters die voor het trefwoord "$Log$" staan. Als dezelfde "voorafgaand commentaar"-karakters ook in volgende regels verschijnen, dan worden deze regels ook in de geschiedenis opgenomen.

Tijdens elke check-in schrijft het VCS een unieke regel met daarin informatie over de versie, datum en tijdstip gevolgd door regels met commentaar van de gebruiker. Deze regels vormen samen een geschiedenisitem. Deze geschiedenis groeit met elke check-in met het meest recente item bovenaan (na de beginregel van de geschiedenis).

Wanneer bij parallelle ontwikkeling twee of meer ontwikkelaars een tak van een bestand inchecken dan verschijnen bij het samenvoegen van de geschiedenis verschillende items met conflicten. Omdat het samenvoegen van deze takken vervelend kan zijn, komt &kdiff3; met twee mogelijke strategieën: Gewoon de geschiedenisitems van beide ontwikkelaars bovenaan invoegen of de geschiedenisitems sorteren via een door de gebruiker opgegeven trefwoord.

De gewoon-toevoegen-van-alle-items-methode is makkelijker om in te stellen. &kdiff3; heeft alleen maar een methode nodig om vast te stellen welke regels bij een geschiedenis-item horen. De meeste VCS voegen een lege regel toe onder elke geschiedenis-item. Als er geen andere lege regels zijn dan is dit voldoende voor &kdiff3;. Maak eenvoudig een lege "Reguliere expressie voor begin van een geschiedenis-item" aan. Als het lege regel criterium niet voldoende is dan kunt u een normale expressie aanmaken voor het detecteren van het begin van het geschiedenis-item.

Merk op dat &kdiff3; duplicaat geschiedenis-items zal verwijderen. Als een geschiedenis-item meerdere keren aanwezig is in de geschiedenis van een invoerbestand dan blijft deze maar één keer bewaart in het uitvoerbestand.

Als u de geschiedenis op volgorde wilt leggen dan moet u opgeven hoe de sorteersleutel is opgebouwd. Gebruik haakjes ('(' of ')') in de "Reguliere expressie voor het begin van een geschiedenis-item" voor het groeperen van gedeeltes van de reguliere expressie die u later wilt gebruiken voor de sorteersleutel. Geef vervolgens in de "Sorteervolgorde van het begin van geschiedenis-items" met door komma's "," gescheiden lijst op van nummers die de volgorde aangeven in de reguliere expressie.

Omdat het niet gemakkelijk is om dit in een keer goed te krijgen, kunt u de reguliere expressie uitproberen en daarna zo nodig verbeteren in een speciaal dialoogvenster door het gebruik van de knop "Reguliere expressies testen".

Voorbeeld: Neem aan dat een geschiedenis er als volgt uitziet:

    /**************************************************************************
    ** HISTORY:    $Log: \toms_merge_main_view\MyApplication\src\complexalgorithm.cpp $
    **
    **     \main\integration_branch_12   2 Apr 2001 10:45:41   tom
    **  Samengevoegde branch simon_branch_15.
    **
    **     \main\henry_bugfix_branch_7\1   30 Mar 2001 19:22:05   henry
    **  Snelheid van subroutine convertToMesh() verbeterd.
    **  crash opgelost.
    **************************************************************************/

De geschiedenis beginregel komt overeen met de reguliere expressie ".*\$Log.*\$.*". Daarna volgen de geschiedenisitems.

De regel met het trefwoord "$Log$" begint met twee keer "*" waarna een spatie volgt. &kdiff3; gebruikt de eerste regel met niet-witruimte als "voorafgaand commentaar" en concludeert dat de geschiedenis eindigt in de eerste regel zonder dit voorafgaand commentaar. In dit voorbeeld eindigt de laatste regel met een tekenreeks die ook start met twee keer "*", maar in plaats van een spatie volgt meer keer "*". Met deze regel eindigt daarom de geschiedenis.

Als het op volgorde leggen van de geschiedenis niet nodig is dan kan de reguliere expressie er als volgt uit zien. (Deze regel is in tweeën gesplitst omdat het anders niet paste.)

    \s*\\main\\\S+\s+[0-9]+ (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)
     [0-9][0-9][0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]\s+.*

Meer informatie over reguliere expressies kunt u lezen in de documentatie van Trolltech over reguliere expressies. Merk op dat "\s" (kleine letter "s") overeenkomt met witruimte en "\S" (Hoofdletter "S") overeenkomt met niet-witruimte. In ons voorbeeld bestaat de beginregel van ons geschiedenis-item als eerste informatie over de versie met de reguliere expressie "\\main\\\S+", de datum bestaande uit de dag "[0-9]+", maand "(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)" en jaar "[0-9][0-9][0-9][0-9]", de tijd "[0-9][0-9]:[0-9][0-9]:[0-9][0-9]" en tenslotte de gebruikersnaam van de ontwikkelaar ".*".

Merk op dat de tekens van het "voorafgaand commentaar" (in het voorbeeld "**") al verwijderd zijn door &kdiff3; voor de poging tot uitlijnen, daarom begint de reguliere expressie met een overeenkomst voor een of meer witruimte-tekens "\s*". Omdat commentaar-tekens kunnen verschillen in ieder bestand (bv. C/C++ gebruikt andere commentaar-tekens dan een Perl script) let &kdiff3; zelf op de tekens van voorafgaand commentaar en hoeven deze daarom niet opgegeven te worden in de reguliere expressie.

Als het op volgorde leggen van de geschiedenis voor u noodzakelijk is, dan moet de sorteersleutel berekent worden. Hiervoor moeten de relevante gedeeltes van de reguliere expressie gegroepeerd worden door haken. (De extra haken kunnen blijven als het op volgorde leggen is uitgeschakeld.)

    \s*\\main\\(\S+)\s+([0-9]+) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)
     ([0-9][0-9][0-9][0-9]) ([0-9][0-9]:[0-9][0-9]:[0-9][0-9])\s+(.*)

Tussen de haken vindt u nu 1. versie info, 2. dag, 3. maand, 4. jaar, 5. tijd, 6. naam. Maar als we op datum en tijd willen sorteren dan moeten we een sleutel creëren waarvan de onderdelen een andere volgorde hebben: eerst het jaar, gevolgd door de maand, dag, tijd, versienummer en naam. De sorteersleutel moet daarom als volgt "4,3,2,5,1,6" opgegeven worden.

Omdat de namen van maanden niet handig zijn voor het op volgorde leggen ("Apr" zou dan de eerste zijn) detecteert &kdiff3; in welke volgorde de namen van maanden zijn opgegeven en gebruikt in plaats daarvan dat nummer ("Apr"->"04"). En als een kaal nummer is gevonden dan zal dit worden omgezet naar een viercijferig getal met voorloopnullen voor het op volgorde leggen. Tenslotte zal de sorteersleutel voor de beginregel van de geschiedenis er als volgt uit zien:

    2001 04 0002 10:45:41 integration_branch_12   tom

Lees voor meer informatie ook Instellingen samenvoegen.

### Navigatie en bewerken

Veel navigatie doet u met de schuifbalken en de muis maar u kunt ook met de toetsen navigeren. Als u in een venster klikt, kunt u de pijltoetsensen Links, Rechts, Omhoog en Omlaag en Page Up, Page Down, Home, End, Ctrl-Home en Ctrl-End gebruiken als in andere programma's. De overzichtskolom naast de verticale schuifbalk van de invoerbestanden kan ook voor navigatie gebruikt worden door erin te klikken.

U kunt ook een muiswiel gebruiken om omhoog en omlaag te bladeren.

In de uitvoereditor voor samenvoegen kunt u ook de andere toetsen gebruiken om de tekst te bewerken. U kunt tussen invoeg- en overschrijfmodus wisselen met de toets Insert. (Standaard is invoegmodus.)

Een klik met de linker muisknop in een samenvattingskolom synchroniseert alle vensters zodat ze het begin van dezelfde groep regels tonen (zoals uitgelegd in de sectie "De huidige groep instellen en zichtposities van samenvoegen en verschillen synchroniseren").

De knoppenbalk heeft ook negen navigatieknoppen waarmee u naar het huidige/eerste/laatste verschil kunt springen, naar het volgende/vorige verschil (Ctrl-omlaag/Ctrl-omhoog), naar het volgende/vorige conflict (Ctrl-PageDown/Ctrl-PageUp) of naar het volgende/vorige onopgeloste conflict. Merk op dat voor &kdiff3; een "conflict" dat niet automatisch werd opgelost bij het begin van het samenvoegen een "conflict" blijft, zelfs als het wordt opgelost. Vandaar de noodzaak om "onopgeloste conflicten" te onderscheiden.

#### Automatisch doorgaan

Er is ook een knop "Automatisch naar het volgende onopgeloste conflict gaan" (Automatisch doorgaan). Als u dit inschakelt, springt &kdiff3; automatisch naar het volgende onopgeloste conflict, zodra u een bron hebt geselecteerd. Dit kan helpen als u altijd slechts één bron wilt kiezen. Als u beide bronnen nodig hebt of als u na het kiezen nog wilt wijzigen, dan wilt u deze optie waarschijnlijk uitschakelen. Voordat u naar het volgende onopgeloste conflict gaat, toont &kdiff3; u korte tijd het effect van uw keuze. Deze tijd is instelbaar in de Verschil- en samenvoeginstellingen: de tijd voor "Automatisch doorgaan" is instelbaar in milliseconden tussen 0 en 2000. Tip: Niet te veel klikken? Kies een korte tijdsduur voor Automatisch doorgaan en de sneltoetsen Ctrl-1/2/3 om A/B/C voor conflicten te selecteren.

### Selecteren, kopiëren en plakken

De invoervensters tonen geen cursor, dus selecteren moet gedaan worden met de muis door met de linkermuisknop aan het begin te klikken, de muisknop ingedrukt te houden en naar het eind te bewegen, waar u de muisknop weer loslaat. U kunt ook een woord selecteren door erop te dubbelklikken. In de samenvoegeditor kunt u ook met het toetsenbord selecteren met Shift en de pijltoetsen.

Als datgene wat u wilt selecteren niet in het venster past dan kunt u de muis naar buiten de randen van het venster verplaatsen zodat &kdiff3; in die richting schuift.

Bij zeer grote selecties kunt u ook de navigatie-toetsen gebruiken terwijl u de muis ingedrukt houdt. Gebruik b.v de pagina omhoog en pagina omlaag om snel naar een bepaalde positie te gaan en laat op de gewenste positie de muisknop los.

Om alles te selecteren in het geselecteerde venster gebruikt u "Bewerken"->"Alles selecteren" (Ctrl-A).

Om naar het klembord te kopiëren moet u de knop "Kopiëren" kiezen (Ctrl-C of Ctrl-Insert). Maar er bestaat een optie "Selectie automatisch kopiëren". Als deze is ingeschakeld, wordt geselecteerde tekst direct naar het klembord gekopieerd. Let er hierbij wel op dat bestaande inhoud van uw klembord niet per ongeluk ongewenst verwijderd wordt.

"Knippen" (Ctrl-X of Shift-Delete) kopieert naar het klembord en verwijdert de geselecteerde tekst.

"Plakken" (Ctrl-V of Shift-Insert) plakt de tekst uit het klembord naar de cursorpositie. Als u plakt naar een willekeurig invoervenster dan krijgt u de klembordinhoud in dat venster te zien en zal de vergelijking onmiddellijk starten. Dit is handig als u snel een stuk tekst ergens vandaan haalt en dit wilt vergelijken met iets anders zonder eerst bestanden te hoeven aan te maken.

### Opslaan

Opslaan is alleen toegestaan als alle conflicten opgelost zijn. Als het bestand al bestaat en de optie "Reservekopie" ingeschakeld is, wordt het bestaande bestand hernoemd met een extensie ".orig", een bestaande reservekopie wordt hierbij overschreven. Als u afsluit of een andere verschillenanalyse start en de gegevens nog niet zijn opgeslagen, vraagt &kdiff3; u of u wilt opslaan, annuleren of doorgaan zonder opslaan. (&kdiff3; vangt geen signalen. Dus als u &kdiff3; "kill"t gaan uw gegevens verloren.)

Regeleinden worden opgeslagen volgens de normale methode op het onderliggende besturingssysteem. Voor Unix-systemen eindigt elke regel met een 'linefeed' "\n", terwijl op Win32-systemen elke regel met een 'carriage return' en een 'linefeed' eindigt "\r\n". &kdiff3; bewaart de regeleinden van de invoerbestanden niet, hetgeen ook betekent dat u &kdiff3; niet met binaire bestanden moet gebruiken.

### Tekenreeksen zoeken

U kunt naar tekenreeksen zoeken in elk tekstvenster van &kdiff3;. De opdracht "Zoeken..." (Ctrl-F) in het menu Bewerken opent een venster waarin u de te zoeken tekenreeks kunt opgeven. U kunt ook de vensters opgeven waarin gezocht moet worden. Zoeken begint altijd bovenaan. Gebruik de opdracht "Volgende zoeken" (F3) om naar het volgende voorkomen door te gaan. Als u meerdere vensters opgeeft om in te zoeken wordt het eerste venster van boven naar beneden doorzocht, voordat het volgende venster weer van bovenaf wordt doorzocht, enzovoort.

### Bezig met afdrukken

&kdiff3; ondersteunt het printen van verschillen tussen tekstbestanden. De opdracht "Afdrukken..." (Ctrl-P) in het menu Bestand opent een dialoog waarin u de printer kunt kiezen en diverse keuzemogelijkheden kunt instellen.

Er zijn diverse mogelijkheden om de afdrukselectie in te stellen. Omdat de afdrukdialogen bij de diverse besturingssystemen verschillend zijn, is de methode voor het instellen van de afdrukselectie ook verschillend.

Alles:

- Alles afdrukken.

Huidige:

- Drukt een pagina af die begint met de eerst in het venster zichtbare regel. (Bij systemen zonder deze mogelijkheid kunt u dit bereiken door het paginanummer 10000 op te geven voor het afdrukken.)

Selectie:

- Voordat u gaat printen selecteert u eerst de tekst met de muis (zoals voor kopiëren en plakken) in een van de diff-invoervensters om de beginregel en de eindregel te bepalen. Als geen tekst in een van invoervensters van diff is geselecteerd dan is deze keuze niet beschikbaar. (Bij systemen zonder deze mogelijkheid kunt u dit bereiken door het paginanummer 9999 op te geven voor het afdrukken.)

Bereik:

- Geef de beginpagina en de eindpagina op.

Andere belangrijke keuzemogelijkheden voor het afdrukken zijn de normale keuzes:

- Lettertype, lettergrootte

- Regelnummering tonen

- Regelafbreking

- Kleuren

- etc.

Liggend (landschap) afdrukken wordt aanbevolen.

### Opties

Opties en de recente-bestandenlijst worden opgeslagen als u het programma afsluit, en opnieuw ingelezen als u het start. (Instellingen -> &kdiff3; instellen...)

#### Lettertype

Kies een lettertype met vaste breedte. (Op sommige systemen toont dit dialoogvenster ook lettertypes met variabele breedte, maar die dient u liever niet te gebruiken.)

Cursief lettertype voor onderscheiden:

- Als u dit kiest, worden tekstverschillen getoond met de cursieve versie van het geselecteerde lettertype. Als het lettertype geen cursief ondersteunt, doet dit niets.

#### Kleuren

Voorgrondkleur:

- Gewoonlijk zwart.

Achtergrondkleur:

- Gewoonlijk wit.

Achtergrondkleur bij verschillen:

- Gewoonlijk lichtgrijs.

Kleur voor A:

- Gewoonlijk donkerblauw.

Kleur voor B:

- Gewoonlijk donkergroen.

Kleur voor C:

- Gewoonlijk donkermagenta.

Kleur voor conflicten:

- Gewoonlijk rood.

Achtergrondkleur voor huidig bereik:

- Gewoonlijk lichtgeel.

Achtergrondkleur voor verschillen in huidig bereik:

- Gewoonlijk donkergeel.

Kleur voor handmatig uitgelijnde bereiken van verschillen:

- Gewoonlijk oranje.

Kleur van nieuwste bestand bij het vergelijken van mappen:

- Gewoonlijk groen.

Kleur van oudste bestand voor het vergelijken van mappen:

- Gewoonlijk rood.

Kleur van bestand met middelste leeftijd voor het vergelijken van mappen:

- Gewoonlijk donkergeel.

Kleur van ontbrekende bestanden in het vergelijken van mappen:

- Gewoonlijk zwart.

De kleuren wijzigen voor vergelijken van mappen zal alleen effectief zijn na het starten van het volgende vergelijken van mappen.

Op systemen met slechts 16 of 256 kleuren zijn sommige kleuren niet beschikbaar in pure vorm. Op zulke systemen zorgt de knop "Standaard" voor een pure kleur.

#### Editor-instellingen

Tab voegt spaties in:

- Als dit uitgeschakeld is en u de toets Tab indrukt, wordt een tab-teken ingevoegd, anders het aangegeven aantal spaties.

Tabgrootte:

- Kan ingesteld worden voor uw specifieke wensen. Standaard is 8.

Automatisch inspringen:

- Als u Enter drukt wordt het inspringen van de vorige regel gebruikt voor de nieuwe.

Automatische kopieerselectie:

- Elke selectie wordt onmiddellijk naar het klembord gekopieerd, indien actief, u hoeft het niet expliciet te kopiëren.

Regeleinde:

- Bij het opslaan kunt u opgeven welk regeleinde u verkiest. De standaardinstelling is de gebruikelijke keuze voor het gebruikte besturingssysteem.

#### Diff-instellingen

Bij het vergelijken van bestanden, probeert &kdiff3; eerst regels te vinden die gelijk zijn in alle invoerbestanden. Alleen gedurende deze stap wordt witruimte mogelijk genegeerd. De tweede stap vergelijkt elke regel. In deze stap wordt witruimte niet genegeerd. Ook gedurende het samenvoegen wordt witruimte niet genegeerd.

Getallen negeren:

- Standaard uit. Getaltekens ('0'-'9', '.', '-') worden genegeerd in het eerste deel van de analyse waarin regels worden vergeleken. In het resultaat worden de verschillen wel getoond, maar behandeld als witruimte.

C/C++ commentaar negeren:

- Standaard uit. Wijzigingen in commentaar worden behandeld als wijzigingen in witruimte.

Geen onderscheid hoofd-/kleine letters:

- Standaard uit. Wijzigingen in verschillen tussen hoofd en kleine letters (zoals 'A' vs. 'a') worden behandeld als wijzigingen in witruimte.

Preprocessorcommando:

- Zie de volgende sectie.

Preprocessor-commando alleen voor regelcontroles:

- Zie de volgende sectie.

Grondig zoeken:

- Doe veel moeite om kleinere onderscheiden te vinden (standaard aan). Dit is waarschijnlijk effectief voor gecompliceerde, grote bestanden. En langzaam voor erg grote bestanden.

#### Instellingen samenvoegen

Vertraging voor automatisch doorgaan (ms):

- Bij het automatisch doorgaan bepaalt deze instelling hoe lang het resultaat van de selectie getoond wordt voordat er naar het volgende onopgeloste conflict gesprongen wordt.

Standaardsamenvoeging van witruimtes bij 2/3 bestanden:

- Automatisch alle witruimteconflicten oplossen door een gespecificeerd bestand te kiezen. (Standaard is handmatige keuze.) Nuttig als witruimte in veel bestanden niet belangrijk is. Als u dit alleen af en toe nodig hebt kunt u beter "A/B/C voor alle onopgeloste conflicten kiezen" in het menu Samenvoegen kiezen. Merk op dat als u "Getallen negeren" of "C/C++ commentaar negeren" hebt ingeschakeld, deze automatische keuze ook voor conflicten in getallen of commentaar geldt.

Reguliere expressie voor automatisch samenvoegen:

- Reguliere expressie voor regels waar &kdiff3; automatisch één bron moet kiezen. Zie ook Automatisch samenvoegen ...

Bij starten van samenvoegen automatisch reguliere expressie gebruiken:

- Indien u automatisch samenvoegen inschakelt dan gebruikt &kdiff3; de "Reguliere expressie voor automatisch samenvoegen" bij het samenvoegen.

Reguliere expressie voor begin van geschiedenis:

- Reguliere expressie voor het begin van het item van de geschiedenis van het samenvoegen. Veel voorkomende waarde in deze regel is het trefwoord "$Log$". Standaardwaarde: ".*\$Log.*\$.*"

Reguliere expressie voor begin van geschiedenisitem:

- Een samenvoeg-geschiedenis-item bestaat uit verschillende regels. Geef de reguliere expressie op voor het detecteren van de eerste regel (zonder het voorafgaand commentaar). Gebruik haakjes ('(' of ')') om de sleutels te groeperen die u wilt gebruiken bij het sorteren of op volgorde leggen. indien leeg, dan neemt &kdiff3; aan dat lege regels geschiedenis-items scheiden. Lees ook Automatisch samenvoegen ...

Geschiedenis samenvoegend sorteren:

- Geschiedenis van sorteren van versiebeheer inschakelen.

Sorteervolgorde van begin van geschiedenisitems:

- Het gebruik van een haakje ('(' of ')') in de reguliere expressie groepeert een sleutel die gebruikt kan worden voor sorteren. Geef een lijst op met sleutels (die genummerd worden in volgorde van gebruik met de 1 als begin) met ',' als scheidingsteken (b.v. "4,5,6,1,2,3,7"). Indien leeg zal er niet worden gesorteerd. Lees ook Automatisch samenvoegen ...

Geschiedenis van versiebeheer samenvoegen bij aanvang van samenvoegen:

- Indien u automatisch samenvoegen inschakelt dan gebruikt &kdiff3; de bovengenoemde keuzes bij het samenvoegen van de geschiedenis.

Max. aantal items in geschiedenis:

- &kdiff3; verkort de geschiedenislijst na het gespecificeerde aantal items. Gebruik -1 om verkorting te voorkomen. (Standaard is -1).

Uw reguliere expressies testen

- Deze knop opent een dialoogvenster waarin u de hierboven beschreven reguliere expressies kunt testen en zo nodig verbeteren. Kopieer respectievelijke data uit uw bestanden naar de voorbeeld regels. In het "Resultaat van overeenkomsten" zal onmiddellijk te zien zijn of de resultaten wel of niet succesvol zijn. In het "Resulterende sorteersleutel" is de voor het samenvoegen van de geschiedenis gebruikte sleutel te zien.

Irrelevant samenvoegcommando:

- Geef uw eigen commando op dat gebruikt moet worden wanneer &kdiff3; bemerkt dat bij het samenvoegen van een groep bestanden het bestand van B geen relevante data toevoegt die niet al door een bestand uit C is toegevoegd. Het commando wordt gestart met de drie bestandsnamen als parameters. Data die overeenkomt met "Reguliere expressie voor automatisch samenvoegen" of in de geschiedenis voorkomt is hierbij niet relevant.

#### Mapsamenvoeging

Deze opties gaan over het doorzoeken van de map en de afhandeling van het samenvoegen: zie Mapvergelijking/samenvoeging voor details.

Er is hier echter één optie die ook relevant is voor het opslaan van enkele bestanden:

Reservekopiebestanden:

- Als een bestand wordt opgeslagen en er al een oudere versie bestaat, wordt het oude bestand hernoemd met een extensie ".orig". Als een oud reservekopiebestand met de extensie ".orig" al bestaat, wordt deze zonder reservekopie verwijderd.

#### Regio- en taalinstellingen

Taal:

- Past de taal van de gebruikersinterface aan. Het wijzigen van deze optie heeft geen invloed op het huidige programma. U dient &kdiff3; af te sluiten en te herstarten om de taal te veranderen. (Deze optie is niet beschikbaar in de Frameworks-versie van &kdiff3;).

Dezelfde codering gebruiken voor alles:

- De volgende coderingsopties kunnen apart aangepast worden voor elk item. Als deze optie is ingeschakeld nemen alle waarden deze over.

Lokale codering:

- Boven de coderings-selectors komt een opmerking die u vertelt wat de lokale codering is. (Dit is niet aan te passen, maar wordt aangegeven als u uw lokale codering niet weet, maar wel wilt kiezen.)

Bestandscodering voor A/B/C:

- Pas de bestandscodering voor invoerbestanden aan. Dit heeft effect op hoe speciale tekens geïnterpreteerd worden. Aangezien u elke codering apart kunt instellen, kunt u zelfs bestanden vergelijken en samenvoegen die met verschillende coderingen zijn opgeslagen.

Bestandscodering voor samenvoeguitvoer en opslag:

- Als u een bestand hebt bewerkt, kunt op aanpassen met welke codering het weer op schijf wordt opgeslagen.

Bestandscodering voor preprocessorbestanden:

- Als u preprocessors opgeeft kunnen deze misschien niet met uw codering werken (bijvoorbeeld: uw bestanden zijn 16-bits unicode en uw preprocessor kan alleen met 8-bits ascii overweg). Met deze optie kunt u de codering van preprocessor-uitvoer opgeven.

Rechts-naar-links-taal

- Sommige talen worden van rechts naar links geschreven. Als ieze optie is ingeschakeld, tekent &kdiff3; de tekst van rechs naar links in de verschillenvensters en in het uitvoervenster. Merk op dat, als u &kdiff3; met de opdrachtregeloptie "--reverse" start, alle schermopmaak ook van rechts naar links gedaan wordt. (Dit is een optie die door Qt aangeboden wordt.) Deze documentatie is geschreven met de aanname dat "Rechts-naar-links-taal" of omgekeerde indeling uitgeschakeld zijn. Sommige verwijzingen naar "links" en "rechts" moeten dus omgedraaid worden als u die opties gebruikt.

#### Diverse

(Deze opties en acties zijn in menu's of in de knoppenbalk beschikbaar.)

Regelnummering tonen:

- U kunt kiezen of regelnummers voor de invoerbestanden getoond moeten worden.

Spaties & tabulator-tekens in verschillen tonen:

- Soms zijn de zichtbare spaties en tabs storend. U kunt dit uitschakelen.

Witruimte tonen:

- Schakel dit uit om accentuering van alleen-witruimte-veranderingen in de tekst of overzichtskolommen uit te schakelen. (Merk op dat dit ook van toepassing is op wijzigingen in getallen of commentaar als de opties "Getallen negeren" of "C/C++ commentaar negeren" actief zijn.)

Overzichtsopties:

- Deze keuzes zijn alleen beschikbaar als u drie bestanden vergelijkt. In normale modus worden alle verschillen getoond in één kleurgecodeerde overzichtskolom. Maar soms bent u speciaal geïnteresseerd in de verschillen tussen slechts twee van deze drie bestanden. Door "A vs B", "A vs C" of "B vs C" te kiezen wordt er een tweede overzichtskolom met de vereiste informatie getoond naast het normale overzicht.

Regels afbreken in vensters met verschillen:

- Regels afbreken als hun lengte de breedte van een venster zou overschrijden.

Venster A/B/C tonen:

- Soms wilt u de ruimte op het scherm beter gebruiken voor lange regels. Verberg dan de vensters die niet belangrijk zijn. (In het menu Venster.)

Splitsen van vensters omschakelen:

- Wisselen tussen weergave van verschilvensters naast elkaar (A links van B links van C) of boven elkaar (A boven B boven C). Dit moet ook voor lange regels helpen. (In het menu Venster).

Samenvoegen snel starten:

- Soms bekijkt u de verschillen en besluit u te willen samenvoegen. "Huidig bestand samenvoegen" in het menu Map werkt ook als u slechts twee bestanden vergelijkt. Een enkele klik start het samenvoegen en gebruikt de bestandsnaam van het laatste invoerbestand als het standaard uitvoerbestand. (Als dit gebruikt wordt om een samenvoeging te herstarten, wordt de uitvoerbestandsnaam behouden.)

#### Sneltoetsen instellen

Momenteel ondersteunt alleen de Frameworks-versie gebruikergedefinieerde sneltoetsen (Menu Instellingen -> Sneltoetsen instellen...)

### Preprocessor-opdrachten

&kdiff3; ondersteunt twee preprocessor-opties.

Preprocessorcommando:

- Als een bestand gelezen is, wordt het door deze externe opdracht gesluisd. De uitvoer van deze opdracht is dan zichtbaar in plaats van het originele bestand. U kunt uw eigen preprocessor schrijven om uw specifieke wensen te vervullen. Gebruik dit om storende delen van het bestand weg te halen, of automatisch de insprong te verbeteren, enzovoort.

Preprocessor-commando alleen voor regelcontroles:

- Als een bestand gelezen is, wordt het door deze externe opdracht gesluisd. Als een preprocessor-opdracht (zie boven) ook opgegeven wordt, wordt de uitvoer van de preprocessor de invoer van de preprocessor voor regelovereenkomsten. De uitvoer wordt dan alleen gebruikt bij de regelvergelijkingsfase van de analyse. U kunt uw eigen preprocessor schrijven om uw specifieke wensen te vervullen. Elke invoerregel moet een overeenkomende uitvoerregel hebben.

Het idee is om de gebruiker grotere flexibiliteit te geven bij het instellen van het resultaat. Maar dit vereist een extern programma, en veel gebruikers willen dat niet zelf schrijven. Het goede nieuws is dat `sed` of `perl` vaak voldoende is.

Voorbeeld: een eenvoudig testgeval: Beschouw het bestand a.txt (6 regels):

          aa
          ba
          ca
          da
          ea
          fa

en het bestand b.txt (3 regels):

          cg
          dg
          eg

Zonder preprocessor zouden de volgende regels naast elkaar geplaatst worden:

          aa - cg
          ba - dg
          ca - eg
          da
          ea
          fa

Dit is waarschijnlijk niet gewenst omdat de eerste letter de feitelijk interessante informatie bevat. Om het zoekalgoritme te helpen bij het negeren van de tweede letter kunnen we een preprocessor-opdracht voor regelovereenkomsten gebruiken, die 'g' door 'a' vervangt:

       sed 's/g/a/'

Met deze opdracht wordt het resultaat van de vergelijking:

          aa
          ba
          ca - cg
          da - dg
          ea - eg
          fa

Intern wordt het zoeken van bij elkaar passende regels na het uitvoeren van de preprocessor voor regelovereenkomsten gedaan, maar op het scherm is het bestand ongewijzigd. (De normale preprocessor verandert de gegevens ook op het scherm.)

#### De basis van `sed`

Deze sectie geeft alleen een inleiding op een paar basismogelijkheden van `sed`. Zie voor meer informatie info:/sed of http://www.gnu.org/software/sed/manual/html_mono/sed.html. Een voorgecompileerde versie voor Windows kunt u vinden op http://unxutils.sourceforge.net. Merk op dat de volgende voorbeelden ervan uitgaan dat de opdracht `sed` in een map in uw omgevingsvariabele PATH staat. Als dit niet het geval is, dient u het volledige absolute pad voor de opdracht te gebruiken.

In deze context wordt alleen de vervangingsopdracht van `sed` gebruikt:

       sed 's/REGEXP/VERVANGING/VLAGGEN'

Voordat u een nieuwe opdracht in &kdiff3; gebruikt, zou u deze eerst in een console moeten testen. Hiervoor is de opdracht `echo` nuttig. Voorbeeld:

       echo abrakadabra | sed 's/a/o/'
       -> obrakadabra

Dit voorbeeld toont een zeer eenvoudige sed-opdracht die het eerste voorkomen van "a" door "o" vervangt. Als u alle voorkomens wilt vervangen, hebt u de vlag "g" nodig:

       echo abrakadabra | sed 's/a/o/g'
       -> obrokodobro

Het symbool "|" is de doorsluisopdracht die de uitvoer van de vorige opdracht naar de invoer van de volgende opdracht doorgeeft. Als u dit wilt uitproberen met een langer bestand kunt u op Unix-systemen`cat` gebruiken en `type` op Windows-systemen. `sed` voert de vervanging op elke regel uit.

    cat bestandsnaam | sed opties

#### Voorbeelden van het gebruik van `sed` in &kdiff3;

##### Andere soorten commentaar negeren

Momenteel begrijpt &kdiff3; alleen C/C++ commentaar. Met de preprocessoropdracht voor regelovereenkomsten kunt u ook andere soorten commentaar negeren, door ze in C/C++ commentaar om te zetten. Voorbeeld: om commentaar dat met "#" begint te negeren, wilt u deze omzetten naar "//". Merk op dat u hiervoor ook de optie "C/C++ commentaar negeren" moet inschakelen om effect te krijgen. Een goede preprocessoropdracht voor regelovereenkomsten zou dan zijn:

       sed 's/#/\/\//'

Omdat in `sed` het teken "/" een aparte betekenis heeft, is het nodig om het teken "\" voor elke "/" in de vervangende tekenreeks te plaatsen. Soms is de "\" ook nodig om een teken een speciale betekenis te geven of deze juist weg te halen. De accenten (') zijn alleen belangrijk bij testen op de commandoshell omdat het anders sommige tekens probeert te verwerken. KDiff3 doet dat niet behalve voor de escape-sequences '\"' en '\\'.

##### Niet-hoofdlettergevoelige verschillen

Gebruik de volgende preprocessoropdracht voor regelovereenkomsten om alle invoer naar hoofdletters om te zetten:

       sed 's/\(.*\)/\U\1/'

Hier is de ".*" een reguliere expressie die met elke tekenreeks overeenkomt en in deze context met alle lettertekens op de regel overeenkomt. De "\1" in de vervangende tekenreeks verwijst naar de overeenkomende tekst binnen het eerste paar "\(" en "\)". De "\U" zet de ingevoegde tekst om in hoofdletters.

##### Versiebeheer-trefwoorden negeren

CVS en andere versiebeheersystemen gebruiken diverse trefwoorden om automatisch gegenereerde tekenreeksen in te voegen (info:/cvs/Trefwoordvervanging. Deze volgen allemaal het patroon "$TREFWOORD gegenereerde tekst$". We hebben nu een preprocessoropdracht voor regelovereenkomsten nodig die alleen de gegenereerde tekst verwijdert:

       sed 's/\$\(Revision\|Author\|Log\|Header\|Date\).*\$/\$\1\$/'

De "\|" scheidt de mogelijke trefwoorden. U wilt deze lijst misschien aan uw eigen wensen aanpassen. De "\" voor de "$" is nodig omdat anders de "$" met het einde van de regel overeenkomt.

Terwijl u experimenteert met `sed` gaat u wellicht deze reguliere expressies begrijpen en op prijs stellen. Ze zijn nuttig omdat er veel andere programma's zijn die soortgelijke dingen ondersteunen.

##### Getallen negeren

Getallen negeren is in feite een ingebouwde optie. Maar als een ander voorbeeld is dit de preprocessoropdracht voor regelovereenkomsten:

       sed 's/[0123456789.-]//g'

Elk teken tussen '[' en ']' komt overeen en wordt vervangen door niets.

##### Bepaalde kolommen negeren

Soms is een tekst erg strict opgebouwd, en bevat deze kolommen die u altijd wilt negeren, terwijl er andere kolommen zijn die u voor analyse wilt bewaren. In het volgende voorbeeld worden de eerste vijf kolommen (lettertekens) genegeerd, de volgende tien worden bewaard, dan worden er weer vijf genegeerd en de rest van de regel wordt bewaard.

       sed 's/.....\(..........\).....\(.*\)/\1\2/'

Elke punt '.' komt overeen met een willekeurig teken. De "\1" en "\2" in de vervangende tekenreeks verwijzen naar de overeenkomende tekst in het eerste en tweede paar "\(" en "\)" die de tekst aangeven die bewaard moet worden.

##### Diverse vervangingen combineren

Soms wilt u diverse vervangingen tegelijk uitvoeren. U kunt dan de puntkomma ';' gebruiken om deze van elkaar te scheiden. Voorbeeld:

    echo abrakadabra | sed 's/a/o/g;s/\(.*\)/\U\1/'
       -> OBROKODOBRO

##### `perl` in plaats van `sed` gebruiken

In plaats van `sed` wilt u wellicht iets anders gebruiken zoals `perl`.

       perl -p -e 's/REGEXP/VERVANGING/VLAGGEN'

Maar sommige details zijn anders in `perl`. Merk op waar `sed` "\(" en "\)" vereist, `perl` de eenvoudigere "(" en ")" zonder voorafgaande '\' vereist. Voorbeeld:

    sed 's/\(.*\)/\U\1/'
       perl -p -e 's/(.*)/\U\1/'

#### Uitvoervolgorde van preprocessors

De data wordt doorgesluisd door alle interne en externe preprocessors, in deze volgorde:

- Normale preprocessor.

- Preprocessor voor regelovereenkomsten.

- Hoofdletterongevoelig (conversie naar hoofdletters).

- Opsporen van C/C++ commentaar.

- Getallen negeren.

- Witruimte negeren.

De gegevens zoals die na de normale preprocessor zijn worden bewaard voor weergave en samenvoeging. De andere handelingen wijzigen alleen de gegevens die het verschillenalgoritme voor regelovereenkomsten ziet.

Merk op dat, in de zeldzame gevallen waar u een normale preprocessor gebruikt, de preprocessor voor regelovereenkomsten de uitvoer van de normale preprocessor als invoer ziet.

#### Waarschuwing

De preprocessor-opdrachten zijn vaak erg nuttig, maar net zoals elke andere optie die automatisch uw teksten wijzigt of bepaalde verschillen verbergt, kunt u per ongeluk bepaalde verschillen over het hoofd zien en in het ergste geval belangrijke gegevens vernietigen.

Om deze reden vertelt &kdiff3; u het als er een normale preprocessor-opdracht wordt gebruikt bij het samenvoegen, en wordt u gevraagd of deze uitgeschakeld moet worden of niet. Maar u wordt niet gewaarschuwd als er een preprocessoropdracht voor regelovereenkomsten actief is. Het samenvoegen is niet voltooid totdat alle conflicten opgelost zijn. Als u "Witruimte tonen" uitgeschakeld hebt, zijn de verschillen die met de preprocessoropdracht voor regelovereenkomsten verwijderd zijn, ook onzichtbaar. Als de knop "Opslaan" inactief blijft tijdens het samenvoegen (door overblijvende conflicten), schakel dan "Witruimte tonen" in. Als u deze minder belangrijke verschillen niet handmatig wilt samenvoegen kunt u "[A|B|C] voor alle onopgeloste witruimteconflicten gebruiken" kiezen uit het menu "Samenvoegen".

## Mappen vergelijken en samenvoegen met &kdiff3;

### Introductie tot mappen vergelijken en samenvoegen

Programmeurs moeten vaak veel bestanden in een map veranderen om hun doel te bereiken. Daarom laat &kdiff3; u ook hele mappen recursief vergelijken en samenvoegen!

Hoewel het vergelijken en samenvoegen van mappen nogal duidelijk lijkt, zijn er aan paar details die u moet kennen. Het belangrijkste is natuurlijk het feit dat nu door elke handeling veel bestanden gewijzigd kunnen worden. Als u geen reservekopieën van uw originele gegevens hebt, kan het erg moeilijk of zelfs onmogelijk zijn om naar de originele staat terug te keren. Dus voordat u een samenvoeging start, zorg ervoor dat uw gegevens veilig zijn en dat u terug kunt keren. Of u een archief maakt of een versiebeheersysteem gebruikt is uw keuze, maar zelfs ervaren programmeurs en integrators hebben zo nu en dan de oude broncodes nodig. En merk op dat ik (de auteur van &kdiff3;) mijn best doe, maar ik kan niet garanderen dat er geen bugs zijn. Volgens de GNU-GPL is er GEEN WAARBORG op welke manier dan ook voor dit programma. Dus wees bescheiden en onthoud:

> Vergissen is menselijk, maar om dingen echt te verknoeien hebt u een computer nodig.

Dus dit kan dit programma voor u doen: &kdiff3; ...

- ... leest en vergelijkt twee of drie mappen recursief,

- ... houdt speciaal rekening met symbolische koppelingen,

- ... laat u door bestanden bladeren door te dubbelklikken,

- ... stelt voor elk item een samenvoegingsoperatie voor, die u kunt wijzigen voordat het samenvoegen van de mappen begint,

- ... laat u het samenvoegen simuleren en geeft de acties aan die plaats zouden vinden, zonder ze uit te voeren,

- ... laat u het samenvoegen doen, en geeft u de mogelijkheid in te springen als er menselijke interactie nodig is,

- ... laat u de geselecteerde handeling op alle items (F7) of alleen het geselecteerde item (F6) uitvoeren,

- ... laat u het samenvoegen voortzetten na handmatige interactie met F7,

- ... maakt optioneel reservekopieën met de extensie ".orig",

- ...

### Mappen vergelijken of samenvoegen

Dit lijkt erg op het vergelijken en samenvoegen van een enkel bestand. U hoeft slechts mappen op de opdrachtregel of in het venster "Openen" te kiezen.

#### Twee mappen vergelijken/samenvoegen:

    kdiff3 map1 map2
       kdiff3 map1 map2 -o doelmap

Als er geen doelmap wordt opgegeven, gebruikt &kdiff3; `map2`.

#### Drie mappen vergelijken/samenvoegen

    kdiff3 map1 map2 map3
       kdiff3 map1 map2 map3 -o doelmap

Bij het samenvoegen van drie mappen wordt `map1` als basis voor het samenvoegen gebruikt. Als er geen doelmap wordt opgegeven, gebruikt &kdiff3; `map3` als doelmap voor het samenvoegen.

Merk op dat alleen het vergelijken automatisch start, niet het samenvoegen. Hiervoor dient u eerst een menu-item of de toets F7 te gebruiken. (Meer details later.)

### Mapsamenvoeging zichtbare informatie

Terwijl de mappen worden gelezen verschijnt een melding die u over de voortgang informeert. Als u het inlezen van de mappen annuleert, worden alleen bestanden getoond die tot dan toe zijn vergeleken.

Als het inlezen van de mappen klaar is, toont &kdiff3; een lijst met de resultaten links ...

... en details over het geselecteerde item rechts.

#### De kolom "Naam"

Elk bestand en elke map die tijdens het inlezen gevonden is, wordt hier in een boomstructuur getoond. U kunt een item selecteren door er éénmaal met de muis op te klikken.

Standaard zijn de mappen ingevouwen. U kunt ze uitvouwen en weer invouwen door op de "+"/"-" te klikken of door op het item te dubbelklikken, of door de linker en rechter pijltoetsen te gebruiken. Het menu "Map" bevat ook twee acties "Alle submappen invouwen" en "Alle submappen uitvouwen" waarmee u alle mappen in één keer kunt invouwen of uitvouwen.

Als u op een bestand dubbelklikt wordt de bestandsvergelijking gestart en verschijnt het verschillenvenster.

De afbeelding in de naamkolom geeft het bestandstype in de eerste map ("A") aan. Dit kan zijn:

- Normaal bestand

- Normale map (map-afbeelding)

- Koppeling naar een bestand (bestandsafbeelding met pijl)

- Koppeling naar een map (mapafbeelding met pijl)

Als het bestandstype anders is in de andere mappen, is dit zichtbaar in de kolommen A/B/C en in het venster dat de details over het geselecteerde item toont. Merk op dat het samenvoegen in zo'n geval niet automatisch gedaan kan worden. Als u het samenvoegen start, wordt u geïnformeerd over zulke problemen.

#### De kolommen A/B/C en het kleurenschema

Zoals in de afbeelding te zien is, worden de kleuren rood, groen, geel en zwart gebruikt in de kolommen A/B/C.

- Zwart: Dit item bestaat niet in deze map

- Groen: Nieuwste item.

- Geel: Ouder dan groen, nieuwer dan rood.

- Rood: Oudste item.

Maar voor items die hetzelfde waren in de vergelijking, is ook de kleur hetzelfde, ook al zijn ze niet even oud.

Mappen worden als gelijk beschouwd als alle items die ze bevatten hetzelfde zijn. Dan hebben ze ook dezelfde kleur. De leeftijd van een map wordt niet gebruikt bij het bepalen van de kleur.

Het idee voor dit kleurenschema kreeg ik bij dirdiff. De kleuren stellen een blad voor dat groen is als het nieuw is, later geel wordt, en rood wordt als het oud is.

#### De kolom "Operatie"

Na het vergelijken van mappen maakt &kdiff3; ook een voorstel voor een samenvoegingsoperatie. Dit wordt getoond in de kolom "Operatie". U kunt een operatie wijzigen door erop te klikken. Er verschijnt dan een klein menu waarmee u de operatie voor dat item kunt kiezen. (U kunt ook de meestgebruikte operaties met het toetsenbord kiezen. Ctrl+1/2/3/4/Del kiest respectievelijkg A/B/C/Samenvoegen/Verwijderen.) Deze operatie wordt dan bij het samenvoegen uitgevoerd. Afhankelijk van het item en de samenvoegmodus zijn er andere operaties beschikbaar. De samenvoegmodus kan zijn:

- Samenvoegen van drie mappen ("A" wordt als oudere basis van beide beschouwd).

- Samenvoegen van twee mappen

- Synchroniseren van twee mappen (via de optie "Mappen synchroniseren")

Bij het samenvoegen van drie mappen is het voorstel voor de operatie: als voor een item ...

- ... alle drie de mappen gelijk zijn: kopiëren vanuit C

- ... A en C gelijk zijn maar B niet: kopiëren vanuit B (of als B niet bestaat, de bestemming verwijderen als deze bestaat)

- ... A en B gelijk zijn maar C niet: kopiëren vanuit C (of als C niet bestaat, de bestemming verwijderen als deze bestaat)

- ... B en C gelijk zijn maar A niet: kopiëren vanuit C (of als C niet bestaat, de bestemming verwijderen als deze bestaat)

- ... alleen A bestaat: de bestemming verwijderen (als deze bestaat)

- ... alleen B bestaat: vanuit B kopiëren

- ... alleen C bestaat: vanuit C kopiëren

- ... A, B en C niet gelijk zijn: samenvoegen

- ... A, B en C niet hetzelfde bestandstype hebben (bijvoorbeeld, A is een map en B een bestand): "Fout: Conflicterende bestandstypen". Zolang zulke items bestaan kan het samenvoegen van de mappen niet beginnen.

Bij het samenvoegen van twee mappen is het voorstel voor de operatie: Als voor een item...

- ... beide mappen gelijk zijn: kopiëren vanaf B

- ... A bestaat, maar B niet: kopiëren vanaf A

- ... B bestaat, maar A niet: kopiëren vanaf B

- ... A en B bestaan maar niet gelijk zijn: samenvoegen

- ... A en B niet hetzelfde bestandstype hebben (bijvoorbeeld, A is een map en B een bestand): "Fout: Conflicterende bestandstypen". Zolang zulke items bestaan kan het samenvoegen van de mappen niet beginnen.

Synchronisatiemodus is actief als er slechts twee mappen en geen expliciet doel zijn opgegeven, en als de optie "Mappen synchroniseren" actief is. &kdiff3; kiest dan een standaard operatie zodanig dat beide mappen naderhand hetzelfde zijn. Als voor een item ...

- ... beide mappen gelijk zijn: er zal niets worden gedaan.

- ... A bestaat, maar B niet: A naar B kopiëren

- ... B bestaat, maar A niet: B naar A kopiëren

- ... A en B bestaan, maar niet gelijk zijn: samenvoegen en het resultaat in beide mappen opslaan. (Voor de gebruiker is de zichtbare opslag-bestandsnaam B, maar &kdiff3; kopieert dan B ook naar A.)

- ... A en B niet hetzelfde bestandstype hebben (bijvoorbeeld, A is een map en B een bestand): "Fout: Conflicterende bestandstypen". Zolang zulke items bestaan kan het samenvoegen van de mappen niet beginnen.

Als twee mappen samengevoegd worden en de optie "Nieuwere kopiëren in plaats van samenvoegen" geselecteerd is, kijkt &kdiff3; naar de datums en stelt dan voor om het nieuwere bestand te kiezen. Als de bestanden niet gelijk zijn maar wel gelijke datums hebben, bevat de operatie "Fout: Datums zijn gelijk maar bestanden niet." Zolang zulke items bestaan kan het samenvoegen niet beginnen.

#### De statuskolom

Gedurende het samenvoegen wordt het ene bestand na het andere verwerkt. De statuskolom toont "Gereed" bij items waar het samenvoegen is afgerond, en andere teksten als er iets onverwachts gebeurd is. Als het samenvoegen klaar is, dient u een laatste controle te doen om te zien of de status van alle items goed is.

#### Statistiekkolommen

Als de bestandsvergelijkingsmodus "Volledige analyse" ingeschakeld is in de opties, toont &kdiff3; extra kolommen met het aantal onopgeloste en opgeloste conflicten en het aantal (niet-)witruimteconflicten. (De kolom met het aantal opgeloste conflicten wordt alleen getoond bij het vergelijken of samenvoegen van drie mappen.)

#### Getoonde bestanden selecteren

Verschillende opties beïnvloeden welke bestanden hier te zien zijn. Sommige van deze opties zijn instelbaar in de instellingendialoog. Het menu Map heeft de volgende items:

- "Identieke bestanden tonen": Bestanden die in alle invoermappen gelijk zijn.

- "Bestanden die verschillen tonen": Bestanden die in twee of meer mappen voor komen maar niet gelijk zijn.

- "Bestanden alleen in A tonen": Bestanden die uitsluitend in A voorkomen.

- "Bestanden alleen in B tonen": Bestanden die uitsluitend in B voorkomen, maar niet in A of C.

- "Bestanden alleen in C tonen": Bestanden die uitsluitend in C voorkomen.

Schakel alleen de "Show"-opties in voor de items die u wilt tonen. Als u bijvoorbeeld alleen items wilt tonen die uitsluitend in A of in B voorkomen, dan moet u "Bestanden alleen in A tonen" en "Bestanden alleen in B tonen" inschakelen en alle anderen uitschakelen ("Identieke bestanden tonen", "Bestanden die verschillen tonen", "Bestanden alleen in C tonen"). De lijst zal vervolgens onmiddellijk bijgewerkt worden naar de nieuwe instellingen.

Deze keuzemogelijkheden zijn ook geldig voor mappen met een uitzondering: het uitschakelen van "Bestanden die verschillen tonen" zal niet complete mappen verbergen. Dit werkt alleen voor de bestanden in een map.

Merk op dat alleen de optie "Identieke bestanden tonen" bewaard wordt. De anderen worden ingeschakeld bij het starten van &kdiff3;.

### Mapsamenvoeging uitvoeren

U kunt het geselecteerde item (bestand of map) samenvoegen, of alle items. Als u alle keuzes voor de operaties hebt gemaakt (ook in alle submappen) kunt u het samenvoegen starten.

Wees erop bedacht dat, als u niet expliciet een doelmap hebt opgegeven, de doelmap "C" is bij het behandelen van drie mappen, "B" bij het samenvoegen van twee mappen, en "A" en/of "B" in sychronisatiemodus.

Controleer ook als u een doelmap hebt opgegeven of alle items die zich in de uitvoer zouden moeten bevinden, daadwerkelijk in de boomstructuur staan. Er zijn enkele opties die ervoor zorgen dat bepaalde items uit het vergelijken en samenvoegen van mappen worden weggelaten. Controleer deze opties om onplezierige verrassingen te voorkomen:

- "Recursieve mappen": Als dit uitgeschakeld is, worden items in submappen niet gevonden.

- "Patroon"/"Anti-patroon": Overeenkomende items al dan niet invoegen

- "Verborgen bestanden uitsluiten"

- "Opties voor Tonen (Bestanden die Identiek zijn/verschillen, alleen in A/B/C tonen)

Als u instellingen heeft gewijzigd om de hoeveelheid zichtbare bestanden in de lijst te vergroten, dan is het daarna noodzakelijk om een rescan uit te voeren via het menu "Bestand"->"Opnieuw inlezen". (De reden hiervoor is dat voor snellere verwerking van de vergelijkingen, &kdiff3; de vergelijkingen niet uitvoert voor bestanden die al uitgesloten zijn.) Als u de bestand- en map-patronen heeft gewijzigd om meer bestanden uit te sluiten dan wordt de bestandenlijst onmiddellijk bijgewerkt bij het sluiten van de keuze-dialoog.

Als u naar een compleet nieuwe map wilt schrijven, dan wilt u meestal ook de identieke bestanden kopiëren. Schakel in dat geval de keuzemogelijkheid "Identieke bestanden tonen" in. Als uw doelmap een van de invoermappen is, dan is dit niet noodzakelijk omdat de bestanden al aanwezig zijn.

Als u tot hier tevreden bent, is de rest eenvoudig.

Om alle items samen te voegen: kies "Mapsamenvoeging starten/voortzetten" in het menu "Map" of druk op F7 (sneltoets). Om alleen het huidige item samen te voegen: kies "Operatie uitvoeren voor huidig item" of druk op F6.

Als er door conflicterende bestandstypes nog bestanden zijn met ongeldige operaties, verschijnt er een melding, worden die items aangewezen en kunt u een geldige operatie voor die items kiezen.

Als u alle items samenvoegt, verschijnt er een dialoogvenster met de opties "Starten", "Simuleren" en "Annuleren".

- Kies "Simuleren" als u wilt zien wat er gedaan zou worden, zonder dit werkelijk te doen. Er wordt een uitgebreide lijst van alle operaties getoond.

- Kies anders "Starten" om het samenvoegen echt te starten.

&kdiff3; voert dan de gekozen operatie uit op alle items. Als u handmatige actie moet ondernemen (samenvoegen van een enkel bestand) verschijnt er een samenvoegvenster (zie de grote schermafdruk).

Als u klaar bent met een bestand, kiest u opnieuw "Samenvoegen starten/voortzetten" of drukt u op F7. Als u nog niet hebt opgeslagen, wordt er een dialoogvenster getoond dat u vraagt om dat te doen. &kdiff3; gaat dan verder met het volgende item.

Als &kdiff3; een fout tegenkomt, meldt het dit en wordt de uitgebreide statusinformatie getoond. Onderaan deze lijst zullen er wat foutmeldingen staan die u zouden moeten helpen bij het begrijpen van de oorzaak van het probleem. Als u doorgaat met samenvoegen (F7) geeft &kdiff3; u de keuze tussen opnieuw proberen of het item overslaan dat het probleem veroorzaakte. Dit betekent dat u, voordat u doorgaat, een andere operatie kunt kiezen of het probleem door andere middelen kunt oplossen.

Als het samenvoegen voltooid is, informeert &kdiff3; u hierover via een berichtvenster.

Als sommige items afzonderlijk samengevoegd zijn, onthoudt &kdiff3; dit (tijdens de samenvoegsessie) en worden deze niet opnieuw samengevoegd als later het samenvoegen voor alle items gestart wordt. Zelfs als het samenvoegen overgeslagen is of er niets is opgeslagen, tellen deze items als voltooid. Alleen als u de samenvoegoperatie wijzigt, wordt het item opnieuw samengevoegd.

### Opties voor het vergelijken en samenvoegen van mappen

De voorkeuren van &kdiff3; (menu "Instellingen"->"&kdiff3; instellen") bevatten nu een sectie "Mappen samenvoegen" met deze opties:

Recursieve mappen:

- Kies of mappen recursief doorzocht moeten worden.

Bestandspatroon(en):

- Alleen bestanden die hier met een patroon overeenkomen worden in de boom geplaatst. U kunt hier meer dan één patroon opgeven door een puntkomma ";" als scheidingsteken te gebruiken. Geldige jokertekens: '*' en '?' (bijvoorbeeld "*.cpp;*.h"). Standaard is "*". Mappen hoeven niet aan dit patroon te voldoen.

Antipatroon(en) van bestanden:

- Bestanden die met dit patroon overeenkomen worden niet in de boom geplaatst. U kunt hier meer dan één patroon opgeven door een puntkomma ";" als scheidingsteken te gebruiken. Geldige jokertekens: '*' en '?'. Standaard is "*.orig;*.o;*.obj".

Anti-patroon(en) van mappen:

- Mappen die met dit patroon overeenkomen worden niet in de boom geplaatst. U kunt hier meer dan één patroon opgeven door een puntkomma ";" als scheidingsteken te gebruiken. Geldige jokertekens: '*' en '?'. Standaard is "CVS;deps;.svn".

CVS-ignore gebruiken:

- Negeer bestanden en mappen die ook door CVS genegeerd zouden worden. Veel automatisch gegenereerde bestanden worden genegeerd door CVS. Het grote voordeel hiervan is dat dit mapspecifiek opgegeven kan worden via een bestand ".cvsignore". (Zie info:/cvs/cvsignore.)

Verborgen bestanden en mappen zoeken:

- Op sommige bestandssystemen hebben bestanden een attribuut "verborgen". Op andere systemen zorgt een punt "." aan het begin van een bestandsnaam ervoor dat het bestand verborgen is. Met deze optie kunt u deze bestanden al dan niet in de boom laten opnemen. Standaard is aan.

Bestandskoppelingen volgen:

- Voor koppelingen naar bestanden: Als dit uitgeschakeld is, worden de koppelingen vergeleken. Als dit ingeschakeld is, worden de bestanden achter de koppelingen vergeleken. Standaard is uit.

Mapkoppelingen volgen:

- Voor koppelingen naar mappen: als dit uitgeschakeld is, worden de symbolische koppelingen vergeleken. Als dit ingeschakeld is, worden de koppelingen beschouwd als mappen en recursief ingelezen. (Merk op dat het programma niet controleert of de koppeling "recursief" is. Dus bijvoorbeeld een map die een koppeling naar zichzelf bevat, zorgt voor een oneindige lus, en na enige tijd, als de "stack" overloopt of al het geheugen op is, voor een crash van het programma.) Standaard is uit.

Hoofdlettergevoelige bestandsnaamvergelijking:

- Standaard UIT bij Windows, AAN bij andere besturingssystemen.

Bestandsvergelijkingsmodus:

- Binaire vergelijking:

- Dit is de standaard vergelijkingsmodus.

Volledige analyse:

- Doe een volledige analyse van elk bestand en toon de kolommen met statistische informatie. (Aantal opgeloste en onopgeloste, niet-witruimte- en witruimteconflicten.) De volledige analyse is langzamer dan een eenvoudige binaire analyse, en veel langzamer bij bestanden die geen tekst bevatten. (Geef de van toepassing zijnde bestandsantipatronen op.)

Wijzigingsdatum vertrouwen:

- Als u grote mappen over een langzaam netwerk vergelijkt, kan het sneller om alleen de wijzigingsdatums en bestandsgroottes te vergelijken. Deze snelheidsverbetering brengt echter wat onzekerheid met zich mee. Wees voorzichtig bij het gebruiken van deze optie. Standaard is uit.

Grootte vertrouwen:

- Vergelijkbaar met het vertrouwen van de wijzigingsdatum. Er vindt geen echte vergelijking plaats. Twee bestanden worden als gelijk beschouwd als ze dezelfde grootte hebben. Dit is nuttig als de kopieeroperatie de wijzigingsdatum niet intact heeft gehouden. Wees voorzichtig bij het gebruiken van deze optie. Standaard is uit.

Mappen synchroniseren:

- Activeert de "synchronisatiemodus" als twee mappen vergeleken worden en er geen expliciete doelmap is opgegeven. In deze modus worden de voorgestelde operaties dusdanig gekezen dat beide bronmappen na de synchronisatie gelijk zijn. Het resultaat van het samenvoegen wordt ook naar beide mappen geschreven. Standaard is uit.

Nieuwere bestanden kopiëren in plaats van samenvoegen:

- In plaats van het uitvoeren van de voorgestelde operatie wordt het nieuwere bestand gekopieerd als er wijzigingen zijn opgetreden. (Dit wordt als onveilig beschouwd, want het veronderstelt dat u weet dat het andere bestand niet ook gewijzigd is. Controleer dit in elk geval.) Standaard is uit.

Reservekopiebestanden:

- Als een bestand of gehele map door een andere wordt vervangen of verwijderd wordt, wordt de originele versie hernoemd met de extensie ".orig". Als een oud reservekopiebestand met de extensie ".orig" al bestaat, wordt dit zonder reservekopie verwijderd. Dit beïnvloedt ook het normale samenvoegen van enkele bestanden, niet alleen bij het samenvoegen van mappen. Standaard is aan.

### Andere mogelijkheden in het mappen-samenvoegenvenster

#### Splitsen / Volledig-scherm-modus

Normaal gesproken blijft de lijstweergave voor het samenvoegen van mappen zichtbaar als er een enkel bestand wordt vergeleken of samengevoegd. Met de muis kunt u de splitsbalk verplaatsen die de bestandenlijst van de verschillenvensters scheidt. Als u dat niet wilt, kunt u "Vensters splitsen" in het menu "Map" uitschakelen. U kunt dan "Weergave omschakelen" in het menu "Map" kiezen om tussen de bestandenlijst en de verschillenweergave over te schakelen, die dan het volledige scherm in beslag nemen.

#### Een enkel bestand vergelijken of samenvoegen

U dubbelklikt waarschijnlijk het liefst op een bestand om het te vergelijken. Desalniettemin is er hiervoor ook een item in het menu "Map". U kunt ook direct een enkel bestand samenvoegen, zonder de mapsamenvoeging te starten, met "Enkel bestand samenvoegen" in het menu "Map". Als u het resultaat opslaat, wordt de status op "voltooid" gezet, en wordt het bestand niet opnieuw samengevoegd als er een mapsamenvoeging wordt gestart.

Merk op dat deze statusinformatie verloren gaat als u de map opnieuw inleest (menu "Map", item "Opnieuw inlezen")

#### Bestanden net verschillende namen vergelijken of samenvoegen

Soms wilt u bestanden met verschillende namen vergelijken of samenvoegen (bijv. het huidige bestand en de reservekopie in dezelfde map).

Selecteer het juiste bestand door op het pictogram in de kolom A, B of C te klikken. Het eerste geselecteerde bestand zal gemarkeerd worden met een "A", de tweede en derde met "B" en "C" onafhankelijk van de kolom waarin ze zijn. Er kunnen maximaal drie bestanden op deze manier gekozen worden.

Ga verder door "Expliciet geselecteerde bestanden vergelijken" of "Expliciet geselecteerde bestanden samenvoegen" uit het menu "Bestand" te selecteren. Om het u makkelijker te maken verschijnt dit menu-item ook als contextmenu wanneer u met de &RMB; op het laatst geselecteerde bestand klikt.

Het vergelijken of samenvoegen gebeurt in hetzelfde venster. Als u deze methode gebruikt bij mappen dan wordt een nieuw venster geopend.

## Diverse onderwerpen

### Netwerktransparantie via KIO

#### KIO-slaves

De KIO-bibliotheek van Frameworks biedt netwerktransparantie via KIO-slaves. &kdiff3; gebruikt dit om invoerbestanden en mappen te lezen. Dit betekent dat u bestanden en mappen op lokale en externe bronnen kunt opgeven via URL-adressen.

Voorbeeld:

    kdiff3 test.cpp  ftp://ftp.verweg.org/test.cpp
       kdiff3 tar:/home/hacker/archief.tar.gz/map ./map

De eerste regel vergelijkt een lokaal bestand met een bestand op een FTP-server. De tweede regel vergelijkt een map binnen een gecomprimeerd archief met een lokale map.

Andere interessante KIO-slaves zijn:

- Bestanden op het www (http:),

- Bestanden op ftp (ftp:),

- Versleutelde bestandsoverdracht (fish:, sftp:),

- Windows-hulpbronnen (smb:),

- Lokale bestanden (file:).

Andere (waarschijnlijk minder nuttige) mogelijkheden zijn:

- Man-pagina's (man:),

- info-pagina's (info:).

#### Hoe URL-adressen te schrijven

Een URL heeft een andere syntaxis vergeleken met paden naar lokale bestanden en mappen. U dient met een aantal zaken rekening te houden:

- Een pad kan relatief zijn en "." of ".." bevatten. Dit kan niet mogelijk met URL-adressen, die altijd absoluut zijn.

- Speciale tekens dienen omgezet te worden. ("#"->"%23", spatie->"%20", enz.) Een bestand met de naam "/#foo#" wordt bijvoorbeeld het URL-adres "file:/%23foo%23".

- Als URL-adressen niet werken zoals u verwacht, probeer ze dan eerst in Konqueror te openen.

#### Mogelijkheden van KIO-slaves

Netwerktransparantie heeft één nadeel: niet alle bronnen hebben dezelfde mogelijkheden.

Soms ligt dit aan het bestandssysteem van de server, soms aan het protocol. Een korte lijst van beperkingen:

- Er is soms geen ondersteuning voor koppelingen.

- Of er is geen manier om te onderscheiden of een koppeling naar een map of een bestand verwijst, er wordt dan altijd van bestanden uitgegaan (ftp:, sftp:).

- De bestandsgrootte kan niet altijd bepaald worden.

- Beperkte ondersteuning voor permissies.

- Geen mogelijkheden om permissies of wijzigingsdatums te veranderen, zodat de permissies of tijd van een kopie verschillen van het origineel. (Zie de optie "Grootte vertrouwen"). (Permissies of wijzigingsdatum veranderen is alleen mogelijk bij lokale bestanden.)

### &kdiff3; als een KPart gebruiken

&kdiff3; is een KPart. Het implementeert momenteel de interface KParts::ReadOnlyPart.

Het belangrijkste gebruik is als een weergever van verschillen in KDevelop. KDevelop start altijd eerst de interne weergever van verschillen. Om &kdiff3; op te starten klikt u met de rechtermuisknop op het verschilvenster en kiest u "In KDiff3Part tonen" uit het contextmenu.

&kdiff3; vereist normaal gesproken twee complete bestanden als invoer. Als het als een KPart gebruikt wordt, neemt &kdiff3; aan dat het invoerbestand een patch-bestand in het standaard formaat is. &kdiff3; haalt dan de twee bestandsnamen op uit het patch-bestand. Minstens één van de twee bestanden moet beschikbaar zijn. &kdiff3; roept dan `patch` aan om het andere bestand opnieuw te maken.

In &dolphin; kunt u een patch-bestand selecteren en "Tonen in"-"KDiff3Part" uit het contextmenu kiezen. Merk op dat dit niet werkt als geen van de originele bestanden beschikbaar is en dat het niet betrouwbaar is als een origineel bestand gewijzigd is sinds het patch-bestand gegenereerd is.

Als het als een KPart gestart wordt, biedt &kdiff3; alleen een verschillenmodus voor twee bestanden, een kleine werkbalk en een menu. Samenvoegen of mappen vergelijken worden dan niet ondersteund.

### &kdiff3; gebruiken als een Git Diff en hulpmiddel voor samenvoegen

&kdiff3; kan gebruikt worden als een hulpmiddel Git-diff en merge.

Voeg eenvoudig de volgende regels toe in uw bestand `gitconfig`.

    [diff]
            tool = kdiff3
    [difftool "kdiff3"]
            path = <pad naar kdiff3 programma in uw systeem>
    [difftool]
            prompt = false
            keepBackup = false
            trustExitCode = false
    [merge]
            tool = kdiff3
    [mergetool]
            prompt = false
            keepBackup = false
            keepTemporaries = false
    [mergetool "kdiff3"]
            path = <pad naar kdiff3 programma in uw systeem
    >

Om dan de verschillen te zien tussen twee commits, gebruik `git difftool `eerste_hash` `tweede_hash` --tool=kdiff3 --cc `een_bestand_in_de_git_boomstructuur``

Om een branch samen te voegen met &kdiff3;, gebruik `git merge `branch_naam` && git mergetool --tool=kdiff3`

Na het oplossen van conflicten bij het samenvoegen op de gebruikelijke manier is het genoeg een commit te doen voor de wijzigingen.

## Vraag en antwoord

&reporting.bugs; &updating.documentation;

Waarom heet het "&kdiff3;"?

Hulpmiddelen met de naam "KDiff" en "KDiff2" (nu "Kompare") bestaan al. "KDiff3" moet ook suggereren dat het kan samenvoegen, net als het programma "diff3" in de Diff-Tool-verzameling.

Waarom heb ik het onder GPL uitgegeven?

Ik gebruik al heel lang GPL-programma's en heb veel geleerd door de vele broncodes te bekijken. Dit is daarom mijn dankbetuiging aan alle programmeurs die hetzelfde hebben gedaan of zullen doen.

Sommige knoppen en functies ontbreken. Wat is er mis?

U hebt waarschijnlijk vanuit de broncode gecompileerd zonder het juiste prefix voor de installatie op te geven. Standaard wil cmake installeren in de map /usr/local, maar het bronbestand voor de gebruikersinterface (dwz. kdiff3ui.rc) is dan niet te vinden. Het bestand README bevat meer informatie over de juiste prefix.

Regels die op elkaar lijken maar niet hetzelfde zijn, verschijnen vaak naast elkaar, maar soms niet. Waarom?

Regels waar alleen de hoeveelheid witruimte verschillend is worden in eerste instantie als "gelijk" beschouwd, terwijl slechts één verschillend niet-witruimte-teken ervoor zorgt dat de regels "verschillend" zijn. Als op elkaar lijkende regels naast elkaar verschijnen is dit slechts toeval, maar dit is gelukkig vaak het geval. Zie ook Handboek Diff-hulp.

Waarom moeten alle conflicten opgelost worden voordat het resultaat opgeslagen kan worden?

Voor elke gelijke of verschillende sectie onthoudt de editor in het resultaatvenster waar deze begint en eindigt. Dit is nodig omdat dan conflicten handmatig opgelost kunnen worden door op de knop van de broncode (A, B of C) te drukken. Deze informatie is opgelost bij het opslaan als tekst en het is te veel werk om een speciaal bestandsformaat te maken waarmee alle benodigde informatie opgeslagen en ingelezen kan worden.

Hoe kan ik het verschillenvenster en het samenvoegvenster synchroniseren zodat alle vensters dezelfde tekstpositie tonen?

Klik in de kolom samenvatting links van de tekst. (Zie ook hier.)

Waarom heeft de editor in het resultaatvenster geen functie "ongedaan maken"?

Dit was tot nu toe te veel werk. U kunt altijd een versie vanuit ene bron (A, B of C) herstellen daar op de overeenkomstige knop te klikken. Voor grote wijzigingen wordt het gebruik van een andere editor sowieso aanbevolen.

Toen ik wat tekst verwijderde, verscheen plotseling "<Geen regel in de bron>" en ik kon dit niet verwijderen. Wat betekent dit en hoe kan ik dit verwijderen?

Voor elke gelijke of verschillende sectie onthoudt de editor in het resultaatvenster waar deze begint en eindigt. "<Geen regel in de bron>" betekent dat er niets over is in de sectie (zelfs geen regeleinde). Dit kan tijdens automatisch samenvoegen of tijdens bewerken gebeuren. Dit is geen probleem, want de aanwijzing verschijnt niet in het opgeslagen bestand. Als u de originele bron terug wilt, selecteert u de sectie (klik op de linker overzichtkolom) en klikt u op de knop van de bron met de gewenste inhoud (A, B of C).

Waarom ondersteunt &kdiff3; geen syntaxis-accentuering?

&kdiff3; gebruikt al veel kleuren voor het accentueren van verschillen. Meer accentuering zou verwarrend worden, gebruik daar een andere editor voor.

Kan ik &kdiff3; gebruiken om OpenOffice.Org, Word, Excel, PDF-, &etc; bestanden te vergelijken?

Hoewel &kdiff3; elk soort bestand zal analyseren zal het resultaat waarschijnlijk niet erg bevredigend voor u zijn.

&kdiff3; is ontworpen om pure tekstbestanden te vergelijken. OpenOffice, Word, Excel etc. slaan in de bestanden veel meer informatie op (over lettertypes, afbeeldingen, pagina's, kleuren etc.) waarover &kdiff3; niets weet. Daarom zal &kdiff3; de inhoud van het bestand u als pure tekst tonen, maar dit kan onleesbaar zijn of er minstens zeer vreemd uitzien.

Omdat meer en meer programma's hun data opslaan in het XML-formaat, is er een kans dat u het als pure tekst kunt lezen. Hoewel de kans dus klein is, kan &kdiff3; u misschien nog steeds helpen.

Als u alleen de tekst wilt vergelijken (zonder ingebedde objecten zoals afbeeldingen), dan is het het makkelijkst om met "Alles selecteren" en "Kopiëren" in uw programma de interessante tekst te kopiëren naar het klembord en vervolgens in &kdiff3; de tekst in een verschillenvenster te plakken. (Lees ook Selecteren, kopiëren en plakken.)

Waar is de mapoptie "Alleen delta's tonen" heen gegaan?

Er zijn nu verschillende Opties "Tonen" in het menu Map. Het uitschakelen van "Identieke bestanden tonen" zal hetzelfde resultaat hebben als het inschakelen van "Alleen delta's tonen" vroeger had.

Hoe kan ik een grote selectie maken in het verschillenvenster als het scrollen zo langzaam gaat?

Begin zoals gewoonlijk met de selectie (klik en houdt de &LMB; ingedrukt). Gebruik vervolgens de navigatieknoppen (b.v. vorige pagina, volgende pagina) terwijl u de &LMB; ingedrukt houd. (Lees ook Selecteren, kopiëren en plakken.)

Er staat hier zo veel informatie, maar uw vraag is nog niet beantwoord?

Stuur me uw vraag. Ik stel alle opmerkingen op prijs.

## Dankbetuigingen en licentie

&kdiff3; - Hulpmiddel voor vergelijken en samenvoegen van bestanden en mappen

Programma copyright 2002-2007 Joachim Eibl joachim.eibl at gmx.de

Diverse gave ideeën en bugrapporten van collega's en veel mensen op het Wilde Wilde Web. Bedankt!

Documentatie copyright © 2002-2007 Joachim Eibl joachim.eibl at gmx.de

&meld.fouten;&vertaling.sander;&vertaling.freek; &underFDL; &underGPL;
&documentation.index;