From 9ce12f786dabbc2a9bb2233f3c34d544c3c0ce7c Mon Sep 17 00:00:00 2001
From: Sergey Matveev <stargrave@stargrave.org>
Date: Thu, 20 Oct 2022 12:10:12 +0300
Subject: [PATCH] More compact Mark

---
 .../stargrave/start/mark/autoload/mark.vim    | 44 +++++++------------
 .../pack/stargrave/start/mark/plugin/mark.vim |  6 +--
 vim/.vimrc                                    |  2 +-
 3 files changed, 20 insertions(+), 32 deletions(-)

diff --git a/vim/.vim/pack/stargrave/start/mark/autoload/mark.vim b/vim/.vim/pack/stargrave/start/mark/autoload/mark.vim
index 7a3f339..640f6cb 100644
--- a/vim/.vim/pack/stargrave/start/mark/autoload/mark.vim
+++ b/vim/.vim/pack/stargrave/start/mark/autoload/mark.vim
@@ -20,7 +20,7 @@ hi MarkWord6 ctermfg=Black ctermbg=Blue
 const Offset = 3333
 var Show = false
 var Words: list<string>
-var Cycle = 1
+var Idx = 1
 
 def Init()
     if len(Words) > 0 | return | endif
@@ -34,54 +34,44 @@ def Del(i: number)
     silent! matchdelete(Offset + i + 1)
 enddef
 
-def Add(i: number)
-    matchadd("MarkWord" .. (i + 1), Words[i], -10, Offset + i + 1)
+def Add(i: number, word: string)
+    Words[i] = word
+    matchadd("MarkWord" .. (i + 1), word, -10, Offset + i + 1)
 enddef
 
-export def Update()
+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) | endif
+        if Show | Add(i, Words[i]) | endif
     endfor
 enddef
 
 export def Toggle()
     Show = !Show
-    Update()
+    Refresh()
 enddef
 
-def Do(word: string): bool
+def Do(word: string)
     Init()
-    if !Show
-        for i in range(len(Words))
-            if Words[i] == "" | continue | endif
-            Del(i)
-        endfor
-        Show = true
-    endif
     for i in range(len(Words))
-        if word == Words[i]
-            Del(i)
-            return true
+        if !Show | Del(i)
+        elseif Words[i] == word | Del(i) | return
         endif
     endfor
+    if !Show | Show = true | endif
     for i in range(len(Words))
         if Words[i] != "" | continue | endif
-        Del(i)
-        Words[i] = word
-        Add(i)
-        Cycle = ((i + 1) == len(Words)) ? 1 : i + 1
-        return true
+        Add(i, word)
+        Idx = ((i + 1) == len(Words)) ? 1 : (i + 1)
+        return
     endfor
-    Del(Cycle)
-    Words[Cycle] = word
-    Add(Cycle)
-    Cycle = ((Cycle + 1) == len(Words)) ? 1 : Cycle + 1
-    return true
+    Del(Idx)
+    Add(Idx, word)
+    Idx = ((Idx + 1) == len(Words)) ? 1 : (Idx + 1)
 enddef
 
 export def Word()
diff --git a/vim/.vim/pack/stargrave/start/mark/plugin/mark.vim b/vim/.vim/pack/stargrave/start/mark/plugin/mark.vim
index 8cb85f1..f42e02d 100644
--- a/vim/.vim/pack/stargrave/start/mark/plugin/mark.vim
+++ b/vim/.vim/pack/stargrave/start/mark/plugin/mark.vim
@@ -1,5 +1,3 @@
 if exists("*mark#Word") | finish | endif
-nmap <unique> <silent> <leader>m <Plug>MarkWord
-nnoremap <silent> <Plug>MarkWord :call mark#Word()<CR>
-command! MarkToggle call mark#Toggle()
-autocmd! BufWinEnter,WinEnter * call mark#Update()
+nmap <silent> <leader>m :call mark#Word()<CR>
+autocmd! BufWinEnter,WinEnter * call mark#Refresh()
diff --git a/vim/.vimrc b/vim/.vimrc
index 1b85527..bbed26d 100644
--- a/vim/.vimrc
+++ b/vim/.vimrc
@@ -51,7 +51,7 @@ set smartcase
 set hlsearch
 set incsearch
 set gdefault
-map <F4> :nohlsearch<CR>:MarkToggle<CR>
+map <F4> :nohlsearch<CR>:call mark#Toggle()<CR>
 
 set wildmode=list:longest
 set tags=.tags/**/tags;
-- 
2.50.0