|
1 | 1 | local api = require("copilot.api") |
2 | 2 | local c = require("copilot.client") |
| 3 | +local config = require("copilot.config") |
3 | 4 | local hl_group = require("copilot.highlight").group |
4 | 5 | local util = require("copilot.util") |
5 | 6 |
|
@@ -100,6 +101,32 @@ local function set_keymap(keymap) |
100 | 101 | end |
101 | 102 | end |
102 | 103 |
|
| 104 | +local function unset_keymap(keymap) |
| 105 | + if keymap.accept then |
| 106 | + vim.keymap.del("i", keymap.accept) |
| 107 | + end |
| 108 | + |
| 109 | + if keymap.accept_word then |
| 110 | + vim.keymap.del("i", keymap.accept_word) |
| 111 | + end |
| 112 | + |
| 113 | + if keymap.accept_line then |
| 114 | + vim.keymap.del("i", keymap.accept_line) |
| 115 | + end |
| 116 | + |
| 117 | + if keymap.next then |
| 118 | + vim.keymap.del("i", keymap.next) |
| 119 | + end |
| 120 | + |
| 121 | + if keymap.prev then |
| 122 | + vim.keymap.del("i", keymap.prev) |
| 123 | + end |
| 124 | + |
| 125 | + if keymap.dismiss then |
| 126 | + vim.keymap.del("i", keymap.dismiss) |
| 127 | + end |
| 128 | +end |
| 129 | + |
103 | 130 | local function stop_timer() |
104 | 131 | if copilot._copilot_timer then |
105 | 132 | vim.fn.timer_stop(copilot._copilot_timer) |
@@ -473,48 +500,82 @@ local function on_complete_changed() |
473 | 500 | clear() |
474 | 501 | end |
475 | 502 |
|
476 | | -function mod.setup(config) |
477 | | - if copilot.setup_done then |
478 | | - return |
479 | | - end |
480 | | - |
481 | | - set_keymap(config.keymap or {}) |
482 | | - |
483 | | - copilot.auto_trigger = config.auto_trigger |
| 503 | +local function create_autocmds() |
| 504 | + vim.api.nvim_create_augroup(copilot.augroup, { clear = true }) |
484 | 505 |
|
485 | 506 | vim.api.nvim_create_autocmd("InsertLeave", { |
| 507 | + group = copilot.augroup, |
486 | 508 | callback = on_insert_leave, |
487 | 509 | desc = "[copilot] (suggestion) insert leave", |
488 | 510 | }) |
489 | 511 |
|
490 | 512 | vim.api.nvim_create_autocmd("BufLeave", { |
| 513 | + group = copilot.augroup, |
491 | 514 | callback = on_buf_leave, |
492 | 515 | desc = "[copilot] (suggestion) buf leave", |
493 | 516 | }) |
494 | 517 |
|
495 | 518 | vim.api.nvim_create_autocmd("InsertEnter", { |
| 519 | + group = copilot.augroup, |
496 | 520 | callback = on_insert_enter, |
497 | 521 | desc = "[copilot] (suggestion) insert enter", |
498 | 522 | }) |
499 | 523 |
|
500 | 524 | vim.api.nvim_create_autocmd("BufEnter", { |
| 525 | + group = copilot.augroup, |
501 | 526 | callback = on_buf_enter, |
502 | 527 | desc = "[copilot] (suggestion) buf enter", |
503 | 528 | }) |
504 | 529 |
|
505 | 530 | vim.api.nvim_create_autocmd("CursorMovedI", { |
| 531 | + group = copilot.augroup, |
506 | 532 | callback = on_cursor_moved_i, |
507 | 533 | desc = "[copilot] (suggestion) cursor moved insert", |
508 | 534 | }) |
509 | 535 |
|
510 | 536 | vim.api.nvim_create_autocmd("CompleteChanged", { |
| 537 | + group = copilot.augroup, |
511 | 538 | callback = on_complete_changed, |
512 | 539 | desc = "[copilot] (suggestion) complete changed", |
513 | 540 | }) |
| 541 | +end |
| 542 | + |
| 543 | +function mod.setup() |
| 544 | + local opts = config.get("suggestion") --[[@as copilot_config_suggestion]] |
| 545 | + if not opts.enabled then |
| 546 | + return |
| 547 | + end |
| 548 | + |
| 549 | + if copilot.setup_done then |
| 550 | + return |
| 551 | + end |
| 552 | + |
| 553 | + set_keymap(opts.keymap or {}) |
| 554 | + |
| 555 | + copilot.auto_trigger = opts.auto_trigger |
514 | 556 |
|
515 | | - copilot.debounce = config.debounce |
| 557 | + create_autocmds() |
| 558 | + |
| 559 | + copilot.debounce = opts.debounce |
516 | 560 |
|
517 | 561 | copilot.setup_done = true |
518 | 562 | end |
519 | 563 |
|
| 564 | +function mod.teardown() |
| 565 | + local opts = config.get("suggestion") --[[@as copilot_config_suggestion]] |
| 566 | + if not opts.enabled then |
| 567 | + return |
| 568 | + end |
| 569 | + |
| 570 | + if not copilot.setup_done then |
| 571 | + return |
| 572 | + end |
| 573 | + |
| 574 | + unset_keymap(opts.keymap or {}) |
| 575 | + |
| 576 | + vim.api.nvim_clear_autocmds({ group = copilot.augroup }) |
| 577 | + |
| 578 | + copilot.setup_done = false |
| 579 | +end |
| 580 | + |
520 | 581 | return mod |
0 commit comments