I can't replicate the issue, at least not with, for instance, the example code, posted on the InputText plugin help page. So, please post the code you have the problem with, to can check what's going on.Crest wrote: ↑June 4th, 2023, 2:05 am Couldn't find anything during my searching but I've been encountering an unexpected behavior with InputText and colon characters.
If I input for example 10:30 then a Windows dialog appears saying:
Similarly occurs if I enter something like foo:bar (the dialog then says the type of link is 'foo'). I've observed the dialog doesn't appear for strings where the sub-string before the colon is a digit lower than '10' such as '9'.
It is currently September 1st, 2024, 2:51 am
Working with InputText
-
- Rainmeter Sage
- Posts: 16485
- Joined: October 11th, 2010, 6:27 pm
- Location: Gheorgheni, Romania
Re: Working with InputText
-
- Posts: 148
- Joined: August 16th, 2013, 12:47 pm
Re: Working with InputText
Sure, here's a simplified test case. As mentioned in my edit further down the post I'm using jsmorley's method of re-using the $UserInput$ variable, which I need for what I'm doing* (or at least some way of re-using the input variable for multiple InputText commands which need to be triggered).
* The commands I'm actually using aren't represented in this test case below but I do utilize WriteKeyValue among other things. Either way the below skin demonstrates the issue due to the auto URL handling.
Main INI:
Code: Select all
[Variables]
InputHeight=30
Bg=457FA8
Fg=FFFFFF
Value2=
[Rainmeter]
AccurateText=1
DynamicWindowSize=1
Update=1000
[InputBox]
Measure=Plugin
Plugin=InputText
H=#InputHeight#
FontColor=#Fg#
SolidColor=#Bg#
FocusDismiss=1
Command1=["$UserInput$"]
Command2=[!WriteKeyValue Variables Value1 "[InputBox]" "foobar.ini"]
Command3=[!SetVariable Value2 "[InputBox]"]
DynamicVariables=1
[VisibleBox]
Meter=Shape
Shape=Rectangle 0,0,200,#InputHeight#,0 | Fill Color #Bg# | StrokeWidth 0
LeftMouseUpAction=[!CommandMeasure "InputBox" "ExecuteBatch 1-3"]
DynamicVariables=1
[VisibleText]
Meter=String
Text=#Value2#
FontColor=#Fg#
DynamicVariables=1
Code: Select all
[Variables]
Value1=
-
- Developer
- Posts: 2723
- Joined: November 24th, 2011, 1:42 am
- Location: Utah
Re: Working with InputText
There is nothing unexpected with your code. The issue is with the "trick" in jsmorley's code is also sending whatever is typed directly with Command1=["$UserInput$"] to the Windows command line. Thus, you are seeing an dialog message since it is interpreting the colon as a protocol command (like a URL), but it can't process it.
You will probably have to find another solution to what you are trying to do.
-Brian
You will probably have to find another solution to what you are trying to do.
-Brian
-
- Posts: 148
- Joined: August 16th, 2013, 12:47 pm
Re: Working with InputText
A problem I was having in my prior testing (before discovering the URL handling drawback) were drawbacks with alternative methods.
For example I need to parse some formulas on the input string when the input is completed, however Lua (which I'm using to dynamically set InputText measure properties and values when an input box is clicked) can't see the input string until after the input has been entered.
Because of this I instead wrap the input variable with the desired formulas and set it as part of the value of a dynamically created Command for the InputText measure, so that when Enter is pressed the InputText measure itself triggers an execution of the formula on the input variable.
What I found though is wrapping the $UserInput$ variable directly with a formula fails to parse the formula, instead it just returns the untouched original value. While alternatively when I tried writing $UserInput$ to a separate variable for Command1 (using !SetVariable), then using some formula on it during Command2, it failed to parse the formula—instead reproducing the entire formula verbatim.
So it was only jsmorley's method of storing the $UserInput$ variable as the measure value during Command1 then reading it back via the InputText measure's name in subsequent Commands where it can actually parse formulas with the variable.
If there is some other way that works for this I'd certainly be interested.
-
- Posts: 148
- Joined: August 16th, 2013, 12:47 pm
Re: Working with InputText
Should probably clarify, the overview of what I'm doing is like the following:
- User clicks meter styled as input box. Doing so passes various InputText measure property values (like number of max input characters to allow, whether to limit to numbers only, etc) along with some formula values (like clamp) to a Lua function. This is different for each meter styled as an input box.
- The Lua function dynamically applies those values to the InputText measure and sets its coordinates to that of the input box meter. Then sets the literal $UserInput$ as the measure value for Command1 (per jsmorley's method) and configures the WriteKeyValue/etc with the appropriate formulas for the subsequent InputText measure Commands.
- After entering a value in the actual input box and pressing Enter the input is then parsed with any formulas set in the Commands that get executed by InputText and for example stored to a file and variable.
So I suppose given these requirements if I wanted to avoid jsmorley's method but preserve the formulas passed to the Lua to begin with when clicking an input box then alternatively a Command could be dynamically made that triggered a separate Lua function with the passed values (ie: passing the values to the first Lua function which then writes a Command to pass the values on to a separate Lua function after Enter has been pressed).
This assumes that one instead writes the $UserInput$ to a separate variable so the separate Lua function could then read it after the fact, apply any formulas and then write to file and/or the final actual desired variable. Guess I'll have to test this.
- User clicks meter styled as input box. Doing so passes various InputText measure property values (like number of max input characters to allow, whether to limit to numbers only, etc) along with some formula values (like clamp) to a Lua function. This is different for each meter styled as an input box.
- The Lua function dynamically applies those values to the InputText measure and sets its coordinates to that of the input box meter. Then sets the literal $UserInput$ as the measure value for Command1 (per jsmorley's method) and configures the WriteKeyValue/etc with the appropriate formulas for the subsequent InputText measure Commands.
- After entering a value in the actual input box and pressing Enter the input is then parsed with any formulas set in the Commands that get executed by InputText and for example stored to a file and variable.
So I suppose given these requirements if I wanted to avoid jsmorley's method but preserve the formulas passed to the Lua to begin with when clicking an input box then alternatively a Command could be dynamically made that triggered a separate Lua function with the passed values (ie: passing the values to the first Lua function which then writes a Command to pass the values on to a separate Lua function after Enter has been pressed).
This assumes that one instead writes the $UserInput$ to a separate variable so the separate Lua function could then read it after the fact, apply any formulas and then write to file and/or the final actual desired variable. Guess I'll have to test this.
-
- Rainmeter Sage
- Posts: 8003
- Joined: February 27th, 2015, 2:38 pm
- Location: Terra Yincognita
Re: Working with InputText
I still don't understand what exactly you're trying to do. Can you post a simple, short pseudo code, but with some actual values and explanation of what you expect to happen? Don't mention any tricks or Lua whatsoever or refer to theoretical stuff, just say "I type or do this, I want this to happen", as rudimentary and precise as you can. I'm sure it is possible, but the thing is we don't get what an actual, real life "storyline" of the process looks like.Crest wrote: ↑June 4th, 2023, 8:00 am Should probably clarify, the overview of what I'm doing is like the following:
- User clicks meter styled as input box. Doing so passes various InputText measure property values (like number of max input characters to allow, whether to limit to numbers only, etc) along with some formula values (like clamp) to a Lua function. This is different for each meter styled as an input box.
- The Lua function dynamically applies those values to the InputText measure and sets its coordinates to that of the input box meter. Then sets the literal $UserInput$ as the measure value for Command1 (per jsmorley's method) and configures the WriteKeyValue/etc with the appropriate formulas for the subsequent InputText measure Commands.
- After entering a value in the actual input box and pressing Enter the input is then parsed with any formulas set in the Commands that get executed by InputText and for example stored to a file and variable.
So I suppose given these requirements if I wanted to avoid jsmorley's method but preserve the formulas passed to the Lua to begin with when clicking an input box then alternatively a Command could be dynamically made that triggered a separate Lua function with the passed values (ie: passing the values to the first Lua function which then writes a Command to pass the values on to a separate Lua function after Enter has been pressed).
This assumes that one instead writes the $UserInput$ to a separate variable so the separate Lua function could then read it after the fact, apply any formulas and then write to file and/or the final actual desired variable. Guess I'll have to test this.
-
- Posts: 148
- Joined: August 16th, 2013, 12:47 pm
Re: Working with InputText
The goal is simply: be able to re-use the input string from an InputText box for multiple immediate actions that trigger when Enter is pressed (such as !WriteKeyValue, !SetVariable), along with also applying any calculations/formulas to the input string with those actions.Yincognito wrote: ↑June 4th, 2023, 11:27 am I still don't understand what exactly you're trying to do. Can you post a simple, short pseudo code, but with some actual values and explanation of what you expect to happen?
Eg:
Code: Select all
[!WriteKeyValue Variables Value1 "(Clamp(<UserInput>,0,30))" "foobar.ini"]
[!SetVariable Value2 "(Clamp(<UserInput>,0,30))"]
To be clear, until my initial post in this topic I already had a functional skin with all the desired behavior—but then discovered all inputs that are used by themselves for InputText Commands are treated as if the string had been entered into a Windows File Explorer addressbar (it thinks some strings are links, or will try to launch program names it recognizes from the PATH).
And to recap, the reason I had to set the raw $UserInput$ as the measure value (as seen in the test case skin above) was due a few things (spoilered to make the post shorter):
Anyway, my idea for the workaround was posted at the the end of my prior post. I think given I'm already passing formula values like clamp to a script function to handle the initial LeftMouseUpAction that triggers the configuration and appearance of the InputText box that my idea would be probably be suitable but haven't got around to testing the workaround idea.
-
- Rainmeter Sage
- Posts: 8003
- Joined: February 27th, 2015, 2:38 pm
- Location: Terra Yincognita
Re: Working with InputText
Easy peasy...Crest wrote: ↑June 4th, 2023, 12:56 pmNeither did I find formulas get parsed if I instead set $UserInput$ as a separate variable during Command1 (eg: [!SetVariable "foo" "$UserInput$"]) then used it within a formula in Command2 (eg: [!SetVariable "bar" "(Clamp(#foo#,0,30))"]), which from my notes resulted in the literal formula string being returned rather than parsing the formula and returning the resulting value.
If the second paragraph of the 2nd point was feasible then I would have used that, since it would allow me to ditch storing the variable as the measure's value with barely much change to the existing code. It would certainly be the simplest if it worked but I couldn't get it to when I briefly tested.
Code: Select all
[Variables]
foo=
bar=
[Rainmeter]
Update=1000
AccurateText=1
DynamicWindowSize=1
---Measures---
[InputMeasure]
Measure=Plugin
Plugin=InputText
SolidColor=0,128,0,255
FontColor=255,255,255,255
FontSize=15
X=5
Y=5
W=240
H=25
Command1=[!SetVariable foo "$UserInput$"]
Command2=[!SetVariable bar "(Clamp([#foo],0,30))"]
DynamicVariables=1
---Meters---
[Background]
Meter=Image
W=250
H=105
SolidColor=0,0,0,128
[InputMeter]
Meter=String
X=5
Y=5
W=240
H=25
SolidColor=0,64,0,255
FontColor=255,255,255,255
FontSize=15
AntiAlias=1
Text=foo="#foo#", bar="#bar#"
LeftMouseUpAction=[!CommandMeasure InputMeasure "ExecuteBatch 1-2"]
DynamicVariables=1
This forces the formula to use the recently modified value (even if it has been modified in the same bang, or, like in this case, in the same InputText measure).
-
- Posts: 148
- Joined: August 16th, 2013, 12:47 pm
Re: Working with InputText
Such a simple change *whew*. Thanks a bunch ♡Yincognito wrote: ↑June 4th, 2023, 2:45 pm Easy peasy... using the nested variable syntax.
This forces the formula to use the recently modified value (even if it has been modified in the same bang, or, like in this case, in the same InputText measure).
If I could make a suggestion, going back to the string handling part of things, it would also be useful if the docs had some note that using the plain $UserInput$ value as a Command will cause various strings to be interpreted as though it were entered in the Run dialog/etc.
Since I get the impression it's assumed knowledge but the plugin page lacks mention of this and the first post here only briefly alludes to this behavior in the middle of the OP within a larger paragraph (emphasis mine):
(I also tested this null bang on my original code but it still triggered the issue when using the measure name syntax so glad I found your nested variable solution)OP wrote:Note that we set a "null bang", or "[]" at the beginning to keep Rainmeter from "executing" the value of $UserInput$. That could be a problem if the input text is "calc" or "cmd" or some other text that is also a command or shortcut in the Windows "path".
-
- Rainmeter Sage
- Posts: 8003
- Joined: February 27th, 2015, 2:38 pm
- Location: Terra Yincognita
Re: Working with InputText
No problem - glad to help. Not my place to address suggestions, but it is indeed assumed knowledge that you can place command lines, URLs, special folders and so on in a bang, which then executes those. But you're right, this isn't directly stated, that's true, not even on the Bangs page, which only mentions that you can use bangs in command lines (and not that you can use command lines in bangs). That being said, this is stated a bit clearer at the start of the RunCommand page, or when clicking the "action options" link at the start of the Bangs page...Crest wrote: ↑June 4th, 2023, 3:27 pm Such a simple change *whew*. Thanks a bunch ♡
If I could make a suggestion, going back to the string handling part of things, it would also be useful if the docs had some note that using the plain $UserInput$ value as a Command will cause various strings to be interpreted as though it were entered in the Run dialog/etc.