# &kdiff3; käsiraamat

## Sissejuhatus

### Veel üks võrdlemisrakendus?

Teatavasti on olemas üsna mitu graafilist võrdlusrakendust. Miks siis veel &kdiff3;? Siin ma selgitan veidi selle loomise tagamaid.

&kdiff3; nägi ilmavalgust sellepärast, et mul oli raskusi ühendamisega. Ühendamine on hädavajalik, kui mingi projekti failide kallal töötab korraga mitu inimest. Ühendamine peab olema mingil määral automatiseeritud, kui arvestada seda, et ühendamisvahend tegeleb nii uute, muudetud failidega (niinimetatud harudega) kui ka algse failiga (niinimetatud baas). Ühendamisvahend valib automaatselt muudatuse, mis mingis harus on tehtud. Kui mitu arendajat on muutnud üht ja sama rida, tuvastab ühendamisvahend konflikti, mis tuleb lahendada käsitsi.

Ühendamine oli sellisel juhul keeruline, sest üks arendaja muutis hulk asju ja lisaks sellele parandas veel paljudes kohtades näiteks taanet. Samal ajal muutis teine arendaja samuti üsna palju samas failis ja nii tekkiski korraga mitu ühendamiskonflikti.

Vahendid, mida ma toona kasutasin, näitasid ainult muudetud ridu, aga mitte seda, mida neis ridades on muudetud. Ning miski ei viidanud ka sellele, et muudetud on ainult taanet. See muutis ühendamise väikest viisi luupainajaks.

Minu jaoks oli see alguspunkt. Esimene versioon oskas näidata erinevusi rea sees ning erinevusi tühimärkides. Hiljem lisandus veel hulk võimalusi, mis ainult suurendasid rakenduse kasulikkust.

Nii on näiteks võimalik teksti kiireks võrdlemiseks kopeerida see lõikepuhvrisse ja asetada siis mis tahes võrdlusaknasse.

Päris suurt pingutust nõudvaks võimaluseks osutus kataloogide võrdlemine ja ühendamine, mille tulemusena sündis peaaegu juba brauseri mõõtu lisandus.

Ma loodan, et &kdiff3; rahuldab ka sinu vajadused. Edu sulle!

Joachim Eibl (2003)

### Pildid ja võimalused

See pilt näitab erinevust kahe tekstifaili vahel

(&kdiff3; üks varasemaid versioone):

Kolmikühendamine on täielikult toetatud. See on abiks juhul, kui kaks inimest on koodi teineteisest sõltumatult muutnud. Algne fail (baas) võimaldab &kdiff3; automaatselt valida korrektsed muudatused. Võrdlusakende all asuv ühendamisredaktor lubab konflikte lahendada ja näitab, milline on sellisel juhul tulemus. Isegi seda tulemust saab kohe edasi redigeerida. See pilt näitab kolme sisendfaili ühendamist:

&kdiff3; aitab ka võrrelda ja ühendada terveid katalooge. See pilt näitabki &kdiff3; kataloogide ühendamisel:

### Veel võimalusi

#### Võrdlemine rida realt ja märk märgilt

Graafiliselt, värvidega näitab &kdiff3; täpselt, milles peituvad erinevused. Kui tegeled palju koodi (ümber)kirjutamisega, on see kindlasti abiks.

#### Tühimärkide erinevuste näitamine

Tühikute ja tabeldusmärkide erinevused näidatakse otseselt ära. Kui read erinevad ainult tühimärkide arvu poolest, võib seda üheainsa pilguga näha vasakul asuval kokkuvõttetulbal (mis tähendab, et ei pruugi enam pead murda, kui muudetud on kõigest taanet).

#### Kolmikvõrdlus

Kolme faili analüüs ja nende erinevuste näitamine.

Vasakpoolne, keskmine ja parempoolne aken kannavad vastavalt nimesid A, B ja C ning neid eristab ka värv (sinine, roheline, magenta).

Kui ühes failis on rida sama, teises aga erinev, näitab värv, milline fail on erinev. Punane värv tähendab, et mõlemad ülejäänud failid on erinevustega.

#### Kahe või kolme sisendfaili hõlpus ühendamine

&kdiff3; võib ühendada kaks või kolm sisendfaili, sealjuures võimalikult palju juba automaatselt. Tulemust näidatakse redigeeritavas aknas, kus enamiku konflikte saab lahendada üheainsa hiireklõpsuga: vali nupuribalt A, B või C määramaks, millist allikat kasutada. Valida võib ka enam kui ühe allika. Kuna väljundiaken on samal ajal redaktor, siis saab isegi selliseid konflikte, mille puhul tuleb midagi täiendavalt teha, lahendada ilma mingit muud abivahendit kasutamata.

#### Ja veel...

- Kiire liikumine nuppude abil.

- Hiireklõps kokkuvõttetulbal sünkroniseerib kõik aknad ühele positsioonile.

- Valimine ja kopeerimine mis tahes aknast ning asetamine ühendamisaknasse.

- Ülevaatetulp, mis näitab, kus esineb muudatusi ja konflikte.

- Värve saab kohandada just kasutaja maitsele.

- Kohandatav tabeldusmärgi suurus.

- Võimalus lisada tabeldusmärkide asemel tühikud.

- Failide hõlpus avamine dialoogiga või võimalus määrata faile käsureal.

- Stringide otsimine kõigis tekstiakendes (Otsi ehk CTRL+F ja Otsi järgmine ehk F3).

- Iga rea reanumbri näitamine.

- Lõikepuhvri sisu asetamine või teksti lohistamine võrdlemise sisendaknasse.

- Võrguläbipaistvus KIO-moodulite vahendusel.

- Võimalus kasutada KDevelop3 erinevuste näitajana.

- Pikkade ridade murdmine.

- Unicode'i, UTF-8 ja muude kodeeringute toetus.

- Paremalt vasakule kirjutatavate keelte toetus.

- ...

## Failide võrdlemine ja ühendamine

### Käsurea võimalused

#### Kahe faili võrdlemine:

    kdiff3 fail1 fail2

#### Kahe faili ühendamine:

    kdiff3 fail1 fail2 -m
       kdiff3 fail1 fail2 -o väljundfail

#### Kolme faili võrdlemine:

    kdiff3 fail1 fail2 fail3

#### Kolme faili ühendamine:

    kdiff3 fail1 fail2 fail3 -m
       kdiff3 fail1 fail2 fail3 -o väljundfail

Pane tähele, et `fail1` kujutab endast baasi `fail2` ja `fail3` jaoks.

#### Erijuhtum: ühenimelised failid

Kui kõigil failidel on sama nimi, aga nad asuvad erinevates kataloogides, võib kirjutamisvaeva vähendada, andes ainult esimese faili nime. Näiteks:

    kdiff3 kataloog1/failinimi kataloog2 kataloog3

#### Kataloogide võrdlemine või ühendamine käsureal:

See käib samamoodi, ainult et tegu on kataloogidega.

    kdiff3 kataloog1 kataloog2
       kdiff3 kataloog1 kataloog2 -o sihtkataloog
       kdiff3 kataloog1 kataloog2 kataloog3
       kdiff3 kataloog1 kataloog2 kataloog3 -o sihtkataloog

Kataloogide võrdlemisest ja ühendamisest saab täpsemalt lugeda siit.

#### Muud käsurea võtmed

Kõiki käsurea võtmeid näitab käsk

    kdiff3 --help

Näidisväljund:

    Võtmed:
      -m, --merge               Sisendi liitmine.
      -b, --base fail           Baasfail. Ühilduvuseks teatud tööriistadega.
      -o, --output fail         Väljundfail. Eelduseks -m. Nt.: -o newfile.txt
      --out fail                Taas väljundfail. (Ühilduvuseks teatud tööriistadega.)
      --auto                    GUI puudub, kui kõik konfliktid on automaatselt lahenevad. (Vajalik on -o file)
      --qall                    Konflikte ei lahendata automaatselt. (Ühilduvuseks...)
      --L1 alias1               Sisendfaili 1 (baas) näidatava nime asendus.
      --L2 alias2               Sisendfaili 2 näidatava nime asendus.
      --L3 alias3               Sisendfaili 3 näidatava nime asendus.
      -L, --fname alias         Alternatiivne näidatava nime asendus. Tuleb anda kord iga sisendi kohta.
      --cs string               Tühistab seadistuse. Tuleb anda eraldi iga seadistuse kohta. Näide: --cs "AutoAdvance=1"
      --confighelp              Näitab seadistusi ja nende kehtivaid väärtusi.
      --config fail             Mõne muu seadistustefaili kasutamine.

Võti `--cs` võimaldab muuta seadistuse väärtust, mida muidu saab muuta ainult seadistustedialoogi vahendusel. Kuid arvesta, et kui &kdiff3; töö lõpetab, salvestatakse muudetud väärtus. Võtmega `--confighelp` näeb saadaolevate seadistuste nimesid ja nende kehtivaid väärtusi.

Võtmega `--config` saab määrata mõne muu seadistustefaili kasutamise. Kui kasutad sageli &kdiff3; mitme täiesti erineva seadistusega, lubab see võti variantide vahel hõlpsasti lülituda.

#### Eiratavad käsurea võtmed

Paljud soovivad kasutada &kdiff3; mõne versioonikontrollisüsteemiga. Aga kui versioonikontrollisüsteem kutsub &kdiff3; välja käsureaparameetriga, mida &kdiff3; ei tunne, lõpetab &kdiff3; töö veaga. Lõimimisseadistused lubavad määrata kindlaks käsureaparameetrid, mida &kdiff3; peab eirama. Neid näidatakse abiteates umbes nii:

    miski                     Eiratakse (kasutaja määratud).

Eiratavad käsureavõtmed:

- Võtmete nimekiri, eraldajaks semikoolon ';'. Kui käsureal esineb mõni määratud võtmetest, eirab &kdiff3; seda ja töötab edasi veast teatamata. (Vaikimisi "u;query;html;abort").

Kui sellest ei piisa, on soovitatav kirjutada shelliskript, mis seab võtmed vastavusse.

### Avamisdialoog

Et mitme sisendfaili korral nad lihtsalt peavad olema valitavad, on rakendusel eriline avamisdialoog:

Avamisdialoog võimaldab redigeerida failinimesid käsitsi, valida need failidialoogis ("Fail...") või kasutada rippmenüüs olevaid viimati kasutatud faile. Kui avad dialoogi uuesti, on seal kirjas parajasti aktiivsed failinimed. Kolmanda sisendvälja täitmine ei ole kohustuslik. Kui "C" tühjaks jätta, analüüsitakse ainult kahe faili erinevusi.

Nupule "Kataloog..." klõpsates saab valida kataloogi. Kui A jaoks on määratud kataloog, saab alustada kataloogide võrdlemist-ühendamist. Kui A on fail, kuid B, C või väljund kataloogid, kasutab &kdiff3; A failinime määratud kataloogides.

Kui märkida "Ühenda", saab kasutada ka välja "Väljund". Siiski ei ole nõutav väljundfaili nime kohe määrata, selle võib edasi lükata ka salvestamise ajale.

Klõps nupule "Seadista..." avab valikute dialoogi, kus saab enne analüüsi midagi muuta, kui pead seda vajalikuks.

### Sisendi asetamine ja lohistamine

Vahel võib tekkida vajadus võrrelda tekstilõke, mis ei kujuta endast omaette faile. &kdiff3; võimaldab väga lihtsalt asetada teksti lõikepuhvrist parajasti fookuses olevasse võrdlemise sisendaknasse. Võrdlusanalüüs algab kohe seejärel. Avamisdialoogis ei ole sellisel juhul vajalik määrata faile, vaid selle võib kohe sulgeda klõpsuga nupule "Loobu".

Samuti võib kasutada lohistamist: lohista fail failihalduris või valitud tekst redaktorist ning kukuta see võrdlemise sisendaknasse.

Milleks see hea on? Mõnikord võib fail sisaldada kaht sarnast funktsiooni, kuid kontrollimine, kui sarnased nad ikkagi on, võib olla päris tülikas, kui sa pead näiteks kõigepealt looma kaks faili ja siis nad mõlemad avama. Nüüd aga on võimalik vajalikud osad lihtsalt kopeerida, asetada ja võrdlemine võibki alata.

Märkus: praegu ei ole võimalik midagi &kdiff3;-st välja lohistada, toetatud on ainult lohistamine võrdlemise sisendaknasse.

Hoiatus: mõned redaktorid tõlgendavad lohistamist muusse rakendusse mitte kopeerimise, vaid lõikamisena. See tähendab, et sa võid kaotada oma esialgsed andmed.

### Failide võrdlemine ja info tõlgendamine sisendaknas

#### Inforiba

Iga tekstiakna ülaservas asub "inforiba". Sisendakende inforibal seisab täht "A", "B" või "C", failinimi, sirvimisnupp ning aknas esimesena näha oleva rea number. (Pane tähele, et akent "C" ei pruugi olemas olla.) Iga inforiba on erinevat värvi.

Kui valid sirvides mõne muu faili või lõpetad failinime redigeerimise klahvile Enter vajutades, laaditakse uus fail ja võrreldakse seda juba laaditud faili(de)ga.

#### Värvid

Kolmele sisendaknale on omistatud tähed "A", "B" ja "C". "A" värviks on sinine, "B" roheline ja "C" magenta. Need on vaikeväärtused, mida saab muuta seadistustemenüüst.

Erinevuse avastamisel näitab värv, milline sisendfail erineb. Kui erinevad mõlemad sisendfailid, siis väljendab seda vaikimisi punane värv (seadistuste kohaselt "konflikti värv"). Värviskeem tuleb eriti kasuks kolme sisendfaili korral, mida võib näha järgmises osas (Ühendamine).

#### Kokkuvõttetulp

Igast tekstist vasakul asub "kokkuvõttetulp". Kui real on erinevusi, näitab kokkuvõttetulp vastavat värvi. Ainult tühimärkide erinevuse korral on kokkuvõttetulbal näha ruuduline muster. See on abiks programmeerimiskeelte korral, kus tühimärkidel ei ole erilist tähendust, võimaldades ühe hetkega tuvastada, kas on ka mingeid olulisi muudatusi (näiteks C/C++ korral on tühimärkidel mingi roll ainult stringides, kommentaarides, preprotsessoris ja veel mõnel äärmiselt esoteerilisel juhtumil).

Kokkuvõttetulpa ja teksti lahutav püstjoon on katkestatud, kui sisendfailis pole selles kohas ühtki rida. Reamurdmise lubamisel on püstjoon murtud ridade juures punkteeritud.

#### Ülevaateriba

Paremal on otse kerimisriba kõrval näha "ülevaateriba". See näitab kokkusurutult sisendfaili "A" kokkuvõttetulpa. Nii on kõik erinevused ja konfliktid korraga näha. Kui kasutada ainult kaht sisendakent, on kõik erinevused punased, sest iga erinevus on sellisel juhul ju ka konflikt. Must ristkülik tähistab parajasti aknas näha olevat tekstiosa. Väga pikkade sisendfailide korral, kus sisendi ridade arv on suurem kui ülevaatetulba kõrgus pikslites, mahutatakse ühele ülevaatereale mitu sisendirida. Konflikti näitamist eelistatakse sellisel juhul tavalisele erinevusele ning viimast muutmata olekule, nii ei jää kindlasti nägemata ükski erinevus või konflikt. Ülevaateribale klõpsates näidatakse vastavat kohta tekstis.

#### Ridade joondamine käsitsi

Vahel seab algoritm kõrvuti valed read. Võib ka juhtuda, et soovid võrrelda mingit tekstilõiku teises failis täiesti teises kohas asuva lõiguga. Sel juhul saad anda &kdiff3;-le käsitsi korralduse teatud read joondada. Märgi esimeses vaates tekst, mida soovid kasutada (tee seda hiirega, nagu kopeerimise puhul), ning seejärel vali käsk "Lisa käsitsi samasus" menüüst "Võrdlemine" (kiirklahv "Ctrl+Y"). Valitud teksti kõrvale ilmub kokkuvõttetulbas oranž riba. Korda sama tegevust teises ja vajaduse korral kolmandaski vaates. &kdiff3; leiab iga toimingu järel automaatselt erinevused ja joondab valitud read. Loomulikult on sel juhul võimalik, et teatud varasemad sobivused kuskil vahepeal enam ei klapi.

Praegu ei ole ühendamisel toetatud käsitsi erinevuste kasutamine.

#### Erinevuse osade käsitsi ühendamine ja lahutamine

Mõnel juhul võib tekstis olla &kdiff3; jaoks liiga vähe või liiga palju erinevaid osasid, et neid ühendada. Sel juhul võib olemasolevad osad liita või lahutada.

Uute lõikude lisamiseks vali kõigepealt mõnes sisendaknas read, mis kuuluvad kokku (tee seda samamoodi nagu lõikepuhvrisse kopeerimisel). Seejärel vali käsk "Jaga erinevused valiku juures" menüüst "Ühendamine". Jagatud osad lisatakse valitud teksti esimese rea ette ja viimase rea järele. Kui soovid lisada ainult ühe lõigu, vali tekst mõne muu lõigujagamise alguses.

Lõikude liitmiseks ükspuha kumbas sisendaknas vali read lõikudes, mida soovid liita (ühekorraga võib liita mitu lõiku). Seejärel vali käsk "Ühenda valitud erinevused" menüüst "Ühendamine".

### Ühendamine ja ühendamisväljundi redigeerimisaken

Ka ühendamisväljundi redigeerimisaknal (allpool võrdlemise sisendaknaid) on ülaservas inforiba, kus seisab "Väljund:", failinimi ja "[Muudetud]", kui oled midagi muutnud. Tavaliselt leidub seal automaatse ühendamise vahendite pakutav tekst, kuid tihtipeale ka konfliktid.

!!! Salvestamine on võimalik alles siis, kui kõik konfliktid on lahendatud !!! (allesjäänud konfliktide lahendamiseks kasuta nuppe "Liigu eelmisele/järgmisele lahendamata konfliktile")

Kui on ainult kaks sisendfaili, on iga erinevus ühtlasi konflikt, mis tuleb käsitsi lahendada.

Kolme sisendfaili korral käsitletakse esimest baasina, teist ja kolmandat aga potentsiaalseid muudatusi sisaldavate failidena. Kui muudetud on rida ainult sisendis B või C, aga mitte mõlemas, valitakse automaatselt muudetud allikas. Kui aga nii B kui C on (erinevalt) muutnud üht ja sama rida, märgitakse see konfliktina, mis tuleb käsitsi lahendada. Kui B ja C on ühesugused, aga erinevad A-st, valitakse C.

#### Kokkuvõttetulp

Ka ühendamisväljundi redigeerimisaknal on vasakus servas kokkuvõttetulp. See näitab sisendi tähte, millest rida on valitud, või mitte midagi, kui rida on kõigis kolmes allikas võrdne. Konflikti korral on seal küsimärk "?" ning real endal seisab "<Ühendamise konflikt>, kõik ilusasti puust ja punaseks tehtud. Kuna konfliktide lahendamine rida-realt võib võtta päris palju aega, on read rühmitatud gruppidesse, millel on ühesugused erinevuse ja konflikti omadused. Samas on ainult tühimärkide konfliktid eraldatud muudest konfliktidest, et hõlbustada selliste failide ühendamist, kus taanet on muudetud paljudel ridadel.

#### Aktiivse grupi määramine ning ühendamise ja võrdlemise vaadete sünkroniseerimine

Kui klõpsata hiire vasaku nupuga kokkuvõttetulbal mis tahes aknas, siis valitakse selle rea grupp kõigis akendes ning näidatakse antud grupi algust (see võib kaasa tuua automaatse asukohavahetuse akendes, kui grupi algus ei ole parajasti näha). Valitud grupp muutub sellega "aktiivseks grupiks", see tõstetakse esile "praeguse vahemiku tausta värviga" ning tekstist vasakule ilmub must tulbake.

#### Sisendi A, B või C valimine aktiivse konflikti ja redigeerimise jaoks

Nupureal menüüriba all on näha kolm sisendi valimise nuppu tähtedega "A", "B" ja "C". Klõpsa ühele neist vastava allika ridade lisamiseks (või eemaldamiseks, kui need on juba lisatud). Mitme sisendi ridade valimiseks klõpsa vajalikele nuppudele vajalikus järjekorras. Kui näiteks soovid, et "B" read oleks väljundis "A" ridadest eespool, klõpsa kõigepealt "B" ja siis "A".

Kui kasutad automaatse edasiliikumise võimalust ("Automaatne liikumine järgmisele lahendamata konfliktile pärast allika valimist"), tuleb see välja lülitada, enne kui valid mitme sisendi read või soovid pärast valikut ridu redigeerida. Vastasel juhul hüppab &kdiff3; pärast esimese sisendi valimist järgmise konflikti juurde.

Sageli on kasulik ühendamise väljundit otseselt redigeerida. Kokkuvõttetulp näitab iga käsitsi muudetud rea juures tähte "m". Kui erinevused paiknevad viisil, et lihtne sisendi valimine ei anna rahuldavat tulemust, võid märkida vajaliku teksti, selle kopeerida ja asetada otse ühendamise väljundisse.

Vahel võib juhtuda, et rida eemaldatakse automaatse liitmisega või redigeerides. Kui gruppi ei ole jäänud enam ühtki rida, ilmub sellele reale tekst <Lähterida puudub>. See on kõigest grupi kohatäitja juhuks, kui muudad meelt ja valid taas mõne allika. Seda teksti ei ole näha ei salvestatud failis ega kopeeritavates/asetatavates valikutes.

Tekst "<Ühendamise konflikt>" seevastu liigub küll lõikepuhvrisse, kui valida ja kopeerida/asetada sellist rida sisaldav tekst. Seepärast tasuks sellise võimalusega ettevaatlik olla.

#### Sisendi A, B või C valimine kõigile konfliktidele

Tavaline ühendamine lahendab lihtsad konfliktid automaatselt. Menüü "Ühendamine" pakub lisaks mõningaid toiminguid muude levinumate vajaduste rahuldamiseks. Kui sul tuleb enamasti konfliktide puhul valida üks ja sama baas, võid valida kõikjal "A", "B" või "C" või ainult veel lahendamata konfliktidele või ainult lahendamata tühimärkide konfliktidele. Kui soovid lahendada iga erinevuse ise käsitsi, võid lülitada sisse võimaluse "Määra erinevused konfliktideks". Kui soovid aga taas panna &kdiff3; automaatselt konflikte lahendama, vali "Lahenda automaatselt lihtsad konfliktid". Seejärel alustab &kdiff3; uuesti ühendamist. Kui selle käigus muudetakse midagi, mida oled varem muutnud, küsib &kdiff3; enne jätkamist, mida soovid teha.

Märkus: kui valid lahendamata tühimärkide konfliktide baasi ning võimalus "Numbreid ignoreeritakse" või "C/C++ kommentaare ignoreeritakse" on sisse lülitatud, koheldakse muutusi numbrites või kommentaarides samuti tühimärkidena.

#### Versioonikontrolli võtmesõnade ja ajaloo (logi) automaatne ühendamine

Paljud versioonikontrollisüsteemid toetavad failis spetsiaalsete võtmesõnade kasutamist (nt. "$Date$", "$Header$", "$Author$", "$Log$" jne.). Väljavõtte tegemise ajal muudab versioonikontrollisüsteem neid ridu. Näiteks "$Date$" asemele tuleb "$Date: 2005/03/22 18:45:01 $". Et selline rida on faili iga versiooni puhul erinev, on ühendamise ajal vajalik käsitsi sekkumine.

&kdiff3; võimaldab neid automaatselt ühendada. Lihtsate ridade puhul, mis sobivad valikuga "Automaatse ühendamise regulaaravaldis" kõigis sisendfailides, valib &kdiff3; rea B-st või, kui see on olemas, C-st. (Lisaks on vajalik, et mainitud read oleks võrdluses kõrvuti ja eelmine rida ei sisaldaks konflikti.) Automaatse ühendamise saab sooritada kohe ühendamise alates (selleks peab olema sisse lülitatud "Regulaaravaldisega automaatne ühendamine ühendamise alustamisel") või hiljem menüükäsuga "Käivita regulaaravaldisega automaatne ühendamine".

Automaatne ühendamine on toetatud ka versioonikontrolli ajaloo ehk logi puhul. Ajaloo automaatse ühendamise võib käivitada ühendamise alustamisel, kui sisse on lülitatud "Versioonikontrolli ajaloo ühendamine ühendamise alustamisel", või hiljem menüükäsuga "Lahenda automaatselt ajalookonfliktid".

Tavaliselt algab versioonikontrolli ajalugu reaga, kus seisab võtmesõna "$Log$". See peab sobima kokku valikuga "Ajaloo alguse regulaaravaldis". &kdiff3; tuvastab seejärel, millised järgnevad read kuuluvad ajalukku, anaküüsides juhtmärke enne võtmesõna "$Log$". Kui samasugused "kommentaari sissejuhatuse" märgid esinevad ka järgnevate ridade alguses, kuuluvad need ajalukku.

Iga väljavõtte ajal kirjutab versioonikontrollisüsteem unikaalse rea, mis määrab ära versiooni, kuupäeva ja kellaaja, sellele järgnevad kasutaja kommentaariga read. Need moodustavadki ühe ajalookirje. Ajaloosektsioon kasvab iga versioonikontrolli toiminguga, kusjuures viimane kirje on alati kõige ees (otse ajaloo algusrea järel).

Paralleelse arendustegevuse ajal võivad kaks või enam arendajat failiga tegelda, millisel juhul ühendamise ajalugu sisaldab mitut kirjet, mis harude ühendamisel satuvad konflikti. Et nende ühendamine võib olla üsna vaevaline, toetab &kdiff3; kaht strateegiat: mõlema/kõigi arendajate ajaloo lisamine etteotsa või ajaloo sorteerimine kasutaja määratud võtme järgi.

Esimene variant on kõige lihtsam. &kdiff3; peab lihtsalt tuvastama, millised read moodustavad ühe ajalookirje. Enamik versioonikontrollisüsteeme lisab iga ajalookirje järele tühja rea. Kui muid tühje ridu pole, piisab sellest &kdiff3;-le. Sel juhul olgu "Ajaloo alguse regulaaravaldis" lihtsalt tühi. Kui tühjast reast ainuüksi ei piisa, võid koostada regulaaravaldise, mis tuvastab ajalookirje alguse.

Pane tähele, et &kdiff3; eemaldab topeltajalookirjed. Kui sisendfailis esineb ajalookirje mitmel korral, siis väljundisse jääb alles ainult üks kirje.

Kui soovid ajalugu sortida, tuleb määrata sorteerimisvõti. Kasuta väljal "Ajaloo alguse regulaaravaldis" sulge regulaaravaldise nende osade rühmitamiseks, mida hiljem kasutada sorteerimisvõtmena. Seejärel määra "ajaloo sortimisvõtmete järjekord", milles komaga (",") eraldatud arvud viitavad grupi positsioonile regulaaravaldises.

See ei pruugi otsekohe õnnestuda, mistõttu tasub regulaaravaldist ja võtme genereerimist testida spetsiaalses dialoogis, mis avaneb klõpsuga nupule "Regulaaravaldiste test".

Näide: oletame, et ajalugu näeb välja nii:

    /**************************************************************************
    ** HISTORY:    $Log: \toms_merge_main_view\MyApplication\src\complexalgorithm.cpp $
    **
    **     \main\integration_branch_12   2 Apr 2001 10:45:41   tom
    **  Merged branch simon_branch_15.
    **
    **     \main\henry_bugfix_branch_7\1   30 Mar 2001 19:22:05   henry
    **  Improved the speed for subroutine convertToMesh().
    **  Fixed crash.
    **************************************************************************/

Ajaloo algusrida vastab regulaaravaldisele ".*\$Log.*\$.*". Sellele järgnevad ajalookirjed.

Real võtmesõnaga "$Log$" seisab alguses kaks "*", millele järgneb tühik. &kdiff3; hindab esimese mittetühimärgist stringi "kommentaari alguseks" ning eeldab, et ajalugu lõpeb esimesel real, millel kommentaari algust enam ei seisa. Näites lõpeb viimane rida stringiga, mille alguses on samuti kaks "*", kuid tühimärgi asemel järgneb veel rida märke "*". Seetõttu hinnatakse seda ajaloo lõpuks.

Kui ajaloo sortimist pole vaja, siis võib ajalookirje alguse regulaaravaldis näha välja umbes järgmine (rida on jagatud kaheks, sest see ei mahu muidu ära).

    \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+.*

Täpsemalt kõneleb regulaaravaldistest Trolltechi regulaaravaldiste dokumentatsioon. Pane tähele, et "\s" (väike "s") on suvaline tühik, "\S" (suur "S") iga mittetühik. Meie näites sisaldab ajalookirje algul versiooniteavet vastavalt regulaaravaldisele "\\main\\\S+", kuupäeva päevaga "[0-9]+", kuuga "(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)" ja aastaga "[0-9][0-9][0-9][0-9]", kellaaega "[0-9][0-9]:[0-9][0-9]:[0-9][0-9]" ning lõpuks ka arendaja kasutajanime ".*".

Pane tähele, et kommentaari alguse märgid (näites "**") eemaldab &kdiff3; juba enne otsingu alustamist, mistõttu regulaaravaldise alguses seisab nulli või enama tühimärgi vaste "\s*". Et kommentaarimärgid võivad failiti erineda (nt. C/C++ kasutab teistsuguseid kommentaarimärke kui Perli skript), kannab &kdiff3; ise alguses seisvate kommentaarimärkide eest hoolt ja sul pole vaja neid regulaaravaldises määrata.

Kui soovid ajalugu sortida, tuleb arvutada sortimisvõti. Selleks tuleb regulaaravaldise vajalikud osad sulgude abil rühmitada (need sulud võivad avaldisse jääda ka siis, kui ajaloo sortimine välja lülitatakse).

    \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+(.*)

Sulgudes on nüüd 1) versiooniteave, 2) kuupäev, 3) kuu, 4) aasta, 5) kellaaeg, 6) nimi. Aga kui me soovime sortida kuupäeva ja kellaaja järgi, tuleb luua võti, milles elemendid on teises järjekoras: esimesena aasta, siis kuu, päev, kellaaaeg, versiooniteave ja nimi. Sestap tuleb sortimisvõtme järjekorraks määrata "4,3,2,5,1,6".

Et kuunimed ei ole sortimiseks kuigi head ("Apr" oleks esimene), tuvastab &kdiff3; kuude järjekorra ja kasutab nende nime asemel hoopis järjekorranumbrit ("Apr"->"04"). Kui leitakse number, teisendatakse see neljakohaliseks, lisades sortimise huvides ette nullid. Lõpuks näeb esimese ajalookirje algusrea sortimisvõti välja järgmine:

    2001 04 0002 10:45:41 integration_branch_12   tom

Täpsemalt räägib sellest ka osa Ühendamise seadistused.

### Liikumine ja redigeerimine

Enamasti saab liikuda kerimisribade ja hiirega, kuid soovi korral on võimalik liikuda ka klahvidega. Kui klõpsata mis tahes aknasse, saab sarnaselt muude rakendustega kasutada noolenuppe, Page Up ja Page Down, Home, End, Ctrl+Home, Ctrl+End. Liikumiseks saab kasutada ka sisendafailide kerimisribast paremal pool asuvat ülevaateriba, mis võimaldab vajalikule kohale liikuda klõpsuga riba vajalikule kohale.

Üles-alla kerimiseks saab kasutada ka hiireratast.

Ühendamisväljundi redigeerimisaknas saab samuti kasutada kõiki tavalisi teksti redigeerimisel kasutatavaid klahve. Klahviga Insert saab lülitada lisamis- ja ülekirjutamisrežiimi (vaikimisi kehtib lisamisrežiim).

Klõps hiire vasaku nupuga mis tahes kokkuvõttetulbal sünkroniseerib kõik aknad, nii et neid näitavad üht ridadegruppi (seda selgitas lähemalt osa Grupi määramine ning ühendamis- ja võrdlemisvaate asukoha sünkroniseerimine).

Nupureal on üheksa liikumisnuppu, millega saab hüpata aktiivsele/esimesele/viimasele erinevusele, eelmisele/järgmisele erinevusele (Ctrl+Nool üles/Ctrl+Nool alla), eelmisele/järgmisele konfliktile (Ctrl+Page Down/Ctrl+Page Up) või eelmisele/järgmisele lahendamata konfliktile. Pane tähele, et &kdiff3; jaoks jääb "konflikt", mida ei lahendata automaatselt ühendamise alguses, "konfliktiks" ka pärast selle käsitsi lahendamist. Seepärast on ka eristatud "lahendamata konfliktid".

#### Automaatne edasiliikumine

Lisaks neile on nupp "Pärast allikavalikut liigutakse automaatselt järgmisele lahendamata konfliktile". Seda sisse lülitades hüppab &kdiff3; allika valimisel automaatsel selles leiduval lahendamata konfliktile. See on abiks, kui soovid tavaliselt valida ainult ühe allika. Kui sul läheb vaja mõlemat allikat või soovid pärast valimist tegelda redigeerimisega, on tõenäoliselt mõttekas see välja lülitada. Enne järgmisele lahendamata konfliktile liikumist näitab &kdiff3; hetkeks langetatud valiku toimet. Kui kaua see näitamine kestab, saab määrata seadistustes: "automaatse edasiliikumise viivitus" on võimalik määrata millisekundites 0 ja 2000 vahel. Vihje: kas oled tüdinud kogu aeg klõpsamast? Kasuta siis pisikest automaatse edasiliikumise viivitust ning kiirklahve Ctrl+1/2/3 A/B/C valimiseks.

### Valimine, kopeerimine ja asetamine

Sisendaknas kursorit ei näidata, seepärast tuleb valimine teha hiirega, klõpsates vasaku nupuga valiku alguses, hoides nuppu all ja liikudes valiku lõppu, pärast mida võib nupu vabastada. Sõna saab valida ka sellel topeltklõpsu tehes. Ühendamisväljundi redigeerimisaknas saab valida ka klaviatuuri abil, hoides all klahvi Shift ja liikudes noolenuppudega.

Kui valik ulatub üle nähtava ala, võib viia hiire üle akna piirde, millisel juhul &kdiff3; kerib hiirekursori suunas.

Väga suure valiku korral võib kasutada ka hiirenuppu all hoides navigeerimisklahve. Näiteks konkreetsesse kohta jõudmiseks võib tarvitada klahve Page Up ja Page down. Õigesse kohta jõudes vabasta hiirenupp.

Aktiivses aknas kõige valimiseks kasuta menüükäsku "Redigeerimine"->"Vali kõik" (Ctrl+A).

Lõikepuhvrisse kopeerimiseks tuleb vajutada nuppu "Kopeeri" (Ctrl+C või Ctrl+Insert). Lisaks sellele on olemas ka võimalus "Valiku automaatne kopeerimine". Selle sisselülitamisel kopeeritakse kõik, mida oled valinud, automaatselt ning sul puudub vajadus anda mis tahes moel kopeerimiskäsku. Kuid ole selle võimalusega ettevaatlik, sest nii võib kogemata üle kirjutada vajaliku lõikepuhvri sisu.

"Lõika" (Ctrl+X või Shift+Delete) kopeerib valiku lõikepuhvrisse ja kustutab selle failist.

"Aseta" (Ctrl+V või Shift+Insert) lisab lõikepuhvris oleva teksti kursori asukohta või asendab lõikepuhvri sisuga parajasti valitud teksti. Kui asetad lõikepuhvri sisu ükspuha millisesse sisendaknasse, näidatakse seda seal otsekohe ja alustatakse aega viitmata uuesti võrdlemist. See on kasulik siis, kui soovid kiiresti kuskilt teksti võtta ja võrrelda seda millegi muuga, ilma et peaksid eelnevalt faili looma hakkama.

### Salvestamine

Salvestamine on võimalik ainult siis, kui kõik konfliktid on lahendatud. Kui fail on juba olemas ning sisse on lülitatud valik "Failidest tehakse varukoopia", antakse olemasolevale failile laiend ".orig". Kui selline peaks juba olemas olema, see kustutatakse. Kui väljud või oled alustanud uud võrdlusanalüüsi ning andmeid ei ole veel salvestatud, pärib &kdiff3; sinu käest, kas soovid salvestada, loobuda või jätkata ilma salvestamata (&kdiff3; ei salvesta andmeid seesmiselt, nii et kui &kdiff3; väljastpoolt "tappa", lähevad andmed kaotsi).

Realõpud salvestatakse vastavalt operatsioonisüsteemi tavale. UNIXi korral lõpetab rea reavahetusmärk "\n", Win32 süsteemides kelgu tagastamise sümbol pluss reavahetusmärk "\r\n". &kdiff3; ei säilita sisendfailide realõppe, mis ühtlasi tähendab, et &kdiff3; kasutamisel binaarfailidega peaks olema erakordselt ettevaatlik.

### Stringide otsimine

Stringe saab otsida &kdiff3; kõigis tekstiakendes. Redigeerimismenüü käsk "Otsi..." (Ctrl+F) avab dialoogi, kus saab määrata, mida otsida. Samuti saab valida, millises aknas otsida. Otsimine algab alati teksti algusest. Käsk "Otsi järgmine" (F3) viib otsitava stringi järgmise esinemise juurde (kui seda muidugi on). Kui valid otsimise mitmes aknas, otsitakse esmalt ülalt alla läbi esimene aken, seejärel taas ülalt alla teine aken jne.

### Trükkimine

&kdiff3; toetab tekstifailide erinevuste trükkimist. Menüüs fail leiduv käsk "Trüki..." (Ctrl+P) avab dialoogi, kus saab valida printeri ja muuta teatud valikuid.

Mitmel moel saab kindlaks määrata, millist vahemikku trükkida. Et erinevates operatsioonisüsteemides on trükkimisdialoog erinev, siis on ka trükkimisvahemiku määramises teatud erinevusi.

Kõik:

- Trükitakse kõik.

Aktiivne:

- Trükitakse lehekülg alates aknas esimesena näha olevast reast (süsteemides, kus seda valikut pole, saab sama tulemusi, kui määrata trükkimiseks lehkülg 10000).

Valik:

- Enne trükkimiskäsku tuleb sel juhul valida mõnes sisendaknas hiirega tekst (nagu kopeerimisel), mis paneb paika trükitava valiku algus- ja lõpurea. Kui üheski sisendaknas pole midagi valitud, ei saa seda võimalust kasutada (süsteemides, kus see valik üldse puudub, saab sama tulemuse, kui määrata trükkimiseks lehekülg 9999).

Vahemik:

- Trükitakse määratud esimesest kuni määratud viimase leheküljeni.

Ülejäänud trükkimisvalikud on tavapärasemad:

- Font, fondi suurus

- Reanumbrite näitamine

- Reamurdmine

- Värvid

- jne.

Trükkida on soovitatav rõhtpaigutusega.

### Valikud

Valikud ja viimati avatud failide nimekiri salvestatakse alati, kui rakendusest väljud, ning laaditakse uuesti rakenduse taaskäivitamisel (menüükäsk Seadistused -> &kdiff3; seadistamine...)

#### Font

Valib fikseeritud laiusega fondi (mõnes süsteemis pakub dialoog ka muutuva laiusega fonti, kuid seda ei tasuks kasutada).

Kaldkiri erinevustele:

- Selle valimisel näidatakse teksti erinevusi valitud fondi kaldkirjas. Kui valitud font kaldkirja ei toeta, ei tee see midagi.

#### Värvid

Esiplaani värv:

- Tavaliselt must.

Tausta värv:

- Tavaliselt valge.

Erinevuse tausta värv:

- Tavaliselt helehall.

Värv A:

- Tavaliselt tumesinine.

Värv B:

- Tavaliselt tumeroheline.

Värv C:

- Tavaliselt tume magenta.

Konflikti värv:

- Tavaliselt punane.

Praeguse vahemiku tausta värv:

- Tavaliselt helekollane.

Praeguse vahemiku erinevuse tausta värv:

- Tavaliselt tumekollane.

Käsitsi määratud samasuse vahemiku värv:

- Tavaliselt oranž.

Uusima faili värv kataloogide võrdlemisel:

- Tavaliselt roheline.

Vanima faili värv kataloogide võrdlemisel:

- Tavaliselt punane.

Keskmise vanusega faili värv kataloogide võrdlemisel:

- Tavaliselt tumekollane.

Puuduvate failide värv kataloogide võrdlemisel:

- Tavaliselt must.

Kataloogide võrdlemise värvide muutmine rakendub alles järgmise kataloogide võrdlemise ajal.

Ainult 16 või 256 värviga süsteemides ei pruugi mõned värvid puhtal kujul saadaval olla. Sellistes süsteemides valib puhta värvi nupp "Vaikeväärtused".

#### Redaktori seadistused

TAB lisab tühikud:

- Kui see ei ole sees, lisatakse tabeldusklahvile vajutades tabeldusmärk, kui see on sees, vastav kogus tühikuid.

TABi suurus:

- Kohandatav oma maitsele. Vaikimisi 8.

Automaatne taandus:

- Vajutades klahvile Enter, kasutatakse uuel real eelmise rea taandust.

Valiku automaatne kopeerimine:

- Iga tekstivalik kopeeritakse otsekohe lõikepuhvrisse, ilma et oleks vaja anda spetsiaalset kopeerimiskäsku.

Realõpu stiil:

- Salvestamisel saab valida, millist realõpu stiili eelistada. Vaikimisi on see valitud operatsioonisüsteemi põhjal.

#### Erinevuse seadistused

Faile võrreldes püüab &kdiff3; kõigepealt seada kokku read, mis on kõigis sisendfailides ühtmoodi. Ainult sel etapil võib ta eirata tühimärke. Teisel etapil võrreldakse iga rida ning nüüd võetakse arvesse ka tühimärgid. Tühimärke ei ignoreerita ka ühendamisel.

Säilitatakse reavahetus:

- Mõned redaktorid mõnes süsteemis salvestavad iga rea lõpu kelgu tagastuse märgiga '\r' ning reavahetusmärgiga '\n', teised aga ainult reavahetusmärgiga '\n'. Üldiselt &kdiff3; ignoreerib kelgu tagastuse sümbolit, kuid sellisel juhul võivad tegelikult erineva suurusega failid paista võrdlemisel ühesugustena. Selle valiku sisselülitamisel on kelgutagatusmärgid näha, kuid neid koheldakse tühimärkidena. Ühendamise ajal tuleb see võimalus välja lülitada. Vaikimisi on väljas.

Numbreid ignoreeritakse:

- Vaikimisi väljas. Numbrilisi sümboleid ('0'-'9', '.', '-') ignoreeritakse analüüsi esimeses, üldvõrdlevas osas. Lõpptulemuses näidatakse siiski erinevusi, aga neid käsitletakse kui tühimärke.

C/C++ kommentaare ignoreeritakse:

- Vaikimisi väljas. Muudatusi kommentaarides tõlgendatakse tühimärkide muudatustena.

Tõstu ignoreeritakse:

- Vaikimisi väljas. Märkide tõstu erinevusi (nt 'A' ja 'a') tõlgendatakse nagu tühimärkide muudatusi.

Eeltöötluse käsk:

- Vaata järgmist osa.

Ridade sobivuse eeltöötluse käsk:

- Vaata järgmist osa.

Karm uurimine:

- Püüab tuvastada ka kõige pisemad erinevused. Vaikimisi sees. Ilmselt on sellest rohkem kasu keerulisemate ja suurte failide korral. Aga mõistagi on see väga suurte failide puhul ka väga aeglane.

#### Ühendamise seadistused

Automaatse edasiliikumise viivitus (ms):

- Kui automaatne edasiliikumine on sisse lülitatud, määrab see võimalus, kui kaua näidatakse valiku tulemust, enne kui hüpatakse järgmisele lahendamata konfliktile.

Tühimärkide käsitlemine 2/3 faili ühendamisel:

- Lahendab automaatselt kõik tühimärkide konfliktid määratud faili valides (vaikimisi käsitsivalik). Kasulik, kui tühimärgid pole olulise tähtsusega. Kui seda läheb ainult mõnikord vaja, kasuta parem ühendamismenüü käske "Vali A/B/C kõigi lahendamata tühimärgikonfliktide korral". Pane tähele, et kui sees on "Numbreid ignoreeritakse" või "C/C++ kommentaare ignoreeritakse", rakendub see automaatne valik ka kõigile numbrite või kommentaaride konfliktidele.

Automaatühendamise regulaaravaldis:

- Regulaaravaldis ridadele, mille puhul &kdiff3; peab automaatselt valima allika. Vt. ka Automaatne ühendamine...

Regulaaravaldisega automaatühendamine ühendamise alustamisel:

- Valimise korral käivitab &kdiff3; ühendamise alustamisel automaatse ühendamise, kasutades selleks "automaatühendamise regulaaravaldist".

Ajaloo alguse regulaaravaldis:

- REgulaaravaldis ajalookirje alguse tuvastamiseks. Tavaliselt sisaldab see rida võtmesõna "$Log$". Vaikimisi: ".*\$Log.*\$.*"

Ajalookirje alguse regulaaravaldis:

- Ühendamise ajaloo kirje koosneb mitmest reast. Siin saab koostada regulaaravaldise, mis tuvastab esimese rea (ilma alustavate kommentaarimärkideta). Sulgudega saab rühmitada võtmed, mida soovid kasutada sortimisel. Tühjaksjätmise korral eeldab &kdiff3;, et ajalookirjeid eraldavad tühjad read. Vaata ka Automaatne ühendamine...

Ajaloo ühendamise sortimine:

- Versioonikontrolli ajaloo sortimise lubamine.

Ajalookirje alguse sortimisvõtmete järjekord:

- Ajalookirje alguse tuvastamiseks kasutatavas regulaaravaldises võib tarvitada sulge, millega rühmitatakse sortimiseks pruugitavad võtmed. Võtmete järjekorra määramiseks (need kujutavad endast arve alates 1) kirjuta nad komaga eraldatult (nt. "4,5,6,1,2,3,7"). Kui see andmata jätta, ei sordita. Vaata ka Automaatne ühendamine...

Versioonikontrolli ajaloo ühendamine ühendamise alustamisel:

- Sisselülitamisel käivitab &kdiff3; ühendamise alustamisel eelnevalt määratud tingimustel automaatse ajaloo ühendamise.

Ajalookirjete maks. arv:

- &kdiff3; kärbib ajaloo, säilitades ainult määratud hulga kirjeid. Kärpimise vältimiseks määra väärtuseks -1. Vaikimisi: -1.

Regulaaravaldiste test

- See nupp avab dialoogi, kus saab sisestatud regulaaravaldist testida ja parandada. Kopeeri lihtsalt vajalikud andmed oma failidest siia. "Sobivuse tulemused" näitavad kohe, kas avaldis sobib või mitte. "Sorteerimisvõtme tulemus" näitab ajaloo ühendamise sortimisel kasutatavat võtit.

Ebaolulise ühendamise käsk:

- Siin saab määrata käsu, mis antakse siis, kui &kdiff3; avastab kolme faili ühendamisel, et fail B ei sisalda mingeid olulisi andmeid, mida poleks juba failis C. Käsk kutsutakse välja kolmest failinimest parameetriga. Andmeid, mis sobivad "automaatse ühendamise regulaaravaldisega" või ajalooga, ei peeta oluliseks.

#### Kataloogide ühendamine

Need valikud käivad kataloogide uurimise ja nende ühendamise kohta, millest täpsemalt räägib osa Kataloogide võrdlemise ja ühendamise seletused.

Siiski on üks valik, mis käib ka üksikfailide salvestamise kohta:

Failidest tehakse varukoopia:

- Kui faili salvestamisel on sellest olemas vanem versioon, antakse viimasele laiend ".orig". Kui peaks olemas olema ka samanimeline varasem fail laiendiga ".orig", siis see kustutatakse.

#### Riigi ja keele valikud

Keel:

- Kasutajaliidese keele määramine. Selle muutmine ei mõjuta töötavat rakendust. Keele muutmiseks tuleb &kdiff3; sulgeda ja uuesti käivitada. (See valik ei ole kasutatav &kdiff3; KDE versioonis, sest seal saab keele määrata KDE üldises seadistuses.)

Kõikjal kasutatakse kodeeringut:

- Järgnevaid kodeeringuvalikuid saab määrata eraldi, välja arvatud juhul, kui äsjatoodud valik on sisse lülitatud, sest siis võtavad kõik valikud esimese valiku väärtuse.

Kohalik kodeering:

- Kodeeringu valimise väljade kohal seisab märge, mis annab teada kohaliku kodeeringu (see ei ole muudetav, vaid lihtsalt teadmiseks, kui sa ei peaks oma kodeeringut teadma).

A/B/C kodeering:

- Sisendfailide kodeeringu kohandamine. See mõjutab inglise tähestikku mittekuuluvate sümbolite esitamist. Kohandada saab iga kodeeringut eraldi, nii et sul on isegi võimalus võrrelda ja ühendada faile, mis on salvestatud erinevas kodeeringus.

Kodeering ühendamisväljundil ja salvestamisel:

- Kui muudad faili, saad siis määrata, millises kodeeringus salvestatakse see kettale.

Eelprotsessori failide kodeering:

- Kui oled määranud eelprotsessorid, võib juhtuda, et nad ei suuda sinu kodeeringut töödelda (kui näiteks sinu failid on 16-bitises Unicode''is, eelprotsessor suudab aga töödelda vaid 8-bitist ASCII-d). Siin saad määrata eelprotsessori väljundi kodeeringu.

Paremalt vasakule keeled:

- Mõningaid keeli kirjutatakse paremalt vasakule. Selle valiku sisselülitamisel näitab &kdiff3; võrdluse sisendakendes ja ühendamise väljundaknas teksti paremalt vasakule. Pane tähele, et kui käivitad &kdiff3; käsurealt võtmega "--reverse", kasutab kogu rakendus paremalt vasakule paigutust (seda võimaldab Qt). Käesolev käsiraamat on kirjutatud eeldusel, et "Paremalt vasakule keeled" ega võti "reverse" ei ole kasutusel. Sestap tuleb nende kasutamisel mõningaid "vasakul" või "paremal" antud kirjeldusi lugeda lihtsalt selle teadmise valguses vastupidi.

#### Muud

(neid valikuid ja toiminguid saab kasutada menüü või nupuriba vahendusel)

Näita reanumbreid:

- Võimalus valida, kas sisendfailidel näidatakse ridade numbreid.

Näita erinevusi tühiku- ja tabeldusmärkides:

- Vahel võivad nähtavad tühikud ja tabeldusmärgid tõsiselt häirida, millisel juhul on võimalik nende näitamine välja lülitada.

Näita tühimärke:

- Selle väljalülitamisel ei tõsteta esile tühimärkide erinevusi tekstis ega ülevaatetulbal. Pane tähele, et et kui sees on "Numbreid ignoreeritakse" või "C/C++ kommentaare ignoreeritakse", rakendub see ka kõigile numbrite või kommentaaride konfliktidele.

Ülevaate valikud:

- Neid valikuid saab kasutada ainult kolme faili võrdlemisel. Tavarežiimis näidatakse erinevusi ühel värvilisel ülevaatetulbal. Kuid vahel võivad huvi pakkuda kolmest faili ainult kahe erinevused. Valides vastavalt ülevaate "A vs. B", "A vs. C" või "B vs. C", näidatakse tavalise ülevaatetulba kõrval teist vajaliku infoga.

Reamurdmine võrdlusakendes:

- Read murtakse, kui nende pikkus ületab akna laiust.

Näita akent A/B/C:

- Vahel võib tekkida tahtmine ekraanil ruumi juurde tekitada, et näha paremini näiteks pikki ridu. Sellisel juhul saab peita aknad, mis ei ole hetkel olulised (menüü Aken).

Lülita poolitamissuund:

- Lülitab võrdlusakende asetsemist üksteise kõrval (A vasakul pool B ja B vasakul pool C) ning üksteise kohal (A B kohal ja B C kohal). Ka see võib olla abiks pikkade ridade korral (menüü Aken).

Kiirühendamine:

- Mõnikord võib leida erinevuste vaatamisel, et käes on aeg tegelda ühendamisega. "Ühenda praegune fail" menüüs Kataloog toimib ka siis, kui sa võrdled ainult kaht faili. Ühekordne klõps käivitab ühendamise ning kasutab vaikimisi väljundifaili nimena viimase sisendfaili nime (kui seda on kasutatud ühendamise taaskäivitamiseks, väljundfaili nimi säilitatakse).

#### Kiirklahvide seadistamine

Praegu toetab ainult KDE versioon kasutaja võimalust määrata kiirklahve (menüükäsk Seadistused -> Kiirklahvide seadistamine...)

### Eeltöötluse käsud:

&kdiff3; toetab kaht eeltöötluse võimalust.

Eeltöötluse käsk:

- Mis tahes faili lugemisel filtreeritakse see läbi siin määratud käsu. Algse faili asemel näeb siis antud käsu väljundit. Sul on võimalik panna kirja oma eeltöötluse käsk, mis rahuldaks just sinu vajadused. Kasuta seda võimalust näiteks faili ülearuste osade kõrvaldamiseks või taande automaatseks korrigeerimiseks vms.

Ridade sobivuse eeltöötluse käsk:

- Mis tahes faili lugemisel filtreeritakse see läbi siin määratud käsu. Kui määratud on ka eeltöötluse käsk (vaata eespool), on eeltöötluse käsu väljund ridade sobivuse eeltöötluse käsu sisendiks. Viimase väljundit kasutatakse ainult analüüsi esimeses, reasobivuse faasis. Sul on võimalik panna kirja oma eeltöötluse käsk, mis rahuldaks just sinu vajadused. Igal sisendi real peab olema talle vastav väljundi rida.

Selle mõte on pakkuda kasutajale suuremat paindlikkust võrdlemistulemuse seadistamisel. Kuid see nõuab välist programmi ja mõistagi ei taha enamik sellist ise kirjutama hakata. Õnneks suudab enamasti selliste asjadega toime tulla `sed` või `perl`.

Näide: lihtne testnäide: Võtame faili a.txt (6 rida):

          aa
          ba
          ca
          da
          ea
          fa

Ja faili b.txt (3 rida):

          cg
          dg
          eg

Ilma eeltöötluseta seatakse vastavusse järgmised read:

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

Tõenäoliselt ei ole see sugugi see, mida sa soovisid, sest oluliseks infokandjaks on just esimesed tähed. Et sobivusalgoritn jätaks arvesse võtmata teise tähe, kasutame reasobivuse eeltöötluse käsku, mis asendab 'g' 'a'-ga:

       sed 's/g/a/'

Selle käsu korral on võrdlemise tulemus järgmine:

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

Seesmisel näeb sobivusalgoritm faile juba pärast reasobivuse eeltöötluse rakendamist, kuid ekraanil jääb fail muutmata. (Tavaline eeltöötlus muudaks andmeid ka ekraanil.)

#### `sed`'i põhitõed

Selles osas tutvustame ainult programmi `sed` üksikuid põhimõttelisi omadusi. Rohkem infot leiab käsuga info:/sed või aadressilt http://www.gnu.org/software/sed/manual/html_mono/sed.html. Windowsi eelkompileeritud versioon asub aadressil http://unxutils.sourceforge.net. Pane tähele, et järgmistes näidetes eeldame, et käsk `sed` asub mõnes keskkonnamuutujaga PATH määratud kataloogis. Kui see nii ei ole, tuleb sul määrata käsu täielik asukoht.

Pane tähele ka seda, et järgnevates näidetes on kasutatud ühekordset jutumärki ('), mis Windowsis ei toimi - seal tuleb kasutada topeltjutumärke (").

Antud kontekstis kasutatakse ainult `sed`'i 'asenduskäsku:

       sed 's/REGULAARAVALDIS/ASENDUS/LIPUD'

Enne uue käsu kasutamist &kdiff3;-ga võiks seda esmalt testida konsoolil. Siin tuleb kasuks käsk `echo`. Näide:

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

Toodud näites on tegemist äärmiselt lihtsa sed-käsuga, kus asendatakse esimene "a" "o"-ga. Kui soovid asendada kõik esinemiskorrad, tuleb kasutada lippu "g":

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

Sümbol "|" on torukäsk, mis edastab eelmise käsu väljundi järgmise käsu sisendile. Kui soovid testida pikema failiga, võid kasutada käsku `cat`, kui tegemist on UNIX-i süsteemiga, või `type`, kui tegu on Windowsiga. `sed` sooritab asenduse igal real.

    cat failinimi | sed võtmed

#### Näited `sed`'i kasutamise kohta &kdiff3;-ga

##### Muud tüüpi kommentaaride ignoreerimine

Praegu mõistab &kdiff3; ainult C/C++ kommentaare. Reasobivuse eeltöötluse käsuga saab aga ignoreerida ka muud tüüpi kommentaare, teisendades need C/C++ kommentaarideks. Näide: kui soovid ignoreerida kommentaare, mille alguses on "#", tuleks need teisendada nii, et alguses oleks "//". Pane tähele, et seejuureks peaks olema võimalus "C/C++ kommentaare ignoreeritakse" sisse lülitatud, muidu pole asjal mõtet. Vastav reasobivuse eeltöötluse käsk näeb välja selline:

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

Kuna `sed` omistab sümbolile "/" eritähenduse, on oluline asetada asendusstringis iga "/" ette sümbol "\". Mõnikord on "\" vajalik teatud ertähendusega sümbolite lisamiseks või eemaldamiseks. Nüüd on olulised üksikjutumärgid (') enne ja pärast asenduskäsku, sest vastasel juhul püüab shell mõningaid erisümboleid, näiteks '#', '$' või '\' tõlgendada juba enne nende edastamist käsule `sed`. Pane tähele, et Windowsis tuleb anda topeltjutumärgid ("). Windows asendab ka muid sümboleid, näiteks '%', nii et siin võib olla vajalik veidi eksperimenteerida.

##### Tõstutundetu võrdlus

Järgmise reasobivuse eeltöötluse käsuga saab kogu sisendi muuta suurtäheliseks:

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

Siin on ".*" regulaaravaldis, mis sobib iga stringiga, antud kontekstis siis iga real asuva sümboliga. "\1" asendusstringis tähistab sobivat teksti esimeses "\(" and "\)" paaris. "\U" teisendab sisestatud teksti suurtäheliseks.

##### Versioonikontrolli võtmesõnade ignoreerimine

CVS ja muud versioonikontrollisüsteemid kasutavad mitmeid võtmesõnu automaatselt genereeritavate stringide lisamiseks (info:/cvs/Keyword substitution). Kõik need järgivad mustrit "$VÕTMESÕNA genereeritud tekst$". Nüüd läheb meil vaja reasobivuse eeltöötluse käsku, mis eemaldaks ainult genereeritud teksti:

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

Võimalikke võtmesõnu eraldab "\|". Seda loendit võid mõistagi vastavalt oma vajadustele muuta. Enne "$" on kindlasti vajalik "\", sest muidu on "$" sobivuseks rea lõpp.

Kui katsetad `sed`'iga, hakkad arvatavasti veidi aduma regulaaravaldiste mõtet ja võib-olla isegi neid armastama. Iseenesest on regulaaravaldised väga kasulikud, sest päris paljud programmid toetavad sarnast võimalust.

##### Numbrite ignoreerimine

Numbrite ignoreerimine on tegelikult juba sisseehitatud võimalus. Kuid näitame siinkohal, kuidas see näeks välja reasobivuse eeltöötluse käsuna:

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

Sobivad kõik sümbolid '[' ja ']' vahel ning neid ei asendatagi, vaid lihtsalt kõrvaldatakse.

##### Teatud veergude ignoreerimine

Tekst võib olla rangelt vormindatud ning sisaldada näiteks veergu, mida soovid alati ignoreerida, samas aga muid veerge analüüsiks kasutada. Järgnevas näites ignoreeritakse viit esimest veergu (sümbolit), järgmised kümme säilitatakse, siis ignoreeritakse taas viit veergu ning ülejäänud rida säilitatakse.

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

Iga punkt '.' vastab ühele sümbolile. "\1" ja "\2" asendusstringis tähistavad sobivat teksti esimeses ja teises "\(" ja "\)" paaris, märkides säilitatavat teksti.

##### Mitme asenduse kombineerimine

Vahel võib tekkida tahtmine teha mitu asendust korraga. Selleks tuleb nende eraldamiseks kasutada semikoolonit ';'. Näide:

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

##### `perl`i kasutamine `sed`'i asemel

`sed`'i asemel võib kasutada ka midagi muud, näiteks `perl`.

       perl -p -e 's/REGULAARAVALDIS/ASENDUS/LIPUD'

Kuid `perl` on mõnevõrra erinev. Pane tähele, et kui `sed`-ile oli vaja "\(" ja "\)", siis `perl`-ile on vaja lihtsalt "(" ja ")" ilma eelneva '\'. Näide:

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

#### Eeltöötluse sooritamise järjekord

Andmed suunatakse läbi sisemiste ja väliste eeltöötluse käskude järgmises järjekorras

- Tavaline eeltöötlus,

- Reasobivuse eeltöötlus,

- Tõstu ignoreerimine (teisendamine suurtäheliseks),

- C/C++ kommentaaride tuvastamine,

- Numbrite ignoreerimine,

- Tühimärkide ignoreerimine

Tavalise eeltöötluse tulemusandmed säilitatakse näitamiseks ja ühendamiseks. Muud operatsioonid muudavad ainult andmeid, mida näeb reasobivuse võrdlusalgoritm.

Neil harvadel juhtudel, kui kasutad tavalist eeltöötluse käsku, arvesta, et reasobivuse eeltöötluse käsk peab tavalise eeltöötluse käsu väljundit oma sisendiks.

#### Hoiatus

Eeltöötluse käsud on sageli vägagi kasulikud, aga nagu ikka võimalustega, mis muudavad sinu teksti või peidavad automaatselt teatud erinevused, võib sel moel kogemata mõningad erinevused kahe silma vahele jätta või eriti halval juhul isegi olulised andmed hävitada.

Seetõttu teatab &kdiff3; ühendamisel sellest, et kasutatakse tavalist eeltöötluse käsku, ning pärib, kas seda lubada või mitte. Kuid sind ei hoiatata, kas reasobivuse eeltöötluse on aktiivne või mitte. Ühendamine on valmis alles siis, kui kõik konfliktid on lahendatud. Kui lülitad välja võimaluse "Tühimärkide näitamine", siis on nähtamatud ka erinevused, mis eemaldati reasobivuse eeltöötluse käsuga. Kui ühendamisel ei saa kasutada nuppu 'Salvesta' (sest failis on veel konflikte), lülita "tühimärkide näitamine" sisse. Kui sa ei soovi neid enamasti vähese tähtsusega erinevusi käsitsi ühendada, vali ühendamismenüüst käsk "Vali [A|B|C] kõigi lahendamata tühimärgikonfliktide korral".

## Kataloogide võrdlemine ja ühendamine &kdiff3;-s

### Kataloogide võrdlemise ja ühendamise sissejuhatus

Programmeerijad peavad sageli oma eesmärgi saavutamiseks muutma kataloogis paljusid faile. Selle ülesande kergendamiseks võimaldab &kdiff3; võrrelda ja ühendada ka terveid katalooge koos nende alamkataloogidega!

Kuigi kataloogide võrdlemine ja ühendamine tundub olevat üsna lihtne ja selge, tuleks siin siiski arvestada mitme asjaga. Kõige olulisem on kahtlemata see, et sellisel juhul puudutab iga operatsioon paljusid faile korraga. Kui sa ei ole esialgsetest andmetest varukoopiat teinud, võib algoleku taastamine olla väga raske või isegi võimatu. Seepärast kontrolli enne ühendamise alustamist alati, et andmed on turvaliselt varundatud ja et sul on alati võimalus tagasi minna. Kas kasutada arhiveerimist või mõnda versioonikontrollisüsteemi, on sinu enda otsustada, kuid pea silmas, et ka ülikogenud programmeerijad vajavad aeg-ajalt vanu alliktekste. Ning ühtlasi arvesta sedagi, et kuigi mina (see tähendab, &kdiff3; autor) olen püüdnud anda endast parima, ei saa ma täie kindlusega öelda, et rakendus on ideaalne ja täiesti veatu. Nagu ütleb GNU Üldine Avalik Litsents, ei ole sellel rakendusel MITTE MINGIT garantiid. Seepärast pea alati meeles, et

> Eksimine on inimlik, aga tõelise segaduse korraldamiseks läheb vaja arvutit.

Vaatame siis, mida meie rakendus suudab teha. &kdiff3;...

- ... loeb ja võrdleb kaht või kolme kataloogi koos alamkataloogidega

- ... peab spetsiaalselt silmas nimeviitu

- ... võimaldab faile vaadelda hiire topeltklõpsuga

- ... iga elemendi korral pakub välja ühendamisoperatsiooni, mida sul on voli muuta enne tegeliku kataloogide ühendamise alustamist

- ... võimaldab ühendamist simuleerida, näidates ära toimingud, mis ette võetakse, ilma neid tegelikult veel tegemata

- ... võimaldab mõistagi ka tegelikku ühendamist ning pakub sulle sekkumise võimalust kõikjal, kus selleks vajadus tekib

- ... võimaldab käivitada valitud toimingu kõigi elementidega (klahv F7) või ainult valitud elemendiga (klahv F6)

- ... lubab jätkata pärast sekkumist ühendamist klahvile F7 vajutades

- ... lisavõimalusena loob varukoopiad laiendiga ".orig"

- ...

### Kataloogide võrdlemise või ühendamise alustamine

See on väga sarnane failide ühendamisele ja võrdlemisele. Sul tuleb lihtsalt valida kataloogid käsureal või avamisdialoogis.

#### Kahe kataloogi võrdlemine/ühendamine:

    kdiff3 kataloog1 kataloog2
       kdiff3 kataloog1 kataloog2 -o sihtkataloog

Kui sihtkataloogi ei määrata, kasutab &kdiff3; sellena kataloogi `kataloog2`.

#### Kolme kataloogi võrdlemine/ühendamine:

    kdiff3 kataloog1 kataloog2 kataloog3
       kdiff3 kataloog1 kataloog2 kataloog3 -o sihtkataloog

Kolme kataloogi ühendamisel võetakse `kataloog1` ühendamise baasiks. Kui sihtkataloogi ei ole määratud, on selleks &kdiff3; silmis `kataloog3`.

Pane tähele, et automaatselt algab ainult võrdlemine, mitte aga ühendamine. Viimase jaoks tuleb kasutada vastavat menüükäsku või klahvi F7 (sellest räägime pikemalt veidi hiljem).

### Kataloogide ühendamise nähtav info

Kataloogide lugemisel ilmub teatekast, mis näitab edenemise käiku. Kui katkestad kataloogi läbiuurimise, näidatakse ainult neid faile, mida selle hetkeni jõuti võrrelda.

Kui kataloogide skaneerimine on lõpule jõudnud, näitab &kdiff3; nimekirjakasti, kus vasakul on tulemused...

... ja paremal üksikasjad parajasti valitud elemendi kohta:

#### Nimeveerg

Kõiki skaneerimisel leitud faile ja katalooge näidatakse puus. Vajaliku elemendi saab valida sellel hiirega klõpsates.

Vaikimisi on kataloogid suletud. Neid saab avada või sulgeda klõpsuga nende ees seisvale "+"/"-" või topeltklõpsuga kirjel või klahvidega Nool vasakule/paremale. Menüüs "Kataloog" on käsud "Ava kõik alamkataloogid" ja "Sule kõik alamkataloogid", mis lubavad korraga avada/sulgeda kõik alamkataloogid.

Failil topeltklõpsu tehes alustatakse võrdlemist ning ilmub failide võrdlemise aken.

Pilt nimeveerus kajastab faili tüüpi esimeses kataloogis ("A"). See võib olla üks järgmistest:

- Tavaline fail

- Tavaline kataloog (kaustakujuline pilt)

- Viit failile (failipilt viidanoolega)

- Viit kataloogile (kaustakujuline pilt viidanoolega)

Kui failitüüp on erinevates kataloogides erinev, on see näha veergudes A/B/C ning aknas, mis näitab valitud elemendi üksikasju. Pane tähele, et sellisel juhul ei ole võimalik automaatselt käivitada ühendamist. Kui seda siiski tehakse, antakse kasutajale teada, miks see ei ole võimalik.

#### Veerud A/B/C ja värviskeem

Nagu ülal näha, kasutatakse veergudes A/B/C punast, rohelist, kollast ja musta värvi.

- Must: selles kataloogis sellist elementi ei ole.

- Roheline: uusim element.

- Kollane: vanem kui roheline, uuem kui punane.

- Punane: vanime element.

Võrdlemisel ühesuguseks osutunud elementide värv on siiski samuti ühesugune ka siis, kui nad on erineva vanusega.

Katalooge peetakse võrdseks, kui kõik nendes olevad elemendid on samasugused. Siis võib neil olla ka ühesugune värv. Ka kataloogide korral ei mõjuta värvi vanus.

Selle värviskeemi mõtte andis mulle dirdiff. Need värvid meenutavad mõneti puulehte, mis värskena on roheline, muutub hiljem kollaseks ja lõpuks punaseks.

#### Operatsiooniveerg

Pärast kataloogide võrdlemist hindab &kdiff3; ühendamise võimalusi. Seda näitab veerg "Operatsioon". Operatsiooni on võimalik muuta, kui klõpsata sellel operatsioonil, mida soovid muuta. Ilmub väike hüpikmenüü, mis lubab valida antud elemendile vajaliku operatsiooni. (Kõige vajalikumad operatsioonid saab valida ka klaviatuurilt, näiteks Ctrl+1/2/3/4/Del valib vastavalt võimalusele A/B/C/Ühenda/Kustuta.) Valitud operatsioon tehakse teoks ühendamise käigus. Valikud sõltuvad elemendist ning ühendamisrežiimist. Viimaseks võib olla üks järgmistest:

- Kolme kataloogi ühendamine ("A" on sellisel juhul teistele baasiks).

- Kahe kataloogi ühendamine.

- Kahe kataloogi sünkroniseerimine (selle saab aktiveerida valikuga "Kataloogide sünkroniseerimine").

Kolme kataloogi ühendamisel on operatsioonide valikuks juhul, kui...

- ... kõik kolm kataloogi on võrdsed: kopeeri C-st

- ... A ja C on võrdsed, aga B mitte: kopeeri B-st (või kui B-d ei ole, siis kustuta sihtmärk, kui see on olemas)

- ... A ja B on võrdsed, aga C mitte: kopeeri C-st (või kui C-d ei ole, siis kustuta sihtmärk, kui see on olemas)

- ... B ja C on võrdsed, aga A mitte: kopeeri C-st (või kui C-d ei ole, siis kustuta sihtmärk, kui see on olemas)

- ... ainult A on olemas: kustuta sihtmärk (kui on olemas)

- ... ainult B on olemas: kopeeri B-st

- ... ainult C on olemas: kopeeri C-st

- ... A, B ja C ei ole võrdsed: ühenda

- ... A, B ja C ei ole sama tüüpi (nt. A on kataloog, B fail): "Viga: failitüüpide konflikt". Kui elemendid on sellised, ei saa kataloogide ühendamist alustada.

Kahe kataloogi ühendamisel on operatsioonide valikuks juhul, kui...

- ... mõlemad kataloogid on võrdsed: kopeeri B-st

- ... A on olemas, aga mitte B: kopeeri A-st

- ... B on olemas, aga mitte A: kopeeri B-st

- ... nii A kui B on olemas, aga mitte võrdsed: ühenda

- ... A ja B ei ole sama tüüpi (nt. A on kataloog, B fail): "Viga: failitüüpide konflikt". Kui elemendid on sellised, ei saa kataloogide ühendamist alustada.

Sünkroniseerimisrežiimi saab kasutada ainult siis, kui tegemist on kahe kataloogiga, märgitud ei ole konkreetset sihtmärki ning sisse on lülitatud valik "Kataloogide sünkroniseerimine". &kdiff3; valib sel juhul vaikeoperatsiooni, et muuta mõlemad kataloogid võrdseks. Juhul kui...

- ... mõlemad kataloogid on võrdsed: midagi ei tehta.

- ... A on olemas, aga mitte B: kopeeri A -> B

- ... B on olemas, aga mitte A: kopeeri B -> A

- ... A ja B on mõlemad olemas, aga mitte võrdsed: ühenda ja salvesta tulemus mõlemas kataloogis (kasutaja näeb B salvestamist, kuid &kdiff3; kopeerib ka B-st A-sse).

- ... A ja B ei ole sama tüüpi (nt. A on kataloog, B fail): "Viga: failitüüpide konflikt". Kui elemendid on sellised, ei saa kataloogide ühendamist alustada.

Kui kahe kataloogi ühendamisel on sisse lülitatud valik "Ühendamise asemel kopeeritakse uuem", uurib &kdiff3; kuupäevi ning pakub välja uuema faili valimise. Kui failid ei ole võrdsed, ent on sama kuupäevaga, näitab operatsiooniveerg teadet "Viga: kuupäevad on samad, aga mitte failid." Kui kataloogis on selliseid elemente, ei ole võimalik ühendamist alustada.

#### Staatuseveerg

Ühendamisel võetakse ette üks fail teise järel. Staatuseveerg näitab kirjet "Tehtud" elementide puhul, mille ühendamist saatis edu, ning midagi muud, kui ühendamise käigus tuli ette midagi ootamatut. Kui ühendamine on lõpule jõudnud, võiksid üle kontrollida ka staatuseveeru, et näha, kas kõik seal ikka rahuldab sind.

#### Statistikaveerg

Kui seadistustes on sisse lülitatud failide võrdlemise režiim "Täielik analüüs", näitab &kdiff3; lisatulpasid, kus on kirjas lahendamata, lahendatud, tühimärkide ja mitte-tühimärkide konfliktide arv. (Lahendatud konflitkide arvuga tulpa näidatakse ainult kolme kataloogi võrdlemisel või ühendamisel.)

#### Nimekirja failide valimine

Seda, millised failid nimekirjas asuvad, saab mitmeti mõjutada. Mõningad valikud leiab seadistustedialoogist. Menüü 'Kataloog' sisaldab järgmisi kirjeid:

- "Näita identseid faile": failid, mis on võrdsed kõigis sisendkataloogides.

- "Näita erinevaid faile": failid, mis on kahes või enamas kataloogis, aga pole võrdsed.

- "Näita ainult A faile": failid, mis on ainult A-s, aga mitte B-s ega C-s.

- "Näita ainult B faile": failid, mis on ainult B-s, aga mitte A-s ega C-s.

- "Näita ainult C faile": failid, mis on ainult C-s, aga mitte A-s ega B-s.

Aktiveeri ainult need näitamiskäsud, milliseid elemente soovid näha. Kui tahad näiteks, et nimekirjas oleks kõik elemendid, mis on kas A-s või B-s, aga mitte mõlemas korraga, vali "Näita ainult A faile" ja "Näita ainult B faile" ning lülita välja kõik ülejäänud ("Näita identseid faile", "Näita erinevaid faile", "Näita ainult C faile"). Nimekiri kajastab otsekohe muudatusi.

Need käsud rakenduvad ka kataloogidele, kuid ühe erandiga: "Näita erinevaid faile " ei peida ühtegi faile sisaldavat kataloogi. See käib ainult nende sees paiknevate failide kohta.

Pane tähele, et ainult käsk "Näita identseid faile" jätab oma oleku meelde, teised on &kdiff3; käivitumisel sisse lülitatud.

### Kataloogide ühendamine

Ühendada on võimalik parajasti valitud element (fail või kataloog) või kõik elemendid. Kui oled langetanud kõik operatsioonivalikud (ka alamkataloogides), võid alustada tegelikku ühendamist.

Pane tähele, et kui sa ei määranud sihtkataloogi, peetakse kolme kataloogi ühendamisel selleks "C", kahe kataloogi ühendamisel "B" ning sünkroniseerimisel "A" ja/või "B".

Kui oled sihtkataloogi määranud, kontrolli, et kõik elemendid, mis peaksid olema väljundis, oleksid olemas ka puus. Kasutada saab mõningaid valikuid, mis jätavad teatud elemendid kataloogide võrdlemisel ja ühendamisel arvesse võtmata. Vaata need valikud üle, et vältida ebameeldivaid üllatusi:

- "Rekursiivsed kataloogid": kui see on väljas, ei kaasata elemente alamkataloogides.

- "Failimuster"/"Anti-failimuster": kaasatakse/jäetakse välja mustriga sobivad elemendid

- "Peidetud failid jäetakse välja"

- Näitamisvalikud (Näita identseid/erinevaid faile, ainult A/B/C faile)

Kui muudad seadistusi, et nimekirjas oleks rohkem faile, pead need uuesti läbi uurima menüükäsuga "Kataloog"->"Uuri uuesti" (põhjus seisab selles, et võrdlemiskiiruse tõstmise nimel jätab &kdiff3; vahele nende kriteeriumidega nähtamatuks muudetud failide võrdlemise). Kui muudad faili- ja kataloogimustrit failide väljajätmiseks, uuendatakse failinimekirja otsekohe pärast valikute dialoogi sulgemist.

Pane tähele, et kui kirjutad täiesti uude kataloogi, on tavaliselt mõttekas kopeerida ka identsed failid. Selleks tuleb sisse lülitada valik "Näita identseid faile". Kui sihtkataloogiks on mõni sisendkataloogidest, siis ei ole seda vaja, sest fail on ju juba seal olemas.

Kui kõik on korras, siis ülejäänud on juba lihtne.

Kõigi elementide ühendamine: vali menüüst "Kataloog" käsk "Alusta/jätka kataloogi ühendamist" või kasuta kiirklahvi F7. Ainult aktiivse elemendi ühendamine: vali "Käivita operatsioon käesoleva elemendiga" või vajuta F6.

Kui failitüüpide konflikti tõttu esineb veel mõningaid sobimatute operatsioonidega elemente, ilmub teatekast, mis osutab sellistele elementidele, nii et sa saad valida neile vajalikud operatsioonid.

Kui ühendad kõik elemendid, ilmub dialoog, kus valikuvõimalusteks on "Tee ära", "Simuleeri" ja "Loobu".

- Vali "Simuleeri", kui soovid näha, mida ette võetakse, ilma et seda tegelikult ette võetaks. Näidatakse põhjalikku ülevaadet, milliseid aktsioone sinu tegevus endaga kaasa tooks.

- Ühendamise tegelikuks alustamiseks vali "Tee ära".

Seejärel asub &kdiff3; kõigi elementidega läbi viima neile määratud operatsioone. Kui vaja läheb käsitsi sekkumist (konkreetse faili ühendamisel), ilmub ühendamisaken (vaata suurt pilti).

Kui oled faili kallal kõik vajaliku ära teinud, vali uuesti menüükäsk "Alusta/jätka kataloogi ühendamist" või vajuta klahvi F7. Kui sa ei ole veel salvestanud, ilmub dialoog, mis teeb sulle vastava ettepaneku. Seejärel võtab &kdiff3; ette järgmise elemendi.

Kui &kdiff3; satub silmitsi veaga, annab ta sellest sulle teada ning näitab ka põhjalikku infot vea kohta, mis võib aidata kaasa arusaamisele, mis viga põhjustas. Kui valid ühendamise jätkamise (klahv F7), võimaldab &kdiff3; sul antud elemendi ühendamist uuesti proovida või see vahele jätta. See tähendab, et sa saad enne jätkamist valida mõne muu operatsiooni või jätta hetkel asi nii nagu on, et leida lahendus hiljem.

Kui ühendamine on lõpule jõudnud, annab &kdiff3; sellest teatekastiga sulle märku.

Kui mõned elemendi on ühendatud individuaalselt, jätab &kdiff3; selle (antud ühendamisseansi ajal) meelde ega hakka neid enam ühendama, kui valid hiljem kõigi elementide ühendamise. Isegi juhul, kui ühendamine jäeti tegelikult vahele või midagi ei salvestatud, peetakse neid elemente ühendatuks, nii et nendega saab hakata uuesti tegelema alles siis, kui oled vahetanud ühendamisoperatsiooni.

### Kataloogide võrdlemise ja ühendamise valikud

&kdiff3; seadistustes (menüükäsk "Seadistused"->"&kdiff3; seadistamine") on sektsioon "Kataloogide ühendamine" järgmiste valikutega:

Rekursiivsed kataloogid:

- Võimalus valida, kas kataloogid otsitakse läbi rekursiivselt, see tähendab, koos alamkataloogidega.

Failimustrid:

- Puus näidatakse ainult faile, mis vastavad siin määratud mustrile. Rohkem kui ühe mustri saab valida, kui kasutada eraldajana semikoolonit ";". Kasutada tohib metamärke '*' ja '?' (nt. "*.cpp;*.h"). Vaikimisi on muster "*". Kataloogid mustrit ei vaja.

Anti-failimustrid:

- Selle mustriga sobivad failid ja kataloogid jäetakse puust välja. Rohkem kui ühe mustri saab valida, kui kasutada eraldajana semikoolonit ";". Kasutada tohib metamärke '*' ja '?'. Vaikimisi on muster "*.orig;*.o;*.obj".

Kataloogide anti-failimustrid:

- Selle mustriga sobivad failid ja kataloogid jäetakse puust välja. Rohkem kui ühe mustri saab valida, kui kasutada eraldajana semikoolonit ";". Kasutada tohib metamärke '*' ja '?'. Vaikimisi on muster "CVS;deps;.svn".

.cvsignore kasutamine:

- Ignoreeritakse faile ja katalooge, mida ignoreerib ka CVS. CVS eirab paljusid automaatselt genereeritud faile. Selle suureks eeliseks on see, et see võib olla kataloogipõhine kohaliku ".cvsignore" faili vahendusel (vaata info:/cvs/cvsignore).

Peidetud failide ja kataloogide otsimine:

- Mõnes failisüsteemis on failidel atribuut "peidetud", teistes süsteemides peidab failid nende nime ees seisev punkt ("."). See valik lubab sul määrata, kas sellised failid kaasatakse puusse või mitte. Vaikimisi sees.

Failiviitade järgimine:

- Kui on väljas, võrreldakse nimeviitu, kui sees, siis faile, millele viidatakse. Vaikimisi väljas.

Kataloogiviitade järgimine:

- Kui on väljas, võrreldakse nimeviitu, kui sees, peetakse viitu kataloogideks ning neid skaneeritakse rekursiivselt. (Pane tähele, et programm ei kontrolli, kas viit on "rekursiivne", nii et kui viita kataloogile sisaldav kataloog tekitab lõputu silmuse, siis mõne aja pärast, kui pinu on ületäidetud või mälu otsa saab, elab programm üle krahhi.) Vaikimisi väljas.

Tõstutundlik failinimede võrdlemine:

- Vaikimisi väär Windowsi ja tõene teiste operatsioonosüsteemide korral.

Failide võrdlemise režiim:

- Binaarne võrdlemine:

- See on vaikimisi failide võrdlemise režiim.

Täielik analüüs:

- Sooritab iga faili täieliku analüüsi ja näitab statistikatulpi (lahendatud, lahendamata, tühimärkide ja mitte-tühimärkide konfliktide arv). Täielik analüüs on aeglasem kui tavaline binaarne analüüs ning palju aeglasem, kui tegemist on failidega, mis ei sisalda teksti. (Määra sobivad anti-failimustrid.)

Muutmiskuupäeva usaldamine:

- Suurte kataloogide võrdlemisel üle aeglase võrgu on usutavasti kiirem võimalus võrrelda ainult muutmiskuupäevi ja failide suurust. Kuid kui see ka suurendab kiirust, võib see ometi kaasa tuua eksimusi. Seepärast tasuks selle kasutamisse ettevaatlikult suhtuda. Vaikimisi väljas.

Suuruse usaldamine:

- Sarnane muutmiskuupäeva usaldamisele. Tegelikku võrdlemist ei teostata. Kaht faili peetakse võrdseks, kui nende failisuurus on võrdne. See on abiks, kui failide kopeerimisel ei säilunud muutmise aeg. Kasuta seda siiski ettevaatlikult. Vaikimisi väljas.

Kataloogide sünkroniseerimine:

- Aktiveerib "sünkroniseerimisrežiimi", mille puhul võrreldakse kaht kataloogi ilma konkreetset sihtkataloogi määramata. Selles režiimis valitakse operatsioonid nii, et lõpptulemusena oleks kaks kataloogi võrdsed. Ka ühendamise tulemused kirjutatakse mõlemasse kataloogi. Vaikimisi väljas.

Ühendamise asemel kopeeritakse uuem:

- Ühendamise asemel pakutakse operatsiooniks uuema allika kopeerimine. Seda võimalust peetakse ebaturvaliseks, sest see eeldab, et teist faili ei ole redigeeritud. Seda aga tasuks igal juhul konkreetselt kontrollida. Vaikimisi väljas.

Failidest tehakse varukoopia:

- Kui fail või terve kataloog asendatakse teisega või kustutatakse, säilitatakse algne versioon, andes sellele laiendi ".orig". Kui on juba olemas varasem varukoopia laiendiga ".orig", siis see kustutatakse. See toimib nii kataloogide kui failide liitmisel. Vaikimisi sees.

### Muud funktsioonid kataloogide ühendamise aknas

#### Ekraani poolitamine ja täisekraanirežiim

Tavaliselt jääb faili võrdlemisel või ühendamisel kataloogi ühendamise nimekiri nähtavale. Hiirega võid aga liigutada failide nimekirja võrdlusaknast eraldavat riba. Kui sa seda ei soovi, võid menüüst "Kataloog" võmaluse "Poolitamisvaade" välja lülitada. Seejärel võid kasutada menüüs "Kataloog" olevat võimalust "Lülita vaadet", et vahetada kogu ekraani täitvat failinimekirja või võrdlusakna vaadet.

#### Ühe faili võrdlemine või ühendamine

Võib juhtuda, et eelistad võrdlemiseks kasutada lihtsalt klõpsu failil. Samasugune käsk on siiski olemas ka menüüs "Kataloog". Samuti saab vahetult ühendada konkreetse faili ilma kataloogide ühendamist käivitamata, kui valida menüüst "Kataloog" käsk "Ühenda üks fail". Tulemuse salvestamisel märgitakse selles staatuseks "Tehtud" ning kui seejärel käivitada kataloogide ühendamine, seda faili enam ei kaasata.

Kuid pane tähele, et see staatus läheb kaduma, kui käivitad uuesti kataloogi skaneerimise (menüü "Kataloog", käsk "Uuri uuesti läbi")

#### Erineva nimeta failide võrdlemine või ühendamine

Mõnikord on vaja võrrelda või ühendada erineva nimega faile (nt. aktiivne fail ja sellesama faili varukoopia samas kataloogis).

Vali vajalik fail veerus A, B või C ikoonile klõpsates. Esimene nii valitud fail märgitakse A-na, teine ja kolmas B ja C-na sõltumata sellest, millises veerus nad paiknevad. Nii saab valida ainult kuni kolm faili.

Jätkamiseks vali menüüst "Kataloog" käsk "Võrdle valitud faile" või "Ühenda valitud failid". Samu käske saab valida ka kontekstimenüüst, kui klõpsata valitud failile hiire parema nupuga.

Faili võrdlemine või ühendamine toimub samas aknas. Kataloogide korral avatakse uus aken.

## Mitmesugused teemad

### Võrguläbipaistvus KIO-moodulite vahendusel

#### KIO moodulid

KDE toetab võrguläbipaistvust oma KIO-moodulite abil. &kdiff3; kasutab neid sisendfailide lugemiseks ja kataloogide läbiuurimiseks. See tähendab, et võid faile ja katalooge määrata URL-e kasutades nii kohalikul kui võrgumasinal.

Näide:

    kdiff3 test.cpp  ftp://ftp.faraway.org/test.cpp
       kdiff3 tar:/home/hacker/archive.tar.gz/dir ./dir

Esimene rida võrdleb kohalikku faili failiga FTP-serveris. Teine rida võrdleb kataloogi arhiivifailis kohaliku kataloogiga.

Muud huvipakkuvad KIO-moodulid:

- WWW-failid (http:)

- FTP-failid (ftp:)

- Krüptitud failiedastused (fish:, sftp:)

- Windowsi ressursid (smb:)

- Kohalikud failid (file:)

Muud asjad, mis on võimalikud, aga arvatavasti vähekasutatavad:

- Man-leheküljed (man:)

- Info-leheküljed (info:)

#### Kuidas kirjutada URL-e

Võrreldes kohalike failide ja kataloogide asukohaga on URL-il teistsugune süntaks. Silmas tuleks pidada järgmisi asju:

- Asukoht võib olla suhteline ja sisaldada märke "." või "..". See ei ole võimalik URL-ide puhul, mis on alati absoluutsed.

- Erisümbolid tuleb alati "päästa" ehk varjestada ("#" -> "%23", tühik -> "%20" jne.). Näiteks failil nimega "/#foo#" on URL "file:/%23foo%23".

- Kui URL ei toimi oodatult, proovi see avada Konqueroris.

#### KIO-moodulite võimalused

Võrguläbipaistvusel on üks puudus: mitte kõik ressursid ei paku ühesuguseid võimalusi.

Vahel sõltub see serveri failisüsteemist, vahel protokollist. Toome siin ära lühikese piirangute loetelu:

- Vahel ei ole viidad toetatud.

- Vahel aga ei ole võimalik eristada, kas viit osutab failile või kataloogile: Sellisel juhul eeldatakse alati faili (ftp:, sftp:).

- Alati pole võimalik määrata failisuurust.

- Piiratud õiguste toetus.

- Puudub võimalus muuta õigusi või muutmisaega, mistõttu koopia õigused või aeg erinevad originaalist - vaata ka võimalust "Suuruse usaldamine". (See on võimalik ainult kohalike failidega.)

### &kdiff3; kui KPart

&kdiff3; on KPart. Hetkel on teostatud liides KParts::ReadOnlyPart.

Selle peamine kasutusala on erinevuste vaatamine KDevelopis. KDevelop käivitab alati esmalt oma seesmise erinevuste näitaja. &kdiff3; väljakutsumiseks klõpsa hiire parema nupuga erinevuste näitaja aknal ja vali kontekstimenüüst "Näita KDiff3-s".

&kdiff3; vajab tavaliselt sisendiks kaht faili. Komponendina kasutades eeldab &kdiff3;, et sisendfail on paigafail unifitseeritud vormingus. Seejärel hangib &kdiff3; paigafailist algupärased failinimed. Vähemalt üks kahest failist peab olema kättesaadav. Seejärel kutsub &kdiff3; välja käsu `patch` teise faili taasloomiseks.

Konqueroris võib valida paigafaili ning seejärel kontekstimenüüst "Eelvaatlus KDiff3-s". Arvesta, et see ei toimi, kui ühtegi algupärast faili ei ole saadaval, ning see ei ole eriti usaldusväärne, kui algfaili või ka mõlemat algfaili on muudetud pärast paigafaili loomist.

Komponendina käivitades pakub &kdiff3; ainult kahe faili võrdlemist, väga pisikest tööriistariba ja menüüd. Ühendamine ega kataloogide võrdlemine ei ole praegu toetatud.

## Küsimused ja vastused

&reporting.bugs; &updating.documentation;

Miks on selle nimi "&kdiff3;"?

Sellised vahendid, nagu "KDiff" ja "KDiff2" (nüüd nimega "Kompare") olid juba olemas. Samuti laseb "KDiff3" oletada, et see tuleb toime ühendamisega samamoodi nagu "diff3" vahend Diff-Tool paketis.

Miks on selle litsents GPL?

Ma olen GPL programme kasutanud juba väga pikka aega ning väga palju õppinud arvukaid lähtekoode uurides. Seepärast kuulub ka minu siiras tänu kõigile, kes on nii talitanud, talitavad või alles kavatsevad talitada.

Mõned nupud ja funktsioonid on puudu. Mis lahti?

Kompileerisid ilmselt rakenduse lähtekoodist, kuid jätsid konfigureerimisel korrektse KDE prefiksi määramata. Vaikimisi igatseb .configure paigalduse ette võtta kataloogis /usr/local, kuid sellisel juhul ei leia KDE kasutajaliides ressursifaili (s.t kdiff3ui.rc). Korrektsest prefiksist räägib pikemalt fail README.

Enamasti on sarnased, aga mitte samased read teineteise kõrval, aga mitte alati. Miks?

Ridu, mis erinevad ainult tühimärkide arvu poolest, peetakse algul "võrdseks", samas muudab ka üksainus teistsugune tühimärk failid "erinevaks". Kui sarnased read satuvad teineteise kõrvale, on see tegelikult kokkusattumus, aga õnneks esineb seda päris sageli. Vaata ka Käsitsi erinevused.

Miks peavad enne salvestamist olema lahendatud kõik konfliktid?

Iga võrdse või erineva sektsiooni korral jätab redaktor ühendamise tulemuse aknas meelde, kus see algab või lõpeb. Seda on vaja selleks, et konflikte oleks võimalik käsitsi lahendada lihtsalt allikanuppu (A, B või C) valides. See info läheb kaotsi, kui tekst salvestada ning sellise spetsiaalse failivormingu loomine, mis toetaks kogu vajaliku info salvestamist ja taastamist, oleks liiga keeruline ning raske.

Kuidas sünkroniseerida erinevuse ja ühendamise vaated, et kõik vaated näitaksid teksti sama asukohta?

Klõpsa kokkuvõtetulbal tekstist vasakul (vaata ka siit).

Miks puudub redaktoril ühendamise tulemuste aknas "tagasivõtmise" funktsioon?

Ka see nõuaks asjade praeguse seisu juures liiga palju tööd ja vaeva. Vajalik versioon on võimalik alati taastada konkreetse allika (A, B või C) põhjal lihtsalt vastavat nuppu klõpsates. Suurema redigeerimise korral on nagunii soovitatav kasutada mõnda muud redaktorit.

Eemaldasin veidi teksti ja järsku ilmus "<Lähterida puudub>", mida ei saa kuidagi kõrvaldada. Mida see tähendab ja kuidas sellest lahti saada?

Iga võrdse või erineva sektsiooni korral jätab redaktor ühendamise tulemuse aknas meelde, kus see algab või lõpeb. "<Lähterida puudub>" tähendab, et sektsiooni ei ole enam midagi jäänud, isegi mitte reavahetusmärki. See võib juhtuda automaatsel ühendamisel või redigeerimise ajal. Tegelikult ei ole see üldse mingi probleem, sest salvestatud failis seda viidet enam ei ole. Kui soovid algvarianti tagasi, vali lihtsalt sektsioon (klõpsuga vasakul asuval kokkuvõttetulbal) ning seejärel klõpsa vajaliku sisuga allkfaili nuppu (A/B või C).

Miks &kdiff3; ei toeta süntaksi esiletõstu?

&kdiff3; kasutab niigi palju värve erinevuste esiletõstmiseks. Veelgi rohkem värve ajaks asja ainult arusaamatult kirjuks. Kui sa siiski soovid süntaksi esiletõstu, tuleb sul leppida mõne muu redaktoriga.

Kas &kdiff3; võib võrrelda OpenOffice.Org-i, Wordi, Exceli, PDF-faile &etc;?

Kuigi &kdiff3; võib analüüsida mis tahes faile, ei ole selle tulemus arvatavasti päris rahuldav.

&kdiff3; on mõeldud puhaste tekstifailide võrdlemiseks. OpenOffice, Word, Excel jne. salvestavad oma failidesse märksa rohkem teavet (fontide, piltide, lehekülgede, värvide jms. kohta), millest &kdiff3; ei tea midagi. Seepärast näitab &kdiff3; nende failide sisu puhtalt tekstina tõlgendades, aga see võib osutuda loetamatuks või vähemalt paista üsna veidrana.

Et enamik rakendusi salvestab tänapäeval oma failid XML-vormingus, võib seda lugeda ka klaartekstina. Sel juhul võib &kdiff3;-st väikeste erinevuste korral ka abi olla.

Kui soovid võrrelda ainult teksti (ilma põimitud objektide, näiteks piltideta), on kõige mõistlikum valida oma rakenduses "Vali kõik" ja "Kopeeri", et kopeerida huvipakkuv tekst lõikepuhvrisse, kust &kdiff3; saab selle asetada mõnda sisendaknasse (vaata ka Valimine, kopeerimine ja asetamine).

Kuhu on kadunud kataloogide valik "Näita ainult erinevusi"?

Kataloogimenüüs on nüüd mitu näitamiskäsku. Kui eemaldada märge käsu "Näita identseid faile", on tulemus samasugune nagu varem "Näita ainult erinevusi" korral.

Kuidas valida erinevuse sisendaknas suur hulk teksti - kerimine on nii aeglane?

Alusta valimist tavapäraselt (klõpsa ja hoia hiire vasakut nuppu all). Seejärel kasutada vasakut nuppu jätkuvalt all hoides liikumisklahve (nt. Page Up, Page Down). (Vaata ka Valimine, kopeerimine ja asetamine.)

Siin on küll palju infot, aga mitte vastust minu küsimusele!

Palun saada oma küsimus mulle. Ma olen väga rõõmus igasuguse tagasiside üle.

## Autorid ja litsents

&kdiff3; - failide ja kataloogide võrdlemise ja ühendamise vahend

Rakenduse autoriõigus 2002-2007: Joachim Eibl joachim.eibl at gmx.de

Mitmed lahedad ideed ja vearaportid on pärit minu kolleegidelt ning paljudelt metsiku veebi asukatelt. Tänud teile kõigile!

Dokumentatsiooni autoriõigus © 2002-2007: Joachim Eibl joachim.eibl at gmx.de

Tõlge eesti keelde: Marek Laane bald@starman.ee

&underFDL; &underGPL;

## Paigaldamine

### &kdiff3; hankimine

&kdiff3; uusima versiooni saab alla laadida selle koduleheküljelt http://kdiff3.sourceforge.net.

&kdiff3; on saadaval ka muudele platvormidele. Vaata lähemalt koduleheküljelt.

### Nõuded

&kdiff3; kõigi omaduste edukaks kasutamiseks on vajalik &kde; >3.1.

Infot selle kohta, kuidas panna &kdiff3; tööle muudel platvormidel ilma KDE-ta, vaata palun koduleheküljelt.

Muudatuste nimekirka leiab internetist http://kdiff3.sourceforge.net/ChangeLog või lähtepaketist failis "ChangeLog".

### Kompileerimine ja paigaldamine

&kdiff3; kompileerimiseks ja paigaldamiseks KDE-d kasutavas süsteemis anna &kdiff3; paketi baaskataloogis viibides käsureal korraldused:

    % ./configure --prefix=kde-kataloog
    % make
    % make install

`kde-kataloog` määrab kataloogi süsteemis, kuhu on paigaldatud KDE. Kui sa ei ole selles kindel, loe faili README.

Kui sa ei kasuta KDE-d, ära kasuta ka skripti `configure`, vaid järgi failis README toodud juhiseid ainult Qt-ga süsteemidele.

Kuna &kdiff3; kasutab programme `autoconf` ja `automake`, ei tohiks kompileerimisel probleeme esineda. Kui neid siiski tekib, anna neist palun teada &kde; meililistides.

&documentation.index;