]> Sergey Matveev's repositories - dotfiles.git/commitdiff
Less code, all windows refreshing
authorSergey Matveev <stargrave@stargrave.org>
Fri, 21 Oct 2022 09:21:57 +0000 (12:21 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Fri, 21 Oct 2022 11:25:20 +0000 (14:25 +0300)
vim/.vim/pack/stargrave/start/mark/autoload/mark.vim

index 640f6cbbc479a75f0acfb5047ea75fe52456cea5..41011da06a96467b255b48e263b8c776b0fbf5f8 100644 (file)
@@ -5,9 +5,8 @@ vim9script
 # That one:
 # * uses autoload for lazy loading
 # * is ported to vim9script for code simplification and performance
-# * uses lists, instead of pack of variables for keeping the state
+# * uses lists, instead of pack of variables to keep the state
 # * does not pollute global variable namespace
-# * has removed old Vim versions support, expecting for modern functions
 # * has ability only to highlight the current word
 
 hi MarkWord1 ctermfg=Black ctermbg=Cyan
@@ -17,10 +16,10 @@ hi MarkWord4 ctermfg=Black ctermbg=Red
 hi MarkWord5 ctermfg=Black ctermbg=Magenta
 hi MarkWord6 ctermfg=Black ctermbg=Blue
 
-const Offset = 3333
-var Show = false
+const MarkIdOffset = 3333
+var Show: bool
 var Words: list<string>
-var Idx = 1
+var Idx: number
 
 def Init()
     if len(Words) > 0 | return | endif
@@ -29,25 +28,20 @@ def Init()
     Words = repeat([""], i - 1)
 enddef
 
-def Del(i: number)
-    Words[i] = ""
-    silent! matchdelete(Offset + i + 1)
-enddef
-
-def Add(i: number, word: string)
-    Words[i] = word
-    matchadd("MarkWord" .. (i + 1), word, -10, Offset + i + 1)
+def WinRefresh()
+    for i in range(len(Words))
+        exec "syntax clear MarkWord" .. (i + 1)
+        silent! matchdelete(MarkIdOffset + i + 1)
+        if (Words[i] == "") || !Show | continue | endif
+        matchadd("MarkWord" .. (i + 1), Words[i], -10, MarkIdOffset + i + 1)
+    endfor
 enddef
 
 export def Refresh()
     Init()
-    var word: string
-    for i in range(len(Words))
-        exec "syntax clear MarkWord" .. (i + 1)
-        if Words[i] == "" | continue | endif
-        silent! matchdelete(Offset + i + 1)
-        if Show | Add(i, Words[i]) | endif
-    endfor
+    var nr = winnr()
+    windo WinRefresh()
+    exec ":" .. nr .. "wincmd w"
 enddef
 
 export def Toggle()
@@ -56,24 +50,24 @@ export def Toggle()
 enddef
 
 def Do(word: string)
-    Init()
     for i in range(len(Words))
-        if !Show | Del(i)
-        elseif Words[i] == word | Del(i) | return
+        if !Show | Words[i] = ""
+        elseif Words[i] == word | Words[i] = "" | return
         endif
     endfor
     if !Show | Show = true | endif
     for i in range(len(Words))
         if Words[i] != "" | continue | endif
-        Add(i, word)
-        Idx = ((i + 1) == len(Words)) ? 1 : (i + 1)
+        Words[i] = word
+        Idx = ((i + 1) == len(Words)) ? 0 : (i + 1)
         return
     endfor
-    Del(Idx)
-    Add(Idx, word)
-    Idx = ((Idx + 1) == len(Words)) ? 1 : (Idx + 1)
+    Words[Idx] = word
+    Idx = ((Idx + 1) == len(Words)) ? 0 : (Idx + 1)
 enddef
 
 export def Word()
+    Init()
     Do('\<' .. expand("<cword>") .. '\>')
+    Refresh()
 enddef