; ======================
; = Tab-completion script by Pass
; ----------------------
; - Usage: /_tab -adcm <text> <data>
; - /_tab -a <item> : Adds an item to the tab list
; - /_tab -d <item/N> : Deletes an item from the tab list
; - /_tab -c : Clears the tab list
; - /_tab -m 
; ----------------------
; = Do not edit below this line
; ======================

on *:tabcomp:@tab:{
  if ($1-) { 
    var %match = $gettok($1-,$numtok($1-,32),32)
    set %tab.match %match
    _tab -m @tab $$1-
  }
}

alias tabwin {
  if ($window(@tab)) window -c @tab
  window -daCek0w1 +fts @tab -1 -1 300 200
  titlebar @tab - /tabwin
  _tab
}

; /_tab -adcm <text> <data>
alias _tab {
  if ($left($1,1) == -) {
    var %s = $right($1,-1)
    if (a isincs %s) hadd tab $2 $true
    if (d isincs %s) { 
      if ($hget(tab,$2).item) var %item = $v1
      if (%item) hdel tab %item
    }
    if (c isincs %s) { hfree tab | hmake tab } 
    if (s isincs %s) hsave -o tab tab.hsh
    elseif (m === %s) {
      inc $+(%,tab.,$2)
      var %win = $($+(%,tab.,$2),2),%new.match = $+(%tab.match,*)
      if (%win >= $hfind(tab,%new.match,0,w)) set $+(%,tab.,$2) 1
      if ($hfind(tab,%new.match,%win,w)) {
        var %v1 = $v1,%num = $calc($numtok($3-,32) - 1),%nums = $+(1-,%num)
        editbox $2 $iif(%num > 0,$gettok($3-,%nums,32)) %v1
      }
    }
    elseif (l === %s) {
      var %n = 1,%list
      while ($hget(tab,%n).item) {
        var %list = %list $v1
        inc %n
      }
      return %list
    }
  }
  else {
    if ($hget(tab)) hfree tab 
    hmake tab
    if ($isfile(tab.hsh)) hload tab tab.hsh
  }
}
