annotate kdiff3/doc/en/index.docbook @ 51:c59d5a3a8ff3

0.9.80
author joachim99
date Tue, 09 Dec 2003 20:29:43 +0000
parents ce3ab464a615
children efe33e938730
rev   line source
joachim99@11 1 <?xml version="1.0" ?>
joachim99@11 2 <!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.1.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [
joachim99@11 3 <!ENTITY kdiff3 "<application>KDiff3</application>">
joachim99@11 4 <!ENTITY kappname "&kdiff3;">
joachim99@11 5 <!ENTITY package "kdeextragear-1">
joachim99@11 6 <!ENTITY % addindex "IGNORE">
joachim99@11 7 <!ENTITY % English "INCLUDE">
joachim99@11 8 ]>
joachim99@11 9
joachim99@11 10 <book lang="&language;">
joachim99@11 11
joachim99@11 12 <!-- This header contains all of the meta-information for the document such
joachim99@11 13 as Authors, publish date, the abstract, and Keywords -->
joachim99@11 14
joachim99@11 15 <bookinfo>
joachim99@11 16 <title>The &kdiff3; Handbook</title>
joachim99@11 17
joachim99@11 18 <authorgroup>
joachim99@11 19 <author>
joachim99@11 20 <!--<personname>-->
joachim99@11 21 <firstname>Joachim</firstname>
joachim99@11 22 <surname>Eibl</surname>
joachim99@11 23 <!--</personname>-->
joachim99@11 24 <affiliation><address>
joachim99@11 25 <email>joachim.eibl@gmx.de</email>
joachim99@11 26 </address></affiliation>
joachim99@11 27 </author>
joachim99@11 28 </authorgroup>
joachim99@11 29
joachim99@11 30 <!-- TRANS:ROLES_OF_TRANSLATORS -->
joachim99@11 31
joachim99@11 32 <copyright>
joachim99@11 33 <year>2002-2003</year>
joachim99@11 34 <holder>Joachim Eibl</holder>
joachim99@11 35 </copyright>
joachim99@11 36 <!-- Translators: put here the copyright notice of the translation -->
joachim99@11 37 <!-- Put here the FDL notice. Read the explanation in fdl-notice.docbook
joachim99@11 38 and in the FDL itself on how to use it. -->
joachim99@11 39 <legalnotice>&FDLNotice;</legalnotice>
joachim99@11 40
joachim99@11 41 <!-- Date and version information of the documentation
joachim99@11 42 Don't forget to include this last date and this last revision number, we
joachim99@11 43 need them for translation coordination !
joachim99@11 44 Please respect the format of the date (YYYY-MM-DD) and of the version
joachim99@11 45 (V.MM.LL), it could be used by automation scripts.
joachim99@11 46 Do NOT change these in the translation. -->
joachim99@11 47
joachim99@51 48 <date>2003-12-07</date>
joachim99@51 49 <releaseinfo>0.9.80</releaseinfo>
joachim99@11 50
joachim99@11 51
joachim99@11 52 <abstract>
joachim99@11 53 <para></para>
joachim99@11 54 <para>
joachim99@11 55 &kdiff3; is a file and directory diff and merge tool which
joachim99@11 56 <itemizedlist>
joachim99@11 57 <listitem><para>compares and merges two or three text input files or directories,</para></listitem>
joachim99@11 58 <listitem><para>shows the differences line by line and character by character(!),</para></listitem>
joachim99@11 59 <listitem><para>provides an automatic merge-facility,</para></listitem>
joachim99@11 60 <listitem><para>has an editor for comfortable solving of merge-conflicts,</para></listitem>
joachim99@11 61 <listitem><para>provides networktransparency via KIO,</para></listitem>
joachim99@51 62 <listitem><para>has options to highlight or hide changes in white-space or comments.</para></listitem>
joachim99@11 63 </itemizedlist>
joachim99@11 64 </para><para>
joachim99@51 65 This document describes KDiff3-version 0.9.80.
joachim99@11 66 </para>
joachim99@11 67 </abstract>
joachim99@11 68
joachim99@11 69 <!-- This is a set of Keywords for indexing by search engines.
joachim99@11 70 Please at least include KDE, the KDE package it is in, the name
joachim99@11 71 of your application, and a few relevant keywords. -->
joachim99@11 72
joachim99@11 73 <keywordset>
joachim99@11 74 <keyword>KDE</keyword>
joachim99@11 75 <keyword>kdeextragear</keyword>
joachim99@11 76 <keyword>kdiff3</keyword>
joachim99@11 77 <keyword>diff</keyword>
joachim99@11 78 <keyword>merge</keyword>
joachim99@11 79 <keyword>CVS</keyword>
joachim99@11 80 <keyword>triplediff</keyword>
joachim99@11 81 <keyword>compare</keyword>
joachim99@11 82 <keyword>files</keyword>
joachim99@11 83 <keyword>directories</keyword>
joachim99@11 84 <keyword>version control</keyword>
joachim99@11 85 <keyword>three-way-merge</keyword>
joachim99@11 86 <keyword>in-line-differences</keyword>
joachim99@11 87 <keyword>synchronise</keyword>
joachim99@11 88 <keyword>kpart</keyword>
joachim99@11 89 <keyword>kio</keyword>
joachim99@11 90 <keyword>networktransparent</keyword>
joachim99@11 91 <keyword>editor</keyword>
joachim99@51 92 <keyword>white space</keyword>
joachim99@51 93 <keyword>comments</keyword>
joachim99@11 94 </keywordset>
joachim99@11 95
joachim99@11 96 </bookinfo>
joachim99@11 97
joachim99@11 98 <chapter id="introduction"><title>Introduction</title>
joachim99@11 99 <sect1 id="why"><title>Yet Another Diff Frontend?</title>
joachim99@11 100 <para>
joachim99@11 101 Several graphical diff tools exist. Why choose KDiff3? Let me say, why I wrote it.
joachim99@11 102 </para><para>
joachim99@11 103 KDiff3 started because I had to do a difficult merge. Merging is necessary when several
joachim99@11 104 people work on the same files in a project. A merge can be somewhat automated, when the
joachim99@11 105 merge-tool not only has the new modified files (called "branches"), but also the original file
joachim99@11 106 (called "base"). The merge tool will automatically choose any modification that was only
joachim99@11 107 done in one branch. When several contributors change the same lines, then the merge tool
joachim99@11 108 detects a conflict which must be solved manually.
joachim99@11 109 </para><para>
joachim99@11 110 The merge then was difficult because one contributor had changed many things and corrected
joachim99@11 111 the indentation in many places. Another contributor also had changed much text in the same file,
joachim99@11 112 which resulted in several merge conflicts.
joachim99@11 113 </para><para>
joachim99@11 114 The tool I used then, only showed the changed lines, but not what had changed within these
joachim99@11 115 lines. And there was no information about where only the indentation was changed. The merge
joachim99@11 116 was a little nightmare.
joachim99@11 117 </para><para>
joachim99@11 118 So this was the start. The first version could show differences within a line and showed white space differences.
joachim99@11 119 Later many other features were added to increase the usefulness.
joachim99@11 120 </para><para>
joachim99@11 121 For example if you want to compare some text quickly, then you can copy it to the clipboard and
joachim99@11 122 paste it into either diff window.
joachim99@11 123 </para><para>
joachim99@11 124 A feature that required a big effort was the directory comparison and merge facility, which turned
joachim99@11 125 the program almost into a full file browser.
joachim99@11 126 </para><para>
joachim99@11 127 I hope KDiff3 works for you too. Have fun!
joachim99@11 128 </para><para>
joachim99@11 129 Joachim Eibl (2003)
joachim99@11 130 </para>
joachim99@11 131 </sect1>
joachim99@11 132
joachim99@11 133 <sect1 id="screenshots"><title>Screenshots and Features</title>
joachim99@11 134 <para>This screenshot shows the difference between two text files</para>
joachim99@11 135 <para>(Using an early version of KDiff3):</para>
joachim99@11 136 <screenshot><mediaobject>
joachim99@11 137 <imageobject><imagedata fileref="screenshot_diff.png" format="PNG"/></imageobject>
joachim99@11 138 </mediaobject></screenshot>
joachim99@11 139
joachim99@11 140 <para>
joachim99@11 141 3-way-merging is fully supported. This is useful if two people change code independently.
joachim99@11 142 The original file (the base) is used to help KDiff3 to automatically select the correct
joachim99@11 143 changes.
joachim99@11 144 The merge-editor below the diff-windows allows you to solve conflicts, while showing you the output you will get.
joachim99@11 145 You can even edit the output.
joachim99@11 146 This screenshot shows three input files being merged:
joachim99@11 147 </para><para>
joachim99@11 148 <screenshot><mediaobject>
joachim99@11 149 <imageobject><imagedata fileref="screenshot_merge.png" format="PNG"/></imageobject>
joachim99@11 150 </mediaobject></screenshot>
joachim99@11 151 </para>
joachim99@11 152
joachim99@11 153 <para id="dirmergebigscreenshot">KDiff3 also helps you to compare and merge complete directories.
joachim99@11 154 This screenshot shows KDiff3 during a directory merge:
joachim99@11 155 </para><para>
joachim99@11 156 <screenshot><mediaobject>
joachim99@11 157 <imageobject><imagedata fileref="dirmergebig.png" format="PNG"/></imageobject>
joachim99@11 158 </mediaobject></screenshot>
joachim99@11 159 </para>
joachim99@11 160 </sect1>
joachim99@11 161
joachim99@11 162 <sect1 id="features"><title>More Features</title>
joachim99@11 163 <sect2><title> Line-By-Line And Char-By-Char Diff-Viewer</title>
joachim99@11 164 <para>By using the possiblities of a graphical color display KDiff3 shows
joachim99@11 165 exactly what the difference is. When you have to do many code-reviews, you will like this.
joachim99@11 166 </para>
joachim99@11 167 <screenshot><mediaobject>
joachim99@11 168 <imageobject><imagedata fileref="letter_by_letter.png" format="PNG"/></imageobject>
joachim99@11 169 </mediaobject></screenshot>
joachim99@11 170 </sect2>
joachim99@11 171
joachim99@11 172 <sect2><title> See White-Space Differences At One Glance</title>
joachim99@11 173 <para>Spaces and tabs that differ appear visibly. When lines differ only
joachim99@11 174 in the amount of white space this can be seen at one look in the summary
joachim99@11 175 column on the left side. (No more worries when people change the indentation.)
joachim99@11 176 </para>
joachim99@11 177 <screenshot><mediaobject>
joachim99@11 178 <imageobject><imagedata fileref="white_space.png" format="PNG"/></imageobject>
joachim99@11 179 </mediaobject></screenshot>
joachim99@11 180 </sect2>
joachim99@11 181
joachim99@11 182 <sect2><title> Triple-Diff</title>
joachim99@11 183 <para> Analyze three files and see where they differ.
joachim99@11 184 </para><para>
joachim99@11 185 The left/middle/right windows are named A/B/C and have the blue/green/magenta
joachim99@11 186 color respectively.
joachim99@11 187 </para><para>
joachim99@11 188 If one file is the same and one file is different on a line then the
joachim99@11 189 color shows which file is different. The red color means that both other
joachim99@11 190 files are different.
joachim99@11 191 </para>
joachim99@11 192 <screenshot><mediaobject>
joachim99@11 193 <imageobject><imagedata fileref="triple_diff.png" format="PNG"/></imageobject>
joachim99@11 194 </mediaobject></screenshot>
joachim99@11 195 </sect2>
joachim99@11 196
joachim99@11 197 <sect2><title> Comfortable Merge Of Two Or Three Input Files</title>
joachim99@11 198 <para> KDiff3 can be used to merge two or three input files and automatically
joachim99@11 199 merges as much as possible. The result is presented in an editable window
joachim99@11 200 where most conflicts can be solved with a single mouseclick: Select the
joachim99@11 201 buttons A/B/C from the button-bar to select the source that should be used.
joachim99@11 202 You can also select more than one source. Since this output window is an
joachim99@11 203 editor even conflicts which need further corrections can be solved here without
joachim99@11 204 requiring another tool.
joachim99@11 205 </para>
joachim99@11 206 </sect2>
joachim99@11 207
joachim99@11 208 <sect2><title> And ...</title>
joachim99@11 209 <itemizedlist>
joachim99@11 210 <listitem><para> Fast navigation via buttons.</para></listitem>
joachim99@11 211 <listitem><para> A mouse-click into a summary column sync's all windows to show the same position.</para></listitem>
joachim99@11 212 <listitem><para> Select and copy from any window and paste into the merge result window.</para></listitem>
joachim99@11 213 <listitem><para> Overview column that shows where the changes and conflicts are.</para></listitem>
joachim99@11 214 <listitem><para> The colors are adjustable to your specific preferences.</para></listitem>
joachim99@11 215 <listitem><para> Adjustable Tab size.</para></listitem>
joachim99@11 216 <listitem><para> Option to insert spaces instead of tabs.</para></listitem>
joachim99@11 217 <listitem><para> Open files comfortably via dialog or specify files on the command line.</para></listitem>
joachim99@11 218 <listitem><para> Search for strings in all text windows. Find (Ctrl-F) and Find Next (F3)</para></listitem>
joachim99@11 219 <listitem><para> Show the line numbers for each line. </para></listitem>
joachim99@11 220 <listitem><para> Paste clipboard or drag text into a diff input window.</para></listitem>
joachim99@11 221 <listitem><para> Networktransparency via KIO.</para></listitem>
joachim99@51 222 <listitem><para> Can be used as diff-viewer in KDevelop 3.</para></listitem>
joachim99@11 223 <listitem><para> ...</para></listitem>
joachim99@11 224 </itemizedlist>
joachim99@11 225 </sect2>
joachim99@11 226 </sect1>
joachim99@11 227 </chapter>
joachim99@11 228
joachim99@11 229 <chapter id="documentation"><title>Documentation of File Comparison And Merge</title>
joachim99@11 230
joachim99@11 231 <sect1 id="commandline"><title>Command-Line Options</title>
joachim99@11 232
joachim99@11 233 <sect2><title>Comparing 2 files: </title>
joachim99@11 234 <screen>
joachim99@11 235 <command>kdiff3</command> <replaceable>file1 file2</replaceable>
joachim99@11 236 </screen>
joachim99@11 237 </sect2>
joachim99@11 238
joachim99@11 239 <sect2><title>Merging 2 files: </title>
joachim99@11 240 <screen>
joachim99@11 241 <command>kdiff3</command> <replaceable>file1 file2</replaceable> -m
joachim99@11 242 <command>kdiff3</command> <replaceable>file1 file2</replaceable> -o <replaceable>outputfile</replaceable>
joachim99@11 243 </screen>
joachim99@11 244 </sect2>
joachim99@11 245
joachim99@11 246 <sect2><title>Comparing 3 files: </title>
joachim99@11 247 <screen>
joachim99@11 248 <command>kdiff3</command> <replaceable>file1 file2 file3</replaceable>
joachim99@11 249 </screen>
joachim99@11 250 </sect2>
joachim99@11 251
joachim99@11 252 <sect2><title>Merging 3 files: </title>
joachim99@11 253 <screen>
joachim99@11 254 <command>kdiff3</command> <replaceable>file1 file2 file3</replaceable> -m
joachim99@11 255 <command>kdiff3</command> <replaceable>file1 file2 file3</replaceable> -o <replaceable>outputfile</replaceable>
joachim99@11 256 </screen>
joachim99@11 257 <para>
joachim99@11 258 Note that <replaceable>file1</replaceable> will be treated as
joachim99@11 259 base of <replaceable>file2</replaceable> and
joachim99@11 260 <replaceable>file3</replaceable>.
joachim99@11 261 </para>
joachim99@11 262 </sect2>
joachim99@11 263
joachim99@11 264 <sect2><title>Special case: Files with the same name </title>
joachim99@11 265 <para>
joachim99@11 266 If all files have the same name but are in different directories, you can
joachim99@11 267 reduce typework by specifying the filename only for the first file. E.g.:
joachim99@11 268 </para>
joachim99@11 269 <screen>
joachim99@11 270 <command>kdiff3</command> <replaceable>dir1/filename dir2 dir3</replaceable>
joachim99@11 271 </screen>
joachim99@11 272 </sect2>
joachim99@11 273
joachim99@11 274 <sect2><title>Commandline for starting a directory comparison or merge: </title>
joachim99@11 275 <para>This is very similar, but now it's about directories.</para>
joachim99@11 276 <screen>
joachim99@11 277 <command>kdiff3</command> <replaceable>dir1 dir2</replaceable>
joachim99@11 278 <command>kdiff3</command> <replaceable>dir1 dir2</replaceable> -o <replaceable>destdir</replaceable>
joachim99@11 279 <command>kdiff3</command> <replaceable>dir1 dir2 dir3</replaceable>
joachim99@11 280 <command>kdiff3</command> <replaceable>dir1 dir2 dir3</replaceable> -o <replaceable>destdir</replaceable>
joachim99@11 281 </screen>
joachim99@11 282 <para>For directory comparison and merge you can continue to read <link linkend="dirmerge">here</link>.</para>
joachim99@11 283 </sect2>
joachim99@11 284
joachim99@11 285 <sect2><title>For more information on command line options use: </title>
joachim99@11 286 <screen>
joachim99@11 287 <command>kdiff3</command> --help
joachim99@11 288 </screen>
joachim99@11 289 </sect2>
joachim99@11 290
joachim99@11 291 </sect1>
joachim99@11 292
joachim99@11 293 <sect1 id="opendialog"><title>Open-Dialog</title>
joachim99@11 294 <para>
joachim99@11 295 Since many input files must be selectable, the program has a special open dialog:
joachim99@11 296 </para>
joachim99@11 297 <screenshot><mediaobject>
joachim99@11 298 <imageobject><imagedata fileref="open_dialog.png" format="PNG"/></imageobject>
joachim99@11 299 </mediaobject></screenshot>
joachim99@11 300 <para>
joachim99@11 301 The open dialog allows to edit the filenames by hand, selecting a file
joachim99@11 302 via the file-browser ("File...") or allows to choose recent files from
joachim99@11 303 the drop-down lists. If you open the dialog again, then the current names
joachim99@11 304 still remain there. The third input file is not required. If the
joachim99@11 305 entry for "C" remains empty, then only a two file diff analysis will be
joachim99@11 306 done.
joachim99@11 307 </para><para>
joachim99@11 308 You can also select a directory via "Dir...". If for A a directory is specified
joachim99@11 309 then a directory-comparison/merge starts. If A specifies a file but B, C or
joachim99@11 310 the output specify a directory, then KDiff3 uses the filename from A in the
joachim99@11 311 specified directories.
joachim99@11 312 </para><para>
joachim99@11 313 If "Merge" is selected, then the "Output"-line becomes editable. But it
joachim99@11 314 is not required to specify the output filename immediately. You can also
joachim99@11 315 postpone this until saving.
joachim99@11 316 </para><para>
joachim99@11 317 The "Configure..."-button opens the options-dialog, so that you can set
joachim99@11 318 the options before running the analysis.
joachim99@11 319 </para>
joachim99@11 320 </sect1>
joachim99@11 321
joachim99@11 322 <sect1 id="pasteinput"><title>Paste and Drop Input</title>
joachim99@11 323 <para>
joachim99@11 324 Sometimes you want to compare parts of a text that is not an own file. KDiff3 also
joachim99@11 325 allows you to paste text from the clipboard into the diff input window that has the focus.
joachim99@11 326 The diff analysis happens immediately then.
joachim99@11 327 In the open dialog you need not specify files then, but just close it via "Cancel".
joachim99@11 328 </para><para>
joachim99@11 329 You can also use drag and drop: Drag a file from a file manager
joachim99@11 330 or selected text from an editor and drop it onto a diff input window.
joachim99@11 331 </para><para>
joachim99@11 332 What's the idea? Sometimes a file contains two similar functions, but checking how similar
joachim99@11 333 they really are is a big effort if you first must create two files and then load them. Now
joachim99@11 334 you can simply copy, paste and compare the relevant sections.
joachim99@11 335 </para><para>
joachim99@11 336 Note: Currently you can't drag anything from KDiff3. Only dropping in the diff input
joachim99@11 337 is supported.
joachim99@11 338 </para><para>
joachim99@11 339 Warning: Some editors still interpret the drag and drop into another program like cut
joachim99@11 340 (instead of copy) and paste. Your original data might be lost then.
joachim99@11 341 </para>
joachim99@11 342 </sect1>
joachim99@11 343
joachim99@11 344 <sect1 id="interpretinginformation"><title>Interpreting The Information In The Input Windows</title>
joachim99@11 345 <screenshot><mediaobject>
joachim99@11 346 <imageobject><imagedata fileref="screenshot_diff.png" format="PNG"/></imageobject>
joachim99@11 347 </mediaobject></screenshot>
joachim99@11 348 <para>
joachim99@11 349 At the top of each text window is its "info line". The info lines of
joachim99@11 350 the input windows contain a letter "A", "B" or "C", the filename and the
joachim99@11 351 line number of the first visible line in the window. (Note that window
joachim99@11 352 "C" is optional.) Each info line appears in a different color. (If the paths
joachim99@11 353 are too long to fit, then you can move the mouse onto the info line and
joachim99@11 354 a tooltip will show the complete name.)
joachim99@11 355 </para><para>
joachim99@11 356 The three input windows are assigned the letters "A", "B" and "C".
joachim99@11 357 "A" has color blue, "B" has green and "C" has magenta. (These are the
joachim99@11 358 defaults, but can be changed in the Settings-Menu.)
joachim99@11 359 </para><para>
joachim99@11 360 When a difference is detected then the color shows which input file
joachim99@11 361 differs. When both other input files differ then the color used to express
joachim99@11 362 this is red by default ("Conflict color" in the Settings).
joachim99@11 363 This colorscheme is especially useful in the case of three input files, which will be
joachim99@11 364 seen in the next section (<link linkend="merging">Merging</link>).
joachim99@11 365 </para><para>
joachim99@11 366 Left of each text is the "summary column". If differences occurred on a
joachim99@11 367 line then the summary column shows the respective color. For a white-space-only
joachim99@11 368 difference the summary is chequered. For programming languages where white
joachim99@11 369 space is not so important this is useful to see at one glance if anything
joachim99@11 370 of importance was modified. (In C/C++ white space is only interesting within
joachim99@11 371 strings, comments, for the preprocessor, and some only very esoteric situations.)
joachim99@11 372 </para><para>
joachim99@11 373 The vertical line separating the summary column and the text is interrupted
joachim99@11 374 if the input file had no lines there.
joachim99@11 375 </para><para>
joachim99@11 376 On the right side a "overview"-column is visible left of the vertical scrollbar.
joachim99@11 377 It shows the compressed summary column of input "A". All the differences
joachim99@11 378 and conflicts are visible at one glance. When only two input windows are
joachim99@11 379 used, then all differences appear red here because every difference is
joachim99@11 380 also a conflict. A black rectangle frames the visible part of the inputs.
joachim99@11 381 For very long input files, when the number of input lines is bigger than
joachim99@11 382 the height of the overview column in pixels, then several input lines share
joachim99@11 383 one overview line. A conflict then has top priority over simple differences,
joachim99@11 384 which have priority over no change, so that no difference or conflict is
joachim99@11 385 lost here. By clicking into this overview column the corresponding text
joachim99@11 386 will be shown.
joachim99@11 387 </para>
joachim99@11 388 </sect1>
joachim99@11 389
joachim99@11 390
joachim99@11 391 <sect1 id="merging"><title>Merging And The Merge Output Editor Window</title>
joachim99@11 392 <screenshot><mediaobject>
joachim99@11 393 <imageobject><imagedata fileref="screenshot_merge.png" format="PNG"/></imageobject>
joachim99@11 394 </mediaobject></screenshot>
joachim99@11 395 <para>
joachim99@11 396 The merge output editor window (below the diff input windows) also has an info line at the top showing "Output:", the
joachim99@11 397 filename and "[Modified]" if you edited something. Usually it will contain
joachim99@11 398 some text through the automatic merge facilities, but often it will also
joachim99@11 399 contain conflicts.
joachim99@11 400 </para><para>
joachim99@11 401 !!! Saving is disabled until all conflicts are resolved !!! (Use the "Go
joachim99@11 402 to prev/next unsolved conflicts"-buttons to find the remaining conflicts.)
joachim99@11 403 </para><para>
joachim99@11 404 With only two input files every difference is also a conflict that must
joachim99@11 405 be solved manually.
joachim99@11 406 </para><para>
joachim99@11 407 With three input files the first file is treated as base, while the
joachim99@11 408 second and third input files contain modifications. When at any line only
joachim99@11 409 either input B or input C have changed but not both then the changed source
joachim99@11 410 will automatically be selected. Only when B and C have changed on the same
joachim99@11 411 lines, then the tool detects a conflict that must be solved manually.
joachim99@11 412 When B and C are the same, but not the same as A, then C is selected.
joachim99@11 413 </para><para>
joachim99@11 414 The merge output editor window also has a summary column on the left. It shows the
joachim99@11 415 letter of the input from which a line was selected or nothing if all three
joachim99@11 416 sources where equal on a line. For conflicts it shows a questionmark "?"
joachim99@11 417 and the line shows "&lt;Merge Conflict&gt;", all in red. Because solving
joachim99@11 418 conflicts line by line would take very long, the lines are grouped into
joachim99@11 419 groups that have the same difference and conflict characteristics.
joachim99@11 420 But only-white-space-conflicts are separated from non-white-space-conflicts
joachim99@11 421 in order to ease the merging of files were the indentation changed for many
joachim99@11 422 lines.
joachim99@11 423 </para><para>
joachim99@11 424 When clicking into the summary column with the left mouse button in either
joachim99@11 425 window then the group belonging to that line will be selected in all windows
joachim99@11 426 and the beginning of that group will be shown. (This might involve an automatic
joachim99@11 427 position jump in the windows if the beginning of a group is not visible.)
joachim99@11 428 This group then becomes the "current group". It is highlighted with the
joachim99@11 429 "Current range (diff) background color" and
joachim99@11 430 a black bar appears on the left side of the text.
joachim99@11 431 </para><para>
joachim99@11 432 Note the input selector buttons containing the letters "A", "B" and
joachim99@11 433 "C" in the button bar below the menu bar. When clicking on either input
joachim99@11 434 selector button, the lines from that input will be added at the end of the
joachim99@11 435 selected group if that group didn't contain that source before. Otherwise
joachim99@11 436 the lines from that input will be removed.
joachim99@11 437 </para><para>
joachim99@11 438 Besides, you can directly edit any line. The summary column will show "m"
joachim99@11 439 for every line that was modified.
joachim99@11 440 </para><para>
joachim99@11 441 Sometimes, when a line is removed either by automatic merge or by editing
joachim99@11 442 and no other lines remain in that group, then the text &lt;No src line&gt;
joachim99@11 443 will appear in that line. This is just a placeholder for the group for
joachim99@11 444 when you might change your mind and select some source again. This text won't
joachim99@11 445 appear in the saved file or in any selections you want to copy and paste.
joachim99@11 446 </para><para>
joachim99@11 447 The text "&lt;Merge Conflict&gt;" will appear in the clipboard if you
joachim99@11 448 copy and paste some text containing such a line. But still be careful to
joachim99@11 449 do so.
joachim99@11 450 </para><para>
joachim99@51 451 The normal merge will start by solving simple conflicts automatically.
joachim99@51 452 But the "Merge"-menu provides some actions for other common needs.
joachim99@51 453 If you have to select the same source for most conflicts, then you can
joachim99@51 454 choose "A", "B" or "C" everywhere, or only for the remaining unsolved
joachim99@51 455 conflicts, or for unsolved whitespace conflicts. If you want to decide every
joachim99@51 456 single delta yourself, you can "Set deltas to conflicts". Or if you want to
joachim99@51 457 return to the automatic choices of KDiff3 then select
joachim99@51 458 "Automatically solve simple conflicts". KDiff3 then restarts the merge.
joachim99@51 459 For actions that change your previous modifications KDiff3 will ask for your
joachim99@51 460 confirmation before proceeding.
joachim99@51 461 </para><para>
joachim99@51 462 Note: When choosing either source for unsolved whitespace conflicts and
joachim99@51 463 the options "Ignore Numbers" or "Ignore C/C++ Comments" are used then changes in
joachim99@51 464 numbers or comments will be treated like whitespace too.
joachim99@11 465 </para>
joachim99@11 466 </sect1>
joachim99@11 467
joachim99@11 468 <sect1 id="navigation"><title>Navigation And Editing</title>
joachim99@11 469 <para>
joachim99@11 470 Much navigation will be done with the scroll bars and the mouse but
joachim99@11 471 you can also navigate with the keys. If you click into either window then
joachim99@11 472 you can use the cursor buttons left, right, up, down, page up, page down,
joachim99@11 473 home, end, ctrl-home, ctrl-end as you would in other programs. The overview-column
joachim99@11 474 next to the vertical scroll bar of the input files can also be used for
joachim99@11 475 navigating by clicking into it.
joachim99@11 476 </para><para>
joachim99@11 477 You can also use the wheel mouse to scroll up and down.
joachim99@11 478 </para><para>
joachim99@11 479 In the merge output editor you can also use the other keys for editing.
joachim99@11 480 You can toggle between insert and overwrite mode with the insert key. (Default
joachim99@11 481 is insert-mode.)
joachim99@11 482 </para><para>
joachim99@11 483 A left-mouse-button-click into any summary column will synchronise all
joachim99@11 484 windows to show the beginning of the same group of lines (as explained
joachim99@11 485 in section <link linkend="merging">"Merging"</link>).
joachim99@11 486 </para><para>
joachim99@11 487 The button bar also contains seven navigation buttons with which you can
joachim99@11 488 jump to the current/first/last difference, to the next/previous difference
joachim99@11 489 (ctrl-down/ctrl-up), to the next/previous conflict (ctrl-pgdown/ctrl-pgup),
joachim99@11 490 or to the next/previous unsolved conflict. Note that for KDiff3 a "conflict"
joachim99@11 491 that was not automatically solved at the start of the merge stays a "conflict"
joachim99@11 492 even if it is solved. Hence the necessity to distinguish "unsolved conflicts".
joachim99@11 493 </para><para>
joachim99@11 494 There also is a button "Automatically go to next unsolved conflict after
joachim99@11 495 source selection" (Auto-Advance). If you enable this, then, when one source
joachim99@11 496 is selected, then KDiff3 will jump to and select the next unsolved conflict
joachim99@11 497 automatically. This can help when you always want to choose one source only.
joachim99@11 498 When you need both sources, or you want to edit after selecting, then you
joachim99@11 499 probably want to switch this off. Before proceeding to the next unsolved conflict
joachim99@11 500 KDiff3 shows you the effect of your choice for a short time. This delay is
joachim99@11 501 adjustable in the Diff- &amp; Merge-Settings: You can
joachim99@11 502 specify the "Auto-Advance delay" in milli seconds between 0 and 2000. Hint:
joachim99@11 503 Tired of many clicks? - Use a small Auto-Advance-delay and the shortcuts
joachim99@11 504 Ctrl-1/2/3 to select A/B/C for many conflicts.
joachim99@11 505 </para>
joachim99@11 506 </sect1>
joachim99@11 507
joachim99@11 508 <sect1 id="selections"><title>Select, Copy And Paste</title>
joachim99@11 509 <para>
joachim99@11 510 The input windows don't show a cursor, so selections must be made
joachim99@11 511 with the mouse by clicking with the left mouse button at the start, holding
joachim99@11 512 down the mousebutton and moving to the end, where you release the mouse
joachim99@11 513 button again. You can also select a word by double clicking it. In the merge
joachim99@11 514 output editor you can also select via the keyboard by holding the "shift"-button
joachim99@11 515 and navigation with the cursor keys.
joachim99@11 516 </para><para>
joachim99@11 517 To copy to the clipboard you must press the "Copy"-button (Ctrl-C or Ctrl-Insert).
joachim99@11 518 But there exists an option "Auto Copy Selection". If this is enabled,
joachim99@11 519 then whatever you select is copied immediately and you don't need to explicitely
joachim99@11 520 copy. But pay attention when using this because the contents of the clipboard
joachim99@11 521 might then be destroyed accidentally.
joachim99@11 522 </para><para>
joachim99@11 523 "Cut" (Ctrl-X or Shift-Delete) copies to the clipboard and deletes the
joachim99@11 524 selected text and "Paste" (Ctrl-V or Shift-Insert) inserts the text in
joachim99@11 525 the clipboard at the cursorposition or over the current selection.
joachim99@11 526 </para>
joachim99@11 527 </sect1>
joachim99@11 528
joachim99@11 529 <sect1 id="saving"><title>Saving</title>
joachim99@11 530 <para>
joachim99@11 531 Saving will only be allowed, when all conflicts were solved. If the file
joachim99@11 532 already exists and the "Backup files"-option is enabled then the existing
joachim99@11 533 file will be renamed with an ".orig"-extension, but if such a file exists
joachim99@11 534 it will be deleted. When you exit or start another diff-analysis and data
joachim99@11 535 wasn't saved yet, then KDiff3 will ask if you want to save, cancel or proceed
joachim99@11 536 without saving. (KDiff3 does not catch any signals. So if you "kill" KDiff3
joachim99@11 537 then your data will be lost.)
joachim99@11 538 </para><para>
joachim99@11 539 Line endings are saved according to the normal method on the underlying
joachim99@11 540 operating system. For Unices each line ends with an linefeed-character "\n",
joachim99@11 541 while for Win32-based systems each line ends with a carriage-return + a linefeed
joachim99@11 542 "\r\n". KDiff3 does not preserve the line-endings of the input files, which
joachim99@11 543 also means that you shouldn't use KDiff3 with binary files.
joachim99@11 544 </para>
joachim99@11 545 </sect1>
joachim99@11 546
joachim99@11 547 <sect1 id="find"><title>Finding Strings</title>
joachim99@11 548 <para>
joachim99@11 549 You can search for a string in any text-window of KDiff3. The "Find ..."-command
joachim99@11 550 (Ctrl-F) in the Edit-menu opens a dialog that lets you specify the string
joachim99@11 551 to search for. You can also select the windows which should be searched.
joachim99@11 552 Searching will always start at the top. Use the "Find Next"-command (F3)
joachim99@11 553 to proceed to the next occurance. If you select to search several windows then the first
joachim99@11 554 window will be searched from top to bottom before the search starts in the next
joachim99@11 555 window at the top again, etc.
joachim99@11 556 </para>
joachim99@11 557 </sect1>
joachim99@11 558
joachim99@11 559
joachim99@11 560 <sect1 id="options"><title>Options</title>
joachim99@11 561 <para>
joachim99@11 562 Options and the recent-file-list will be saved when you exit the program,
joachim99@11 563 and reloaded when you start it. (Menu Settings->Configure KDiff3 ...)
joachim99@11 564 </para>
joachim99@11 565 <sect2><title>Font</title>
joachim99@11 566 <para>
joachim99@11 567 Select a fixed width font. (On some systems this dialog will also
joachim99@11 568 present variable width fonts, but you should not use them.)
joachim99@11 569 </para>
joachim99@11 570 <variablelist>
joachim99@11 571 <varlistentry><term><emphasis>Italic Font for Deltas:</emphasis></term><listitem><para> If you select this, then text differences
joachim99@11 572 will be drawn with the italic version of the selected font. If the font
joachim99@11 573 doesn't support italic, then this does nothing.</para>
joachim99@11 574 </listitem></varlistentry>
joachim99@11 575 </variablelist>
joachim99@11 576 </sect2>
joachim99@11 577
joachim99@11 578 <sect2><title>Colors</title>
joachim99@11 579 <variablelist>
joachim99@11 580 <varlistentry><term><emphasis>Foreground color:</emphasis></term><listitem><para> Usually black. </para></listitem></varlistentry>
joachim99@11 581 <varlistentry><term><emphasis>Background color:</emphasis></term><listitem><para> Usually white. </para></listitem></varlistentry>
joachim99@11 582 <varlistentry><term><emphasis>Diff Background color:</emphasis></term><listitem><para> Usually light gray. </para></listitem></varlistentry>
joachim99@11 583 <varlistentry><term><emphasis>Color A:</emphasis></term><listitem><para> Usually dark blue. </para></listitem></varlistentry>
joachim99@11 584 <varlistentry><term><emphasis>Color B:</emphasis></term><listitem><para> Usually dark green. </para></listitem></varlistentry>
joachim99@11 585 <varlistentry><term><emphasis>Color C:</emphasis></term><listitem><para> Usually dark magenta. </para></listitem></varlistentry>
joachim99@11 586 <varlistentry><term><emphasis>Conflict Color:</emphasis></term><listitem><para> Usually red.</para></listitem></varlistentry>
joachim99@11 587 <varlistentry><term><emphasis>Current range background color:</emphasis></term><listitem><para> Usually light yellow.</para></listitem></varlistentry>
joachim99@11 588 <varlistentry><term><emphasis>Current range diff background color:</emphasis></term><listitem><para> Usually dark yellow.</para></listitem></varlistentry>
joachim99@11 589 </variablelist>
joachim99@11 590 <para>
joachim99@11 591 On systems with only 16 or 256 colors some colors are not available in pure
joachim99@11 592 form. On such systems the "Defaults"-button will choose a pure color.
joachim99@11 593 </para>
joachim99@11 594 </sect2>
joachim99@11 595
joachim99@11 596 <sect2><title>Editor Settings</title>
joachim99@11 597 <variablelist>
joachim99@11 598 <varlistentry><term><emphasis>Tab inserts spaces:</emphasis></term><listitem><para> If this is disabled and you press the
joachim99@11 599 tabulator key, a tab-character is inserted, otherwise the appropriate
joachim99@11 600 amount of characters is inserted.</para></listitem></varlistentry>
joachim99@11 601 <varlistentry><term><emphasis> Tab size:</emphasis></term><listitem><para> Can be adjusted for your specific needs. Default is 8. </para></listitem></varlistentry>
joachim99@11 602 <varlistentry><term><emphasis> Auto indentation:</emphasis></term><listitem><para> When pressing Enter or Return the indentation
joachim99@11 603 of the previous line is used for the new line. </para></listitem></varlistentry>
joachim99@11 604 <varlistentry><term><emphasis> Auto copy selection:</emphasis></term><listitem><para> Every selection is immediately copied
joachim99@11 605 to the clipboard when active and you needn't explicitely copy it. </para></listitem></varlistentry>
joachim99@51 606 <varlistentry><term><emphasis> Use locale encoding:</emphasis></term><listitem><para> For displaying foreign characters.
joachim99@51 607 Try changing this if some characters of your language aren't displayed correctly. </para></listitem></varlistentry>
joachim99@11 608 </variablelist>
joachim99@11 609 </sect2>
joachim99@11 610
joachim99@11 611 <sect2><title>Diff &amp; Merge Settings</title>
joachim99@11 612 <para>
joachim99@11 613 When comparing files, KDiff3 first it tries to match lines that are equal
joachim99@11 614 in all input files. Only during this step it might ignore white space. The
joachim99@11 615 second step compares each line. In this step white space will not be ignored.
joachim99@11 616 Also during the merge white space will not be ignored.
joachim99@11 617 </para>
joachim99@11 618
joachim99@11 619 <variablelist>
joachim99@11 620 <varlistentry><term><emphasis>Preserve Carriage Return:</emphasis></term><listitem><para> Some editors (on some systems) save
joachim99@11 621 carriage return '\r' and linefeed '\n'-characters at the end of line, while
joachim99@11 622 others will only save the linefeed '\n'. Usually KDiff3 ignores the carriage
joachim99@11 623 return, but then files that don't have equal sizes, look equal in side by
joachim99@11 624 side comparison. When this option is on, then the carriage return characters
joachim99@11 625 are made visible but are treated as white space. This option must be off
joachim99@11 626 during a merge. Default is off.</para></listitem></varlistentry>
joachim99@11 627 <varlistentry><term><emphasis>Ignore numbers:</emphasis></term><listitem><para> Default is off. Number characters ('0'-'9', '.', '-')
joachim99@11 628 will be ignored in the first part of the analysis in which the line matching is
joachim99@11 629 done. In the result the differences will be shown nevertheless, but they are treated
joachim99@11 630 as white space.
joachim99@11 631 </para></listitem></varlistentry>
joachim99@51 632 <varlistentry><term><emphasis>Ignore C/C++ comments:</emphasis></term><listitem><para> Default is off.
joachim99@51 633 Changes in comments will be treated like changes in white space.
joachim99@51 634 </para></listitem></varlistentry>
joachim99@11 635 <varlistentry><term><emphasis>Convert to Upper Case:</emphasis></term><listitem><para> Default is off. Converts the input to upper case
joachim99@11 636 while reading. Hence the comparison is not case sensitive. Take care during merging
joachim99@11 637 because the case information will be lost in the merge-result too.
joachim99@11 638 </para></listitem></varlistentry>
joachim99@11 639 <varlistentry><term><emphasis>Preprocessor-Command:</emphasis></term><listitem><para>
joachim99@11 640 When any file is read, it will be piped through this external command.
joachim99@11 641 The output of this command will be visible instead of the original file.
joachim99@11 642 You can write your own preprocessor that fulfills your specific needs.
joachim99@11 643 Use this to cut away disturbing parts of the file, or to automatically
joachim99@11 644 correct the indentation etc.
joachim99@11 645 </para></listitem></varlistentry>
joachim99@11 646 <varlistentry><term><emphasis>Line-Matching Preprocessor-Command:</emphasis></term><listitem><para>
joachim99@11 647 When any file is read, it will be piped through this external command. If
joachim99@11 648 a preprocessor-command (see above) is also specified, then the output of the
joachim99@11 649 preprocessor is the input of the line-matching preprocessor.
joachim99@11 650 The output will only be used during the line matching phase of the analysis.
joachim99@11 651 You can write your own preprocessor that fulfills your specific needs.
joachim99@11 652 Each input line must have a corresponding output line.
joachim99@11 653 </para></listitem></varlistentry>
joachim99@51 654 <varlistentry><term><emphasis>Try Hard:</emphasis></term><listitem><para>
joachim99@51 655 Try hard to find an even smaller delta. (Default is on.) This will probably
joachim99@11 656 be effective for complicated and big files. And slow for very big files.
joachim99@11 657 </para></listitem></varlistentry>
joachim99@11 658 <varlistentry><term><emphasis>Auto Advance Delay (ms):</emphasis></term><listitem><para> When in auto-advance-mode this setting specifies
joachim99@11 659 how long to show the result of the selection before jumping to the next unsolved
joachim99@11 660 conflict.
joachim99@11 661 </para></listitem></varlistentry>
joachim99@51 662 <varlistentry><term><emphasis>White space 2/3-file merge default:</emphasis></term><listitem><para>
joachim99@51 663 Automatically solve all white-space conflict by choosing the specified file.
joachim99@51 664 (Default is manual choice.) Useful if white-space really isn't important in many files.
joachim99@51 665 If you need this only occasionally better use "Choose A/B/C For All Unsolved Whitespace Conflicts"
joachim99@51 666 in the merge menu. Note that if you enable either "Ignore numbers" or "Ignore C/C++ comments"
joachim99@51 667 then this auto-choice also applies for conflicts in numbers or comments.
joachim99@51 668 </para></listitem></varlistentry>
joachim99@11 669 </variablelist>
joachim99@11 670
joachim99@11 671 </sect2>
joachim99@11 672
joachim99@11 673 <sect2><title>Directory Merge</title>
joachim99@11 674 <para>
joachim99@11 675 These options are concerned with scanning the directory and handling the
joachim99@11 676 merge: See the <link linkend="dirmergeoptions">Directory Comparison/Merge
joachim99@11 677 Docs</link> for details.
joachim99@11 678 </para><para>
joachim99@11 679 Yet there is one option here that is also relevant for saving single files:
joachim99@11 680 </para>
joachim99@11 681 <variablelist>
joachim99@11 682 <varlistentry><term><emphasis>Backup files:</emphasis></term><listitem><para> When a file is saved and an older version already
joachim99@11 683 exists, then the original version will be renamed with an ".orig" extension.
joachim99@11 684 If an old backup file with ".orig" extension already exists then this will
joachim99@11 685 be deleted without backup.
joachim99@11 686 </para></listitem></varlistentry>
joachim99@11 687 </variablelist>
joachim99@11 688 </sect2>
joachim99@11 689
joachim99@11 690 <sect2><title>Miscellaneous</title>
joachim99@11 691 <para>(These options and actions are available in menus or the buttonbar.)</para>
joachim99@11 692 <variablelist>
joachim99@11 693 <varlistentry><term><emphasis>Show line numbers:</emphasis></term><listitem><para> You can select if line numbers should be
joachim99@11 694 shown for the input files.</para></listitem></varlistentry>
joachim99@11 695 <varlistentry><term><emphasis>Show space and tabulator characters for differences:</emphasis></term><listitem><para> Sometimes
joachim99@11 696 the visible spaces and tabs are disturbing. You can turn this off.</para></listitem></varlistentry>
joachim99@51 697 <varlistentry><term><emphasis>Show white space:</emphasis></term><listitem><para> Turn this off to suppress
joachim99@51 698 any highlighting of white-space-only changes in the text or overview-columns.
joachim99@51 699 (Note that this also applies to changes in numbers or comments if the options "Ignore numbers"
joachim99@51 700 or "Ignore C/C++ comments" are active.)</para></listitem></varlistentry>
joachim99@11 701 <varlistentry><term><emphasis>Show Window A/B/C:</emphasis></term><listitem><para> Sometimes you want to use the space on
joachim99@11 702 the screen better for long lines. Hide the windows that are not important.
joachim99@11 703 (In the Windows-menu.)</para></listitem></varlistentry>
joachim99@11 704 <varlistentry><term><emphasis>Toggle Split Orientation:</emphasis></term><listitem><para>
joachim99@11 705 Switch between diff windows shown next to each other (A left of B left of C) or above
joachim99@11 706 each other (A above B above C). This should also help for long lines. (In the Windows-menu.)
joachim99@11 707 </para></listitem></varlistentry>
joachim99@51 708 <varlistentry><term><emphasis>Start a merge quickly:</emphasis></term><listitem><para>
joachim99@51 709 Sometimes you are viewing the deltas and decide to merge.
joachim99@51 710 <inlinemediaobject><imageobject><imagedata fileref="merge_current.png" format="PNG"/></imageobject></inlinemediaobject>
joachim99@11 711 "Merge current file" in the Directory-menu also works if you only compare
joachim99@11 712 two files. A single click starts the merge and uses the filename of the last
joachim99@11 713 input-file as the default output filename. (When this is used to restart
joachim99@11 714 a merge, then the output filename will be preserved.)</para></listitem></varlistentry>
joachim99@11 715 </variablelist>
joachim99@11 716 </sect2>
joachim99@11 717
joachim99@11 718 <sect2 id="shortcuts"><title>Configuring Keyboard-Shortcuts</title>
joachim99@11 719 <para>
joachim99@11 720 Currently only the KDE-version supports user-configurable keyboard-shortcuts.
joachim99@11 721 (Menu Settings->Configure Shortcuts...)
joachim99@11 722 </para>
joachim99@11 723 </sect2>
joachim99@11 724 </sect1>
joachim99@11 725 </chapter>
joachim99@11 726
joachim99@11 727
joachim99@11 728 <chapter id="dirmerge"><title>Directory Comparison and Merge with KDiff3</title>
joachim99@11 729 <sect1 id="dirmergeintro"><title>Introduction</title>
joachim99@11 730 <para>
joachim99@11 731 Often programmers must modify many files in a directory to achieve their
joachim99@11 732 purpose. For this KDiff3 also lets you compare and merge complete directories
joachim99@11 733 recursively!
joachim99@11 734 </para><para>
joachim99@11 735 Even though comparing and merging directories seems to be quite obvious,
joachim99@11 736 there are several details that you should know about. Most important is of
joachim99@11 737 course the fact that now many files might be affected by each operation.
joachim99@11 738 If you don't have backups of your original data, then it can be very hard
joachim99@11 739 or even impossible to return to the original state. So before starting a merge,
joachim99@11 740 make sure that your data is safe, and going back is possible. If you make
joachim99@11 741 an archive or use some version control system is your decision, but even
joachim99@11 742 experienced programmers and integrators need the old sources now and then.
joachim99@11 743 And note that even though I (the author of KDiff3) try to do my best, I can't
joachim99@11 744 guarantee that there are no bugs. According to the GNU-GPL there is NO WARRANTY
joachim99@11 745 whatsoever for this program. So be humble and always keep in mind:
joachim99@11 746 </para>
joachim99@11 747 <blockquote><para>
joachim99@11 748 <emphasis>To err is human, but to really mess things up you need a computer.</emphasis>
joachim99@11 749 </para></blockquote>
joachim99@11 750 <para>
joachim99@11 751 So this is what this program can do for you: KDiff3 ...
joachim99@11 752 </para>
joachim99@11 753 <itemizedlist>
joachim99@11 754 <listitem><para>... reads and compares two or three directories recursively,</para></listitem>
joachim99@11 755 <listitem><para>... takes special care of symbolic links,</para></listitem>
joachim99@11 756 <listitem><para>... lets you browse files on mouse double click,</para></listitem>
joachim99@11 757 <listitem><para>... for each item proposes a merge operation, which you can change
joachim99@11 758 before starting the directory merge,</para></listitem>
joachim99@11 759 <listitem><para>... lets you simulate the merge and lists the actions that would
joachim99@11 760 take place, without actually doing them,</para></listitem>
joachim99@11 761 <listitem><para>... lets you really do the merge, and lets you interact whenever
joachim99@11 762 manual interaction is needed,</para></listitem>
joachim99@51 763 <listitem><para>... lets you run the selected operation for all items (key F7) or the selected item (key F6),</para></listitem>
joachim99@51 764 <listitem><para>... lets you continue the merge after manual interaction with key F7,</para></listitem>
joachim99@11 765 <listitem><para>... optionally creates backups, with the ".orig" extension,</para></listitem>
joachim99@11 766 <listitem><para>...</para></listitem>
joachim99@11 767 </itemizedlist>
joachim99@11 768 </sect1>
joachim99@11 769
joachim99@11 770 <sect1 id="startingdirmerge"><title>Starting Directory Comparison Or Merge</title>
joachim99@11 771 <para>
joachim99@11 772 This is very similar to the single file merge and comparison. You just
joachim99@11 773 have to specify directories on the command line or in the file-open
joachim99@11 774 dialog.
joachim99@11 775 </para>
joachim99@11 776 <sect2><title>Compare/Merge two directories: </title>
joachim99@11 777 <screen>
joachim99@11 778 <command>kdiff3</command> <replaceable>dir1 dir2</replaceable>
joachim99@11 779 <command>kdiff3</command> <replaceable>dir1 dir2</replaceable> -o <replaceable>destdir</replaceable>
joachim99@11 780 </screen>
joachim99@11 781 <para>
joachim99@11 782 If no destination directory is specified, then KDiff3 will use <replaceable>dir2</replaceable>.
joachim99@11 783 </para>
joachim99@11 784 </sect2>
joachim99@11 785
joachim99@11 786 <sect2><title>Compare/Merge three directories: </title>
joachim99@11 787 <screen>
joachim99@11 788 <command>kdiff3</command> <replaceable>dir1 dir2 dir3</replaceable>
joachim99@11 789 <command>kdiff3</command> <replaceable>dir1 dir2 dir3</replaceable> -o <replaceable>destdir</replaceable>
joachim99@11 790 </screen>
joachim99@11 791 <para>
joachim99@11 792 When three directories are merged then <replaceable>dir1</replaceable>
joachim99@11 793 is used as the base for the merge.
joachim99@11 794 If no destination directory is specified, then KDiff3 will use <replaceable>dir3</replaceable>
joachim99@11 795 as the destination directory for the merge.
joachim99@11 796 </para>
joachim99@11 797
joachim99@11 798 <para>
joachim99@11 799 Note that only the comparison starts automatically, not the merge. For this you first must
joachim99@51 800 select a menu entry or the key F7. (More details later.)
joachim99@11 801 </para>
joachim99@11 802 </sect2>
joachim99@11 803 </sect1>
joachim99@11 804
joachim99@11 805 <sect1 id="dirmergevisible"><title>Visible Information</title>
joachim99@11 806 <para>
joachim99@11 807 While reading the directories a message-box appears that informs you of
joachim99@11 808 the progress. If you abort the directory scan, then only files that have
joachim99@11 809 been compared until then will be listed.
joachim99@11 810 </para><para>
joachim99@11 811 When the directory scan is complete then KDiff3 will show a listbox with
joachim99@11 812 the results left, ...
joachim99@11 813 </para>
joachim99@11 814 <screenshot><mediaobject>
joachim99@11 815 <imageobject><imagedata fileref="dirbrowser.png" format="PNG"/></imageobject> <!--alt="Image of the directory browser."-->
joachim99@11 816 </mediaobject></screenshot>
joachim99@11 817 <para>
joachim99@11 818 ... and details about the currently selected item on the right:
joachim99@11 819 </para>
joachim99@11 820 <screenshot><mediaobject>
joachim99@11 821 <imageobject><imagedata fileref="iteminfo.png" format="PNG"/></imageobject>
joachim99@11 822 <!--alt="Image with information about the selected item."-->
joachim99@11 823 </mediaobject></screenshot>
joachim99@11 824
joachim99@11 825 <sect2 id="name"><title>The Name Column</title>
joachim99@11 826 <para>
joachim99@11 827 Each file and directory that was found during the scan is shown here in
joachim99@11 828 a tree. You can select an item by clicking it with the mouse once.
joachim99@11 829 </para><para>
joachim99@11 830 The directories are collapsed by default. You can expand and collapse
joachim99@11 831 them by clicking on the "+"/"-" or by double-clicking the item or
joachim99@11 832 by using the left/right-arrow-keys. The "Directory"-menu also contains two
joachim99@11 833 actions "Fold all subdirs" and "Unfold all subdirs" with which you can
joachim99@11 834 collapse or expand all directories at once.
joachim99@11 835 </para><para>
joachim99@11 836 If you double-click a file item then the file comparison starts and the
joachim99@11 837 file-diff-window will appear.
joachim99@11 838 </para>
joachim99@11 839 <para>
joachim99@11 840 The image in the name column reflects the file type in the first
joachim99@11 841 directory ("A"). It can be one of these:
joachim99@11 842 </para>
joachim99@11 843 <itemizedlist>
joachim99@11 844 <listitem><para>Normal file</para></listitem>
joachim99@11 845 <listitem><para>Normal directory (directory-image)</para></listitem>
joachim99@11 846 <listitem><para>Link to a file (file-image with a link arrow)</para></listitem>
joachim99@11 847 <listitem><para>Link to a directory (directory-image with a link arrow)</para></listitem>
joachim99@11 848 </itemizedlist>
joachim99@11 849 <para>
joachim99@11 850 If the file type is different in the other directories, then this is visible
joachim99@11 851 in the columns A/B/C and in the window that shows the details about the selected
joachim99@11 852 item. Note that for such a case no merge operation can be selected automatically.
joachim99@11 853 When starting the merge, then the user will be informed of problems of that
joachim99@11 854 kind.
joachim99@11 855 </para>
joachim99@11 856 </sect2>
joachim99@11 857
joachim99@11 858 <sect2 id="coloring"><title>The Columns A/B/C and the Coloring Scheme</title>
joachim99@11 859 <para>
joachim99@11 860 As can be seen in the image above the colors red, green, yellow and black
joachim99@11 861 are used in the columns A/B/C.
joachim99@11 862 </para>
joachim99@11 863 <itemizedlist>
joachim99@11 864 <listitem><para>Black: This item doesn't exist in this directory.</para></listitem>
joachim99@11 865 <listitem><para>Green: Newest item.</para></listitem>
joachim99@11 866 <listitem><para>Yellow: Older than green, newer than red.</para></listitem>
joachim99@11 867 <listitem><para>Red: Oldest item.</para></listitem>
joachim99@11 868 </itemizedlist>
joachim99@11 869 <para>
joachim99@11 870 But for items that were identical in the comparison their color also is
joachim99@11 871 identical even if the age is not.
joachim99@11 872 </para><para>
joachim99@11 873 Directories are considered equal if all items they contain are identical.
joachim99@11 874 Then they also will have the same color. But the age of a directory is not
joachim99@11 875 considered for its color.
joachim99@11 876 </para><para>
joachim99@11 877 The idea for this coloring scheme I came upon in
joachim99@11 878 <ulink url="http://samba.org/cgi-bin/cvsweb/dirdiff">dirdiff</ulink>. The colors
joachim99@11 879 resemble the colors of a leaf that is green when new, turns yellow later and red
joachim99@11 880 when old.
joachim99@11 881 </para>
joachim99@11 882
joachim99@11 883 </sect2><sect2 id="operation"><title>The Operation Column</title>
joachim99@11 884 <para>
joachim99@11 885 After comparing the directories KDiff3 also evaluates a proposal for a
joachim99@11 886 merge operation. This is shown in the "Operation" column. You can modify
joachim99@11 887 the operation by clicking on the operation you want to change. A small menu
joachim99@51 888 will popup and allows you to select an operation for that item. (You can also
joachim99@51 889 select the most needed operations via keyboard.
joachim99@51 890 Ctrl+1/2/3/4/Del will select A/B/C/Merge/Delete respectively if available.)
joachim99@51 891 This operation will be executed during the merge. It depends on the item and
joachim99@51 892 on the merge-mode you are in, what operations are available. The merge-mode is one of
joachim99@11 893 </para>
joachim99@11 894 <itemizedlist>
joachim99@51 895 <listitem><para>Three directory-merge ("A" is treated as older base of both).</para></listitem>
joachim99@11 896 <listitem><para>Two directory-merge.</para></listitem>
joachim99@11 897 <listitem><para>Two directory-sync-mode (activate via option "Synchronize Directories").</para></listitem>
joachim99@11 898 </itemizedlist>
joachim99@11 899 <para>
joachim99@11 900 In three directory merge the operation proposal will be: If for an item ...
joachim99@11 901 </para>
joachim99@11 902 <itemizedlist>
joachim99@11 903 <listitem><para>... all three directories are equal: Copy from C</para></listitem>
joachim99@11 904 <listitem><para>... A and C are equal but B is not: Copy from B (or if B does not
joachim99@11 905 exist, delete the destination if exists)</para></listitem>
joachim99@11 906 <listitem><para>... A and B are equal but C is not: Copy from C (or if C does not
joachim99@11 907 exist, delete the destination if exists)</para></listitem>
joachim99@11 908 <listitem><para>... B and C are equal but A is not: Copy from C (or if C does not
joachim99@11 909 exist, delete the destination if exists)</para></listitem>
joachim99@11 910 <listitem><para>... only A exists: Delete the destination (if exists)</para></listitem>
joachim99@11 911 <listitem><para>... only B exists: Copy from B</para></listitem>
joachim99@11 912 <listitem><para>... only C exists: Copy from C</para></listitem>
joachim99@11 913 <listitem><para>... A, B and C are not equal: Merge</para></listitem>
joachim99@11 914 <listitem><para>... A, B and C don't have the same file type (e.g. A is a directory,
joachim99@11 915 B is a file): "Error: Conflicting File Types". While such items exist the
joachim99@11 916 directory merge cannot start.</para></listitem>
joachim99@11 917 </itemizedlist>
joachim99@11 918 <para>
joachim99@11 919 In two directory merge the operation proposal will be: If for an item ...
joachim99@11 920 </para>
joachim99@11 921 <itemizedlist>
joachim99@11 922 <listitem><para>... both directories are equal: Copy from B</para></listitem>
joachim99@11 923 <listitem><para>... A exists, but not B: Copy from A</para></listitem>
joachim99@11 924 <listitem><para>... B exists, but not A: Copy from B</para></listitem>
joachim99@11 925 <listitem><para>... A and B exist but are not equal: Merge</para></listitem>
joachim99@11 926 <listitem><para>... A and B don't have the same file type (e.g. A is a directory,
joachim99@11 927 B is a file): "Error: Conflicting File Types". While such items exist the
joachim99@11 928 directory merge cannot start.</para></listitem>
joachim99@11 929 </itemizedlist>
joachim99@11 930 <para>
joachim99@11 931 Sync-mode is active if only two directories and no explicit destination
joachim99@11 932 were specified and if the option "Synchronize directories" is active. KDiff3
joachim99@11 933 then selects a default operation so that both directories are the same afterwards.
joachim99@11 934 If for an item ...
joachim99@11 935 </para>
joachim99@11 936 <itemizedlist>
joachim99@11 937 <listitem><para>... both directories are equal: Nothing will be done.</para></listitem>
joachim99@11 938 <listitem><para>... A exists, but not B: Copy A to B</para></listitem>
joachim99@11 939 <listitem><para>... B exists, but not A: Copy B to A</para></listitem>
joachim99@11 940 <listitem><para>... A and B exist, but are not equal: Merge and store the result
joachim99@11 941 in both directories. (For the user the visible save-filename is B,
joachim99@11 942 but then KDiff3 copies B also to A.)</para></listitem>
joachim99@11 943 <listitem><para>... A and B don't have the same file type (e.g. A is a directory,
joachim99@11 944 B is a file): "Error: Conflicting File Types". While such items exist the
joachim99@11 945 directory merge cannot start.</para></listitem>
joachim99@11 946 </itemizedlist>
joachim99@11 947 <para>
joachim99@11 948 When two directories are merged and the option "Copy newer instead of merging" is selected,
joachim99@11 949 then KDiff3 looks at the dates and proposes to choose the newer file. If the files are not
joachim99@11 950 equal but have equal dates, then the operation will contain
joachim99@11 951 "Error: Dates are equal but files are not." While such items exist the
joachim99@11 952 directory merge cannot start.
joachim99@11 953 </para>
joachim99@11 954 </sect2>
joachim99@11 955
joachim99@11 956 <sect2 id="status"><title>The Status Column</title>
joachim99@11 957 <para>
joachim99@11 958 During the merge one file after the other will be processed. The status
joachim99@11 959 column will show "Done" for items where the merge operation has succeeded,
joachim99@11 960 and other texts if something unexpected happened. When a merge is complete,
joachim99@11 961 then you should make a last check to see if the status for all items is
joachim99@11 962 agreeable.
joachim99@11 963 </para>
joachim99@11 964 </sect2>
joachim99@11 965 </sect1>
joachim99@11 966
joachim99@11 967
joachim99@11 968 <sect1 id="dothemerge"><title>Doing A Merge</title>
joachim99@11 969 <para>
joachim99@51 970 You can either merge the currently selected item (file or directory), or all items.
joachim99@11 971 When you have made all your operation choices (in all subdirectories too)
joachim99@11 972 then you can start the merge.
joachim99@11 973 </para><para>
joachim99@11 974 Be aware that if you didn't specify a destination directory explicitely,
joachim99@11 975 then the destination will be "C" in three directory mode, "B" in two directory
joachim99@11 976 merge mode, and in sync-mode it will be "A" or/and "B".
joachim99@11 977 </para><para>
joachim99@11 978 If you have specified a destination directory also check that all items
joachim99@11 979 that should be in the output, are in the tree. There are some options that
joachim99@11 980 cause certain items to be omitted from the directory comparison and merge.
joachim99@11 981 Check these options to avoid unpleasant surprises:
joachim99@11 982 </para>
joachim99@11 983 <itemizedlist>
joachim99@11 984 <listitem><para>"Recursive Directories": If this is off, then items in subdirectories
joachim99@11 985 will not be found.</para></listitem>
joachim99@11 986 <listitem><para>"Pattern"/"Anti-Pattern": Include/exclude items that match</para></listitem>
joachim99@11 987 <listitem><para>"Exclude Hidden Files"</para></listitem>
joachim99@11 988 <listitem><para>"List only Deltas": Files that match in all directories don't appear
joachim99@11 989 in the tree, and hence also not in the destination.</para></listitem>
joachim99@11 990 </itemizedlist>
joachim99@11 991 <para>
joachim99@51 992 (In the current version, you must do a rescan via menu "Directory"->"Rescan"
joachim99@51 993 yourself, after changing options affecting the directory scan.)
joachim99@11 994 </para><para>
joachim99@11 995 If you are satisfied so far, the rest is easy.
joachim99@11 996 </para><para>
joachim99@51 997 To merge all items: Select "Start/Continue directory merge" in the "Directory"-menu
joachim99@51 998 or press F7 (which is the shortcut).
joachim99@51 999 To merge only the current item: Select "Run Operation For Current Item"
joachim99@51 1000 or press F6.
joachim99@11 1001 </para><para>
joachim99@11 1002 If due to conflicting filetypes still some items with invalid operations
joachim99@11 1003 exist, then a messagebox will appear and these items will be pointed out,
joachim99@11 1004 so you can select a valid operation for the item.
joachim99@11 1005 </para><para>
joachim99@51 1006 If you merge all items a dialog will appear giving you the options "Do it", "Simulate
joachim99@11 1007 it" and "Cancel".
joachim99@11 1008 </para>
joachim99@11 1009 <itemizedlist>
joachim99@11 1010 <listitem><para>Select "Simulate it" if you want to see what would be done without
joachim99@11 1011 actually doing it. A verbose list of all operations will be shown.</para></listitem>
joachim99@11 1012 <listitem><para>Otherwise select "Do it" to really start merging.</para></listitem>
joachim99@11 1013 </itemizedlist>
joachim99@11 1014 <para>
joachim99@11 1015 Then KDiff3 will run the specified operation for all items. If manual
joachim99@11 1016 interaction is required (single file merge), then a merge window will open
joachim99@11 1017 (<link linkend="dirmergebigscreenshot">see the big screenshot</link>).
joachim99@11 1018 </para><para>
joachim99@11 1019 When you have finished with a file, again select "Start/Continue directory
joachim99@51 1020 merge" or the key F7. If you haven't saved yet, a dialog will ask you to
joachim99@11 1021 do so. Then KDiff3 will continue with the next item.
joachim99@11 1022 </para><para>
joachim99@11 1023 When KDiff3 encounters an error, it will tell you so and will show the
joachim99@51 1024 verbose-status-information. At the bottom of this list, there will be some
joachim99@51 1025 error messages which should help you to understand the cause of the problem.
joachim99@51 1026 When you continue merging (F7 key) KDiff3 will give you the choice to retry
joachim99@51 1027 or skip the item that caused the problem. This means that before continuing
joachim99@51 1028 you can choose another operation or solve the problem by other means.
joachim99@11 1029 </para><para>
joachim99@11 1030 When the merge is complete, then KDiff3 will inform you via a message
joachim99@11 1031 box.
joachim99@51 1032 </para><para>
joachim99@51 1033 If some items were merged individually then KDiff3 remembers this (while this
joachim99@51 1034 merge-session goes on), and doesn't merge them again when later the merge for
joachim99@51 1035 all items is run. Even when the merge was skipped or nothing was saved these
joachim99@51 1036 items count as completed. Only when you change the merge operation the item
joachim99@51 1037 will be merged again.
joachim99@11 1038 </para>
joachim99@11 1039 </sect1>
joachim99@11 1040
joachim99@11 1041 <sect1 id="dirmergeoptions"><title>Options for Comparing and Merging Directories</title>
joachim99@11 1042 <para>
joachim99@11 1043 The KDiff3-preferences (menu "Settings"-&gt;"Configure KDiff3") now has
joachim99@11 1044 a section called "Directory Merge" with these options:
joachim99@11 1045 </para>
joachim99@11 1046
joachim99@11 1047 <variablelist>
joachim99@11 1048 <varlistentry><term><emphasis>Recursive Directories:</emphasis></term><listitem><para> Select whether to search directories
joachim99@11 1049 recursively.</para></listitem></varlistentry>
joachim99@11 1050 <varlistentry><term><emphasis>File Pattern(s):</emphasis></term><listitem><para> Only files that match any pattern here will
joachim99@11 1051 be put in the tree. More than one pattern may be specified here via using
joachim99@11 1052 the semicolon ";" as separator. Valid wildcards: '*' and '?'. (e.g. "*.cpp;*.h").
joachim99@11 1053 Default is "*". Directories need not match this pattern.</para></listitem></varlistentry>
joachim99@11 1054 <varlistentry><term><emphasis>Anti-Pattern(s):</emphasis></term><listitem><para> Files and directories that match this pattern
joachim99@11 1055 will be excluded from the tree. More than one pattern may be specified here
joachim99@11 1056 via using the semicolon ";" as separator. Valid wildcards: '*' and '?'. Default
joachim99@11 1057 is "*.orig;*.o".</para></listitem></varlistentry>
joachim99@11 1058 <varlistentry><term><emphasis>Use CVS-Ignore:</emphasis></term><listitem><para>
joachim99@11 1059 Ignore files and directories that would also be ignored by CVS.
joachim99@11 1060 Many automatically generated files are ignored by CVS.
joachim99@11 1061 The big advantage is that this can be directory specific via a local ".cvsignore"-file.
joachim99@11 1062 (See <ulink url="info:/cvs/cvsignore">info:/cvs/cvsignore</ulink>.)</para></listitem></varlistentry>
joachim99@11 1063 <varlistentry><term><emphasis>Find Hidden Files and Directories:</emphasis></term><listitem><para> On some filesystems files
joachim99@11 1064 have an "Hidden"-attribute. On other systems a filename starting with a dot
joachim99@11 1065 "." causes it to be hidden. This option allows you to decide whether to
joachim99@11 1066 include these files in the tree or not. Default is on.</para></listitem></varlistentry>
joachim99@11 1067 <varlistentry><term><emphasis>Follow File Links:</emphasis></term><listitem><para> For links to files: When disabled, then
joachim99@11 1068 the symbolic links are compared. When enabled, then the files behind the
joachim99@11 1069 links are compared. Default is off.</para></listitem></varlistentry>
joachim99@11 1070 <varlistentry><term><emphasis>Follow Directory Links:</emphasis></term><listitem><para> For links to directories: When disabled,
joachim99@11 1071 then the symbolic links will be compared. When enabled then the link will
joachim99@11 1072 be treated like a directory and it will be scanned recursively. (Note that
joachim99@11 1073 the program doesn't check if the link is "recursive". So for example a directory
joachim99@11 1074 that contains a link to the directory would cause an infinite loop, and after
joachim99@11 1075 some time when the stack overflows or all memory is used up, crash the program.)
joachim99@11 1076 Default is off.</para></listitem></varlistentry>
joachim99@11 1077 <varlistentry><term><emphasis>List only deltas:</emphasis></term><listitem><para> Only items that are not equal in all input
joachim99@11 1078 directories will be listed and only the changed files are visible. Hence
joachim99@11 1079 files that are equal in all directories won't be copied during a merge and
joachim99@11 1080 if the destination dir does not contain the files before the merge, you might
joachim99@11 1081 miss some files later. (This option is likely to be changed in a later version.)
joachim99@11 1082 Default is off.</para></listitem></varlistentry>
joachim99@11 1083 <varlistentry><term><emphasis>Trust the modification date:</emphasis></term><listitem><para> If you compare big directories
joachim99@11 1084 over a slow network, it might be faster to compare the modification dates
joachim99@11 1085 and file length alone. But this speed improvement comes with the price of
joachim99@11 1086 a little uncertainty. Use this option with care. Default is off.</para></listitem></varlistentry>
joachim99@51 1087 <varlistentry><term><emphasis>Trust the size:</emphasis></term><listitem><para>
joachim99@51 1088 Similar to trusting the modification date. No real comparison happens. Two
joachim99@51 1089 files are considered equal if their file-sizes are equal. This is useful
joachim99@51 1090 when the file-copy operation didn't preserve the modification date.
joachim99@51 1091 Use this option with care. Default is off.</para></listitem></varlistentry>
joachim99@11 1092 <varlistentry><term><emphasis>Synchronize Directories:</emphasis></term><listitem><para> Activates "Sync-Mode" when two directories
joachim99@11 1093 are compared and no explicit destination directory was specified. In this
joachim99@11 1094 mode the proposed operations will be chosen so that both source directories
joachim99@11 1095 are equal afterwards. Also the merge result will be written to both directories.
joachim99@11 1096 Default is off.</para></listitem></varlistentry>
joachim99@11 1097 <varlistentry><term><emphasis>Copy newer instead of merging:</emphasis></term><listitem><para> Instead of merging the proposed
joachim99@11 1098 operation will copy the newer source if changes happened. (Considered unsafe,
joachim99@11 1099 because it implies that the knowledge, that the other file hasn't been edited
joachim99@11 1100 too. Check to make sure in every case.) Default is off.</para></listitem></varlistentry>
joachim99@11 1101 <varlistentry><term><emphasis>Backup files:</emphasis></term><listitem><para> If a file or complete directory is replaced
joachim99@11 1102 by another or is deleted then the original version will be renamed with an
joachim99@11 1103 ".orig" extension. If an old backup file with ".orig" extension already exists
joachim99@11 1104 then this will be deleted without backup. This also affects the normal merging
joachim99@11 1105 of single files, not only in directory-merge mode. Default is on.</para></listitem></varlistentry>
joachim99@11 1106 </variablelist>
joachim99@11 1107 </sect1>
joachim99@11 1108
joachim99@11 1109 <sect1 id="other"><title>Other Functions</title>
joachim99@11 1110 <sect2><title>Split/Full Screen Mode</title>
joachim99@11 1111 <para>
joachim99@11 1112 Usually the directory merge list view remains visible while a single file
joachim99@11 1113 is compared or merged. With the mouse you can move the the splitter bar that
joachim99@11 1114 separates the file list from the text-diff windows. If you don't want this,
joachim99@11 1115 you can disable "Split Screen View" in the "Directory"-menu. Then you can
joachim99@11 1116 use "Toggle View" in the "Directory"-menu to switch between the file list
joachim99@11 1117 and the text-diff view that then occupy the full screen.
joachim99@11 1118 </para>
joachim99@11 1119 </sect2>
joachim99@11 1120 <sect2><title>Comparing or Merging a Single File</title>
joachim99@11 1121 <para>
joachim99@11 1122 Probably you will prefer a simple double mouse click on a file in order
joachim99@11 1123 to compare it. Nevertheless there also exists an entry in the "Directory"-menu.
joachim99@11 1124 You can also directly merge a single file, without starting the directory
joachim99@11 1125 merge via the "Merge single file" in the "Directory"-Menu. On saving the
joachim99@11 1126 result, the status will be set to done, and the file will not be merged again
joachim99@11 1127 if a directory merge is started.
joachim99@11 1128 </para><para>
joachim99@11 1129 But note that this status information will be lost when you rerun a directory
joachim99@11 1130 scan: "Directory"-menu: "Rescan"
joachim99@11 1131 </para>
joachim99@11 1132 </sect2>
joachim99@11 1133 </sect1>
joachim99@11 1134 </chapter>
joachim99@11 1135
joachim99@11 1136 <chapter id="misc">
joachim99@11 1137 <title>Miscellaneous Topics</title>
joachim99@11 1138 <sect1 id="networktransparency">
joachim99@11 1139 <title>Networktransparency via KIO</title>
joachim99@11 1140 <sect2><title>KIO-Slaves</title>
joachim99@11 1141 <para>
joachim99@11 1142 KDE supports networktransparency via KIO-slaves. KDiff3 uses this
joachim99@11 1143 for reading input files and for scanning directories.
joachim99@11 1144 This means that you can specify files and directories on local and
joachim99@11 1145 remote ressources via URLs.
joachim99@11 1146 </para><para>
joachim99@11 1147 Example:
joachim99@11 1148 </para><para>
joachim99@11 1149 <screen>
joachim99@11 1150 <command>kdiff3</command> test.cpp ftp://ftp.faraway.org/test.cpp
joachim99@11 1151 <command>kdiff3</command> tar:/home/hacker/archive.tar.gz/dir ./dir
joachim99@11 1152 </screen>
joachim99@11 1153 </para>
joachim99@11 1154 <para>The first line compares a local file with a file on an FTP-server. The second line
joachim99@11 1155 compares a directory within an compressed archive with a local directory.
joachim99@11 1156 </para><para>
joachim99@11 1157 Other KIO-slaves that are interesting are:
joachim99@11 1158 </para>
joachim99@11 1159 <itemizedlist>
joachim99@11 1160 <listitem><para>Files from the WWW (http:),</para></listitem>
joachim99@11 1161 <listitem><para>Files from the FTP (ftp:),</para></listitem>
joachim99@11 1162 <listitem><para>Encrypted file transfer (fish:, sftp:),</para></listitem>
joachim99@11 1163 <listitem><para>Windows-ressources (smb:),</para></listitem>
joachim99@11 1164 <listitem><para>Local files (file:),</para></listitem>
joachim99@11 1165 </itemizedlist>
joachim99@11 1166 <para>
joachim99@11 1167 Other things that are possible, but probably less useful are:
joachim99@11 1168 </para>
joachim99@11 1169 <itemizedlist>
joachim99@11 1170 <listitem><para>Man-pages (man:),</para></listitem>
joachim99@11 1171 <listitem><para>Info-pages (info:),</para></listitem>
joachim99@11 1172 </itemizedlist>
joachim99@11 1173 </sect2>
joachim99@11 1174
joachim99@11 1175 <sect2><title>How To Write URLs</title>
joachim99@11 1176 <para>
joachim99@11 1177 An URL has a different syntax compared with paths for local files and directories.
joachim99@11 1178 Some things should be considered:
joachim99@11 1179 </para>
joachim99@11 1180 <itemizedlist>
joachim99@11 1181 <listitem><para>
joachim99@51 1182 A path can be relative and can contain "." or "..". This is not possible for URLs
joachim99@51 1183 which are always absolute.
joachim99@11 1184 </para></listitem><listitem><para>
joachim99@11 1185 Special characters must be written with "escaping". ("#"->"%23", space->"%20", etc.)
joachim99@11 1186 E.g. A file with the name "/#foo#" would have the URL "file:/%23foo%23".
joachim99@11 1187 </para></listitem><listitem><para>
joachim99@11 1188 When URLs don't work as expected, try to open them in Konqueror first.
joachim99@11 1189 </para></listitem>
joachim99@11 1190 </itemizedlist>
joachim99@11 1191
joachim99@11 1192 </sect2>
joachim99@11 1193
joachim99@11 1194 <sect2><title>Capabilities of KIO-Slaves</title>
joachim99@11 1195 <para>
joachim99@11 1196 Networktransparency has one drawback: Not all ressources have the same cababilities.
joachim99@11 1197 </para><para>
joachim99@11 1198 Sometimes this is due to the filesystem of the server, sometimes due to the protocol.
joachim99@11 1199 Here is a short list of restrictions:
joachim99@11 1200 </para>
joachim99@11 1201 <itemizedlist>
joachim99@11 1202 <listitem><para>
joachim99@11 1203 Sometimes there is no support for links.
joachim99@11 1204 </para></listitem><listitem><para>
joachim99@51 1205 Or there is no way to distinguish if a link points to a file or a directory; always
joachim99@51 1206 assuming a file. (ftp:, sftp:).
joachim99@11 1207 </para></listitem><listitem><para>
joachim99@11 1208 Can't always determine the filesize.
joachim99@11 1209 </para></listitem><listitem><para>
joachim99@11 1210 Limited support for permissions.
joachim99@11 1211 </para></listitem><listitem><para>
joachim99@51 1212 No possibility to modify permissions or modification time, so permissions or time
joachim99@51 1213 of a copy will differ from the original. (See the option "Trust the size".)
joachim99@11 1214 (Only possible for local files.)
joachim99@11 1215 </para></listitem>
joachim99@11 1216 </itemizedlist>
joachim99@11 1217 </sect2>
joachim99@11 1218 </sect1>
joachim99@11 1219
joachim99@11 1220 <sect1 id="kpart">
joachim99@11 1221 <title>Using &kdiff3; as a KPart</title>
joachim99@11 1222 <para>
joachim99@11 1223 &kdiff3; is a KPart. Currently it implements the KParts::ReadOnlyPart-interface.
joachim99@11 1224 </para><para>
joachim99@11 1225 It's main use is as difference-viewer in KDevelop. KDevelop always starts the
joachim99@11 1226 internal difference viewer first. To invoke KDiff3 press the right mouse button
joachim99@11 1227 on the difference viewer window and select "Show in KDiff3Part" from the contextmenu.
joachim99@11 1228 </para><para>
joachim99@11 1229 KDiff3 normally requires two complete files as input. When used as part KDiff3
joachim99@11 1230 will assume that the inputfile is a patch-file in the unified format. KDiff3
joachim99@11 1231 then retrieves the original filenames from the patch-file. At least one of
joachim99@11 1232 the two files must be available. KDiff3 will then invoke <command>patch</command> to
joachim99@11 1233 recreate the second file.
joachim99@11 1234 </para><para>
joachim99@11 1235 In Konqueror you can select a patch-file and select "Preview in"-"KDiff3Part" from
joachim99@11 1236 the contextmenu. Be aware that this won't work if none of the original files are
joachim99@11 1237 available, and it is not reliable if the original file(s) have changed since the
joachim99@11 1238 patch-file was generated.
joachim99@11 1239 </para><para>
joachim99@11 1240 When run as a part KDiff3 only provides the a two-file-diff, a very small toolbar
joachim99@11 1241 and menu. Merging or directory-comparison are not supported then.
joachim99@11 1242 </para>
joachim99@11 1243 </sect1>
joachim99@11 1244 </chapter>
joachim99@11 1245
joachim99@11 1246 <chapter id="faq">
joachim99@11 1247 <title>Questions and Answers</title>
joachim99@11 1248
joachim99@11 1249 &reporting.bugs;
joachim99@11 1250 &updating.documentation;
joachim99@11 1251
joachim99@11 1252 <qandaset id="faqlist">
joachim99@11 1253
joachim99@11 1254 <qandaentry><question><para>
joachim99@11 1255 Why is it called "KDiff3"?
joachim99@11 1256 </para></question><answer><para>
joachim99@11 1257 Tools named "KDiff" and "KDiff2" (now called "Kompare") already exist. Also "KDiff3" should suggest
joachim99@11 1258 that it can merge like the "diff3"-tool in the Diff-Tool collection.
joachim99@11 1259 </para></answer></qandaentry>
joachim99@11 1260
joachim99@11 1261 <qandaentry><question><para>
joachim99@11 1262 Why did I release it under GPL?
joachim99@11 1263 </para></question><answer><para>
joachim99@11 1264 I'm using GPL programs for a very long time now and learned very much
joachim99@11 1265 by having a look at many of the sources. Hence this is my "Thank You"
joachim99@11 1266 to all programmers that also did so or will do the same.
joachim99@11 1267 </para></answer></qandaentry>
joachim99@11 1268
joachim99@11 1269 <qandaentry><question><para>
joachim99@11 1270 Some buttons and functions are missing. What's wrong?
joachim99@11 1271 </para></question><answer><para>
joachim99@11 1272 You compiled from source but you probably didn't specify the correct KDE-prefix
joachim99@11 1273 with configure. By default configure wants to install in /usr/local but then KDE can't
joachim99@11 1274 find the user-interface ressource file (i.e. kdiff3ui.rc). The README-file contains
joachim99@11 1275 more information about the correct prefix.
joachim99@11 1276 </para></answer></qandaentry>
joachim99@11 1277
joachim99@11 1278 <qandaentry><question><para>
joachim99@11 1279 Often lines that are similar but not identical appear next to each other
joachim99@11 1280 but sometimes not. Why?
joachim99@11 1281 </para></question><answer><para>
joachim99@11 1282 Lines where only the amount of white space characters is different
joachim99@11 1283 are treated as "equal" at first, while just one different non-white character
joachim99@11 1284 causes the lines to be "different". If similar lines appear next to each
joachim99@11 1285 other, this actually is coincidence but this fortunately is often the case.
joachim99@11 1286 </para></answer></qandaentry>
joachim99@11 1287
joachim99@11 1288 <qandaentry><question><para>
joachim99@11 1289 Why must all conflicts be solved before the merge result can be saved?
joachim99@11 1290 </para></question><answer><para>
joachim99@11 1291 For each equal or different section the editor in the merge result
joachim99@11 1292 window remembers where it begins or ends. This is needed so that conflicts
joachim99@11 1293 can be solved manually by simply selecting the source button (A, B or C).
joachim99@11 1294 This information is lost while saving as text and it is too much effort to
joachim99@11 1295 create a special file format that supports saving and restoring all necessary
joachim99@11 1296 information.
joachim99@11 1297 </para></answer></qandaentry>
joachim99@11 1298
joachim99@11 1299 <qandaentry><question><para>
joachim99@11 1300 Why does the editor in the merge result window not have an "undo"-function?
joachim99@11 1301 </para></question><answer><para>
joachim99@11 1302 This was too much effort until now. You can always
joachim99@11 1303 restore a version from one source (A, B or C) by clicking the respective
joachim99@11 1304 button. For big editing the use of another editor is recommended anyway.
joachim99@11 1305 </para></answer></qandaentry>
joachim99@11 1306
joachim99@11 1307 <qandaentry><question><para>
joachim99@11 1308 When I removed some text, then suddenly "&lt;No src line&gt;" appeared
joachim99@11 1309 and can't be deleted. What does that mean and how can one remove this?
joachim99@11 1310 </para></question><answer><para>
joachim99@11 1311 For each equal or different section the editor in the merge result
joachim99@11 1312 window remembers where it begins or ends. "&lt;No src line&gt;" means
joachim99@11 1313 that there is nothing left in a section, not even a new line character.
joachim99@11 1314 This can happen either while merging automatically or by editing. This is
joachim99@11 1315 no problem, since this hint won't appear in the saved file. If you want
joachim99@11 1316 the orignal source back just select the section (click on the left summary
joachim99@11 1317 column) and then click the source button with the needed contents (A/B or
joachim99@11 1318 C).
joachim99@11 1319 </para></answer></qandaentry>
joachim99@11 1320
joachim99@11 1321 <qandaentry><question><para>
joachim99@11 1322 Why doesn't KDiff3 support syntax-highlighting?
joachim99@11 1323 </para></question><answer><para>
joachim99@11 1324 KDiff3 already uses many colors for difference highlighting. More
joachim99@11 1325 highlighting would be confusing. Use another editor for this.
joachim99@11 1326 </para></answer></qandaentry>
joachim99@11 1327
joachim99@11 1328 <qandaentry><question><para>
joachim99@11 1329 There is so much information here, but your question is still not answered?
joachim99@11 1330 </para></question><answer><para>
joachim99@11 1331 Please send me your question. I appreciate every comment.
joachim99@11 1332 </para></answer></qandaentry>
joachim99@11 1333
joachim99@11 1334 </qandaset>
joachim99@11 1335 </chapter>
joachim99@11 1336
joachim99@11 1337 <chapter id="credits">
joachim99@11 1338
joachim99@11 1339 <title>Credits and License</title>
joachim99@11 1340
joachim99@11 1341 <para>
joachim99@11 1342 &kdiff3; - File and Directory Comparison and Merge Tool
joachim99@11 1343 </para>
joachim99@11 1344 <para>
joachim99@11 1345 Program copyright 2002-2003 Joachim Eibl <email>joachim.eibl@gmx.de</email>
joachim99@11 1346 </para>
joachim99@11 1347 <para>
joachim99@11 1348 Several cool ideas and bugreports came from colleagues and many people out in the Wild Wild Web. Thank you!
joachim99@11 1349 </para>
joachim99@11 1350
joachim99@11 1351 <para>
joachim99@11 1352 Documentation Copyright &copy; 2002-2003 Joachim Eibl <email>joachim.eibl@gmx.de</email>
joachim99@11 1353 </para>
joachim99@11 1354
joachim99@11 1355 <!-- TRANS:CREDIT_FOR_TRANSLATORS -->
joachim99@11 1356
joachim99@11 1357 &underFDL; <!-- FDL: do not remove -->
joachim99@11 1358
joachim99@11 1359
joachim99@11 1360 &underGPL; <!-- GPL License -->
joachim99@11 1361
joachim99@11 1362 </chapter>
joachim99@11 1363
joachim99@11 1364 <appendix id="installation">
joachim99@11 1365 <title>Installation</title>
joachim99@11 1366
joachim99@11 1367 <sect1 id="getting-kdiff3">
joachim99@11 1368 <title>How to obtain &kdiff3;</title>
joachim99@11 1369
joachim99@11 1370 <para>
joachim99@11 1371 You can download the latest version of KDiff3 from its homepage <ulink url="http://kdiff3.sourceforge.net">http://kdiff3.sourceforge.net</ulink>.
joachim99@11 1372 </para><para>
joachim99@11 1373 KDiff3 is also available for other platforms. See the homepage for details.
joachim99@11 1374 </para>
joachim99@11 1375
joachim99@11 1376
joachim99@11 1377 </sect1>
joachim99@11 1378
joachim99@11 1379 <sect1 id="requirements">
joachim99@11 1380 <title>Requirements</title>
joachim99@11 1381
joachim99@11 1382 <para>
joachim99@11 1383 In order to successfully use all features of &kdiff3;, you need &kde; >3.1. The
joachim99@11 1384 diff-tool from the <ulink url="http://www.gnu.org/software/diffutils/diffutils.html">GNU-diff-utils</ulink>
joachim99@11 1385 is recommended for best results.
joachim99@11 1386 </para><para>
joachim99@11 1387 For information about how to run KDiff3 on other platforms without KDE please see the
joachim99@11 1388 <ulink url="http://kdiff3.sourceforge.net">homepage</ulink>.
joachim99@11 1389 </para><para>
joachim99@11 1390 You can find a list of changes at <ulink
joachim99@11 1391 url="http://kdiff3.sourceforge.net/ChangeLog">http://kdiff3.sourceforge.net/ChangeLog</ulink>
joachim99@11 1392 or in the "ChangeLog"-file of the source package.
joachim99@11 1393 </para>
joachim99@11 1394 </sect1>
joachim99@11 1395
joachim99@11 1396 <sect1 id="compilation">
joachim99@11 1397 <title>Compilation and Installation</title>
joachim99@11 1398
joachim99@11 1399 <para>In order to compile and install &kdiff3; on a system with KDE, type the
joachim99@11 1400 following in the base directory of the &kdiff3; distribution:</para>
joachim99@11 1401
joachim99@11 1402 <screen><prompt>%</prompt> <userinput><command>./configure --prefix=<replaceable>kde-dir</replaceable></command></userinput>
joachim99@11 1403 <prompt>%</prompt> <userinput><command>make</command></userinput>
joachim99@11 1404 <prompt>%</prompt> <userinput><command>make</command> install</userinput>
joachim99@11 1405 </screen>
joachim99@11 1406 <para>
joachim99@11 1407 <replaceable>kde-dir</replaceable> specifies the directory
joachim99@11 1408 containing KDE on your system. If you are not sure, read the README-file for details.
joachim99@11 1409 </para>
joachim99@11 1410 <para>Since &kdiff3; uses <command>autoconf</command> and
joachim99@11 1411 <command>automake</command> you should have no trouble compiling it. Should you
joachim99@11 1412 run into problems please report them to the &kde; mailing lists.</para>
joachim99@11 1413
joachim99@11 1414 </sect1>
joachim99@11 1415
joachim99@11 1416 </appendix>
joachim99@11 1417
joachim99@11 1418 &documentation.index;
joachim99@11 1419 </book>
joachim99@11 1420
joachim99@11 1421 <!--
joachim99@11 1422 Local Variables:
joachim99@11 1423 mode: sgml
joachim99@11 1424 sgml-minimize-attributes:nil
joachim99@11 1425 sgml-general-insert-case:lower
joachim99@11 1426 sgml-indent-step:0
joachim99@11 1427 sgml-indent-data:nil
joachim99@11 1428 End:
joachim99@11 1429
joachim99@11 1430 vim:tabstop=2:shiftwidth=2:expandtab
joachim99@11 1431 -->