Skip to main content

Meld, in your terminal: a faithful TUI port of the Meld diff/merge tool

Project description

tmeld — Meld, in your terminal

CI License: GPL v2+

A faithful terminal port of GNOME Meld: the same diff engine (vendored verbatim), the same colors, the same keybindings — over plain SSH. Two- and three-way file comparison and merging, folder comparison, and a version-control view.

tmeld three-way merge

tmeld a.py b.py                  # 2-way compare/edit
tmeld local.py base.py remote.py # 3-way merge (middle = merged file)
tmeld dirA dirB                  # folder comparison (Enter opens files)
tmeld .                          # version-control view (git, hg, svn, ...)
tmeld a b --diff c d --diff x y  # extra comparison tabs (like meld --diff)
tmeld --theme meld-dark a b      # Meld's dark scheme

Keys (Meld's own)

Action Keys
Next / previous change Alt+Down, Ctrl+D / Alt+Up, Ctrl+E
Push chunk left / right Alt+Left / Alt+Right
Pull chunk from left / right Alt+Shift+Right / Alt+Shift+Left
Copy chunk above / below Alt+[ Alt+] / Alt+; Alt+'
Delete chunk Alt+Delete
Next / previous conflict (3-way) Ctrl+K / Ctrl+J
Merge all non-conflicting (3-way) Alt+M
Save Ctrl+S
Next / previous pane Alt+PgDn / Alt+PgUp
Close tab Ctrl+W (twice if unsaved)
Next / previous tab Ctrl+Alt+PgDn / Ctrl+Alt+PgUp
Quit Ctrl+Q

Gutter arrows between panes are clickable (they push the chunk); the right-edge map is click-to-jump. On macOS terminals, set "Option as Esc+" (iTerm2: Profiles → Keys) so Alt bindings arrive.

In folder comparisons: Enter compares the file under the cursor (or expands/collapses a folder), Alt+Left/Right copy the row to that neighbor pane, Delete deletes it (press twice to confirm), Alt+Down/Up jump between differing rows, and Alt+PgDn/PgUp move the focused pane (the column copy/delete act on). Meld's default filename filters (backups, VCS metadata, binaries, OS cruft) apply.

In the version-control view (tmeld . anywhere in a working copy): Enter compares a changed file against the repository (repo side read-only); a conflicted file opens as a remote/merge/local 3-way whose middle-pane saves resolve the working file. c commits (Meld's Ctrl+M IS Enter in a terminal, so the mnemonic moved), r reverts, Delete deletes, Ctrl+R/F5 rescans.

Pixel linkmap (Tier 2)

On terminals with graphics support, the gutter between panes widens and Meld's anti-aliased connector curves are drawn there as real pixels — kitty graphics protocol (kitty, WezTerm, Ghostty) or sixel (iTerm2, recent VTE), auto-detected at startup. --graphics none|sixel|kitty overrides the probe. Everything else stays cell-based; without graphics you keep the compact 3-column gutter.

git mergetool

tmeld follows Meld's convention: tmeld $LOCAL $MERGED $REMOTE, the middle pane is the merged file. The exit code is 0 only if the middle pane was saved, so git can trust it:

[merge]
    tool = tmeld
[mergetool "tmeld"]
    cmd = tmeld "$LOCAL" "$MERGED" "$REMOTE"
    trustExitCode = true

tmeld -o OUTPUT local base remote redirects middle-pane saves to OUTPUT (like meld -o) if you'd rather keep the base file untouched.

For diffs: git difftool -x tmeld or

[diff]
    tool = tmeld
[difftool "tmeld"]
    cmd = tmeld "$LOCAL" "$REMOTE"

License and provenance

GPL-2.0-or-later (see LICENSE), like Meld — whose engine this project vendors byte-for-byte apart from mechanical import rewrites (tmeld/_vendor/meld/, pinned commit recorded in tmeld/_vendor/UPSTREAM, rewrites applied by maint/vendor.py). The vendored vc/ package is BSD 2-clause (its COPYING ships alongside).

tmeld is an independent project, not affiliated with or endorsed by the Meld or GNOME projects. All credit for the diff engine and the design this port imitates goes to Meld and its maintainers.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tmeld-0.4.0.tar.gz (111.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tmeld-0.4.0-py3-none-any.whl (115.4 kB view details)

Uploaded Python 3

File details

Details for the file tmeld-0.4.0.tar.gz.

File metadata

  • Download URL: tmeld-0.4.0.tar.gz
  • Upload date:
  • Size: 111.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for tmeld-0.4.0.tar.gz
Algorithm Hash digest
SHA256 9010b3a09f5f79f95f4725a3827b9a94cde222176ea3770079b993a8c70e0ce7
MD5 b5ac8719c67cb9a3ff7d233178a0da4d
BLAKE2b-256 3582581bc0ed4e5bf0e4598a8cc77eba64c4ad4ea31d014cb8c72973079dae61

See more details on using hashes here.

File details

Details for the file tmeld-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: tmeld-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 115.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for tmeld-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 25e901b730b4c206c64ac6637482c70f29dc7f1df151df39d1afac00f231db2e
MD5 925b3725c8aa49a5b940406b90d31aa1
BLAKE2b-256 1c645a388e6be942b564181d6972fee2dfeb5b293404c41b621f14f58989267e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page