mgdiff - Motif-based graphical file difference browser
Contents
Acknowledgements
To Andrew C. Myers for writing gdiff.MGDIFF(1x)
Command Line 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).
-argsdiffargs
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.
-filename
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.
Copyright
Copyright (c) 1994, Daniel Williams
Copyright (c) 2003, Erik de Castro Lopo
See X(1) for a full statement of rights and permissions.
Description
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.
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.
Name
mgdiff - Motif-based graphical file difference browser
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.
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.
See Also
diff(1), X(1)
Synopsis
mgdiff [-toolkitoption ...] [-quit] [-file name] [-args diffargs] [file1 file2]
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
Mgdiff.diffForeground:blackMgdiff.diffBackground:yellow
These colors are for blocks which differ between files.
Mgdiff.sameForeground:blackMgdiff.sameBackground:grey
These colors are for blocks which are identical between files.
Mgdiff.insertForeground:blackMgdiff.insertBackground:orange
These colors are for blocks which have been inserted in one file.
Mgdiff.blankForeground:blackMgdiff.blankBackground:grey66
These colors are for blocks which are for display purposes.
Mgdiff.selectForeground:blackMgdiff.selectBackground:lightslateblue
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:(manmgdiff|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.
