Jump to content




Input - basically read(), but way better

lua utility computer

  • You cannot reply to this topic
10 replies to this topic

#1 LoganDark2

  • Members
  • 87 posts
  • LocationYes

Posted 30 January 2018 - 02:35 PM

Input is a library made in just a few hours out of boredom. It's intended to be a drop-in replacement for read(). And by drop-in, I mean you can do this:

Posted Image

Here's the fun part: Input supports a lot more than stock read() does. That includes everything read() can do, in addition to:
  • Max length (it goes to the right edge by default, just like regular read(), but you can finally change it!)
  • Option to disable print() (useful for reading at the bottom of the screen, where stock read()'s forced print() moves the entire screen down!)
  • Define where the cursor starts at as well as the default text
  • Colors! Input can do syntax highlighting (self promo, and example program here), or whatever colored text you like. There's an example program here that highlights pairs of parenthesis (or square brackets, or curly brackets)
  • Mouse support
  • Selections! Click and drag, or hold shift and move the cursor
The argument order is:
  • Censor: a one-character long string specifying which character each character of the entered text will be replaced with. Default: nil
  • History: a numerically indexed table specifying the past inputs, the last index being the most recent. Default: empty table
  • Autocomplete: a function taking a single argument, the current line, that returns a numerically indexed table of all possible strings that could be used to complete the text, assuming the cursor is always at the end of the line. Default: empty function
  • Default: text that will appear as if the user typed it. Default: empty string
  • Max length: a number that specifies the number of characters horizontally the input can take up. Default: distance from the current cursor position to the right edge of the screen.
  • Print after: a boolean that specifies whether or not the input() function will print a newline after enter is pressed. Default: true
  • Start position: a number that specifies where in the default text the cursor will be placed. NOTE: This is ZERO-indexed, not ONE-indexed like most of Lua! Default: the length of the current line (0 if default is not specified)
  • Colorizer: a function that should return two strings to be used with term.blit, in order of foreground and then background. Default: just returns white on black, with the completion being black on (not light) gray.
The colorizer should take 5 arguments:
  • The current line: string.
  • The cursor position: number.
  • The current scroll position (number of characters starting from the left that are not shown): number.
  • Whether this is the last draw (when Enter is pressed, the function is immediately called one last time): boolean.
  • The current completion: string. This will be in the blit, so you are expected to provide (concatenate at the end) foreground/background information for it as well.
It can be installed using pastebin get 7bBdj5Lw input. Then, you can load it using dofile('input'). Sorry, but os.loadAPI is not supported (and will not give you results).

Any suggestions to improve this post are appreciated.

Edited by LoganDark2, 19 February 2018 - 11:13 PM.


#2 LoganDark2

  • Members
  • 87 posts
  • LocationYes

Posted 19 February 2018 - 10:41 PM

No feedback at all? No comments?

#3 Bomb Bloke

    Hobbyist Coder

  • Moderators
  • 7,099 posts
  • LocationTasmania (AU)

Posted 20 February 2018 - 01:07 AM

It seems to me that it'd be easier to have the script file override _G.read on its own, so that you don't have to enter the Lua console to invoke it. It could still return the function for the sake of backwards compatibility.

#4 Saldor010

  • Members
  • 467 posts
  • LocationThe United States

Posted 20 February 2018 - 04:53 AM

View PostLoganDark2, on 19 February 2018 - 10:41 PM, said:

No feedback at all? No comments?

I can't answer for anyone else, but I thought it looked fairly interesting when I saw the post, I just haven't had time to try it out (and posting a comment on mobile is a pain for me). It's always bugged me how read() works in Lua, so I'm glad that someone fixed my issues with it ^_^

#5 LDDestroier

  • Members
  • 1,095 posts
  • LocationACDC Town

Posted 20 February 2018 - 05:41 AM

I looked over the source code to see if you copied textutils.prompt() so I could rub it in your face, but alas, it's all original code. I haven't tested it, but a read prompt like the one you are providing is sorely needed and greatly appreciated.

I made a function called funcread() which tried to be a better read function for Enchat and other things, but it's not as stable as read().

#6 LoganDark2

  • Members
  • 87 posts
  • LocationYes

Posted 20 February 2018 - 07:57 AM

View PostBomb Bloke, on 20 February 2018 - 01:07 AM, said:

It seems to me that it'd be easier to have the script file override _G.read on its own, so that you don't have to enter the Lua console to invoke it. It could still return the function for the sake of backwards compatibility.

It's a library. Overriding _G.read is something that can be done by the user. Anyone genuinely interested in this library should have the knowledge to write their own script to replace _G.read if they really want to.

#7 LoganDark2

  • Members
  • 87 posts
  • LocationYes

Posted 20 February 2018 - 07:59 AM

View PostLDDestroier, on 20 February 2018 - 05:41 AM, said:

I looked over the source code to see if you copied textutils.prompt() so I could rub it in your face, but alas, it's all original code. I haven't tested it, but a read prompt like the one you are providing is sorely needed and greatly appreciated.

I made a function called funcread() which tried to be a better read function for Enchat and other things, but it's not as stable as read().

Maybe in the future I could try stress testing this library so hard the computer explodes...

Dunno. If it's a Command Computer, it actually could explode as the result of a malicious program...

#8 LoganDark2

  • Members
  • 87 posts
  • LocationYes

Posted 10 March 2018 - 06:57 PM

View PostLDDestroier, on 20 February 2018 - 05:41 AM, said:

[...] see if you copied textutils.prompt() [...]

Wait, is textutils.prompt even a thing? I can't find it in the wiki anywhere, and I can't even find it on an emulated computer.

#9 LDDestroier

  • Members
  • 1,095 posts
  • LocationACDC Town

Posted 11 March 2018 - 05:28 AM

View PostLoganDark2, on 10 March 2018 - 06:57 PM, said:

View PostLDDestroier, on 20 February 2018 - 05:41 AM, said:

[...] see if you copied textutils.prompt() [...]

Wait, is textutils.prompt even a thing? I can't find it in the wiki anywhere, and I can't even find it on an emulated computer.

It was in a commit on GitHub somewhere.

#10 LoganDark2

  • Members
  • 87 posts
  • LocationYes

Posted 11 March 2018 - 05:29 AM

View PostLDDestroier, on 11 March 2018 - 05:28 AM, said:

View PostLoganDark2, on 10 March 2018 - 06:57 PM, said:

View PostLDDestroier, on 20 February 2018 - 05:41 AM, said:

[...] see if you copied textutils.prompt() [...]

Wait, is textutils.prompt even a thing? I can't find it in the wiki anywhere, and I can't even find it on an emulated computer.

It was in a commit on GitHub somewhere.

Hmm.. Well, in any case, I don't think anyone needs a second read function...

...in the standard library. Improved or re-done read functions (like hey, this one) are always nice.

#11 Bomb Bloke

    Hobbyist Coder

  • Moderators
  • 7,099 posts
  • LocationTasmania (AU)

Posted 11 March 2018 - 05:30 AM

https://github.com/d...rCraft/pull/470

Some builds floating around the place include it, but Dan hasn't accepted it into the main repo.





1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users