feat(cmd): Implement the bookmark forget as a native function

This commit is contained in:
NicolasGB
2026-03-12 18:04:39 +01:00
parent 1c3d38a626
commit 80caa923c2
2 changed files with 41 additions and 2 deletions
+9 -2
View File
@@ -66,7 +66,7 @@
- `squash` - Squash the current diff to its parent or interactive squash mode from the log buffer
- `split` - Split a change interactively in a floating terminal
- `rebase` - Rebase changes to a destination
- `bookmark create/delete` - Create and delete bookmarks
- `bookmark create/delete/forget` - Create, delete, and forget bookmarks
- `tag set/delete/push` - Create, delete, and push tags (push requires colocated repos)
- `undo` - Undo the last operation
- `redo` - Redo the last undone operation
@@ -355,7 +355,7 @@ The plugin provides a `:J` command that accepts jj subcommands:
:J split " Split a change interactively
:J diff_history " Prompt for a `left..right` range and open a history-aware diff
:J diff_history main..@ " Open a history-aware diff between main and the working copy
:J bookmark create/move/delete
:J bookmark create/move/delete/forget
:J tag set " Set a tag (prompts for revision and tag name)
:J tag set abc123 " Set a tag on a specific revision
:J tag delete " Delete a tag via picker
@@ -671,6 +671,13 @@ local cmd = require("jj.cmd")
cmd.bookmark_delete() -- Select bookmark to delete
```
The `bookmark_forget` function forgets a bookmark:
```lua
local cmd = require("jj.cmd")
cmd.bookmark_forget() -- Select bookmark to forget
```
### Tag Management Command Options
The `tag_set` function creates a tag on a revision:
+32
View File
@@ -607,6 +607,36 @@ function M.bookmark_track()
end)
end
-- Jujutsu forget bookmark
function M.bookmark_forget()
if not utils.ensure_jj() then
return
end
local bookmarks = utils.get_all_bookmarks()
if #bookmarks == 0 then
utils.notify("No bookmarks to forget", vim.log.levels.ERROR)
return
end
local log_open = terminal.is_log_buffer_open()
vim.ui.select(bookmarks, { prompt = "Which bookmark do you want to forget?" }, function(choice)
if choice then
runner.execute_command_async(
string.format("jj bookmark forget %s --quiet", vim.fn.shellescape(choice)),
function()
utils.notify(string.format("Bookmark `%s` is now untracked.", choice))
if log_open then
M.log()
end
end,
"Could not forget bookmark"
)
end
end)
end
-- Jujutsu undo
function M.undo()
if not utils.ensure_jj() then
@@ -1269,6 +1299,8 @@ function M.j(args)
M.bookmark_move()
elseif remaining_args[1] == "delete" or remaining_args[1] == "d" then
M.bookmark_delete()
elseif remaining_args[1] == "forget" or remaining_args[1] == "f" then
M.bookmark_forget()
elseif remaining_args[1] == "track" or remaining_args[1] == "t" then
M.bookmark_track()
else