zbirenbaum / copilot.lua

Fully featured & enhanced replacement for copilot.vim complete with API for interacting with Github Copilot
MIT License
2.43k stars 65 forks source link

feature request: undo accepted text #235

Open thenbe opened 7 months ago

thenbe commented 7 months ago

Current behavior:

  1. Type 123
  2. Copilot suggests 456
  3. You accept suggestion
  4. You press undo
  5. Observe that entire line is deleted

Desired behavior:

  1. Type 123
  2. Copilot suggests 456
  3. You accept suggestion
  4. You press undo
  5. Observe that only 456 is deleted. You are still left with the original text you manually typed: 123

Workaround attempts

I tried this after disabling the default accept keymap, but the it acts in a weird manner. Instead of undoing the suggestion, it only moves the cursor without removing any text.

map("i", "<M-f>", function()
    -- 1. preserve undo point
    vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes("<c-g>u", true, false, true), "t", false)
    -- 2. then accept suggestion
    require("copilot.suggestion").accept()
end)

This one doesn't work either. Here, pressing undo removes the entire line.

map("i", "<M-f>", function()
    -- 1. simulate exiting then re-entering insert mode to trigger undopoint
    vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes("<Esc>a", true, false, true), "t", false)
    -- 2. then accept suggestion
    require("copilot.suggestion").accept()
end)
MunifTanjim commented 7 months ago

This is also probably a regression from https://github.com/neovim/neovim/pull/24901 🤔

What is your Neovim version?

thenbe commented 7 months ago

I'm on nightly.

NVIM v0.10.0-dev-d2983dc
Build type: Release
LuaJIT 2.1.1693350652