Skip to content

Commit 4669959

Browse files
committed
feat(events): add ModeChanged event and events.mode
1 parent 1046cba commit 4669959

3 files changed

Lines changed: 21 additions & 2 deletions

File tree

history.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
Notable changes of coc.nvim:
44

5+
## 2025-05-19
6+
7+
- Add `ModeChanged` event and `mode` property to `events`.
8+
59
## 2025-05-13
610

711
- Change document highlight priority to -1 to avoid override search highlight

plugin/coc.vim

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -413,6 +413,7 @@ function! s:Enable(initialize)
413413
if exists('##WinScrolled')
414414
autocmd WinScrolled * call s:HandleWinScrolled(+expand('<amatch>'), v:event)
415415
endif
416+
autocmd ModeChanged * call s:Autocmd('ModeChanged', v:event)
416417
autocmd TabNew * call s:Autocmd('TabNew', coc#compat#tabnr_id(tabpagenr()))
417418
autocmd TabClosed * call s:Autocmd('TabClosed', coc#compat#call('list_tabpages', []))
418419
autocmd WinLeave * call s:Autocmd('WinLeave', win_getid())

src/events.ts

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,11 @@ export interface VisibleEvent {
3636
region: [number, number]
3737
}
3838

39+
export interface ModeChangedEvent {
40+
readonly old_mode: string
41+
readonly new_mode: string
42+
}
43+
3944
export interface InsertChange {
4045
readonly lnum: number
4146
readonly col: number
@@ -67,7 +72,8 @@ export enum EventName {
6772
BufWinEnter = 'BufWinEnter',
6873
WinScrolled = 'WinScrolled',
6974
WinClosed = 'WinClosed',
70-
BufWinLeave = 'BufWinLeave'
75+
BufWinLeave = 'BufWinLeave',
76+
ModeChanged = 'ModeChanged'
7177
}
7278

7379
export type BufEvents = 'BufHidden' | 'BufEnter' | 'BufRename'
@@ -85,7 +91,7 @@ export type WindowEvents = 'WinLeave' | 'WinEnter' | 'WinClosed'
8591
export type TabEvents = 'TabNew' | 'TabClosed'
8692

8793
export type AllEvents = BufEvents | EmptyEvents | CursorEvents | TaskEvents | WindowEvents | TabEvents
88-
| InsertChangeEvents | 'CompleteDone' | 'TextChanged' | 'MenuPopupChanged' | 'BufWritePost' | 'BufWritePre'
94+
| InsertChangeEvents | 'CompleteDone' | 'TextChanged' | 'MenuPopupChanged' | 'BufWritePost' | 'BufWritePre' | 'ModeChanged'
8995
| 'InsertCharPre' | 'FileType' | 'BufWinEnter' | 'BufWinLeave' | 'VimResized' | 'TermExit' | 'WinScrolled' | 'CompleteStart'
9096
| 'DirChanged' | 'OptionSet' | 'Command' | 'BufReadCmd' | 'GlobalChange' | 'InputChar' | 'PlaceholderJump' | 'InputListSelect'
9197
| 'WinLeave' | 'MenuInput' | 'PromptInsert' | 'FloatBtnClick' | 'InsertSnippet' | 'TextInsert' | 'PromptKeyPress' | 'WindowVisible'
@@ -124,6 +130,7 @@ class Events {
124130
private _completing = false
125131
private _requesting = false
126132
private _ready = false
133+
private _mode: string | undefined
127134
public timeout = 1000
128135
// public completing = false
129136

@@ -139,6 +146,10 @@ class Events {
139146
return this._ready
140147
}
141148

149+
public get mode(): string {
150+
return this._mode
151+
}
152+
142153
private fireVisibleEvent(ev: VisibleEvent): void {
143154
let { winid } = ev
144155
let timer = this.timeoutMap.get(winid)
@@ -286,6 +297,8 @@ class Events {
286297
this.clearVisibleTimer(args[0])
287298
} else if (event == EventName.BufWinLeave) {
288299
this.clearVisibleTimer(args[1])
300+
} else if (event == EventName.ModeChanged) {
301+
this._mode = args[0].new_mode
289302
}
290303
if (event == EventName.CursorMoved || event == EventName.CursorMovedI) {
291304
args.push(this._recentInserts.length > 0)
@@ -355,6 +368,7 @@ class Events {
355368
public on(event: 'PromptInsert', handler: (value: string, bufnr: number) => Result, thisArg?: any, disposables?: Disposable[]): Disposable
356369
public on(event: 'PlaceholderJump', handler: (bufnr: number, info: JumpInfo) => Result, thisArg?: any, disposables?: Disposable[]): Disposable
357370
public on(event: 'InputListSelect', handler: (index: number) => Result, thisArg?: any, disposables?: Disposable[]): Disposable
371+
public on(event: 'ModeChanged', handler: (event: ModeChangedEvent) => Result, thisArg?: any, disposables?: Disposable[]): Disposable
358372
public on(event: EmptyEvents, handler: () => Result, thisArg?: any, disposables?: Disposable[]): Disposable
359373
public on(event: AllEvents | AllEvents[], handler: (...args: unknown[]) => Result, thisArg?: any, disposables?: Disposable[] | true): Disposable
360374
public on(event: AllEvents[] | AllEvents, handler: (...args: any[]) => Result, thisArg?: any, disposables?: Disposable[] | true): Disposable {

0 commit comments

Comments
 (0)