From 744e5df5cbf66e6f7fcab7920de2eee12e3456cd Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Sun, 19 Mar 2023 05:10:06 +0100 Subject: insert-layout: Move functions to autoload Clean up the plugin file and move the bulk of the work to autoload. --- bundle/insert-layout/autoload/insert_layout.vim | 75 +++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 bundle/insert-layout/autoload/insert_layout.vim (limited to 'bundle/insert-layout/autoload/insert_layout.vim') diff --git a/bundle/insert-layout/autoload/insert_layout.vim b/bundle/insert-layout/autoload/insert_layout.vim new file mode 100644 index 0000000..e9f53b4 --- /dev/null +++ b/bundle/insert-layout/autoload/insert_layout.vim @@ -0,0 +1,75 @@ +vim9script + +const layout_names = { + us: 'US', + qwazerty: 'QWAZERTY2', + fr: 'French-numerical', + dvorak: 'Dvorak', +} + +var normal_layout: string + +def IsLayoutSwitcherAvailable(): number + return executable('xkbswitch') +enddef + +def CurrentInputLayout(): string + return system('xkbswitch -ge') +enddef + +def SetInputLayout(layout: string): void + system('xkbswitch -se ' .. layout) +enddef + +def OnInsertEnter(layout: string): void + normal_layout = CurrentInputLayout() + + SetInputLayout(layout) +enddef + +def OnInsertLeave(): void + SetInputLayout(normal_layout) +enddef + +export def InsertLayoutOff(): void + autocmd_delete([ + { + group: 'insert_layout', + event: 'InsertEnter', + bufnr: bufnr(), + }, + { + group: 'insert_layout', + event: 'InsertLeave', + bufnr: bufnr(), + }, + ]) +enddef + +export def InsertLayoutOn(layout: string): void + if !IsLayoutSwitcherAvailable() + echoerr "'xkbswitch' command not found" + return + endif + + autocmd_add([ + { + replace: true, + group: 'insert_layout', + event: 'InsertEnter', + bufnr: bufnr(), + cmd: 'OnInsertEnter("' .. layout_names[layout] .. '")', + }, + { + replace: true, + group: 'insert_layout', + event: 'InsertLeave', + bufnr: bufnr(), + cmd: 'OnInsertLeave()', + }, + ]) +enddef + +export def Complete(arg_lead: string, cmd_line: string, cursor_pos: number): string + return join(keys(layout_names), "\n") +enddef -- cgit v1.2.3