MGDIFF(1) MGDIFF(1)
NAME
mgdiff - Motif-based graphical file difference browser
SYNOPSIS
mgdiff [-toolkitoption ...] [-quit] [-file name] [-args diffargs]
[file1 file2]
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.
COMMAND LINE OPTIONS
- 1 - Formatted: October 26, 2025
MGDIFF(1) MGDIFF(1)
-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.
MENUS
The menubar contains the following menu topics as CascadeButtons:
File, View, Select, Options and Help. The rest of this section
discusses each menu entry, showing it's name and accelerator, if any.
File This pulldown menu controls file access:
Open... Ctrl+O Brings up the "Open Files"
FileSelectionDialog to allow the
user to open two files for
comparison.
Open Left... Ctrl+L Brings up the "Open File"
FileSelectionDialog to allow the
user to specify a file to open
and compare with the already
opened right-hand file.
Open Right... Ctrl+R Brings up the "Open File"
FileSelectionDialog to allow the
user to specify a file to open
- 2 - Formatted: October 26, 2025
MGDIFF(1) MGDIFF(1)
and compare with the already
opened left-hand file.
Save As... Ctrl+S Brings up the "Save File"
FileSelectionDialog to allow the
user to specify an output file
for writing the merged file; this
is an application modal dialog.
The program will allow the user
to overwrite an existing file but
pops up a QuestionDialog to allow
the user to cancel the operation
if desired. If there are any
unselected areas of difference
between the two files the user is
notified via an ErrorDialog and
the save operation is canceled.
Exit Ctrl+C Exits the program
immediately.
View This pulldown menu contains commands for moving through the
files.
Previous Ctrl+P Scrolls both file views so
that the previous area of
difference is
Mgdiff.linesOfContext lines from
the top of the application
window.
Next Ctrl+N Scrolls both file views so
that the next area of difference
is Mgdiff.linesOfContext lines
from the top of the application
window.
Next Unselected Ctrl+U Scrolls both file views so
that the next unselected area of
difference is
Mgdiff.linesOfContext lines from
the top of the application
window.
Select
The two files being compared can be optionally merged into one
file. To do this, the user must select for each area of
difference between the two files which version should be written
to the merged file. The menu entries in this pulldown menu allow
- 3 - Formatted: October 26, 2025
MGDIFF(1) MGDIFF(1)
the user to select or unselect differences in groups rather than
individually.
Left All For all areas of difference
between the two files select the
left-hand file version.
Right All For all areas of difference
between the two files select the
right-hand file version.
Unselect All Unselects all areas of difference
in both files.
Options
This pulldown menu controls miscellaneous appearance and/or
behavior options.
Overview Ctrl+W This menu entry toggles
the presence of the overview area
on the right-hand side of the
application window. The default
value for this toggle is
controlled by a resource,
Mgdiff.overview, which is
described in the RESOURCES
section.
Horizontal Scrollbar Ctrl+H This menu entry toggles
the presence of the horizontal
scrollbar at the bottom of the
application window. The default
value for this toggle is
controlled by a resource,
Mgdiff.horzScrollbar, which is
described in the RESOURCES
section.
Drag Scroll Ctrl+D This menu entry toggles
the behaviour of the scrollbars
in the application window. When
set, dragging the slider of a
scrollbar results in a immediate
change in the view of the text
being compared. When unset, the
view is only changed at the end
of a slider drag (when the mouse
button is released.) This
setting might be preferred on a
slower X server. The default
- 4 - Formatted: October 26, 2025
MGDIFF(1) MGDIFF(1)
value for this toggle is
controlled by a resource,
Mgdiff.dragScroll, which is
described in the RESOURCES
section.
Help This pulldown menu displays commands for obtaining help on or
information about mgdiff.
Version... Ctrl+V Brings up an
InformationDialog with author and
version information.
Manual Page... Ctrl+M Brings up a DialogShell
with a ScrolledText widget
containing this manual page. The
command for generating this is
customizable via a resource,
Mgdiff.manCommand, which is
described in the RESOURCES
section.
Color Legend... Ctrl+G Brings up a DialogShell
which summarizes the use of color
in encoding the types of
differences between the two files
being compared.
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.
- 5 - Formatted: October 26, 2025
MGDIFF(1) MGDIFF(1)
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
XmSeparatorGadget separator_0
XmPushButtonGadget button_4
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
- 6 - Formatted: October 26, 2025
MGDIFF(1) MGDIFF(1)
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
- 7 - Formatted: October 26, 2025
MGDIFF(1) MGDIFF(1)
X RESOURCES
Mgdiff.diffForeground: black
Mgdiff.diffBackground: yellow These colors are for blocks which
differ between files.
Mgdiff.sameForeground: black
Mgdiff.sameBackground: grey These colors are for blocks which are
identical between files.
Mgdiff.insertForeground: black
Mgdiff.insertBackground: orange These colors are for blocks which have
been inserted in one file.
Mgdiff.blankForeground: black
Mgdiff.blankBackground: grey66 These colors are for blocks which are
for display purposes.
Mgdiff.selectForeground: black
Mgdiff.selectBackground: 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
- 8 - Formatted: October 26, 2025
MGDIFF(1) MGDIFF(1)
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.
SEE ALSO
diff(1), X(1)
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.
COPYRIGHT
Copyright (c) 1994, Daniel Williams
See X (1) for a full statement of rights and permissions.
- 9 - Formatted: October 26, 2025
MGDIFF(1) MGDIFF(1)
AUTHOR
Daniel Williams (dan@sass.com)
ACKNOWLEDGEMENTS
To Andrew C. Myers for writing gdiff.
- 10 - Formatted: October 26, 2025