This is a snippet that I use in one form or another, in every socket script I write.
By using sockmark, this snippet creates a virtual variables that expire when the last socket event ends.
Syntax:
alias -l Svar {
var %sockname $1, %item $+($2,_,$1)
if ($isid) {
if ($regex(svar,$sock(%sockname).mark,/\x01 $+ %item $+ \x01([^\x01]*)/i)) return $regml(svar,1)
}
elseif ($3 == $null) {
sockmark %sockname $regsubex(svar,$sock(%sockname).mark,/(\x01 $+ %item $+ \x01[^\x01]*)/i,$null)
}
else {
var %value $3-
if (!$sock(%sockname).mark) {
sockmark %sockname $+($chr(1),%item,$chr(1),%value)
}
elseif (!$regex(svar,$sock(%sockname).mark,/\x01 $+ %item $+ \x01/i)) {
sockmark %sockname $+($sock(%sockname).mark,$chr(1),%item,$chr(1),%value)
}
elseif ($3) {
sockmark %sockname $regsubex(svar,$sock(%sockname).mark,/(\x01 $+ %item $+ \x01[^\x01]*)/i,$null)
sockmark %sockname $+($sock(%sockname).mark,$chr(1),%item,$chr(1),%value)
;sockmark %sockname $regsubex(svar,$sock(%sockname).mark,/(\x01 $+ %item $+ \x01[^\x01]*)(?:\x01|$)/i,$+($chr(1),%item,$chr(1),%value))
}
}
}