Page 1 of 6

[BUG?] in Multiple usage of #CURRENTSECTION#

Posted: June 27th, 2021, 5:27 am
by death.crafter
So this is example code:

Code: Select all

[Variables]
;Tween goes from 0 to 1 through lua but you can emulate using action timer if want to
Tween=0

XC=(140-(20*[#Tween])*cos(rad(([#Tween]*360/3)+[&Str:MtrIndx('[#*CURRENTSECTION*]')]*360/3)))
YC=(140-(20*[#Tween])*sin(rad(([#Tween]*360/3)+[&Str:MtrIndx('[#*CURRENTSECTION]*')]*360/3)))

[Shape1]
Meter=Shape
Shape=Ellipse #XC#,#YC#,20,20
Now if I only use XC as a variable and hard code the YC value in Ellipse, it works fine, but if I use both as variables, it doesn't work.

This is what is logged:

Code: Select all

Formula error: (140-(20*[#Tween])*sin(rad(([#Tween]*360/3)+[&Str:MtrIndx('')]*360/3)))
So [&Str:MtrIndx('[#CURRENTSECTION]')] gets the index of a section. Here is the lua function:

Code: Select all

function MtrIndx(k)
    local a=string.gsub(k, '^%D+(%d+)$', '%1')
    a = tonumber(a)
    return a-1
end
I have changed the original code to use meter style but thought would post it since we're having a CURRENTSECTION conundrum after the latest beta.

Re: [BUG?] in Multiple usage of #CURRENTSECTION#

Posted: June 27th, 2021, 6:48 am
by Brian
I think you got a typo.

Code: Select all

YC=(140-(20*[#Tween])*sin(rad(([#Tween]*360/3)+[&Str:MtrIndx('[#*CURRENTSECTION]*')]*360/3)))
Note the asterisk is "outside" the bracket in your original example. Move it to the inside the bracket.

It should be:

Code: Select all

YC=(140-(20*[#Tween])*sin(rad(([#Tween]*360/3)+[&Str:MtrIndx('[#*CURRENTSECTION*]')]*360/3)))
-Brian

Re: [BUG?] in Multiple usage of #CURRENTSECTION#

Posted: June 27th, 2021, 7:05 am
by death.crafter
Brian wrote: June 27th, 2021, 6:48 am I think you got a typo.

Code: Select all

YC=(140-(20*[#Tween])*sin(rad(([#Tween]*360/3)+[&Str:MtrIndx('[#*CURRENTSECTION]*')]*360/3)))
Note the asterisk is "outside" the bracket in your original example. Move it to the inside the bracket.

It should be:

Code: Select all

YC=(140-(20*[#Tween])*sin(rad(([#Tween]*360/3)+[&Str:MtrIndx('[#*CURRENTSECTION*]')]*360/3)))
-Brian
Sorry the typo was a forum typo. But let me cook an example skin.

Re: [BUG?] in Multiple usage of #CURRENTSECTION#

Posted: June 27th, 2021, 8:37 am
by death.crafter
Brian wrote: June 27th, 2021, 6:48 am
This is the full skin from ActiveColors:


Skin.ini

Code: Select all

[Rainmeter]
Update=1000

[Variables]
GET=[&Script:SectionIndex('
INDEX=','last','(<x>)')]

CalcThis=([MeterExample[#*GET*][#*CURRENTSECTION*][#*INDEX*]:W]+[MeterSample[#*GET*][#*CURRENTSECTION*][#*INDEX*]:W])


[Script]
Measure=Script
ScriptFile=#@#Scripts\Script.lua
UpdateDivider=-1
DynamicVariables=1


[MeterExample1]
Meter=String
X=5
Y=30
FontFace=Consolas
FontColor=255,255,255
FontSize=12
AntiAlias=1
Text=Example text

[MeterSample1]
Meter=String
X=5
Y=30
FontFace=Consolas
FontColor=255,255,255
FontSize=12
AntiAlias=1
Text=Sample

[MeasureCalc1]
Measure=Calc
Formula=[#CalcThis]
DynamicVariables=1
#@#Scripts\Script.lua

Code: Select all

function SectionIndex(section, occurrence, formula)
  local indexes = {}
  for index in section:gmatch('%d+') do table.insert(indexes, index) end
  if occurrence == 'first' then occurrence = 1 elseif occurrence == 'last' then occurrence = #indexes end
  return tostring(SKIN:ParseFormula(string.gsub(formula, '<x>', tostring(indexes[tonumber(occurrence)] or '0')))) or '0'
end

Re: [BUG?] in Multiple usage of #CURRENTSECTION#

Posted: June 29th, 2021, 6:57 pm
by Brian
This issue seems to be caused by a recent change a few betas ago (r3452).

Could you try the latest beta and see if this works again?

-Brian

Re: [BUG?] in Multiple usage of #CURRENTSECTION#

Posted: June 29th, 2021, 7:13 pm
by death.crafter
Brian wrote: June 29th, 2021, 6:57 pm This issue seems to be caused by a recent change a few betas ago (r3452).

Could you try the latest beta and see if this works again?

-Brian
No luck🙁
Screenshot 2021-06-30 004236.png

Re: [BUG?] in Multiple usage of #CURRENTSECTION#

Posted: June 29th, 2021, 11:47 pm
by Yincognito
Brian wrote: June 29th, 2021, 6:57 pm This issue seems to be caused by a recent change a few betas ago (r3452).
-Brian
The r3493 version seems to have corrected this...

r3445:
r3445.jpg
r3493:
r3493.jpg

Re: [BUG?] in Multiple usage of #CURRENTSECTION#

Posted: June 29th, 2021, 11:52 pm
by death.crafter
Yincognito wrote: June 29th, 2021, 11:47 pm The r3493 version seems to have corrected this...
I am afraid not... You can check my log up there

Re: [BUG?] in Multiple usage of #CURRENTSECTION#

Posted: June 30th, 2021, 12:22 am
by Active Colors
death.crafter wrote: June 29th, 2021, 11:52 pm I am afraid not... You can check my log up there
I am not sure which code you are referring to. It sure did fix the problem, at least the one I described here (thanks Brian!!)https://forum.rainmeter.net/viewtopic.php?f=14&t=36895&start=30#p192448

If it is happening with your code maybe you can pack your skin and attach here? Hopefully it will get resolved too.

Re: [BUG?] in Multiple usage of #CURRENTSECTION#

Posted: June 30th, 2021, 12:47 am
by Yincognito
Active Colors wrote: June 30th, 2021, 12:22 am I am not sure which code you are referring to. It sure did fix the problem, at least the one I described here (thanks Brian!!)https://forum.rainmeter.net/viewtopic.php?f=14&t=36895&start=30#p192448

If it is happening with your code maybe you can pack your skin here? Hopefully it will get resolved too.
Yes, it has fixed your skin's problem. It appears to have corrected death.crafter's problem too.

Lua Script:

Code: Select all

function MtrIndx(k)
    local a = string.gsub(k, '^%D+(%d+)$', '%1')
    a = tonumber(a)
    return a-1
end

-- function SectionIndex(section, occurrence, formula)
  -- local indexes = {}
  -- for index in section:gmatch('%d+') do table.insert(indexes, index) end
  -- if occurrence == 'first' then occurrence = 1 elseif occurrence == 'last' then occurrence = #indexes end
  -- return tostring(SKIN:ParseFormula(string.gsub(formula, '<x>', tostring(indexes[tonumber(occurrence)] or '0')))) or '0'
-- end
Skin Code:

Code: Select all

[Variables]
;Tween goes from 0 to 1 through lua but you can emulate using action timer if want to
Tween=0

XC=(140-(20*[#Tween])*cos(rad(([#Tween]*360/3)+[&Script:MtrIndx('[#*CURRENTSECTION*]')]*360/3)))
YC=(140-(20*[#Tween])*sin(rad(([#Tween]*360/3)+[&Script:MtrIndx('[#*CURRENTSECTION*]')]*360/3)))

; XC=(140-(20*[#Tween])*cos(rad(([#Tween]*360/3)+[&Script:SectionIndex('[#*CURRENTSECTION*]','last','(<x>-1)')]*360/3)))
; YC=(140-(20*[#Tween])*sin(rad(([#Tween]*360/3)+[&Script:SectionIndex('[#*CURRENTSECTION*]','last','(<x>-1)')]*360/3)))

[Script]
Measure=Script
ScriptFile=#@#Scripts\Script.lua
UpdateDivider=-1
DynamicVariables=1

[Shape1]
Meter=Shape
Shape=Ellipse #XC#,#YC#,20,20
DynamicVariables=1
Test.jpg
Just switch/swap comments in both the script (function vs function) and the skin (XC & YC pair vs XC & YC pair) to compare the results from his implementation vs mine.

That, if I correctly understood what he wanted to do and accurately replicated his code... :confused:

EDIT: It was my mistake earlier, both codes work - edited my rushed reply accordingly. I forgot to change death.crafter's Script measure name to Script instead of Str, so that both scripts can run properly on switching/swapping the comments.