DIFFUSE(1)

NAME
diffuse - graphical tool for merging and comparing text files

SYNOPSIS

diffuse [-h | -? | --help | -v | --version]

diffuse [--no-rcfile | --rcfile file] [[option...] | [file...]...]

DESCRIPTION

Diffuse is a graphical tool for merging and comparing text files. Diffuse is able to compare an arbitrary number of files side-by-side and gives users the ability to manually adjust line matching and directly edit files. Diffuse can also retrieve revisions of files from Bazaar, CVS, Darcs, Git, Mercurial, Monotone, RCS and Subversion repositories for comparison and merging.

OPTIONS

  Help Options

If a help option is specified, it must be the only argument specified on the command line. Diffuse will immediately quit after displaying the help information.

-h, -?, --help
    Display usage information.

-v, --version
    Display version number and copyright information.

  Configuration Options

If a configuration option is specified, it must be the first argument specified on the command line.

--no-rcfile
    Do not read any initialisation files.

--rcfile file
    Only read initialisation commands from file file.

  General Options

-c, --commit rev
    Open separate file comparison tabs for all files affected by commit rev from the remaining paths specified in the command line arguments.

-D, --close-if-same
    Close all tabs with no differences.

-e, --encoding codec
    Use codec to read and write files.

-L, --label label
    Display label instead of the file name.

-m, --modified
    Open separate file comparison tabs for all modified files from the remaining paths specified in the command line arguments.

-r, --revision rev
    Include revision rev of the next file named in the command line arguments in a file comparison tab.

-s, --separate
    Open all remaining files specified in the command line arguments in separate file comparison tabs.

-t, --tab
    Start a new tab for any remaining files named in the command line arguments.

-V, --vcs vcs-list
    Search for version control systems in the ordering: vcs-list.

--line line
    Start with line line selected.

--null-file
    Create a blank file comparison pane.

  Display Options

Display options specified in the command line arguments will override saved preference values.

-b, --ignore-space-change
    Ignore changes to the amount of white space.

-B, --ignore-blank-lines
    Ignore changes whose lines are all blank.

-E, --ignore-end-of-line
    Ignore end of line differences.

-i, --ignore-case
    Ignore case differences in file contents.

-w, --ignore-all-space
    Ignore all white space.

FILE COMPARISON

Use the File → New 2-Way File Merge, File → New 3-Way File Merge, and File → New N-Way File Merge menu items to create additional tabs for comparing text files. File names and revisions can be specified either in the command line arguments used to invoke Diffuse or in fields on the Open File dialogue.

Diffuse displays files side-by-side inserting gaps to align similar lines of text. Differences are highlighted with a different background colour.

  Comparison Summary

A summary of the compared files is located in the far right margin. The summary illustrates where gaps have been inserted to align matching lines of text and highlights differences using colour. Manual edits are also highlighted in green. A blue cursor identifies the region currently being viewed. The viewed region can be changed by clicking anywhere on the summary.

  Selecting

Lines of text can be selected using the mouse pointer or keyboard. Select lines of text with the mouse pointer by clicking on a line. Click and drag to select multiple lines. Holding down the shift key when clicking will extend the current selection. Select lines using the keyboard by pressing the page up/down or arrow keys. Extend the current selection by holding down the shift key and pressing the page up/down or arrow keys. Move the selection to an adjacent file using the left and right arrow keys.

  Matching Lines

The mouse pointer or keyboard can be used to manually align lines of text with adjacent files. To aligning lines of text using the mouse pointer, select a line of text with the left mouse button, right click on a line of text from an adjacent file, and choose Align with Selection. To align lines of text using the keyboard, move the selection with the cursor keys, press the space bar to pick the current line of text, move the selection with the cursor keys to a line of text in an adjacent file, and press the space bar to pick the target line of text. Pressing the Escape key will cancel the operation.

Use the Isolate menu item to prevent the selected lines from being matched with any lines from the adjacent files.

  Editing

Press the Enter key or double-click on a text area to enter text editing mode. The cursor will change to indicate text editing mode and the status bar at the bottom of the window will display the cursor's column position.

In text editing mode, text can be selected with the mouse pointer by click and dragging. The current selection can be extended by holding down the shift key and moving the cursor by clicking with the mouse pointer or pressing any of the arrow, home, end or page up/down keys. Individual words can be selected by double-clicking on them with the mouse pointer. Whole lines can be selected by triple-clicking on them with the mouse pointer.

Modify text by typing on the keyword. Modified lines will be highlighted in green. Use the Undo and Redo menu items to undo and redo the previously preformed operations.

Press the Escape key or click on another file's text area using the left mouse button to leave editing mode.

  Merging

Use the difference buttons or menu items to navigate between blocks of differences within a file. When navigating, Diffuse will move the selection to the next continuous set of lines with differences or edits.

Use the merge buttons or menu items to copy blocks of text into the selected range of lines. The Undo and Redo menu items can be used to undo and redo the previously preformed operations. All changes to a set of lines can be reverted using the Clear Edits menu item regardless of the order the edits were performed.

VERSION CONTROL

Diffuse can retrieve file revisions from several version control systems via their command line interface. The Microsoft Windows build of Diffuse is able to use both the Cygwin and native versions of the supported version control systems. When using Diffuse with Cygwin, ensure Diffuse's Cygwin preferences correctly describe your system. If the Update paths for Cygwin preference exists for a version control system, it must be enabled to use the Cygwin version.

Version control systems are sensitive to the system path and other environment variable settings. The Launch from a Bash login shell preference may be used to easily set the environment for Cygwin version control systems.

  Viewing Uncommitted Modifications

The -m option will cause Diffuse to open comparison tabs for each file the version control system indicates has uncommitted modifications. This is convenient for reviewing all changes before committing or resolving a merge conflict. If no paths are specified the current working directory will be used. For example, view all of your uncommitted modifications with this command line:

    $ diffuse -m

The default revision of a file will be used for comparison if only one file is specified. For example, this will display a 2-way merge between the default revision of foo.C and the local foo.C file:

    $ diffuse foo.C

  Specifying Revisions

The -r option may also be used to explicitly specify a particular file revision. Any revision specifier understood by the version control system may be used. The local file will be used for comparison if only one file revision is specified. For example, this will display a 2-way merge between revision 123 of foo.C and the local foo.C file:

    $ diffuse -r 123 foo.C

Multiple file revisions can be compared by specifying multiple -r options. For example, this will display a 2-way merge between revision 123 of foo.C and revision 321 of foo.C:

    $ diffuse -r 123 -r 321 foo.C

Local files can be mixed with files from the version control system. For example, this will display a 3-way merge between revision MERGE_HEAD of foo.C, the local foo.C file, and revision HEAD of foo.C:

    $ diffuse -r MERGE_HEAD foo.C foo.C -r HEAD foo.C

For the -c option may be used to easily specify a pair of sequential revisions. For example, this will display a 2-way merge between revision 1.2.2 of foo.C and revision 1.2.3 of foo.C:

    $ diffuse -c 1.2.3 foo.C

Diffuse does not limit the number of panes that can be used for comparing files. The inputs to a Git octopus merge could be viewed with a command line like this:

    $ diffuse -r HEAD^1 -r HEAD^2 -r HEAD^3 -r HEAD^4 -r HEAD^5 foo.C

RESOURCES

Resources can be used to customise several aspects of Diffuse's appearance and behaviour such as changing the colours used in the user interface, customising the keyboard shortcuts, adding or replacing syntax highlighting rules, or changing the mapping from file extensions to syntax highlighting rules.

When Diffuse is started, it will read commands from the system wide initialisation file /etc/diffuserc (%INSTALL_DIR%\diffuserc on Microsoft Windows) and then the personal initialisation file ~/.config/diffuse/diffuserc (%HOME%\.config\diffuse\diffuserc on Microsoft Windows). This behaviour can be changed with the --no-rcfile and --rcfile configuration options. A Bourne shell-like lexical analyser is used to parse initialisation commands. Comments and special characters can be embedded using the same style of escaping used in Bourne shell scripts.

  General

import file
    Processes initialisation commands from file. Initialisation files will only be processed once.

  Key Bindings

keybinding context action key_combination
    Binds a key combination to action when used in context. Specify Shift and Control modifiers by prepending Shift+ and Ctrl+ to key_combination respectively. Keys normally modified by the Shift key should be specified using their modified value if key_combination involves the Shift key. For example, Ctrl+g and Shift+Ctrl+G. Remove bindings for key_combination by specifying None for the action.

Menu Item Key Bindings

    Use menu for the context to define key bindings for menu items. The following values are valid for action:

    open_file
        File → Open File... menu item

        Default: Ctrl+o

    open_file_in_new_tab
        File → Open File In New Tab... menu item

        Default: Ctrl+t

    open_modified_files
        File → Open Modified Files... menu item

        Default: Shift+Ctrl+O

    open_commit
        File → Open Commit... menu item

        Default: Shift+Ctrl+T

    reload_file
        File → Reload File menu item

        Default: Shift+Ctrl+R

    save_file
        File → Save File menu item

        Default: Ctrl+s

    save_file_as
        File → Save File As... menu item

        Default: Shift+Ctrl+A

    save_all
        File → Save All menu item

        Default: Shift+Ctrl+S

    new_2_way_file_merge
        File → New 2-Way File Merge menu item

        Default: Ctrl+2

    new_3_way_file_merge
        File → New 3-Way File Merge menu item

        Default: Ctrl+3

    new_n_way_file_merge
        File → New N-Way File Merge menu item

        Default: Ctrl+4

    close_tab
        File → Close Tab menu item

        Default: Ctrl+w

    undo_close_tab
        File → Undo Close Tab menu item

        Default: Shift+Ctrl+w

    quit
        File → Quit menu item

        Default: Ctrl+q

    undo
        Edit → Undo menu item

        Default: Ctrl+z

    redo
        Edit → Redo menu item

        Default: Shift+Ctrl+Z

    cut
        Edit → Cut menu item

        Default: Ctrl+x

    copy
        Edit → Copy menu item

        Default: Ctrl+c

    paste
        Edit → Paste menu item

        Default: Ctrl+v

    select_all
        Edit → Select All menu item

        Default: Ctrl+a

    clear_edits
        Edit → Clear Edits menu item

        Default: Ctrl+r

    dismiss_all_edits
        Edit → Dismiss All Edits menu item

        Default: Ctrl+d

    find
        Edit → Find... menu item

        Default: Ctrl+f

    find_next
        Edit → Find Next menu item

        Default: Ctrl+g

    find_previous
        Edit → Find Previous menu item

        Default: Shift+Ctrl+G

    go_to_line
        Edit → Go To Line... menu item

        Default: Shift+Ctrl+L

    preferences
        Edit → Preferences menu item

        Default: None

    no_syntax_highlighting
        View → Syntax Highlighting → None menu item

        Default: None

    syntax_highlighting_syntax
        View → Syntax Highlighting → syntax menu item

        Default: None

    realign_all
        View → Realign All menu item

        Default: Ctrl+l

    isolate
        View → Isolate menu item

        Default: Ctrl+i

    first_difference
        View → First Difference menu item

        Default: Shift+Ctrl+Up

    previous_difference
        View → Previous Difference menu item

        Default: Ctrl+Up

    next_difference
        View → Next Difference menu item

        Default: Ctrl+Down

    last_difference
        View → Last Difference menu item

        Default: Shift+Ctrl+Down

    first_tab
        View → First Tab menu item

        Default: Shift+Ctrl+Page_Up

    previous_tab
        View → Previous Tab menu item

        Default: Ctrl+Page_Up

    next_tab
        View → Next Tab menu item

        Default: Ctrl+Page_Down

    last_tab
        View → Last Tab menu item

        Default: Shift+Ctrl+Page_Down

    shift_pane_right
        View → Shift Pane Right menu item

        Default: Shift+Ctrl+parenleft

    shift_pane_left
        View → Shift Pane Left menu item

        Default: Shift+Ctrl+parenright

    convert_to_upper_case
        Format → Convert To Upper Case menu item

        Default: Ctrl+u

    convert_to_lower_case
        Format → Convert To Lower Case menu item

        Default: Shift+Ctrl+U

    sort_lines_in_ascending_order
        Format → Sort Lines In Ascending Order menu item

        Default: Ctrl+y

    sort_lines_in_descending_order
        Format → Sort Lines In Descending Order menu item

        Default: Shift+Ctrl+Y

    remove_trailing_white_space
        Format → Remove Trailing White Space menu item

        Default: Ctrl+k

    convert_tabs_to_spaces
        Format → Convert Tabs To Spaces menu item

        Default: Ctrl+b

    convert_leading_spaces_to_tabs
        Format → Convert Leading Spaces To Tabs menu item

        Default: Shift+Ctrl+B

    increase_indenting
        Format → Increase Indenting menu item

        Default: Shift+Ctrl+greater

    decrease_indenting
        Format → Decrease Indenting menu item

        Default: Shift+Ctrl+less

    convert_to_dos
        Format → Convert To DOS Format menu item

        Default: Shift+Ctrl+E

    convert_to_mac
        Format → Convert To Mac Format menu item

        Default: Shift+Ctrl+C

    convert_to_unix
        Format → Convert To Unix Format menu item

        Default: Ctrl+e

    copy_selection_right
        Merge → Copy Selection Right menu item

        Default: Shift+Ctrl+Right

    copy_selection_left
        Merge → Copy Selection Left menu item

        Default: Shift+Ctrl+Left

    copy_left_into_selection
        Merge → Copy Left Into Selection menu item

        Default: Ctrl+Right

    copy_right_into_selection
        Merge → Copy Right Into Selection menu item

        Default: Ctrl+Left

    merge_from_left_then_right
        Merge → Merge From Left Then Right menu item

        Default: Ctrl+m

    merge_from_right_then_left
        Merge → Merge From Right Then Left menu item

        Default: Shift+Ctrl+M

    help_contents
        Help → Help Contents menu item

        Default: F1

    about
        Help → About menu item

        Default: None

Line Editing Mode Key Bindings

    Use line_mode for the context to define key bindings for line editing mode. The following values are valid for action:

    enter_align_mode
        enter alignment editing mode

        Default: space

    enter_character_mode
        enter character editing mode

        Defaults: Return, KP_Enter

    first_line
        move cursor to the first line

        Defaults: Home, g

    extend_first_line
        move cursor to the first line, extending the selection

        Default: Shift+Home

    last_line
        move cursor to the last line

        Defaults: End, Shift+G

    extend_last_line
        move cursor to the last line, extending the selection

        Default: Shift+End

    up
        move cursor up one line

        Defaults: Up, k

    extend_up
        move cursor up one line, extending the selection

        Defaults: Shift+Up, Shift+K

    down
        move cursor down one line

        Defaults: Down, j

    extend_down
        move cursor down one line, extending the selection

        Defaults: Shift+Down, Shift+J

    left
        move cursor left one file

        Defaults: Left, h

    extend_left
        move cursor left one file, extending the selection

        Default: Shift+Left

    right
        move cursor right one file

        Defaults: Right, l

    extend_right
        move cursor right one file, extending the selection

        Default: Shift+Right

    page_up
        move cursor up one page

        Defaults: Page_Up, Ctrl+u

    extend_page_up
        move cursor up one page, extending the selection

        Defaults: Shift+Page_Up, Shift+Ctrl+u

    page_down
        move cursor down one page

        Defaults: Page_Down, Ctrl+d

    extend_page_down
        move cursor down one page, extending the selection

        Defaults: Shift+Page_Down, Shift+Ctrl+d

    delete_text
        delete the selected text

        Defaults: BackSpace, Delete, x

    first_difference
        select the first difference

        Defaults: Ctrl+Home, Shift+P

    previous_difference
        select the previous difference

        Default: p

    next_difference
        select the next difference

        Default: n

    last_difference
        select the last difference

        Defaults: Ctrl+End, Shift+N

    clear_edits
        clear all edits from the selected lines

        Default: r

    copy_selection_left
        copy lines from the selection into the file on the left

        Default: None

    copy_selection_right
        copy lines from the selection into the file on the right

        Default: None

    copy_left_into_selection
        copy lines from the file on the left into the selection

        Default: Shift+L

    copy_right_into_selection
        copy lines from the file on the right into the selection

        Default: Shift+H

    merge_from_left_then_right
        merge lines from file on the left then file on the right

        Default: m

    merge_from_right_then_left
        merge lines from file on the right then file on the left

        Default: Shift+M

    isolate
        isolate the selected lines

        Default: i

Alignment Editing Mode Key Bindings

    Use align_mode for the context to define key bindings for alignment editing mode. The following values are valid for action:

    enter_line_mode
        enter line editing mode

        Default: Escape

    enter_character_mode
        enter character editing mode

        Defaults: Return, KP_Enter

    first_line
        move cursor to the first line

        Default: g

    last_line
        move cursor to the last line

        Default: Shift+G

    up
        move cursor up one line

        Defaults: Up, k

    down
        move cursor down one line

        Defaults: Down, j

    left
        move cursor left one file

        Defaults: Left, h

    right
        move cursor right one file

        Defaults: Right, l

    page_up
        move cursor up one page

        Defaults: Page_Up, Ctrl+u

    page_down
        move cursor down one page

        Defaults: Page_Down, Ctrl+d

    align
        align the selected line to the cursor position

        Default: space

Character Editing Mode Key Bindings

    Use character_mode for the context to define key bindings for character editing mode. The following values are valid for action:

    enter_line_mode
        enter line editing mode

        Default: Escape

  Strings

string name value
    Declares a string resource called name with value value.

Used String Resources

    The following string resources are used by Diffuse:

    difference_colours
        a list of colour resources used to indicate differences

        Default: difference_1 difference_2 difference_3

  Colours

[ colour | color ] name red green blue
    Declares a colour resource called name. Individual colour components should be expressed as a value between 0 and 1.

Used Colour Resources

    The following colour resources are used by Diffuse:

    alignment
        colour used to indicate a line picked for manual alignment

        Default: 1 1 0

    character_selection
        colour used to indicate selected characters

        Default: 0.7 0.7 1

    cursor
        colour used for the cursor

        Default: 0 0 0

    difference_1
        colour used to identify differences between the first pair of files

        Default: 1 0.625 0.625

    difference_2
        colour used to identify differences between the second pair of files

        Default: 0.85 0.625 0.775

    difference_3
        colour used to identify differences between the third pair of files

        Default: 0.85 0.775 0.625

    edited
        colour used to indicate edited lines

        Default: 0.5 1 0.5

    hatch
        colour used for indicating alignment gaps

        Default: 0.8 0.8 0.8

    line_number
        colour used for line numbers

        Default: 0 0 0

    line_number_background
        background colour for the line number area

        Default: 0.75 0.75 0.75

    line_selection
        colour used to indicate selected lines

        Default: 0.7 0.7 1

    map_background
        background colour for the map area

        Default: 0.6 0.6 0.6

    margin
        colour used to indicate the right margin

        Default: 0.8 0.8 0.8

    preedit
        pre-edit text colour

        Default: 0 0 0

    text
        regular text colour

        Default: 0 0 0

    text_background
        background colour for the text area

        Default: 1 1 1

  Floating Point Values

float name value
    Declares a floating point resource called name with value value.

Used Floating Point Resources

    The following floating point resources are used by Diffuse:

    alignment_opacity
        opacity used when compositing the manual alignment colour

        Defaults: 1

    character_difference_opacity
        opacity used when compositing character difference colours

        Defaults: 0.4

    character_selection_opacity
        opacity used when compositing the character selection colour

        Defaults: 0.4

    edited_opacity
        opacity used when compositing the edited line colour

        Defaults: 0.4

    line_difference_opacity
        opacity used when compositing line difference colours

        Defaults: 0.3

    line_selection_opacity
        opacity used when compositing the line selection colour

        Defaults: 0.4

  Syntax Highlighting

syntax name [initial_state default_tag]
    Declares a new syntax style called name. Syntax highlighting uses a simple state machine that transitions between states when certain patterns are matched. The initial state for the state machine will be initial_state. All characters not matched by a pattern will be tagged as default_tag for highlighting. The syntax style called name can be removed by omitting initial_state and default_tag.

syntax_files name [pattern]
    Specifies that files with a name matching pattern should be highlighted using the syntax style called name. Patterns used to match files for use with the syntax style called name can be removed by omitting pattern.

syntax_magic name [pattern [ignorecase]]
    Specifies that files with a first line matching pattern should be highlighted using the syntax style called name. Patterns used to match files for use with the syntax style called name can be removed by omitting pattern.

syntax_pattern name initial_state final_state tag pattern [ignorecase]
    Adds a pattern to the previously declared syntax style. Patterns are tried one at a time in the order they were declared until the first match is found. A pattern will only be used to match characters if the state machine is in the state initial_state. The state machine will transition to final_state if the pattern defined by pattern is matched. Case insensitive pattern matching will be used if ignorecase is specified. All characters matched by the pattern will be tagged as tag for highlighting.

FILES

The following files are used by Diffuse:

/etc/diffuserc
    system wide initialisations (%INSTALL_DIR%\diffuserc on Microsoft Windows)

/usr/share/diffuse/syntax/*.syntax
    syntax files for various languages (%INSTALL_DIR%\syntax\*.syntax on Microsoft Windows)

~/.config/diffuse/diffuserc
    your initialisations (%HOME%\.config\diffuse\diffuserc on Microsoft Windows)

~/.config/diffuse/prefs
    your saved preferences (%HOME%\.config\diffuse\prefs on Microsoft Windows)

~/.local/share/diffuse/state
    data persistent across sessions (%HOME%\.local\share\diffuse\state on Microsoft Windows)

AUTHOR

Diffuse was written by Derrick Moser <derrick_moser@yahoo.com>.

© 2006-2014 Derrick Moser. All Rights Reserved.

COPYING

Diffuse is free software; you may redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the licence, or (at your option) any later version.