aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bundle/insert-layout/plugin/insert_layout.vim95
1 files changed, 89 insertions, 6 deletions
diff --git a/bundle/insert-layout/plugin/insert_layout.vim b/bundle/insert-layout/plugin/insert_layout.vim
index f271264..5ca3d7b 100644
--- a/bundle/insert-layout/plugin/insert_layout.vim
+++ b/bundle/insert-layout/plugin/insert_layout.vim
@@ -1,7 +1,90 @@
-" 2023.03.09
+vim9script
-augroup frinsert
- autocmd!
- autocmd InsertEnter * :call system('xkbswitch -se French-numerical')
- autocmd InsertLeave * :call system('xkbswitch -se US')
-augroup END
+if exists('g:loaded_insert_layout')
+ finish
+endif
+g:loaded_insert_layout = 1
+
+const layout_names = {
+ us: 'US',
+ qwazerty: 'QWAZERTY2',
+ fr: 'French-numerical',
+ dvorak: 'Dvorak',
+}
+
+var normal_layout: string
+
+def IsLayoutSwitcherAvailable(): bool
+ 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
+
+def InsertLayoutOff(): void
+ # autocmd! insert_layout InsertEnter <buffer>
+ # autocmd! insert_layout InsertLeave <buffer>
+
+ autocmd_delete([
+ {
+ group: 'insert_layout',
+ event: 'InsertEnter',
+ bufnr: bufnr(),
+ },
+ {
+ group: 'insert_layout',
+ event: 'InsertLeave',
+ bufnr: bufnr(),
+ },
+ ])
+enddef
+
+def InsertLayoutOn(layout: string): void
+ # InsertLayoutOff()
+
+ # autocmd insert_layout InsertEnter <buffer> OnInsertEnter(layout)
+ # autocmd insert_layout InsertLeave <buffer> OnInsertLeave()
+ 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
+
+# TODO: Add layout completion
+command! -nargs=1 InsertLayout InsertLayoutOn(<q-args>)
+command! InsertLayoutOff InsertLayoutOff()
+
+# SetInputLayout(layout_names['fr'])
+
+# augroup frinsert
+# autocmd!
+# autocmd InsertEnter * :call system('xkbswitch -se French-numerical')
+# autocmd InsertLeave * :call system('xkbswitch -se US')
+# augroup END