/usr/share/doc/xxdiff/html/xxdiff-doc.html is in xxdiff 1:4.0.1+dfsg-1+b1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 | <?xml version="1.0" encoding="iso-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="generator" content="Docutils 0.11: http://docutils.sourceforge.net/" />
<title>xxdiff documentation</title>
<meta name="author" content="Martin Blais" />
<meta name="date" content="2003-12-25" />
<meta name="copyright" content="Copyright (C) 1999-2004, Martin Blais. All Rights Reserved." />
<link rel="stylesheet" href="/docutils-style.css" type="text/css" />
</head>
<body>
<div class="document" id="xxdiff-documentation">
<h1 class="title">xxdiff documentation</h1>
<table class="docinfo" frame="void" rules="none">
<col class="docinfo-name" />
<col class="docinfo-content" />
<tbody valign="top">
<tr><th class="docinfo-name">Author:</th>
<td>Martin Blais</td></tr>
<tr><th class="docinfo-name">Contact:</th>
<td><a class="first last reference external" href="mailto:blais@furius.ca">blais@furius.ca</a></td></tr>
<tr><th class="docinfo-name">Date:</th>
<td>2003-12-25</td></tr>
<tr><th class="docinfo-name">Copyright:</th>
<td>Copyright (C) 1999-2004, Martin Blais. All Rights Reserved.</td></tr>
</tbody>
</table>
<div class="abstract topic">
<p class="topic-title first">Abstract</p>
<p>User's manual for xxdiff. The official location of xxdiff on the internet is
<a class="reference external" href="http://xxdiff.sourceforge.net">http://xxdiff.sourceforge.net</a>. If you're reading this page from the web, note
that you can also access this document from the Help menu of xxdiff.</p>
</div>
<div class="contents topic" id="table-of-contents">
<p class="topic-title first">Table of Contents</p>
<ul class="auto-toc simple">
<li><a class="reference internal" href="#introduction" id="id5">1 Introduction</a></li>
<li><a class="reference internal" href="#version" id="id6">2 Version</a></li>
<li><a class="reference internal" href="#invocation" id="id7">3 Invocation</a><ul class="auto-toc">
<li><a class="reference internal" href="#return-value" id="id8">3.1 Return Value</a></li>
<li><a class="reference internal" href="#command-line-options" id="id9">3.2 Command-line Options</a></li>
<li><a class="reference internal" href="#using-xxdiff-as-a-short-lived-application" id="id10">3.3 Using xxdiff as a short-lived application</a></li>
</ul>
</li>
<li><a class="reference internal" href="#general-operation" id="id11">4 General operation</a><ul class="auto-toc">
<li><a class="reference internal" href="#the-text-area" id="id12">4.1 The text area</a><ul class="auto-toc">
<li><a class="reference internal" href="#horizontal-diffs" id="id13">4.1.1 Horizontal diffs</a></li>
<li><a class="reference internal" href="#per-hunk-ignore-whitespace" id="id14">4.1.2 Per-hunk ignore whitespace</a></li>
<li><a class="reference internal" href="#navigation" id="id15">4.1.3 Navigation</a></li>
<li><a class="reference internal" href="#pop-up-menu" id="id16">4.1.4 Pop-up menu</a></li>
<li><a class="reference internal" href="#searching" id="id17">4.1.5 Searching</a></li>
<li><a class="reference internal" href="#other-options" id="id18">4.1.6 Other options</a></li>
<li><a class="reference internal" href="#display-options" id="id19">4.1.7 Display options</a></li>
</ul>
</li>
<li><a class="reference internal" href="#redoing-the-diffs" id="id20">4.2 Redoing the diffs</a></li>
<li><a class="reference internal" href="#other-ui-elements" id="id21">4.3 Other UI elements</a></li>
</ul>
</li>
<li><a class="reference internal" href="#comparing-two-files" id="id22">5 Comparing two files</a><ul class="auto-toc">
<li><a class="reference internal" href="#types-of-hunks" id="id23">5.1 Types of hunks</a></li>
<li><a class="reference internal" href="#options" id="id24">5.2 Options</a></li>
</ul>
</li>
<li><a class="reference internal" href="#comparing-three-files" id="id25">6 Comparing three files</a><ul class="auto-toc">
<li><a class="reference internal" href="#id1" id="id26">6.1 Types of hunks</a></li>
<li><a class="reference internal" href="#ignoring-one-file" id="id27">6.2 Ignoring one file</a></li>
</ul>
</li>
<li><a class="reference internal" href="#comparing-two-directories" id="id28">7 Comparing two directories</a><ul class="auto-toc">
<li><a class="reference internal" href="#id2" id="id29">7.1 Types of hunks</a></li>
<li><a class="reference internal" href="#id3" id="id30">7.2 Options</a></li>
<li><a class="reference internal" href="#file-operations" id="id31">7.3 File operations</a></li>
</ul>
</li>
<li><a class="reference internal" href="#merging-files-and-resolving-conflicts" id="id32">8 Merging files and resolving conflicts</a><ul class="auto-toc">
<li><a class="reference internal" href="#selecting-regions" id="id33">8.1 Selecting regions</a></li>
<li><a class="reference internal" href="#saving-the-resulting-file" id="id34">8.2 Saving the resulting file</a><ul class="auto-toc">
<li><a class="reference internal" href="#forcing-output-of-a-merged-file-and-better-script-integration" id="id35">8.2.1 Forcing Output of a Merged File and Better Script Integration</a></li>
</ul>
</li>
<li><a class="reference internal" href="#rapid-sequential-merge-conflict-resolution" id="id36">8.3 Rapid, sequential merge conflict resolution</a></li>
<li><a class="reference internal" href="#automatic-merge" id="id37">8.4 Automatic merge</a><ul class="auto-toc">
<li><a class="reference internal" href="#requiring-an-output-file" id="id38">8.4.1 Requiring an output file</a></li>
</ul>
</li>
<li><a class="reference internal" href="#merging-directories" id="id39">8.5 Merging directories</a></li>
<li><a class="reference internal" href="#merged-view" id="id40">8.6 Merged view</a></li>
</ul>
</li>
<li><a class="reference internal" href="#merge-review-features" id="id41">9 Merge review features</a><ul class="auto-toc">
<li><a class="reference internal" href="#variable-text-selection" id="id42">9.1 Variable text selection</a></li>
<li><a class="reference internal" href="#id4" id="id43">9.2 Per-hunk ignore whitespace</a></li>
</ul>
</li>
<li><a class="reference internal" href="#unmerging-merge-conflicts" id="id44">10 Unmerging merge conflicts</a><ul class="auto-toc">
<li><a class="reference internal" href="#unmerging-merge-conflicts-with-three-files" id="id45">10.1 Unmerging merge conflicts with three files</a></li>
</ul>
</li>
<li><a class="reference internal" href="#editing-files" id="id46">11 Editing files</a></li>
<li><a class="reference internal" href="#customization-using-resource-file" id="id47">12 Customization using resource file</a><ul class="auto-toc">
<li><a class="reference internal" href="#automatic-generation-of-the-resource-file" id="id48">12.1 Automatic generation of the resource file</a></li>
</ul>
</li>
<li><a class="reference internal" href="#resource-reference" id="id49">13 Resource reference</a></li>
<li><a class="reference internal" href="#frequently-asked-questions-faq" id="id50">14 Frequently Asked Questions (FAQ)</a><ul class="auto-toc">
<li><a class="reference internal" href="#can-i-diff-files-with-crlf-dos-characters-in-them" id="id51">14.1 Can I diff files with CRLF DOS characters in them?</a></li>
<li><a class="reference internal" href="#how-do-i-make-xxdiff-display-the-revision-number-of-a-file" id="id52">14.2 How do I make xxdiff display the revision number of a file?</a></li>
</ul>
</li>
<li><a class="reference internal" href="#author" id="id53">15 Author</a></li>
<li><a class="reference internal" href="#reporting-bugs" id="id54">16 Reporting bugs</a></li>
<li><a class="reference internal" href="#project-history" id="id55">17 Project history</a><ul class="auto-toc">
<li><a class="reference internal" href="#licensing" id="id56">17.1 Licensing</a></li>
<li><a class="reference internal" href="#dependencies" id="id57">17.2 Dependencies</a></li>
<li><a class="reference internal" href="#acknowledgements" id="id58">17.3 Acknowledgements</a></li>
</ul>
</li>
</ul>
</div>
<!-- 1 Introduction
2 Version
3 Invocation
3.1 Return Value
3.2 Command-line Options
3.3 Using xxdiff as a short-lived application
4 General operation
4.1 The text area
4.1.1 Horizontal diffs
4.1.2 Per-hunk ignore whitespace
4.1.3 Navigation
4.1.4 Pop-up menu
4.1.5 Searching
4.1.6 Other options
4.1.7 Display options
4.2 Redoing the diffs
4.3 Other UI elements
5 Comparing two files
5.1 Types of hunks
5.2 Options
6 Comparing three files
6.1 Types of hunks
6.2 Ignoring one file
7 Comparing two directories
7.1 Types of hunks
7.2 Options
7.3 File operations
8 Merging files and resolving conflicts
8.1 Selecting regions
8.2 Saving the resulting file
8.2.1 Forcing Output of a Merged File and Better Script Integration
8.3 Rapid, sequential merge conflict resolution
8.4 Automatic merge
8.4.1 Requiring an output file
8.5 Merging directories
8.6 Merged view
9 Merge review features
9.1 Variable text selection
9.2 Per-hunk ignore whitespace
10 Unmerging merge conflicts
10.1 Unmerging merge conflicts with three files
11 Editing files
12 Customization using resource file
12.1 Automatic generation of the resource file
13 Resource reference
14 Frequently Asked Questions (FAQ)
14.1 Can I diff files with CRLF DOS characters in them?
14.2 How do I make xxdiff display the revision number of a file?
15 Author
16 Reporting bugs
17 Project history
17.1 Licensing
17.2 Dependencies
17.3 Acknowledgements -->
<div class="section" id="introduction">
<h1><a class="toc-backref" href="#id5">1 Introduction</a></h1>
<p>xxdiff is a <em>graphical file and directories comparison and merge
tool</em>. This program is an essential software development tool that can be
used to</p>
<ul class="simple">
<li>visualize the differences between files or directories;</li>
<li>merge files with differences, resolving conflicts and saving output to a
new file or patch;</li>
<li>assist file changes reviewing and comment production (e.g. approving source
code changes before they get merged into a source tree).</li>
</ul>
<p>xxdiff doesn't itself compute the differences between files, it just displays
them graphically (the rationale behind this is that you can use different tools
to compute the actual diffs (for example using Rational ClearCase's cleardiff,
which gives more sensible results than GNU diff in certain cases),
there is a relatively standard format for difference output (POSIX diff),
so it is easy and efficient to parse diff output from different programs,
under the UNIX dataflow paradigm, it is common for graphical tools to be
built on top of text tools. There are already many good tools to perform diffs,
so there's no need to rewrite them.</p>
</div>
<div class="section" id="version">
<h1><a class="toc-backref" href="#id6">2 Version</a></h1>
<p>This documentation was generated for version:</p>
<div id="version">
4.0
</div></div>
<div class="section" id="invocation">
<h1><a class="toc-backref" href="#id7">3 Invocation</a></h1>
<p>Usage:</p>
<pre class="literal-block">
xxdiff [OPTIONS] <file1> <file2> [<file3>]
</pre>
<p>You can specify either two files (two-way diff), three files (three-way diff),
or two directories (directory diff).</p>
<p>You can also specify a mix of regular files and directories. If at least one of
the paths specified on the cmdline is a regular file, all other paths that are
directories will have the basename of the regular filename appended to them.
For example, if you specify:</p>
<pre class="literal-block">
xxdiff dir1/bn1 dir2/bn2 dir3
</pre>
<p>xxdiff will be run on <tt class="docutils literal">dir1/bn1</tt>, <tt class="docutils literal">dir2/bn2</tt>, and <tt class="docutils literal">dir3/bn1</tt>.</p>
<p>xxdiff can accept one of its inputs from stdin. You must replace the relevant
filename by '<tt class="docutils literal">-</tt>' (a dash) to instruct xxdiff to use stdin for that file,
e.g.:</p>
<pre class="literal-block">
cat file2 | sort | xxdiff file1 - file3
</pre>
<p>If all the file paths are directories, a directory diff is invoked. Note that
xxdiff doesn't do three-way directory diffs.</p>
<p>If the "unmerge" option is given, then xxdiff can only be invoked with a single
file containing the conflicts.</p>
<div class="section" id="return-value">
<h2><a class="toc-backref" href="#id8">3.1 Return Value</a></h2>
<p>xxdiff returns the same values that diff(1) or diff3(1) return. See the
respective man pages of those utilities for details.</p>
</div>
<div class="section" id="command-line-options">
<h2><a class="toc-backref" href="#id9">3.2 Command-line Options</a></h2>
<div id="invocation">
<h4>Generic options</h4>
<table cellpadding=5 width="100%">
<tr>
<td width="30%"><tt>--help</tt></td>
<td align=left>
Show help about options.
</td>
</tr>
<tr>
<td width="30%"><tt>--help-qt</tt></td>
<td align=left>
Show Qt specific options.
</td>
</tr>
<tr>
<td width="30%"><tt>--help-all</tt></td>
<td align=left>
Show all options.
</td>
</tr>
<tr>
<td width="30%"><tt>--help-html</tt></td>
<td align=left>
Output documentation in HTML.
</td>
</tr>
<tr>
<td width="30%"><tt>--version, -v</tt></td>
<td align=left>
Show version information.
</td>
</tr>
</table>
<h4>Qt options</h4>
<table cellpadding=5 width="100%">
<tr>
<td width="30%"><tt>--qt, -Q <arg></tt></td>
<td align=left>
Set options to be given to Qt application options parser. See Qt manual, class QApplication for a list of supported options.
</td>
</tr>
<tr>
<td width="30%"><tt>--display <arg></tt></td>
<td align=left>
Sets the X display (default is $DISPLAY).
</td>
</tr>
<tr>
<td width="30%"><tt>--style <arg></tt></td>
<td align=left>
Sets the application GUI style. Possible values are motif, windows, and platinum.
</td>
</tr>
<tr>
<td width="30%"><tt>--geometry <arg></tt></td>
<td align=left>
Sets the client geometry of the main widget.
</td>
</tr>
<tr>
<td width="30%"><tt>--font <arg></tt></td>
<td align=left>
Defines the application font (for widgets).
</td>
</tr>
<tr>
<td width="30%"><tt>--textfont <arg></tt></td>
<td align=left>
Defines the text font (for diff text).
</td>
</tr>
<tr>
<td width="30%"><tt>--name</tt></td>
<td align=left>
Sets the application name.
</td>
</tr>
<tr>
<td width="30%"><tt>--visual <arg></tt></td>
<td align=left>
Forces the application to use a particular visual on an 8-bit display (e.g. TrueColor).
</td>
</tr>
<tr>
<td width="30%"><tt>--ncols <arg></tt></td>
<td align=left>
Limits the number of colors allocated in the color cube on a 8-bit display.
</td>
</tr>
<tr>
<td width="30%"><tt>--cmap</tt></td>
<td align=left>
Causes the application to install a private color map on an 8-bit display.
</td>
</tr>
<tr>
<td width="30%"><tt>--nograb</tt></td>
<td align=left>
Tells Qt to never grab the mouse or the keyboard.
</td>
</tr>
<tr>
<td width="30%"><tt>--dograb</tt></td>
<td align=left>
Running under a debugger can cause an implicit -nograb, use -dograb to override.
</td>
</tr>
<tr>
<td width="30%"><tt>--sync</tt></td>
<td align=left>
Switches to synchronous mode for debugging.
</td>
</tr>
<tr>
<td width="30%"><tt>--graphicssystem <arg></tt></td>
<td align=left>
Sets the application graphics system. Possible values are raster, opengl (experimental), opengl1 (obsolete), x11, native.
</td>
</tr>
</table>
<h4>GNU diff options (2-files only)</h4>
<table cellpadding=5 width="100%">
<tr>
<td width="30%"><tt>--ignore-all-space, -w</tt></td>
<td align=left>
Option passed to 2-files diff(1). Ignore white space when comparing lines.
</td>
</tr>
<tr>
<td width="30%"><tt>--ignore-space-change, -b</tt></td>
<td align=left>
Option passed to 2-files diff(1). Ignore changes in amount of white space.
</td>
</tr>
<tr>
<td width="30%"><tt>--ignore-case, -i</tt></td>
<td align=left>
Option passed to 2-files diff(1). Ignore changes in case; consider upper- and lower-case to be the same.
</td>
</tr>
<tr>
<td width="30%"><tt>--ignore-blank-lines, -B</tt></td>
<td align=left>
Option passed to 2-files diff(1). Ignore changes that just insert or delete blank lines.
</td>
</tr>
<tr>
<td width="30%"><tt>--recursive, -r</tt></td>
<td align=left>
Option passed to 2-files diff(1). This is only meaningful for directory diffs.
</td>
</tr>
<tr>
<td width="30%"><tt>--text, -a</tt></td>
<td align=left>
Option passed to 2-files diff(1). Treat all files as text and compare them line-by-line, even if they do not appear to be text.
</td>
</tr>
<tr>
<td width="30%"><tt>--exclude, -e <arg></tt></td>
<td align=left>
When comparing directories, ignore files and subdirectories whose basenames match pattern.
</td>
</tr>
<tr>
<td width="30%"><tt>--exclude-from <arg></tt></td>
<td align=left>
When comparing directories, ignore files and subdirectories whose basenames match any pattern contained in file.
</td>
</tr>
<tr>
<td width="30%"><tt>--args, -A <arg></tt></td>
<td align=left>
Pass on argument to the subordinate diff program.
</td>
</tr>
</table>
<h4>Options</h4>
<table cellpadding=5 width="100%">
<tr>
<td width="30%"><tt>--no-rcfile</tt></td>
<td align=left>
Don't query rcfile resources (.xxdiffrc).
</td>
</tr>
<tr>
<td width="30%"><tt>--list-resources</tt></td>
<td align=left>
Lists all the supported resources and default values.
</td>
</tr>
<tr>
<td width="30%"><tt>--exit-on-same, -D</tt></td>
<td align=left>
If there are no differences then exit quietly with exit code of 0.
</td>
</tr>
<tr>
<td width="30%"><tt>--exit-if-no-conflicts, -E</tt></td>
<td align=left>
If there are no conflicts after making automatic merge selections, then exit quietly with exit code of 0.
</td>
</tr>
<tr>
<td width="30%"><tt>--exit-with-merge-status, -X</tt></td>
<td align=left>
If all diff hunks are selected and no unsaved selections exist, then exit with code of 0. Normally, xxdiff will pass back the diff return code.
</td>
</tr>
<tr>
<td width="30%"><tt>--single, -S</tt></td>
<td align=left>
Load a single file for display. This is a strange feature for those who like the display of code with xxdiff.
</td>
</tr>
<tr>
<td width="30%"><tt>--merge, -m</tt></td>
<td align=left>
Automatically select regions that would end up being selected by an automatic merge.
</td>
</tr>
<tr>
<td width="30%"><tt>--unmerge, -U</tt></td>
<td align=left>
Invoke on a single file with CVS-like merge conflicts, splitting the conflicts into two files for display. If this is specified, only a single file can then be given as argument.
</td>
</tr>
<tr>
<td width="30%"><tt>--unmerge3</tt></td>
<td align=left>
Invoke on a single file with merge conflicts generated by diff3 with the show-all option, splitting the conflicts into three files for display. If this is specified, only a single file can then be given as argument.
</td>
</tr>
<tr>
<td width="30%"><tt>--resource, -R <arg></tt></td>
<td align=left>
Pass on string 'str' to resource parser. Resources given in this manner on the command line supersede other resource mechanisms. One can specify multiple resource settings by repeating this option.
</td>
</tr>
<tr>
<td width="30%"><tt>--merged-filename, -M <arg></tt></td>
<td align=left>
Specifies the filename of the merged file for output.
</td>
</tr>
<tr>
<td width="30%"><tt>--decision, -O</tt></td>
<td align=left>
Forces the user to take a decision upon exit. The user can choose between ACCEPT, REJECT or MERGED, in which case saving to the merged filename is forced (if the merged file exists, no warning is given about overwriting the file). If there are unresolved conflicts, a popup dialog will appear. If ACCEPT or REJECT are selected, no merged file is required. In all cases, a single line is output with the decision that was made. This generic functionality is useful for better integration with scripts that require some form of decision to be made by the user.
</td>
</tr>
<tr>
<td width="30%"><tt>--indicate-input-processed</tt></td>
<td align=left>
Indicate that the input files have been entirely processed and are not needed anymore by printing out the string INPUT-PROCESSED on stdout as soon as possible. This can be used by scripts which create temporary files to delete those as soon as xxdiff has finished reading them. This only works from startup.
</td>
</tr>
<tr>
<td width="30%"><tt>--use-temporary-files, -t</tt></td>
<td align=left>
Copies the input streams/files into temporary files to perform diffing. This is useful if you want to diff FIFOs.
</td>
</tr>
<tr>
<td width="30%"><tt>--prompt-for-files, -p <arg></tt></td>
<td align=left>
If no files are specified on the command line, show a file dialog so that the user can select them. This option is ignored if any files are specified.
</td>
</tr>
</table>
<h4>Display Options</h4>
<table cellpadding=5 width="100%">
<tr>
<td width="30%"><tt>--title1 <arg></tt></td>
<td align=left>
Display 'str' instead of filename in filename label 1 (left).
</td>
</tr>
<tr>
<td width="30%"><tt>--title2 <arg></tt></td>
<td align=left>
Display 'str' instead of filename in filename label 2 (middle).
</td>
</tr>
<tr>
<td width="30%"><tt>--title3 <arg></tt></td>
<td align=left>
Display 'str' instead of filename in filename label 3 (right).
</td>
</tr>
<tr>
<td width="30%"><tt>--titlein, -N <arg></tt></td>
<td align=left>
Display 'str' for filename in given in stdin.
</td>
</tr>
<tr>
<td width="30%"><tt>--orig-xdiff</tt></td>
<td align=left>
Use settings as close as possible to original xdiff (for the romantics longing the old days of SGI... snif snif).
</td>
</tr>
<tr>
<td width="30%"><tt>--show-merged-pane</tt></td>
<td align=left>
Display the merged pane on startup.
</td>
</tr>
</table>
</div><p>Note that the last few options are provided compatible with common GNU diff
options that the user might want to use, as a mere convenience. Note also that
xxdiff options are a superset of the original xdiff options, so that xxdiff is
compatible with old SGI scripts that use xdiff. xxdiff options follow the GNU
conventions for command-line options.</p>
</div>
<div class="section" id="using-xxdiff-as-a-short-lived-application">
<h2><a class="toc-backref" href="#id10">3.3 Using xxdiff as a short-lived application</a></h2>
<p>xxdiff has not been designed with the intent of being used over multiple sets of
files over the course of one execution---that is, it has been built around the
idea that you would execute it once over a single set of inputs, use it, then
exit, rather than to open new files again using the 'file' menu features without
exiting. The 'file' menu features are provided as a convenience, to allow one
to occasionally replace one of the files during an execution. That is the
reason why you can't open xxdiff with just one file. It is just not useful that
way.</p>
</div>
</div>
<div class="section" id="general-operation">
<h1><a class="toc-backref" href="#id11">4 General operation</a></h1>
<p>This section describes general features and operation of xxdiff.</p>
<div class="section" id="the-text-area">
<h2><a class="toc-backref" href="#id12">4.1 The text area</a></h2>
<p>xxdiff shows up with two or three text regions that display the text of the
files to compare, with color-coded blocks that indicate regions of text (lines)
that have changes (specific sections contain a list and descriptions on what
types of change can appear). Each of these regions of text is called a "hunk"
in diff terminology (for more about this, see the GNU diff manual). The text
area can be scrolled vertically and horizontally, when necessary.</p>
<p>Corresponding regions of text are aligned between the files. Since changed
regions do not necessarily contains the same number of lines, empty alignment
lines are appended to the shorter regions in order to keep the corresponding
lines aligned (this is a simple way of solving the alignment problem; an
alternate solution would have been to implement a smart type of scrolling with
lines indicating correspondence of regions between them).</p>
<p>All the colors can be individually configured using the display options dialog
or resources. The display dialog contains a legend of all the colors. Note
that the default colors for different regions are often set to be the same to
other types of lines when it is not necessary to dissociate them, to avoid
visual clutter. You could however, customize every region to be of a different
color, for example, perhaps you would want to have the dummy lines drawn of a
special color to indicate that they are not really part of the text.</p>
<p>In the text area, there is a cursor that in indicates the current line of text
being worked on. This cursor can be optionally hidden.</p>
<div class="section" id="horizontal-diffs">
<h3><a class="toc-backref" href="#id13">4.1.1 Horizontal diffs</a></h3>
<p>Each of the diff hunks is normally displayed in one color, but if horizontal
diffs is enabled, for each line, xxdiff find the smallest differing part of the
line that differs and displays that in a different, highlighted color. This
allows the user to more quickly visualize exactly what has changed between the
two lines of text. No need to mention, this is highly addictive and is now
enabled by default. This is the "single horizontal diffs" mode.</p>
<p>When there are no more than two pieces of text on a single line, if the
differing parts of the lines are not too long (e.g. less than 100 chars), the
horizontal diffs can isolate the differences within the line. This is the
"multiple horizontal diffs" mode. In this mode, we require that between
horizontal changes, inserts or deletes, there be a minimal number of common
context characters, so that the eye can make out what has change between the
lines. This value is configurable (see resources section).</p>
<p>When computing horizontal diffs, <strong>changes</strong> in whitespace can be optionally
ignored. However, if whitespace has been added in the middle of a word, it will
still be highlighted.</p>
</div>
<div class="section" id="per-hunk-ignore-whitespace">
<h3><a class="toc-backref" href="#id14">4.1.2 Per-hunk ignore whitespace</a></h3>
<p>Diff Hunks with text on all sides but with just whitespace or line break
differences will be detected by xxdiff and marked with a special flag. If the
feature is enabled, those hunks will be drawn of a different color, thus
enabling the reviewer to quickly ignore those hunks. See the merge review
features section for more details.</p>
</div>
<div class="section" id="navigation">
<h3><a class="toc-backref" href="#id15">4.1.3 Navigation</a></h3>
<p>xxdiff supports a subset of the emacs bindings, as well as support for most of
the standard keys found on AT keyboards (PgUp, PgDown, arrow keys, Home, End).</p>
<p>Default bindings include:</p>
<ul class="simple">
<li>Ctrl-V, Alt-V: scroll up/down;</li>
<li>Ctrl-N, Ctrl-P: move cursor one line up/down;</li>
<li>Home, End: move cursor to beginning/end of files;</li>
<li>N, P: move to next/previous diff hunk;</li>
<li>B, O: mov the next/previous <strong>unselected</strong> diff hunk.</li>
</ul>
<p>Explore the menus to find out about the other default bindings. You can
customize all the key bindings using the resources.</p>
</div>
<div class="section" id="pop-up-menu">
<h3><a class="toc-backref" href="#id16">4.1.4 Pop-up menu</a></h3>
<p>Using the third mouse button in the text area brings a popup menu that contains
cursor-sensitive commands, as well as the common commands to navigate between
hunks.</p>
</div>
<div class="section" id="searching">
<h3><a class="toc-backref" href="#id17">4.1.5 Searching</a></h3>
<p>You can search the text by bringing up the search dialog. Type your search
query and press enter, which will apply the search and display diamond shaped
match locations in the overview area. You can then navigate the search results
using Ctrl-F and Ctrl-B. Searching will occur in all files simultaneously. You
have to reapply the search to search for something else.</p>
<p>You can also move the cursor and display to a particular line from the search
dialog.</p>
</div>
<div class="section" id="other-options">
<h3><a class="toc-backref" href="#id18">4.1.6 Other options</a></h3>
<p>Carriage returns (CR) characters in DOS files can be hidden in the text area.</p>
<p>Tabs by default are rendered aligned at each 8 characters, but can be set to any
value by changing the tab width option.</p>
</div>
<div class="section" id="display-options">
<h3><a class="toc-backref" href="#id19">4.1.7 Display options</a></h3>
<p>The display options can be fully customized by bringing up the options dialog
with the "Display -> Display Options..." menu item. From that dialog you can
also customize the colors and fonts.</p>
</div>
</div>
<div class="section" id="redoing-the-diffs">
<h2><a class="toc-backref" href="#id20">4.2 Redoing the diffs</a></h2>
<p>If a file has changed while xxdiff is up, and there is need to recompute the
diffs, invoke the "redo diff" command from the edit menu. The arguments used
with the surrogate diff command can be changed by using the dialog provided by
the "diff arguments" command. One can also replace a loaded file with a
different one by using the "open" commands from the "file" menu.</p>
</div>
<div class="section" id="other-ui-elements">
<h2><a class="toc-backref" href="#id21">4.3 Other UI elements</a></h2>
<p>The following other UI elements can be optionally hidden or displayed from the
Windows menu or Display menu (use the resource file to display or hide them on
startup):</p>
<ul class="simple">
<li><strong>Overview area.</strong> On the right side, an area that shows a color-coded
pictorial rendering of the diff hunks for the whole files, with
correspondences. This area also shows the as a rectangle the currently
visible portion of text for each of the files. This rectangle can also be
used as a scrollbar. In addition, a marker indicates the location of the line
cursor.</li>
<li><strong>Remaining Unselected Hunks.</strong> Just above the overview area is a label that
indicates the number of remaining unselected diff hunks between the files. In
addition, if that number is zero, and if the files are identical
byte-for-byte, it display a "(=)" string next to the number, so that you can
figure out quickly if the files have any ignored whitespace changes or not
(this can be important during merge review).</li>
<li><strong>Toolbar.</strong> A toolbar that gives access to the common motion and selection
commands.</li>
<li><strong>Filenames.</strong> For each file, a region at the top that displays the filename.
You can customize what shows up in this region from the command-line.
Clicking on the filename puts it in the clipboard for cut-n-paste. (This
label will intelligently display the end part of the filename if it is too
long to fit.) This region also display the text line that the line cursor is
in, for each file. You can customize what gets displayed in this labeled by
using a command-line option.</li>
<li><strong>Line numbers.</strong> For each file, a thin window that display the number of each
line (dummy alignment lines don't have any number).</li>
<li><strong>Vertical line.</strong> A vertical line can be drawn in the text area, at a
specified column. This can be used for alignment purposes or for verifying
that a line doesn't extend beyond a specified number of characters (many
people like to limit their source code to fit in e.g. 80 characters).</li>
<li><strong>Merged view</strong>. A view of the file resulting from the currently selected
regions (see section on <a class="reference internal" href="#merged-view">Merged view</a> below).</li>
</ul>
</div>
</div>
<div class="section" id="comparing-two-files">
<h1><a class="toc-backref" href="#id22">5 Comparing two files</a></h1>
<p>When invoking xxdiff with two files, we normally think of an old and a new file,
where:</p>
<pre class="literal-block">
xxdiff old new
</pre>
<p>The default colors used here are symmetrical, so invoking the files in a
different order will result in regions being assigned the same colors.</p>
<div class="section" id="types-of-hunks">
<h2><a class="toc-backref" href="#id23">5.1 Types of hunks</a></h2>
<p>The following hunk types can appear when comparing two files:</p>
<ul class="simple">
<li><strong>Same</strong>: no change in that region;</li>
<li><strong>Insert</strong>: text has been added to the new file;</li>
<li><strong>Delete</strong>: text has been deleted from the new file;</li>
<li><strong>Diff</strong>: text has changed between the files.</li>
</ul>
<p>Note that each Diff or Insert hunk is always separated by a Same hunk (if it was
not the case, then two different contiguous hunks would necessarily get merged
into a single Diff hunk).</p>
</div>
<div class="section" id="options">
<h2><a class="toc-backref" href="#id24">5.2 Options</a></h2>
<p>You can ignore trailing blanks, whitespace, or case for two-way diffs. See GNU
diff(1) manual for information these features. xxdiff provides menu items to
access these diff options. Those items simply add or remove switches to the diff
program command-line and call the diff program again to regenerate the diffs.</p>
<p>Switches for GNU diff algorithm quality are also provided in the UI as a
convenience.</p>
</div>
</div>
<div class="section" id="comparing-three-files">
<h1><a class="toc-backref" href="#id25">6 Comparing three files</a></h1>
<p>When invoking xxdiff with three files, we think of an ancestor file, a "mine"
file, which the current user has been working on, and a "yours" file which
someone else has merged in the main tree. They are normally specified in the
following order:</p>
<pre class="literal-block">
xxdiff mine older yours
</pre>
<p>The default colors used here are symmetrical, so invoking the files in a
different order will result in regions being assigned the same colors.</p>
<div class="section" id="id1">
<h2><a class="toc-backref" href="#id26">6.1 Types of hunks</a></h2>
<p>The following hunk types can appear when comparing two files:</p>
<ul class="simple">
<li><strong>Same</strong>: no change in that region;</li>
<li><strong>Insert</strong>: text has been added one of the files;</li>
<li><strong>Delete</strong>: text has been deleted from one of the files;</li>
<li><strong>DiffOne</strong>: text is different in one of the three files but the two
other files are the same.</li>
<li><strong>DiffAll</strong>: text is different in all of the three files.</li>
<li><strong>DiffDel</strong>: text is different in two files and is absent in the
third.</li>
</ul>
</div>
<div class="section" id="ignoring-one-file">
<h2><a class="toc-backref" href="#id27">6.2 Ignoring one file</a></h2>
<p>In three-way mode, it can be useful to temporarily ignore one of the three files
to concentrate on the differences between the other two. This feature is
available from the Display menu and is performed by simply remapping colors at
display time and doesn't require xxdiff to recompute the differences. The
ignored file will be displayed as grayed out.</p>
</div>
</div>
<div class="section" id="comparing-two-directories">
<h1><a class="toc-backref" href="#id28">7 Comparing two directories</a></h1>
<p>When invoking xxdiff with two directories, we normally think of an old and a new
directory, where:</p>
<pre class="literal-block">
xxdiff olddir newdir
</pre>
<p>The default colors used here are symmetrical, so invoking the files in a
different order will result in regions being assigned the same colors.</p>
<div class="note">
<p class="first admonition-title">Note</p>
<p class="last">If you want to compare the files within directories all at once, use
the <tt class="docutils literal"><span class="pre">--recursive</span></tt> option and you will get a single xxdiff with
all the file differences. xxdiff accomplishes that by passing on
the option to the subordinate diff program (e.g., GNU diff).</p>
</div>
<div class="section" id="id2">
<h2><a class="toc-backref" href="#id29">7.1 Types of hunks</a></h2>
<p>The following hunk types can appear when comparing two directories:</p>
<ul class="simple">
<li><strong>Same</strong>: files are present in both directories and have no
differences;</li>
<li><strong>Insert</strong>: file has been added to directory;</li>
<li><strong>Delete</strong>: file has been removed from directory;</li>
<li><strong>Diff</strong>: files are present in both directories and have
differences;</li>
<li><strong>Directories</strong>: directories are present in both directories but we
don't know if they differ;</li>
</ul>
</div>
<div class="section" id="id3">
<h2><a class="toc-backref" href="#id30">7.2 Options</a></h2>
<p>The directories can be compared recursively, in which case no directories will
be shown. You can activate this from the command-line or from the ui.</p>
<p>You can also instruct xxdiff not to display the files that haved changed, just
the insertions and deletions.</p>
</div>
<div class="section" id="file-operations">
<h2><a class="toc-backref" href="#id31">7.3 File operations</a></h2>
<p>In directory diffs mode, you can invoke an xxdiff on the pair of files or
directories under the line cursor. This allows you to start xxdiff on a pair of
directories, and then to examine the pairs of files that have changed, all from
that directory diff. That functionality is available from the popup menu in the
text area (right-click).</p>
<p>You can also copy and remove files from that menu, see
<a class="reference internal" href="#merging-files-and-resolving-conflicts">Merging files and resolving conflicts</a> section for details.</p>
</div>
</div>
<div class="section" id="merging-files-and-resolving-conflicts">
<h1><a class="toc-backref" href="#id32">8 Merging files and resolving conflicts</a></h1>
<p>Merging files is the process of manually resolving conflicts when two files
cannot be merged automatically. This is a common problem when doing parallel
software development where multiple developers could be working on the same
files.</p>
<p>Most of the merging can be handled automatically, because if the changes were
applied to fairly independent parts of the files, most of the changes will be
insertions or deletions. However, when overlapping changes occur, no automatic
decision can be taken.</p>
<p>xxdiff can be used to resolve conflicts by letting the user "select" which side
of a diff hunk should be killed and what side should be kept. The user can take
this decision on a line-by-line basis, and can decide to keep both sides as
well, in any order. xxdiff then allows the user to save the resulting file.</p>
<div class="section" id="selecting-regions">
<h2><a class="toc-backref" href="#id33">8.1 Selecting regions</a></h2>
<p>Selecting a diff hunk can be carried out by clicking on it. The colors update
to display which side is selected for output. You can select individual lines
with the second button. There are three types of selection that you can carry
out:</p>
<ul class="simple">
<li>select clicked file;</li>
<li>select no file (take the decision that nothing will be output);</li>
<li>leave the line/hunk unselected.</li>
</ul>
<p>If you want to select more than one side, you have to invoke the split-swap-join
command (default is on 'S' key), which will split the current diff hunk if it's
a Diff hunk so you can select the pieces you want from both sides. Further
invocations of this command will cause swapping the regions, looping through all
the different ordering possibilities, and finally joining the regions again
(preserving selections where it is possible).</p>
<p>If you want to select individual lines, use the second button of the mouse on
the lines that you want to select.</p>
</div>
<div class="section" id="saving-the-resulting-file">
<h2><a class="toc-backref" href="#id34">8.2 Saving the resulting file</a></h2>
<p>The resulting file can be saved under one of the input filenames, under a
computed "merged" filename, or under a new filename (from the File menu). The
intended "merged" filename can be built from the input filenames and it's format
can be specified through the resources file or the command line.</p>
<p>If some regions are left unselected, the save
dialog will have some widgets that allows you to decide how you want to save the
unselected hunks:</p>
<ul class="simple">
<li><strong>Save as merge conflicts:</strong> save all sides, separating them with merge
conflict markers similar to those inserted by CVS;</li>
<li><strong>Save with conditionals:</strong> save all sides, separating them with C
pre-processor directives, so that you could then use a #define directive to
have one set of changes or another be active if compiling.</li>
</ul>
<p>The markers and pre-processor directives can be customized through the resources
file.</p>
<p>There is a customization flag that lets you specify that xxdiff should warn you
when trying to save with some regions unselected. It will bring the cursor to
the first remaining unselected region and ask for confirmation. This can be used
to insure that the user has made all the required decisions before saving and
that no text will be forgotten.</p>
<p>You could also decide to save only the selected regions, from the File menu.
This can be useful for making comments when reviewing merges.</p>
<div class="section" id="forcing-output-of-a-merged-file-and-better-script-integration">
<h3><a class="toc-backref" href="#id35">8.2.1 Forcing Output of a Merged File and Better Script Integration</a></h3>
<p>xxdiff is often used for merging conflicts, replacing some of the tools that are
provided with popular configuration management systems. Sometime it is
"required" that the conflict resolution tool output the merged file. To that
extent, xxdiff has a special mode triggered with the option <tt class="docutils literal"><span class="pre">--decision</span></tt> to
address specifically that need. When specified, the exit functionality is
replaced with three functions:</p>
<ul class="simple">
<li>exit with ACCEPT: the string "ACCEPT" is printed on stdout. The left file is
automatically saved into the merged file;</li>
<li>exit with REJECT: the string "REJECT" is printed on stdout. The right file is
automatically saved into the merged file;</li>
<li>exit with MERGED: the string "MERGED" is printed on stdout. If there are
remaining conflictual hunks when exiting, a popup will ask how to deal with
them, you are forced to make a selection on all the hunks.</li>
</ul>
<p>We want to allow for a fast process where the user is presented with a series of
xxdiffs and has to make decisions on each. The calling script can then do
whatever is required to integrate the resulting file into its workflow.</p>
<p>If the window is killed, the merge file is not saved and NODECISION is output
(the script that calls xxdiff must be prepared to deal with that somehow).
Also, note that you are responsible for deleting the merged file. Also in this
mode, if the merged file already exists, it gets overwritten without warning.</p>
</div>
</div>
<div class="section" id="rapid-sequential-merge-conflict-resolution">
<h2><a class="toc-backref" href="#id36">8.3 Rapid, sequential merge conflict resolution</a></h2>
<p>Some people like to merge files within a guided process, where the visual diff
program asks for a merge decision for each conflictual hunk one-by-one and then
asks for a filename to use for saving the merged output. For example, that is
how ClearCase's xcleardiff works when querying the user to resolve conflicts.</p>
<p>There are a set of commands under the Region menu that allows one to rapidly
take decisions on merge conflicts. These commands perform a selection and then
automatically move the cursor to the next unselected region. If there are no
more unselected regions, the save dialog is brought up automatically.</p>
</div>
<div class="section" id="automatic-merge">
<h2><a class="toc-backref" href="#id37">8.4 Automatic merge</a></h2>
<p>By default, xxdiff doesn't perform any selections. You can instruct xxdiff to
perform the initial selection of the non-conflictual regions automatically.
This can be specified from the command-line or from the Global menu.</p>
<p>Just like xxdiff can be instructed not to show up if there aren't any
differences between the files, xxdiff can also be instructed not to show up if
after the automatic merge there remains no conflictual regions. You can use the
return value to find out.</p>
<p>(Note that we do not want to add a feature to xxdiff to allow it to output to
the merged file if there are no conflics, because that would amount to make
xxdiff a non-graphical tool, while its mandate is to use such tools underneath
and display their output. Besides, that would be the single case where xxdiff
writes to a file without a file dialog. You can very easily implement this from
within a script using the return value of either diff or xxdiff.)</p>
<div class="section" id="requiring-an-output-file">
<h3><a class="toc-backref" href="#id38">8.4.1 Requiring an output file</a></h3>
<p>Sometimes we want to force the user into producing a merged output file (when
calling xxdiff from an update script, for example). Thus there is a feature to
put xxdiff in this mode (see resources or invocation section). In this mode, the
user must save before exiting xxdiff (exiting will prompt for save filename).</p>
</div>
</div>
<div class="section" id="merging-directories">
<h2><a class="toc-backref" href="#id39">8.5 Merging directories</a></h2>
<p>Selecting is disable in directory diffs mode, where the concept of "saving" a
directory does not really make sense. However, you can apply changes to a
directory from xxdiff, such as copying and removing files under the line cursor.
This can be invoked from the popup menu in the text area.</p>
</div>
<div class="section" id="merged-view">
<h2><a class="toc-backref" href="#id40">8.6 Merged view</a></h2>
<p>During selection or before saving the selected regions into the result file, you
might want to visualize what it would look like with the current selections.
You can display the "merged view" for this purpose, an dedicated window
showing the merge output, that updates interactively as you make selections.</p>
<p>This view will scroll to match the main display. Unselected regions are shown
in this view with oblique lines ("in construction" style), and merge decisions
are slightly highlighted as well. This output allows you to review the merge
decisions before committing the file to output.</p>
</div>
</div>
<div class="section" id="merge-review-features">
<h1><a class="toc-backref" href="#id41">9 Merge review features</a></h1>
<p>One of the most important uses of xxdiff is to assist the merge review process,
where one developer visualizes the file changes of another and approves or
rejects those changes, making comments along the way.</p>
<p>For this purpose, xxdiff puts selected text (i.e. when you click on a diff hunk)
in the clipboard text buffer when you select it. Thus, the merge cop can select
a region, and paste the results in a neighboring editor window.</p>
<p>These snippets of code will typically be interspersed with comments. xxdiff can
be format the line contents before they are copied to the clipboard, to make
them distinct from the merge comments. This can be enabled using the "format
clipboard text" option. The clipboard line format is a string that contains
format specifiers similar to printf for each line to be formatted prior to being
put on the clipboard. The following specifiers are allowed:</p>
<dl class="docutils">
<dt><tt class="docutils literal">%N</tt></dt>
<dd>file line (0 is leftmost file)</dd>
<dt><tt class="docutils literal">%L</tt></dt>
<dd>line number</dd>
<dt><tt class="docutils literal">%F</tt></dt>
<dd>filename</dd>
<dt><tt class="docutils literal">%s</tt></dt>
<dd>line contents</dd>
</dl>
<p>There is also a "clipboard header format" resource for adding the filename at
the top of the copied text. This is useful for quickly pasting into a merge
comments file.</p>
<p>Also note that clicking on the filename labels will put the filenames in the
clipboard for similar cut-n-paste action. This can be useful when reviewing
ClearCase revision files, which often have very long p-names.</p>
<div class="section" id="variable-text-selection">
<h2><a class="toc-backref" href="#id42">9.1 Variable text selection</a></h2>
<p>You can press ALT and Button1 to select an arbitrary number of lines. The
selected lines will be marked with a special border to show what gets put in the
clipboard. This is very useful when you don't want to quote an entire diff hunk,
or a section of text that straddles hunks.</p>
</div>
<div class="section" id="id4">
<h2><a class="toc-backref" href="#id43">9.2 Per-hunk ignore whitespace</a></h2>
<p>Many source code changes often just reindent or reorganize blocks of code, and
result in many isolated hunks with no relevant changes to look at (for languages
that don't use whitespace semantics anyway). For merge police duties, this can
lead to more work to review changes, and typically, programmers (and groups,
sometimes) will explicitly choose not to allow code beautification because of
that very reason (...and the directed anger of merge cops themselves). xxdiff
now has a new feature that alleviates this problem greatly: it will scan each
diff hunk for non-whitespace changes, and if the only changes are of whitespace,
it will mark the hunk with a special flag. The "ignore per-hunk whitespace"
feature will draw these hunks with a different color, by default, a color very
similar to the "same" hunks. The hunks are not ignored, however, as skipping
from hunk to hunk will still stop at these hunks, but they can be very quickly
ignored by the merge police. So go on ahead now, and reindent that code without
fear.</p>
</div>
</div>
<div class="section" id="unmerging-merge-conflicts">
<h1><a class="toc-backref" href="#id44">10 Unmerging merge conflicts</a></h1>
<p>Unmerging merge conflicts is a special input mode of xxdiff where a single file
containing the result of an automatic merge of two files is split into two files
and displayed as such.</p>
<p>This may sound like a "trava lengua", but unmerging merge conflicts can be a
very useful feature, if you like to let your source code management system
automatically perform merges and save the output without user intervention, such
as the way CVS is normally used. Typical use of the CVS update command will
merge the main branch changes into your local copy files. When there are
conflicts, your files are modified to contain both your changes and the main
branch changes in the regions that conflict. CVS inserts text markers such as
the following to indicate the conflictual regions:</p>
<pre class="literal-block">
Some merged text.
>>>>>>>> MYFILE
I added this.
========
This line added in main branch.
<<<<<<<< 1.1
Some finetext.
</pre>
<p>Then, the user is notified of the conflictual files, and has to go inspect the
conflicts and resolve them by editing the file accordingly. The problem is that
it is often quite difficult (and unpleasant) to figure out exactly what happened
during the automated merge process, without the original files (note that CVS
does make a backup copy of your file before writing it over with the merged
output, see CVS manual for details).</p>
<p>To help in figuring out what happened during merge and in performing the
user-directed selections, xxdiff can be invoked in "unmerge mode" with the file
containing the merge conflicts. It parses the file and generates two files from
it, displaying them with differences. You can then perform selections as usual
to produce the final merged file.</p>
<p>Note that we think that this is not the best way of resolving conflicts, rather
just a useful feature for people who like to work this way. A better way to
merge would be to use your source code management system to fetch the common
ancestor revision, the latest/head of the main branch and to invoke xxdiff with
your file, the ancestor and the latest/head. You can also tell xxdiff to
initially perform all non-conflictual selections automatically.</p>
<div class="section" id="unmerging-merge-conflicts-with-three-files">
<h2><a class="toc-backref" href="#id45">10.1 Unmerging merge conflicts with three files</a></h2>
<p>diff3 can be used to produce a merged file in which all the three files' regions
are shown if there is a conflict. xxdiff can also parse these files and display
them as a three-way diff. You then have to invoke xxdiff with the 'unmerge3'
command-line argument to let it know you want the file split in three.</p>
</div>
</div>
<div class="section" id="editing-files">
<h1><a class="toc-backref" href="#id46">11 Editing files</a></h1>
<p>There has been a conscious decision NOT to develop xxdiff into a fully-featured
editing program. Sometimes it could be handy to be able to edit a few lines of
a difficult conflict. However, that is a task best left to your own favorite
editing program. Saving with merge conflicts will allow you to resolve those
few remaining conflicts by hand.</p>
<p>However, a few commands have been provided under the File menu to spawn an
editor on the input files. You can then redo the diff after your input file has
changed.</p>
</div>
<div class="section" id="customization-using-resource-file">
<h1><a class="toc-backref" href="#id47">12 Customization using resource file</a></h1>
<p>Much of the state of xxdiff can be customized through a resource file (actually,
some of the features can only be changed through resource customization).
By default, xxdiff looks for the file <tt class="docutils literal">.xxdiffrc</tt> located in the user's
home directory (this file location can be overridden by setting the environment
variable XXDIFFRC), and reads that file for resource definition.</p>
<p>The format of the resource file is a fairly simple list of colon-separated
resource name/value pairs, one per line:</p>
<pre class="literal-block">
resourceName: "value"
</pre>
<p>Any text after "#" on a line is considered a comment and ignored.</p>
<p>Some resources may require string delimiters (double-quotes) around their value
specification, but not all (see below).</p>
<p>You can also specify additional resources on the command-line, which take
precedence over the resources specified in the resource file. To get a
complete list of the available resources, use the <tt class="docutils literal"><span class="pre">--list-resources</span></tt>
command-line option (see Options section).</p>
<p>Trick: you can use different resources files by invoking xxdiff like this in
most shells:</p>
<pre class="literal-block">
XXDIFFRC=myrcfile xxdiff file1 file2
</pre>
<div class="section" id="automatic-generation-of-the-resource-file">
<h2><a class="toc-backref" href="#id48">12.1 Automatic generation of the resource file</a></h2>
<p>You can generate a resource file containing only the differences from the
defaults from the "File -> Save Option..." menu command. This can be
used to "save" the current customizable options into <tt class="docutils literal"><span class="pre">~/.xxdiffrc</span></tt>.</p>
</div>
</div>
<div class="section" id="resource-reference">
<h1><a class="toc-backref" href="#id49">13 Resource reference</a></h1>
<p>This section contains a reference of the all the currently supported
customizable resources in this version of xxdiff.</p>
<div id="invocation">
<PRE>
Geometry: 1200x600
</PRE>
<BLOCKQUOTE>
Preferred geometry upon initialization. Format is the same a X geometry specification, plus you can also use `Maximize' to maximize on startup
</BLOCKQUOTE>
<PRE>
Style: "Cleanlooks"
</PRE>
<BLOCKQUOTE>
Preferred Qt style, see Qt documentation for more details. The style can otherwise be specified through command-line arguments.
</BLOCKQUOTE>
<PRE>
Accel.[NAME].: "[ACCELERATOR]"
</PRE>
<BLOCKQUOTE>
Accelerators for most functionality. The name of the accelerator should be explicit enough that you can find which function it is bound to.
<PRE>
Accel.Exit: "<key>"
Accel.ExitAccept: "<key>"
Accel.ExitMerged: "<key>"
Accel.ExitReject: "<key>"
Accel.OpenLeft: "<key>"
Accel.OpenMiddle: "<key>"
Accel.OpenRight: "<key>"
Accel.SaveAsLeft: "<key>"
Accel.SaveAsMiddle: "<key>"
Accel.SaveAsRight: "<key>"
Accel.SaveAsMerged: "<key>"
Accel.SaveAs: "<key>"
Accel.SaveSelectedOnly: "<key>"
Accel.EditLeft: "<key>"
Accel.EditMiddle: "<key>"
Accel.EditRight: "<key>"
Accel.SaveOptions: "<key>"
Accel.Search: "<key>"
Accel.SearchForward: "<key>"
Accel.SearchBackward: "<key>"
Accel.ScrollDown: "<key>"
Accel.ScrollUp: "<key>"
Accel.CursorDown: "<key>"
Accel.CursorUp: "<key>"
Accel.CursorTop: "<key>"
Accel.CursorBottom: "<key>"
Accel.RedoDiff: "<key>"
Accel.EditDiffOptions: "<key>"
Accel.EditDisplayOptions: "<key>"
Accel.DiffFilesAtCursor: "<key>"
Accel.NextAndDiffFiles: "<key>"
Accel.CopyFileRightToLeft: "<key>"
Accel.CopyFileLeftToRight: "<key>"
Accel.RemoveFileLeft: "<key>"
Accel.RemoveFileRight: "<key>"
Accel.NextDifference: "<key>"
Accel.PreviousDifference: "<key>"
Accel.NextUnselected: "<key>"
Accel.PreviousUnselected: "<key>"
Accel.SelectGlobalLeft: "<key>"
Accel.SelectGlobalMiddle: "<key>"
Accel.SelectGlobalRight: "<key>"
Accel.SelectGlobalNeither: "<key>"
Accel.SelectGlobalUnselect: "<key>"
Accel.SelectGlobalUnselectedLeft: "<key>"
Accel.SelectGlobalUnselectedMiddle: "<key>"
Accel.SelectGlobalUnselectedRight: "<key>"
Accel.SelectGlobalUnselectedNeither: "<key>"
Accel.SelectGlobalMerge: "<key>"
Accel.SelectRegionLeft: "<key>"
Accel.SelectRegionMiddle: "<key>"
Accel.SelectRegionRight: "<key>"
Accel.SelectRegionNeither: "<key>"
Accel.SelectRegionUnselect: "<key>"
Accel.SelectRegionLeftAndNext: "<key>"
Accel.SelectRegionMiddleAndNext: "<key>"
Accel.SelectRegionRightAndNext: "<key>"
Accel.SelectRegionNeitherAndNext: "<key>"
Accel.SelectRegionSplitSwapMerge: "<key>"
Accel.SelectLineLeft: "<key>"
Accel.SelectLineMiddle: "<key>"
Accel.SelectLineRight: "<key>"
Accel.SelectLineNeither: "<key>"
Accel.SelectLineUnselect: "<key>"
Accel.TabsAt3: "<key>"
Accel.TabsAt4: "<key>"
Accel.TabsAt8: "<key>"
Accel.IgnoreTrailing: "<key>"
Accel.IgnoreWhitespace: "<key>"
Accel.IgnoreCase: "<key>"
Accel.IgnoreBlankLines: "<key>"
Accel.HideCarriageReturns: "<key>"
Accel.DirDiffIgnoreFileChanges: "<key>"
Accel.DirDiffRecursive: "<key>"
Accel.UseInternalDiff: "<key>"
Accel.QualityNormal: "<key>"
Accel.QualityFastest: "<key>"
Accel.QualityHighest: "<key>"
Accel.TogglePaneMergedView: "<key>"
Accel.TogglePopupMergedView: "<key>"
Accel.ToggleToolbar: "<key>"
Accel.ToggleLineNumbers: "<key>"
Accel.ToggleMarkers: "<key>"
Accel.ToggleVerticalLine: "<key>"
Accel.ToggleOverview: "<key>"
Accel.ToggleShowFilenames: "<key>"
Accel.HorizontalDiffNone: "<key>"
Accel.HorizontalDiffSingle: "<key>"
Accel.HorizontalDiffMultiple: "<key>"
Accel.ToggleIgnoreHorizontalWhitespace: "<key>"
Accel.ToggleIgnorePerHunkWhitespace: "<key>"
Accel.ToggleFormatClipboardText: "<key>"
Accel.IgnoreFileNone: "<key>"
Accel.IgnoreFileLeft: "<key>"
Accel.IgnoreFileMiddle: "<key>"
Accel.IgnoreFileRight: "<key>"
Accel.HelpManPage: "<key>"
Accel.HelpOnContext: "<key>"
Accel.HelpAbout: "<key>"
Accel.MergedClose: "<key>"
Accel.FontResizeBigger: "<key>"
Accel.FontResizeSmaller: "<key>"
</PRE>
</BLOCKQUOTE>
<PRE>
FontApp: "<xfld-font-spec>"
</PRE>
<BLOCKQUOTE>
General application font, used for widgets and menus.
</BLOCKQUOTE>
<PRE>
FontText: "<xfld-font-spec>"
</PRE>
<BLOCKQUOTE>
Font to use for diff text view.
</BLOCKQUOTE>
<PRE>
Color.[NAME].[Fore|Back]: "[COLOR]"
</PRE>
<BLOCKQUOTE>
Color choice for diff hunks, and for certain other items in the text view.
<PRE>
Color.Same.Fore: "<color>"
Color.Same.Back: "<color>"
</PRE>
<BLOCKQUOTE>
Identical text
</BLOCKQUOTE>
<PRE>
Color.SameBlank.Fore: "<color>"
Color.SameBlank.Back: "<color>"
</PRE>
<BLOCKQUOTE>
Identical text (blank side, for filler lines when ignore-blank-lines is enabled)
</BLOCKQUOTE>
<PRE>
Color.Insert.Fore: "<color>"
Color.Insert.Back: "<color>"
</PRE>
<BLOCKQUOTE>
Insert text (side with text)
</BLOCKQUOTE>
<PRE>
Color.InsertBlank.Fore: "<color>"
Color.InsertBlank.Back: "<color>"
</PRE>
<BLOCKQUOTE>
Insert text (blank side)
</BLOCKQUOTE>
<PRE>
Color.DiffAll.Fore: "<color>"
Color.DiffAll.Back: "<color>"
</PRE>
<BLOCKQUOTE>
Different in all files
</BLOCKQUOTE>
<PRE>
Color.DiffAllSup.Fore: "<color>"
Color.DiffAllSup.Back: "<color>"
</PRE>
<BLOCKQUOTE>
Different in all files (shadowed)
</BLOCKQUOTE>
<PRE>
Color.DiffAllOnly.Fore: "<color>"
Color.DiffAllOnly.Back: "<color>"
</PRE>
<BLOCKQUOTE>
Different in all files (only text on lines)
</BLOCKQUOTE>
<PRE>
Color.DiffAllNonly.Fore: "<color>"
Color.DiffAllNonly.Back: "<color>"
</PRE>
<BLOCKQUOTE>
Different in all files (blank side)
</BLOCKQUOTE>
<PRE>
Color.DiffOne.Fore: "<color>"
Color.DiffOne.Back: "<color>"
</PRE>
<BLOCKQUOTE>
(diff3 only) Different in one file
</BLOCKQUOTE>
<PRE>
Color.DiffOneSup.Fore: "<color>"
Color.DiffOneSup.Back: "<color>"
</PRE>
<BLOCKQUOTE>
(diff3 only) Different in one file (shadowed)
</BLOCKQUOTE>
<PRE>
Color.DiffOneOnly.Fore: "<color>"
Color.DiffOneOnly.Back: "<color>"
</PRE>
<BLOCKQUOTE>
(diff3 only) Different in one file (only text on lines)
</BLOCKQUOTE>
<PRE>
Color.DiffOneNonly.Fore: "<color>"
Color.DiffOneNonly.Back: "<color>"
</PRE>
<BLOCKQUOTE>
(diff3 only) Different in one file (blank side)
</BLOCKQUOTE>
<PRE>
Color.DiffTwo.Fore: "<color>"
Color.DiffTwo.Back: "<color>"
</PRE>
<BLOCKQUOTE>
(diff3 only) Common text in two files only
</BLOCKQUOTE>
<PRE>
Color.DiffTwoSup.Fore: "<color>"
Color.DiffTwoSup.Back: "<color>"
</PRE>
<BLOCKQUOTE>
(diff3 only) Common text in two files only (shadowed)
</BLOCKQUOTE>
<PRE>
Color.DiffTwoOnly.Fore: "<color>"
Color.DiffTwoOnly.Back: "<color>"
</PRE>
<BLOCKQUOTE>
(diff3 only) Common text in two files only (only text on lines)
</BLOCKQUOTE>
<PRE>
Color.DiffTwoNonly.Fore: "<color>"
Color.DiffTwoNonly.Back: "<color>"
</PRE>
<BLOCKQUOTE>
(diff3 only) Common text in two files only (blank side)
</BLOCKQUOTE>
<PRE>
Color.Delete.Fore: "<color>"
Color.Delete.Back: "<color>"
</PRE>
<BLOCKQUOTE>
(diff3 only) Delete text (side with text)
</BLOCKQUOTE>
<PRE>
Color.DeleteBlank.Fore: "<color>"
Color.DeleteBlank.Back: "<color>"
</PRE>
<BLOCKQUOTE>
(diff3 only) Delete text (blank side)
</BLOCKQUOTE>
<PRE>
Color.DiffDel.Fore: "<color>"
Color.DiffDel.Back: "<color>"
</PRE>
<BLOCKQUOTE>
(diff3 only) Different and delete text
</BLOCKQUOTE>
<PRE>
Color.DiffDelSup.Fore: "<color>"
Color.DiffDelSup.Back: "<color>"
</PRE>
<BLOCKQUOTE>
(diff3 only) Different and delete text (shadowed)
</BLOCKQUOTE>
<PRE>
Color.DiffDelOnly.Fore: "<color>"
Color.DiffDelOnly.Back: "<color>"
</PRE>
<BLOCKQUOTE>
(diff3 only) Different and delete text (only text on lines)
</BLOCKQUOTE>
<PRE>
Color.DiffDelNonly.Fore: "<color>"
Color.DiffDelNonly.Back: "<color>"
</PRE>
<BLOCKQUOTE>
(diff3 only) Different and delete text (blank side)
</BLOCKQUOTE>
<PRE>
Color.DiffDelBlank.Fore: "<color>"
Color.DiffDelBlank.Back: "<color>"
</PRE>
<BLOCKQUOTE>
(diff3 only) Different and delete text (empty side)
</BLOCKQUOTE>
<PRE>
Color.Selected.Fore: "<color>"
Color.Selected.Back: "<color>"
</PRE>
<BLOCKQUOTE>
Selected text
</BLOCKQUOTE>
<PRE>
Color.SelectedSup.Fore: "<color>"
Color.SelectedSup.Back: "<color>"
</PRE>
<BLOCKQUOTE>
Selected text (shadowed)
</BLOCKQUOTE>
<PRE>
Color.IgnoreDisplay.Fore: "<color>"
Color.IgnoreDisplay.Back: "<color>"
</PRE>
<BLOCKQUOTE>
Ignored for display purposes
</BLOCKQUOTE>
<PRE>
Color.IgnoreDisplaySup.Fore: "<color>"
Color.IgnoreDisplaySup.Back: "<color>"
</PRE>
<BLOCKQUOTE>
Ignored for display purposes (shadowed)
</BLOCKQUOTE>
<PRE>
Color.IgnoreDisplayOnly.Fore: "<color>"
Color.IgnoreDisplayOnly.Back: "<color>"
</PRE>
<BLOCKQUOTE>
Ignored for display purposes (only text on lines)
</BLOCKQUOTE>
<PRE>
Color.IgnoreDisplayNonly.Fore: "<color>"
Color.IgnoreDisplayNonly.Back: "<color>"
</PRE>
<BLOCKQUOTE>
Ignored for display purposes (blank side)
</BLOCKQUOTE>
<PRE>
Color.Deleted.Fore: "<color>"
Color.Deleted.Back: "<color>"
</PRE>
<BLOCKQUOTE>
Deleted text
</BLOCKQUOTE>
<PRE>
Color.DeletedSup.Fore: "<color>"
Color.DeletedSup.Back: "<color>"
</PRE>
<BLOCKQUOTE>
Deleted text (shadowed)
</BLOCKQUOTE>
<PRE>
Color.Ignored.Fore: "<color>"
Color.Ignored.Back: "<color>"
</PRE>
<BLOCKQUOTE>
Ignore text
</BLOCKQUOTE>
<PRE>
Color.Directories.Fore: "<color>"
Color.Directories.Back: "<color>"
</PRE>
<BLOCKQUOTE>
(dir.diffs only) Directories in directory diffs
</BLOCKQUOTE>
<PRE>
Color.MergedUndecided.Fore: "<color>"
Color.MergedUndecided.Back: "<color>"
</PRE>
<BLOCKQUOTE>
Merged view undecided text
</BLOCKQUOTE>
<PRE>
Color.MergedDecided1.Fore: "<color>"
Color.MergedDecided1.Back: "<color>"
</PRE>
<BLOCKQUOTE>
Merged view decided text, file 1
</BLOCKQUOTE>
<PRE>
Color.MergedDecided1Sup.Fore: "<color>"
Color.MergedDecided1Sup.Back: "<color>"
</PRE>
<BLOCKQUOTE>
Merged view decided text, file 1 (shadowed)
</BLOCKQUOTE>
<PRE>
Color.MergedDecided2.Fore: "<color>"
Color.MergedDecided2.Back: "<color>"
</PRE>
<BLOCKQUOTE>
Merged view decided text, file 2
</BLOCKQUOTE>
<PRE>
Color.MergedDecided2Sup.Fore: "<color>"
Color.MergedDecided2Sup.Back: "<color>"
</PRE>
<BLOCKQUOTE>
Merged view decided text, file 2 (shadowed)
</BLOCKQUOTE>
<PRE>
Color.MergedDecided3.Fore: "<color>"
Color.MergedDecided3.Back: "<color>"
</PRE>
<BLOCKQUOTE>
Merged view decided text, file 3
</BLOCKQUOTE>
<PRE>
Color.MergedDecided3Sup.Fore: "<color>"
Color.MergedDecided3Sup.Back: "<color>"
</PRE>
<BLOCKQUOTE>
Merged view decided text, file 3 (shadowed)
</BLOCKQUOTE>
<PRE>
Color.MergedDecidedNeither.Fore: "<color>"
Color.MergedDecidedNeither.Back: "<color>"
</PRE>
<BLOCKQUOTE>
Merged view decided text, neither files
</BLOCKQUOTE>
<PRE>
Color.Background.Fore: "<color>"
Color.Background.Back: "<color>"
</PRE>
<BLOCKQUOTE>
Global background color
</BLOCKQUOTE>
<PRE>
Color.Cursor.Fore: "<color>"
Color.Cursor.Back: "<color>"
</PRE>
<BLOCKQUOTE>
Line cursor color
</BLOCKQUOTE>
<PRE>
Color.VerticalLine.Fore: "<color>"
Color.VerticalLine.Back: "<color>"
</PRE>
<BLOCKQUOTE>
Vertical line color
</BLOCKQUOTE>
<PRE>
Color.TextSelection.Fore: "<color>"
Color.TextSelection.Back: "<color>"
</PRE>
<BLOCKQUOTE>
Color of text region selection
</BLOCKQUOTE>
</BLOCKQUOTE>
<PRE>
ExitOnSame: False
</PRE>
<BLOCKQUOTE>
If true, exit if both files have no differences.
</BLOCKQUOTE>
<PRE>
ExitIfNoConflicts: False
</PRE>
<BLOCKQUOTE>
If true, exit if after an automatic merge there are no conflicts.
</BLOCKQUOTE>
<PRE>
ExitWithMergeStatus: False
</PRE>
<BLOCKQUOTE>
If true, exit with error code 0 if all merges selected and saved.
</BLOCKQUOTE>
<PRE>
AutoSelectMerge: False
</PRE>
<BLOCKQUOTE>
Pre-selected non-conflictual regions as an automatic merge would.
</BLOCKQUOTE>
<PRE>
IgnoreHorizontalWhitespace: False
</PRE>
<BLOCKQUOTE>
Ignore horizontal whitespace in horizontal diffs.
</BLOCKQUOTE>
<PRE>
IgnorePerHunkWhitespace: False
</PRE>
<BLOCKQUOTE>
For each hunk, ignore hunk if there are only whitespace and line break changes within that hunk. This can be useful for ignoring code reformatting for certain source code languages that allow it (e.g. C++).
</BLOCKQUOTE>
<PRE>
FormatClipboardText: True
</PRE>
<BLOCKQUOTE>
Enables clipboard (copy-paste) formatting. If disabled, text that goes in the clipboard is simply left unformatted.
</BLOCKQUOTE>
<PRE>
IgnoreErrors: False
</PRE>
<BLOCKQUOTE>
Disables diff errors reporting.
</BLOCKQUOTE>
<PRE>
WarnAboutUnsaved: False
</PRE>
<BLOCKQUOTE>
Enables warning upon exiting with unsaved selections.
</BLOCKQUOTE>
<PRE>
DisableCursorDisplay: False
</PRE>
<BLOCKQUOTE>
Disables displaying the line cursor.
</BLOCKQUOTE>
<PRE>
DrawPatternInFillerLines: True
</PRE>
<BLOCKQUOTE>
Some people like to have a pattern drawn for filler lines to make it really dead obvious that they are not real lines, but just inserted for display purpose. This setting enables it.
</BLOCKQUOTE>
<PRE>
HideCarriageReturns: False
</PRE>
<BLOCKQUOTE>
Hides CR characters found in files created under DOS/Windows.
</BLOCKQUOTE>
<PRE>
DirDiffIgnoreFileChanges: False
</PRE>
<BLOCKQUOTE>
In directory diffs, ignores file changes, show just additions and deletions.
</BLOCKQUOTE>
<PRE>
DirDiffBuildSolelyFromOutput: True
</PRE>
<BLOCKQUOTE>
In directory diffs, building diffs only from output, not checking against actual directory contents. This is a self-verification feature only, and unless you're doing development you should leave this to default (true).
</BLOCKQUOTE>
<PRE>
DirDiffRecursive: False
</PRE>
<BLOCKQUOTE>
In directory diffs, enable recursive diff'ing of subdirectories.
</BLOCKQUOTE>
<PRE>
UseInternalDiff: True
</PRE>
<BLOCKQUOTE>
(Not implemented) Use internal diff computation, does not spawn external diff program.
</BLOCKQUOTE>
<PRE>
Show.[NAME]: [True|False]
</PRE>
<BLOCKQUOTE>
Set of options to determine if some UI display element is visible or not upon startup.
<PRE>
Show.Toolbar: False
</PRE>
<BLOCKQUOTE>
Show toolbar on startup.
</BLOCKQUOTE>
<PRE>
Show.LineNumbers: False
</PRE>
<BLOCKQUOTE>
Show line numbers on startup.
</BLOCKQUOTE>
<PRE>
Show.VerticalLine: False
</PRE>
<BLOCKQUOTE>
Show vertical line on startup.
</BLOCKQUOTE>
<PRE>
Show.Overview: True
</PRE>
<BLOCKQUOTE>
Show toolbar on startup.
</BLOCKQUOTE>
<PRE>
Show.Filenames: True
</PRE>
<BLOCKQUOTE>
Show toolbar on startup.
</BLOCKQUOTE>
<PRE>
Show.PaneMergedView: False
</PRE>
<BLOCKQUOTE>
Show pane merged view on startup.
</BLOCKQUOTE>
<PRE>
Show.PopupMergedView: False
</PRE>
<BLOCKQUOTE>
Show popup merged view on startup.
</BLOCKQUOTE>
</BLOCKQUOTE>
<PRE>
TabWidth: 8
</PRE>
<BLOCKQUOTE>
Tab character alignment width.
</BLOCKQUOTE>
<PRE>
Command.[NAME]: "[COMMAND]"
</PRE>
<BLOCKQUOTE>
Commands to use to generate diffs. xxdiff is only an interface to display diff results, it doesn't actually compute diffs itself, unless you use the internal commands options, where it uses the same arguments as specified here. Most likely these are the GNU diff commands and options. Note that you can specify command switches here and the user interface will be automatically updated accordingly (e.g. if you set a command with the -w switch, and UI understands that the ignore whitespace feature has been turned on).
<PRE>
Command.DiffFiles2: "diff"
</PRE>
<BLOCKQUOTE>
Command to use for comparing two files.
</BLOCKQUOTE>
<PRE>
Command.DiffFiles3: "diff3"
</PRE>
<BLOCKQUOTE>
Command to use for comparing three files.
</BLOCKQUOTE>
<PRE>
Command.DiffDirectories: "diff -q -s"
</PRE>
<BLOCKQUOTE>
Command to use for comparing two directories, non-recursively.
</BLOCKQUOTE>
<PRE>
Command.DiffDirectoriesRec: "diff -q -s -r"
</PRE>
<BLOCKQUOTE>
Command to use for comparing two directories, recursively.
</BLOCKQUOTE>
<PRE>
Command.Edit: "/home/blais/p/conf/bin/e"
</PRE>
<BLOCKQUOTE>
Command to use to spawn an editor on a file.
</BLOCKQUOTE>
</BLOCKQUOTE>
<PRE>
CommandSwitch.IgnoreTrailingBlanks: "-b"
CommandSwitch.IgnoreWhitespace: "-w"
CommandSwitch.IgnoreCase: "-i"
CommandSwitch.IgnoreBlankLines: "-B"
CommandSwitch.QualityNormal: ""
CommandSwitch.QualityFastest: "-H"
CommandSwitch.QualityHighest: "-d"
</PRE>
<BLOCKQUOTE>
Definitions of cmdline switches that should be used to toggle diff options. These resources allow you to specify what switch corresponds to what feature. The defaults are the GNU diff switches (see diff(1)). These are only valid for two-file diff for now. See also the InitSwitch resources.
</BLOCKQUOTE>
<PRE>
InitSwitch.IgnoreTrailingBlanks: Nop
InitSwitch.IgnoreWhitespace: Nop
InitSwitch.IgnoreCase: Nop
InitSwitch.IgnoreBlankLines: Nop
InitSwitch.QualityNormal: Nop
InitSwitch.QualityFastest: Nop
InitSwitch.QualityHighest: Nop
</PRE>
<BLOCKQUOTE>
Initialization of a particular switch after the resources have been read in. This is used to modify the command using the switch definitions. In other words, you could either set the switch within the command specification, or use a plain command and enable/disable the switch using this resource. This resource is only provided for completeness and convenience, as setting the appropriate switch in the command itself amounts to the same. See also the CommandSwitch resources. For the quality options, you should just set a single one to 'true'.
</BLOCKQUOTE>
<PRE>
OverviewFileWidth: 20
</PRE>
<BLOCKQUOTE>
In overview area, width (in pixels) of each file.
</BLOCKQUOTE>
<PRE>
OverviewSepWidth: 14
</PRE>
<BLOCKQUOTE>
In overview area, width (in pixels) between each file.
</BLOCKQUOTE>
<PRE>
VerticalLinePosition: 80
</PRE>
<BLOCKQUOTE>
Initial column to draw vertical alignment line.
</BLOCKQUOTE>
<PRE>
Tag.[NAME]: [True|False]
</PRE>
<BLOCKQUOTE>
Tags used for conditionals used for unselected regions, when that option is used to save files.
<PRE>
Tag.Conflict.Start: "<<<<<<< %L"
</PRE>
<BLOCKQUOTE>
String used to indicate the start of a merged merge conflict when saving with conflicts. Default is the CVS start tag.
</BLOCKQUOTE>
<PRE>
Tag.Conflict.Sep: "======="
</PRE>
<BLOCKQUOTE>
String used to separate sides of a merged merge conflict when saving with conflicts. Default is the CVS separator tag.
</BLOCKQUOTE>
<PRE>
Tag.Conflict.SepExtra: "||||||| %M"
</PRE>
<BLOCKQUOTE>
String used to separate sides of a merged 3-way merge conflict when saving with conflicts. Default is the tag generated by GNU diff3.
</BLOCKQUOTE>
<PRE>
Tag.Conflict.End: ">>>>>>> %R"
</PRE>
<BLOCKQUOTE>
String used to end a merged merge conflict when saving with conflicts. Default is the CVS end tag.
</BLOCKQUOTE>
<PRE>
Tag.Conditional.Ifdef: "#if defined( %s )"
</PRE>
<BLOCKQUOTE>
Ifdef string used when saving with conditionals.
</BLOCKQUOTE>
<PRE>
Tag.Conditional.Elseif: "#elif defined( %s )"
</PRE>
<BLOCKQUOTE>
Elseif string used when saving with conditionals.
</BLOCKQUOTE>
<PRE>
Tag.Conditional.Endif: "#endif"
</PRE>
<BLOCKQUOTE>
Endif string used when saving with conditionals.
</BLOCKQUOTE>
<PRE>
Tag.Unmerge.Start: "^<<<<<<< (.*)$"
</PRE>
<BLOCKQUOTE>
Tag that appears at the beginning of a line in a merged file to indicate the start of a merged merge conflict. Default is the CVS start tag.
</BLOCKQUOTE>
<PRE>
Tag.Unmerge.Sep: "^=======\s*$"
</PRE>
<BLOCKQUOTE>
Tag that appears at the beginning of a line in a merged file to separate sides of a merged merge conflict. Default is the CVS separator tag.
</BLOCKQUOTE>
<PRE>
Tag.Unmerge.SepExtra: "^\|\|\|\|\|\|\| (.*)$"
</PRE>
<BLOCKQUOTE>
Tag that appears at the beginning of a line in a merged file to separate sides of a merged 3-way merge conflict. Default is the tag generated by GNU diff3.
</BLOCKQUOTE>
<PRE>
Tag.Unmerge.End: "^>>>>>>> (.*)$"
</PRE>
<BLOCKQUOTE>
Tag that appears at the beginning of a line in a merged file to indicate the end of a merged merge conflict. Default is the CVS end tag.
</BLOCKQUOTE>
</BLOCKQUOTE>
<PRE>
ClipboardHeaderFormat: "
In file "%F":
------------------------------
"
</PRE>
<BLOCKQUOTE>
Format of header for selection of text for formatted clipboard text.
</BLOCKQUOTE>
<PRE>
ClipboardLineFormat: "%L: %s"
</PRE>
<BLOCKQUOTE>
Format of each selection line for formatted clipboard text.
</BLOCKQUOTE>
<PRE>
HorizontalDiffType: Multiple
</PRE>
<BLOCKQUOTE>
Type of horizontal diffs display. Can be one of None, Single, Multiple. None: doesn't compute nor display horizontal diff; Single: just bracket the changes from line beginnings and ends; Multiple: compute multiple horizontal diff (if the sizes fit in the maximum size (see HorizontalDiffMax resource).
</BLOCKQUOTE>
<PRE>
HorizontalDiffMax: 10000
</PRE>
<BLOCKQUOTE>
Maximum table size for dynamic-programming table used for computing the horizontal diff for change lines. If the size of one horizontal hunk times the size of the other horizontal hunk is over that size, there are no multiple horizontal diffs computed for that line, and the algorithm behaves like the Single algorithm. You most likely don't want to touch that value.
</BLOCKQUOTE>
<PRE>
HorizontalDiffContext: 5
</PRE>
<BLOCKQUOTE>
Minimum amount of characters or token that need to be common to both lines between multiple horizontal diff hunks. If there are not that amount of common characters, skip the horizontal hunk and display it as a changed region. This resource is very useful to remove the cases where few characters align, resulting in many small horizontal hunks, which can be quite confusing. Usually a value of 5 gives enough horizontal context for the eye to figure out what happenened.
</BLOCKQUOTE>
<PRE>
ShowPaneMergedViewPercent: 40
</PRE>
<BLOCKQUOTE>
Initial vertical percentage size, between 0 and 100, of the pane merged view on startup.
</BLOCKQUOTE>
<PRE>
MergedFilename: "%L.merge"
</PRE>
<BLOCKQUOTE>
Default merged filename. %L, %M, %R can be used as placeholders for left, middle and right filenames respectively. Note that ClearCase suffixes are stripped automatically.
</BLOCKQUOTE>
</div></div>
<div class="section" id="frequently-asked-questions-faq">
<h1><a class="toc-backref" href="#id50">14 Frequently Asked Questions (FAQ)</a></h1>
<div class="section" id="can-i-diff-files-with-crlf-dos-characters-in-them">
<h2><a class="toc-backref" href="#id51">14.1 Can I diff files with CRLF DOS characters in them?</a></h2>
<p>If you want to diff files with CRLF characters in them, you can use the 'ignore
whitespace option to GNU diff, which will work, even if only one of the files
has the DOS characters in it.</p>
</div>
<div class="section" id="how-do-i-make-xxdiff-display-the-revision-number-of-a-file">
<h2><a class="toc-backref" href="#id52">14.2 How do I make xxdiff display the revision number of a file?</a></h2>
<p>By default, the filenames window display the filename. From the command-line,
however, you can set it to display an arbitrary string, which could include your
current revision number.</p>
</div>
</div>
<div class="section" id="author">
<h1><a class="toc-backref" href="#id53">15 Author</a></h1>
<p>This program has been written from scratch and is being actively maintained by
<strong>Martin Blais</strong> (<a class="reference external" href="mailto:blais@furius.ca">blais@furius.ca</a>).</p>
</div>
<div class="section" id="reporting-bugs">
<h1><a class="toc-backref" href="#id54">16 Reporting bugs</a></h1>
<p>All bug reports and feature requests should be submitted through the
SourceForge bug tracking system at the following URL
<a class="reference external" href="http://sourceforge.net/bugs/?group_id=2198">http://sourceforge.net/bugs/?group_id=2198</a>. Please avoid sending the author
email about xxdiff bugs. Please use this bug tracking system, it is extremely
fast and simple to use.</p>
</div>
<div class="section" id="project-history">
<h1><a class="toc-backref" href="#id55">17 Project history</a></h1>
<p>This program has been written and inspired after gdiff, mgdiff, and Rudy
Wortel's xdiff under SGI. xxdiff aims to provide a lasting open-source
replacement to these programs. Writing this tool from scratch was originally
motivated by the need to have horizontal diffs, which turned out to be an
essential feature of this program.</p>
<p>This program is being extensively tested by several software development
engineers at discreet, that use it daily in their merge reviewing activities.
It has reached a stable state.</p>
<div class="section" id="licensing">
<h2><a class="toc-backref" href="#id56">17.1 Licensing</a></h2>
<p>This program is distributed under the GNU General Public License. See the
<a class="reference external" href="http://www.gnu.org">GNU project website</a> for full details.</p>
</div>
<div class="section" id="dependencies">
<h2><a class="toc-backref" href="#id57">17.2 Dependencies</a></h2>
<p>This program depends on the availability of a textual diff program (such as GNU
diff) and the Qt UI toolkit (available at <a class="reference external" href="http://trolltech.com">http://trolltech.com</a>).</p>
</div>
<div class="section" id="acknowledgements">
<h2><a class="toc-backref" href="#id58">17.3 Acknowledgements</a></h2>
<p>Thanks go to discreet, for letting me deploy my program there, and for not
bothering me with the occasional bug fix that I did on the job. Many more
thanks to all the many engineers who tested it there and reported problems with
it, as well as providing invaluable suggestions.</p>
<p>SourceForge is hosting my web site and I'm using many of its features. Tomas
Pospisek (tpo at sourcepole.ch) has provided a Debian package. Dan Weeks has
packaged it for one of the BSD variants (danimal at danimal.org). Not sure, but
I think that Christian Savard (savardc at pobox.com) provided the original
Gentoo port (xxdiff is now supported in Gentoo).</p>
</div>
</div>
</div>
</body>
</html>
|