Hex Editor - Binary File Editing Software for Windows


Like in most other editors, the sequence of operations you perform on a document form an operation history. Imagine you create a new document and perform several operations. This is a resulting operation history:

Sample 1

Now, you decide to undo the last operation and execute the Edit » Undo command. This is how the history list looks like now:

Sample 2

The last operation is still displayed, but this time in gray color. It is still available for you, but is not currently affecting a document. If you execute the Edit » Redo command, the operation becomes active again.

But what if you execute a new operation, say, delete a byte at offset 0x1f? In most other editors, the grayed operation is removed and you no longer can access it.

Hex Editor Neo introduces a concept of history branches. Think of an operation history as a tree; then a branch is a full path from the tree's root to a tree's leaf. The number of branches equals the number of leafs. When new operation is added to an operation history, one of the following occurs (providing the Auto Create Branches switch is ON):

Branches are displayed as tabs at the top of the History Tool Window.

Branch Tabs

Additionally, a special icon is added to every tree's fork. See the History Tool Window section for more information.

You can perform the following actions with branches:

Switch to a branch
To switch to a branch, click its tab.
Rename a branch
To rename a branch, double click its tab.
Delete a branch
To delete a branch, right-click it to bring up a shortcut menu and select a “Delete Branch” option.
Pin or unpin a branch
To pin or unpin a branch, click the pin icon. See below for a description of pinned branches.

Pinned Branches

When a new branch is created, the tail of the current branch is moved into a newly created branch, the new operation is added to the current branch and it still remains a current one. This is a default behavior of unpinned branch.

When a branch is pinned, a new operation is added to a newly created branch which in turn becomes a current branch. This allows you, for example, to assign a name to an important branch and make sure it stays “untouched” whenever you fork a new branch from it.