Skip to content

v0.7.0

Choose a tag to compare

@github-actions github-actions released this 19 Oct 08:37
· 12 commits to main since this release
  • The diff's from and to stay as chosen: a page that opens without them (a reload from Neovim, a new window, a
    restarted server) lands on the comparison last picked in that repo. Picking the working tree again goes back to
    opening on it.
  • Ctrl+H, Ctrl+J, Ctrl+K and Ctrl+L move between the panels the way Neovim moves between windows and tmux between
    panes: the top bar, the side panel, the page, the symbol panel and the bottom panel, from a terminal too (where a
    key with no panel on that side still reaches the shell). A text box keeps them; Esc first. A hidden side panel
    or a closed bottom panel opens on the way.
  • The Vim-style key layer is gone: no leader chords, which-key, : command line, modes in the status bar or
    keymaps editor. A few plain keys do one thing each: Ctrl+P (Cmd+P on a Mac) searches, j and k step through
    changes, J and K through files, s, u and x stage, unstage and discard, c comments, v marks viewed, o opens in
    your editor, t flips the layout, / filters, and arrows, Home and End walk any list. ? lists them.
  • duck-diff is git's merge tool, diff tool and rebase editor. git mergetool resolves a merge, cherry-pick, revert,
    rebase or stash pop in a window with only the conflicts and their files, and returns each file to git once it
    is staged; git difftool shows each file and moves on with Next file; git rebase -i plans the rebase as a
    list (a todo with lines it does not plan opens the usual editor). The window closes once git has what it asked
    for. The install sets this up where no other tool is chosen (duck-diff git-setup, --off to undo); so does
    the Neovim plugin, unless git_setup = false.
  • Each file on the merge page carries Open, Blame and History in its header. Blame names who last changed each
    line of the current and incoming sides (the merge base's for the lines a side removed), and the result names
    the side each pick came from; b blames the file at the top of the page. History lists the commits on each side
    that changed the file since the two parted.
  • A conflict written by git in its usual style, which folds blocks split only by a lone brace and trims lines
    both sides share, now shows its merge base, so a side that removed lines shows them removed instead of
    showing nothing.
  • Editing a merge as text is editing code: coloured as the diff is, numbered, and with each side of a conflict
    tinted, and each conflict's opening line carries Accept current, Accept incoming, Both and Base. The same
    editor writes a single block by hand.
  • Moving to a file or a change glides there gently on the diff and the merge page, and the file list marks the
    file it is headed for at once instead of flicking through those on the way. The merge page no longer says
    everything is resolved before it has read the conflicts, and shows its files together rather than one by one.
  • A worktree's tag sits right after its branch name instead of under a long one.
  • Conflicts met in the page's terminal are announced only when there are conflicts: a rebase being planned no
    longer reads as stopped.
  • The merge page shows every conflicted file on one page, as the diff shows changed files: each under a header
    that stays while it scrolls, the list beside it jumping to a file and marking the one on screen, and each
    column scrolling sideways as the diff's do. It shows a conflict as GitHub does: the current change and the
    incoming one, each headed by its branch, short hash and subject and drawn against the merge base in red and
    green with the changed words marked, beside the result being built. It follows the diff settings (split or
    stacked, word marks, wrapping, line numbers, backgrounds, change markers, tab width), with j, k and t working
    there too. The top bar says what is coming together and how many files are left, with
    Continue and Abort; each file shows its conflict count; each conflict reads across one strip with its state in
    a badge; and after the last file the page offers Continue right there.
  • A merge, rebase, cherry-pick or revert in progress shows everywhere: in the status bar on every page, as a
    Merge entry with its count on the rail, and as a Merge tab in the bottom panel listing the conflicted files with
    Take current, Take incoming and Resolve. One that stops in the page's terminal (or anywhere else) turns the
    panel to that tab at once and says so.
  • Files opens the README, or offers the file tree back, when the tree is hidden; it no longer shows an empty
    page pointing at a panel that is not there.
  • Nothing you start has a time limit any more: a push of a big repo, a pre-push build, a long rebase or a bisect
    run takes as long as it takes. Background reads still give up on a git that has printed nothing for a while,
    and then stop the hooks and everything it started with it.
  • macOS no longer kills duck-diff after an update. Every install path (the Neovim plugin, duck-diff update,
    install.sh and a local build) writes a new file and renames it over the old one instead of rewriting it, and
    signs it ad hoc when its signature does not check out. A release now fails if a Mac build does not verify.
  • Editing a hide pattern keeps its name in the box instead of emptying it, and a name that is only the regex
    follows the regex as it changes. Set upstream starts from the branch's current upstream.
  • A reload brings the page back as it was: the bottom panel open on the same terminal or output, terminals in
    their order with their names, the side panel's tab, where every list and the diff were scrolled, folded files
    and folders, opened context, filters and sorts, blame, the symbol panel, and anything half typed (the commit
    message, comments, replies, merge picks, new pull request, issue and release forms).
  • A push, pull, commit or any other git action still running shows as running after a reload and in every
    other tab, and its toast comes when it ends there too. A new build installed meanwhile waits for it instead of
    cutting it off; one cut off by a restart says so.
  • The browser's own shortcuts (print, save, find, history, downloads, bookmarks, view source, developer tools,
    the F keys, Alt+arrows) do nothing in duck-diff; reload still works, and text boxes keep copy, cut, paste,
    select all, undo and redo. Chrome keeps Ctrl+W, Ctrl+T, Ctrl+N and Ctrl+Tab for itself.
  • The worktree and repository card shows the folder's name, its path with a copy button, the branch with how far
    it is ahead of or behind its upstream, the commit it is on with author and age, and how many files differ.
  • The rebase, merge and cherry-pick banner puts its buttons on a row of their own above the message, so a narrow
    side panel no longer squeezes the words into a column.

What's Changed

  • feat: 0.7.0 with duck-diff as git's merge tool, blame on the merge page and plain keys by @wildduck2 in #26

Full Changelog: v0.6.0...v0.7.0