mgdiff1x
Motif-based graphical file difference browser
Usage
mgdiff [-toolkitoption ...]
[-quit]
[-file
name]
[-args
diffargs]
[file1
file2]
Overview
Mgdiff is a graphical front end to the diff command. It permits the user to view the differences between two ASCII files in context and, optionally, to write out a third file which is the user-defined merging of those two files. It is inspired by a similar program, called gdiff, which runs only on Silicon Graphics workstations and for which source code is not provided.
The program takes as arguments various flags (described in the next section) and the names of two files to compare. Either filename (but not both) may be given as '-' to use standard input instead.
The resulting display consists mostly of two panes of text; the one on the left is the first file specified and the one on the right is the second file specified. Between and below the text panes are scrollbars that permit changing the visible portions of the two files being compared. In addition, the program implements the Scrolled Region recommendations of Section 2.3.4 of the OSF/Motif Style Guide (release 1.1), meaning that the arrow and paging keys will work to scroll as well. Above each text pane is the name of the file in that text pane and the line number in the file which is being displayed.
The text in each of the text panes is divided into blocks of lines which are color-coded with one of five different colors. This indicates that the block:
|
differs between the two files |
|
|
is identical between the two files |
|
|
has been inserted in one file or the other |
|
|
is for display purposes (to match an inserted block in the other file) |
|
|
has been selected by the user (for writing to a merged file) |
These colors can be modified by the user via X resources; see the RESOURCES section of this manual page. A legend display of the colors and their meanings is available using the Help menu.
On the right-hand side of the display is an overview area; this shows the files in their entirety. The sliders in the overview area track the lines being displayed in the text panes.
At the top of the display is a Motif menu bar; those functions are discussed in the MENUS section of this manual page.
Earlier versions of this program (pre 2003) only allowed the selection of the left hand side difference or the right hand side difference. It also would not allow a file to be saved with unselected blocks. The current version allows the user to select both sides of a difference by selecting blocks using the middle mouse button. When both sides of a difference are selected both blocks will be saved to the merged file and marked in a similar manner to the way CVS marks merges that require manual resolution of conflicting changes. In addition, the current version also allows saving of a merged file with unselected blocks. In this case, the merged file will contain neither the left hand side nor the right hand side of the unselected blocks.
Options
-
-toolkitoption -
These are the standard options accepted by all applications that use the X Toolkit Intrinsics. See the OPTIONS section in the X(1) manual page.
-
-quit -
This option sets the resource Mgdiff.quitIfSame to "true". This will cause the program to exit immediately without bringing up a window if the two files have no differences (as determined by the diff command).
-
-args diffargs -
This option sets the resource Mgdiff.diffArgs to the value of the diffargs argument. These flags are passed to the diff command that actually computes the differences between the two files. Since any argument can be passed, it is possible to specify flags that cause the diff command to fail or to generate output in a different format that will cause mgdiff to fail. For most versions of diff, only three flags make any sense. The first is '-b'; this causes diff to ignore trailing blanks (spaces and tabs) and to treat all other strings of blanks as equivalent. The second flag is '-w'; this ignores blanks and treats strings of blanks as equivalent. The last flag is '-i'; this ignores case when comparing letters.
-
-file name -
This command sets the resource Mgdiff.filename to the value of the name argument. mgdiff uses this string to display over a file read from standard input.
Other displays/controls
You can move directly to a particular spot in the two files by using BDrag in the overview area.
The program uses what the OSF/Motif Style Guide calls "multiple selection" to select individual blocks for writing to a merged file. Clicking BSelect on an unselected block adds it to the list of selected blocks. Clicking BSelect on a selected block removes it from the list of selected blocks. In addition, Clicking BSelect on an unselected block which is opposite a selected block (in the other text panes) removes the selected block from the list of selected blocks.
The numbers in the small boxes next to the file names are the line numbers of the lines at the top of the text panes.
Widgets
What follows is the hierarchy of Motif widgets, as generated by editres(1). The hierarchical structure of the widget tree is reflected in the indentation. Each line consists of the widget class name followed by the widget instance name. This information might be useful if you wish to customize the appearance of the program via resource settings.
Mgdiff mgdiff XmMainWindow mainw XmSeparatorGadget MainWinSep1 XmSeparatorGadget MainWinSep2 XmSeparatorGadget MainWinSep3 XmRowColumn menubar XmCascadeButtonGadget button_0 XmCascadeButtonGadget button_1 XmCascadeButtonGadget button_2 XmCascadeButtonGadget button_3 XmCascadeButtonGadget button_4 XmMenuShell popup_file_menu XmRowColumn select_menu XmPushButtonGadget button_0 XmPushButtonGadget button_1 XmSeparatorGadget separator_0 XmPushButtonGadget button_2 XmRowColumn file_menu XmPushButtonGadget button_0 XmPushButtonGadget button_1 XmPushButtonGadget button_2 XmPushButtonGadget button_3 XmPushButtonGadget button_4 XmSeparatorGadget separator_0 XmPushButtonGadget button_5 XmPushButtonGadget button_6 XmSeparatorGadget separator_1 XmPushButtonGadget button_7 XmRowColumn options_menu XmToggleButtonGadget button_0 XmToggleButtonGadget button_1 XmToggleButtonGadget button_2 XmRowColumn help_menu XmPushButtonGadget button_0 XmPushButtonGadget button_1 XmPushButtonGadget button_2 XmRowColumn view_menu XmPushButtonGadget button_0 XmPushButtonGadget button_1 XmPushButtonGadget button_2 XmForm form1 XmFrame frame1 XmForm form3 XmScrollBar sbl XmDrawingArea dam XmScrollBar sbr XmFrame frame2 XmForm form4 XmForm form2 XmScrollBar sb XmForm form21 XmFrame frame3 XmLabel fnamel XmFrame frame31 XmTextField linenuml XmForm form22 XmFrame frame4 XmLabel fnamer XmFrame frame41 XmTextField linenumr XmDrawingArea textl XmDrawingArea textr XmScrollBar sbh XmDialogShell version_popup XmMessageBox version XmLabelGadget symbol XmLabelGadget XmSeparatorGadget separator XmPushButtonGadget OK XmPushButtonGadget Cancel XmPushButtonGadget Help XmDialogShell manualpage_popup XmForm manualpage XmPanedWindow pane XmScrolledWindow help_textSW XmScrollBar vbar XmText help_text XmForm form2a XmPushButton OK XmSash sash XmSeparatorGadget separator XmSash sash XmSeparatorGadget separator XmDialogShell legend_popup XmForm legend XmPanedWindow pane XmRowColumn rc XmLabel label1 XmLabel label2 XmLabel label3 XmLabel label4 XmLabel label5 XmForm form2a XmPushButton OK XmSash sash XmSeparatorGadget separator XmSash sash XmSeparatorGadget separator XmDialogShell werror_popup XmMessageBox werror XmLabelGadget symbol XmLabelGadget XmSeparatorGadget separator XmPushButtonGadget OK XmPushButtonGadget Cancel XmPushButtonGadget Help
X resources
|
|
|---|---|
|
|
These colors are for blocks which differ between files.
|
|
|---|---|
|
|
These colors are for blocks which are identical between files.
|
|
|---|---|
|
|
These colors are for blocks which have been inserted in one file.
|
|
|---|---|
|
|
These colors are for blocks which are for display purposes.
|
|
|---|---|
|
light slate blue |
These colors are for blocks which have been selected by the user.
Mgdiff.font:-
7x13bold
Font for displaying text blocks.
Mgdiff.dragScroll:-
true
Set to true if scrollbar dragging should cause immediate changes in the viewed text, and false if the view should only change after the scrollbar has been moved.
Mgdiff.overview:-
true
Set to true if the file overview section should appear.
Mgdiff.horzScrollbar:-
true
Set to true if the horizontal scrollbar should appear.
Mgdiff.linesOfContext:-
3
Number of lines that should appear above a difference block gotten to using the Previous or Next commands. Should be greater or equal to zero.
Mgdiff.manCommand:-
(man mgdiff | col -b) 2>&1
The command (or pipeline) used to produce a formatted manual page without escape codes.
Mgdiff.diffCommand:-
diff
The diff(1) compatible command to use for calculating differences between text files.
Mgdiff.diffArgs:
The arguments to be provided to the diff command. This resource can also be set via the -args command line option.
Mgdiff.quitIfSame:-
false
If the two files have no differences (as determined by the diff command) then exit immediately without bringing up a window. This resource can also be set to "true" via the -quit command line option.
Mgdiff.filename:-
(stdin)
mgdiff uses this string to display over a file read from standard input. This resource can also be set via the -file command line option.
Diagnostics
Returns the exit status generated by the diff command. This is usually 0 for no differences, 1 for some differences and 2 for errors.
Restrictions
Using BDrag in the overview area doesn't work well when drag scrolling is turned off.
Doesn't support monochrome displays.
Input lines longer than BUFSIZ (see /usr/include/stdio.h) are silently truncated.
The code for parsing and passing arguments to the diff command assumes arguments are delimited by white space and does not do any quote processing.
Acknowledgements
To Andrew C. Myers for writing gdiff.
Releases
14 releases since Debian 2.1 (Slink); the text changed 4 times.