Repository navigation
v0.7.0
- 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 mergetoolresolves 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 difftoolshows each file and moves on with Next file;git rebase -iplans 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,--offto undo); so does
the Neovim plugin, unlessgit_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