- Bookmarks: Add
majutsu-bookmark-advanceforjj bookmark advance, plusmajutsu-bookmark-advance-tofor the explicit--toform andmajutsu-bookmark-advance-patternsfor explicit bookmark name/pattern selection with the configured default target. - Commands: Add
majutsu-reverttransient forjj revertwith source revision selection and destination placement options (--onto/--insert-after/--insert-before). - Commands: Add
majutsu-metaedittransient forjj metaedit. It targets a single revision from the region, point, or@fallback and exposes metadata edit/update flags. - Commands: Add
majutsu-simplify-parentstransient with both--sourceand--revisionsoptions. - File inspection: Add
majutsu-find-file-other-windowandmajutsu-find-file-other-framefor opening blob buffers in another window or frame. - Log: Add visible DAG relation navigation.
[jumps to a parent revision and]jumps to a child revision, prompting when multiple visible targets exist. - Log: Add semantic copy commands under the log dispatcher copy submenu for section values, rendered fields, hidden entry fields, commit hashes, and visible modules.
- JJ descriptions: Add save/history/search/diff commands for description
buffers, including
majutsu-jjdescription-save-message,majutsu-jjdescription-prev-message,majutsu-jjdescription-next-message,majutsu-jjdescription-search-message-backward,majutsu-jjdescription-search-message-forward, andmajutsu-jjdescription-show-diff. - Template DSL: Add first-class anonymous functions, concise
[:|arg| body]syntax, compile-time lambda application, andmajutsu-template-defspecial.
- Workspace: Workspace lists now show resolved roots when available and
treat unavailable roots as empty data instead of raw jj errors. Internally
this now uses one structured
jj workspace list -Tparse pipeline. - Log folding: Preserve display-only graph prefixes when folding and unfolding log commits, including via Evil / evil-collection section commands.
- Log: Add the
tailmodule for right-aligned auxiliary fields and use display-only prefixes for graph/body indentation so ordinary copying and cursor movement see semantic content. - Log: Store field/column/entry/decoration metadata on rendered spans and
always keep hidden
id,commit-id, andparent-idstransport data available for copy and relation-navigation commands. - Log: Repeated fields can now render differently in different modules.
Majutsu decodes transport values before running each column’s
:posthandlers. - Template DSL: Rework implicit
selfaround explicit/bindable receivers and owner-bound extension definitions; local log helpers now use that lowering model. - Template DSL: Lower higher-order forms through the core lambda/method machinery and add semantic type propagation for helper arguments, method chains, list elements, and deferred lambda specialization.
- Template DSL: Align builtin helper, method, conversion, and operator
metadata with upstream
jj, including option/list receivers,RefSymbol, literal-only parameters,if(), and helper return types.
- File inspection: Remove
majutsu-find-file-at-point; usemajutsu-find-file, which still defaults revset/path from context. - Diff: Remove the dedicated
vbinding from diff file sections, following Magit’s split between explicit file commands and diff-specific visits. - Log: Remove
majutsu-log-field-faces; configure field faces directly inmajutsu-log-commit-columnsusing each field’s:faceproperty.
- Transients: Use a consistent
RETexecute binding inmajutsu-squashandmajutsu-splitwhile keepings. - Ediff: Quitting
majutsu-ediff-resolvewithout edits no longer writes a resolved result, so conflicts stay unresolved. - Ediff: Edited merge sessions now ask before saving, and partial resolutions keep remaining conflicts as jj-parseable git-style markers.
- Evil: Restore evil-collection-style diff-context bindings in
majutsu-diff-mode:+adds context,=removes context, and~resets to the default.
- Prompt for passwords/passphrases in the minibuffer during jj operations, with auth-source support.
- In
majutsu-squashtransient:- Add toggle-option for
-r.
- Add toggle-option for
- In
majutsu-difftransient:- Support
--ignore-space-change(-b) and--ignore-all-space(-w) arguments. - Add fileset limiting via
--.
- Support
- Revset completion candidates now show source labels (pseudo/workspace/bookmark/tag).
- In
majutsu-diffbuffers:- Add
majutsu-color-wordsbackend with-Wtoggle in the diff transient. - Add color-words line/column-aware navigation for
RET/C-jvisits. - Add a shadow cursor for refined color-words hunks (uses
smerge-refine-shadow-cursor).
- Add
- Add
majutsu-fileblob inspection workflow:- Add
majutsu-find-file/majutsu-find-file-at-pointfor revision-aware file viewing. - Add blob buffer history navigation (
p/n) and workspace jump (V). - Add
eto edit a blob’s revision viajj diffedit(nojj edit).
- Add
- Add
majutsu-annotateworkflow with chunk navigation, style cycling, and forward recursive tracing toward parent revisions. - Add
majutsu-blob-visit-magitto open magit blob buffers in majutsu blob buffers. - Add
majutsu-edifftransient:- Add context-aware compare (
majutsu-ediff-dwim). - Add
jj diffeditintegration using Emacs/Ediff as diff editor. - Add conflict resolve entrypoints (
m/M).
- Add context-aware compare (
- Add
majutsu-sparsetransient and list buffer forjj sparsepattern management. - Add
majutsu-conflictparser/minor-mode for JJ conflict markers:- Add conflict navigation, keep-side commands, and word-level refine.
- Auto-select
majutsu-conflict-modevssmerge-modebased on marker style.
- Highlight JJ description buffers (summary, JJ comments, change list) using git-commit faces.
- Add global mode to manage JJ description setup hooks.
- Allow configuring JJ description major mode and Change ID face.
- Allow configuring JJ description comment prefix for comment commands.
- Highlight JJ ignore-rest and diffstat summary lines.
- Add
majutsu-absorbtransient forjj absorbwith--from/--intoplus fileset limiting. - Workspace root detection now uses
jj workspace root --nameto leverage newer jj workspace-name-aware root resolution behavior.
- Keybinding changes:
anow runsmajutsu-absorbin Emacs and Evil Majutsu buffers.- Emacs
kremainsmajutsu-abandon; Evil keepsxfor abandon. Onow runsmajutsu-new-dwimin log mode (wasNglobally).Dnow runsmajutsu-diff-dwimin log mode (was global).Ynow runsmajutsu-duplicate-dwimin log mode (was global).onow runsmajutsu-newtransient globally.
majutsu-abandonnow respects active region selection to abandon multiple changesets at once.- In
majutsu-newtransient:- Parent revision key changed from
ptor. - Action key changed from
ntoo. majutsu-new-executenow auto-fills-rfrom the commit at point when invoked outside the transient.
- Parent revision key changed from
- Buffer display now follows Magit’s display-buffer model:
- Replaced
majutsu-display-functionswithmajutsu-display-buffer-function(traditional/same-window-except-diff/fullframe/topleft/fullcolumn). - Added
majutsu-pre-display-buffer-hookandmajutsu-post-display-buffer-hook. - Added
majutsu-bury-buffer-functionwith Magit-style window lifecycle handling andmajutsu-mode-quit-window. - Updated
qto usemajutsu-mode-bury-bufferin Majutsu buffers and blob buffers. - Switched JJ description buffers to use
switch-to-bufferdisplay behavior.
- Replaced
- Diffedit buffers now finish on save by default (see
majutsu-edit-finish-on-save). - Blob buffers now use a wdired-style editable mode:
e(orC-x C-q) enters editable blob mode.- Saving applies changes through
jj diffeditand exits edit mode. majutsu-blob-edit-exit(C-x C-qin editable mode) mirrors wdired exit behavior.- In Evil normal state,
ienters editable blob mode and stays in normal state. - Editable mode uses Dirvish-style cursor hints: both
cursor-typeand Evil normal cursor are updated.
- Diff DWIM now only inherits range/filesets from the current diff buffer, and context adjustments (+/-/0) no longer update global defaults.
majutsu-tplnow evaluates embedded Elisp in templates at runtime.
- Interactive Patching: Select specific hunks, files, or regions within diff buffers for Split, Squash, and Restore operations. Provides Magit-style partial staging workflow for Jujutsu.
- Workspace Support: Full
jj workspaceintegration with list/add/forget/rename/visit commands. - Split & Restore Transients: New transients for
jj splitandjj restorewith visual revision selection.
- Added
majutsu-splittransient (S) for splitting revisions with interactive hunk/region selection. - Added
majutsu-restoretransient (R) with--from,--to, and--changes-insupport. - Added interactive patching in diff buffers for partial split/squash/restore operations (
majutsu-interactive.el). - Added workspace support (
jj workspace): list/add/forget/rename/visit and log integration via theZ/%menu (majutsu-workspace.el). - Added
majutsu-workspace-search-directoriesto helpVisitlocate workspace directories on disk. - Added DWIM variants:
majutsu-new-dwim,majutsu-duplicate-dwim,majutsu-diff-dwim. - Added buffer lifecycle hooks:
majutsu-create-buffer-hook,majutsu-setup-buffer-hook,majutsu-post-create-buffer-hook,majutsu-refresh-buffer-hook. - Added locked buffer support via
majutsu-buffer-locked-pandmajutsu-buffer-value. - Added
majutsu-display-functionsfor customizable buffer display per buffer kind. - Added
majutsu-log-field-facesfor customizable log field colors. - Added
--statand--gitas default diff arguments. - Added
-r(revision) argument support in squash transient. - Added
-o,-A,-B(onto/after/before) support in squash transient. - Added split
-r,-b,-sarguments in rebase transient. - Added
majutsu-confirmfor confirmation prompts.
- Renamed transient commands: removed
-transientsuffix (e.g.,majutsu-squash-transient→majutsu-squash,majutsu-rebase-transient→majutsu-rebase). - Keybinding changes in dispatcher (
?):Cnow runsmajutsu-commit(wasc)cnow runsmajutsu-describe(wasd)C-?now runsmajutsu-redo(wasR)Nnow runsmajutsu-new-dwim(wasmajutsu-new)nnow runsmajutsu-new(wasmajutsu-new-transient)Ynow runsmajutsu-duplicate-dwim(wasmajutsu-duplicate)ynow runsmajutsu-duplicate(wasmajutsu-duplicate-transient)- Added
Sformajutsu-split - Added
Rformajutsu-restore - Added
Zformajutsu-workspace
- Evil keybinding changes:
Rnow runsmajutsu-restore(wasmajutsu-refresh, useg rinstead)Onow runsmajutsu-new-dwimin log mode (wasmajutsu-new)onow runsmajutsu-newtransient*now runsmajutsu-workspaceSnow runsmajutsu-split
- Refactored core modules:
- Extracted
majutsu-jj.elfor JJ executable and toplevel utilities. - Extracted
majutsu-jjdescription.elfor description editing. - Extracted
majutsu-selection.elfrommajutsu-log.el. - Added
majutsu-section.elfor section utilities. - Added
majutsu-config.elfor jj config access.
- Extracted
- Renamed
majutsu-run-jjtomajutsu-jj-string. - Use
jj workspace rootto get repository root instead of internal.jjinspection. - Selection sessions are now stored in transient scope instead of buffer-local.
- Log template now uses
jointemplate function. - Updated bookmark transient for jj v0.37.0 compatibility.
- Diff context control:
0now resets to default (was=for set), reads default fromjj config.
- Fixed diffstat truncated paths by resolving via diff headers.
- Fixed diffstat binary file display (jj style).
- Fixed bookmark list
font-lock-modenot enabled. - Fixed log template unicode character issue on Windows.
- Fixed jjdescription files excluded from recentf and better-jumper.
- Fixed selection session end not working properly.
- Fixed region toggle in selection.
- Fixed path expand in git-init.
- Support for global
--ignore-immutableflag in rebase, squash, new, and bookmark transients. - Support for
--ignore-immutableinmajutsu-describeandmajutsu-editvia prefix argument (C-u). - Region sections selection in transient for commands now supports toggling more than one commits at once.
- Magit-style per-repository process buffer (
majutsu-process-buffer, bond to$, or`for evil) for inspecting jj command output and failures.
- Significant improvements to diff view rendering speed and memory usage.
- Implemented “washing” to parse
jj diffoutput directly in the buffer. - Added lazy font-locking (JIT) for diff highlighting.
- Whitespace painting is now disabled for very large hunks to preserve responsiveness.
- Implemented “washing” to parse
- Removed deprecated
--allow-newflag frommajutsu-git-push. - Keybinding of
majutsu-abandonchanged fromktok/a. - Replaced
majutsu-enter-dwimwithmajutsu-visit-thing, and use section keymaps soRETdoes the right thing in log/diff buffers (edit commit, visit file, jump to hunk). - Diffstat summary line is now displayed as the diffstat section heading.
majutsu-log-refreshnow restores point using section successors, keeping navigation stable across operations like abandon.
- Trimmed timestamp strings (e.g., removing ” ago”) in right-margin display.
- In majutsu transients, pressing
ESC/C-gwhile there is an active region deactivates the region (or exits visual state in evil) first instead of immediately quitting the transient. - Fixed diffstat rendering (misaligned stat lines) in
majutsu-diffwhen using combinedjj diff --git --statoutput.
- Native evil support.
- Add asynchronous support for
majutsu-log,majutsu-diff,majutsu-git-fetchandmajutsu-git-push. - Basic
majutsu-op-logimplementation. - Added
majutsu-hack-dir-local-variables, ignore trailing whitespace in majutsu buffers. majutsu-rebase-transientnow can toggle source and destination argument type (-b-r-s/-o-A-B).majutsu-tpl(main entry ofmajutsu-template) add a optionalself-typeargument.- Bound
majutsu-difftod.
- Keybinding of
majutsu-describechanged fromdtoc. - Keybinding of
majutsu-commitchanged fromctoC. - Keybinding of
majutsu-undochanged fromutoC-/. - Keybinding of
majutsu-redochanged fromRtoC-?. - Keybinding of
majutsu-abandonchanged fromatok. - Renamed
majutsu-mode-transienttomajutsu-dispatch. - Renamed
majutsu-goto-currenttomajutsu-log-goto-@.
majutsu-log-got-@works based on output ofjj logcommand.- Keyword parsing in
majutsu-templaterespects zero argument method chains.
- Added a confirm action customization for abandon/redo/undo.
- Added
majutsu-diff-transient. - Added
majutsu-new-transient. - Added
majutsu-duplicate-transient. - Added revset, line limit and path filter argument for
majutsu-log-transient. - Added support for
jj bookmark move --allow-backwards. Useminmajutsu-bookmark-transientto denote commands without flags, and useMfor commands that include--allow-backwards.
- Depend on with-editor.
majutsu-diffandmajutsu-describenow can run outside of majutsu-log buffer.majutsu-log-refreshtracks the section from before the refresh to keep the visuals consistent.
- Fixed an issue where diff sections couldn’t be toggled/collapsed.
- Don’t strip leading spaces when parsing log graphs.
- Prefer change ID, and for divergent commits (with “??” as suffix) fallback to commit ID.
- forked form bolivier/jj-mode.el
majutsu-template