🦋 Welcome to the MAIN() IRC channel of the Raku Programming Language (raku.org). Log available at irclogs.raku.org/raku/live.html . If you're a beginner, you can also check out the #raku-beginner channel! Set by lizmat on 6 September 2022. |
|||
00:00
jjido left
00:06
reportable6 left
00:07
reportable6 joined
00:42
avar left
00:47
avar joined
00:53
epony joined
01:00
Kaipei joined
01:04
Kaiepi left
01:30
avar left,
avar joined
02:00
razetime joined
02:20
HvszrStykp left,
Sauvin left,
Geth left,
ProperNoun left,
hexology left,
peder left,
zostay left,
jcallen left,
leedo left,
GreaseMonkey left,
bartolin left,
thowe left,
esh left,
jdv left,
nebuchadnezzar left,
TieUpYourCamel left,
bdju left,
archenoth left,
kjp left,
nebuchadnezzar joined,
jdv joined,
bartolin joined,
TieUpYourCamel joined,
thowe joined,
peder joined,
greaser|q joined,
leedo joined,
zostay joined,
kjp joined
02:21
greaser|q left,
greaser|q joined,
jcallen joined
02:22
Sauvin joined,
jroc joined,
hexology joined,
greaser|q is now known as GreaseMonkey,
archenoth joined,
ProperNoun joined,
HvszrStykp joined
02:23
Geth joined,
jroc left
02:25
esh joined,
bdju joined
02:26
HvszrSty1p joined
02:28
HvszrStykp left
02:29
HvszrSty1p left
02:57
epony left
02:58
epony joined
03:58
greppable6 left,
coverable6 left,
sourceable6 left,
unicodable6 left,
shareable6 left,
linkable6 left,
bisectable6 left,
notable6 left,
statisfiable6 left,
committable6 left,
bloatable6 left,
releasable6 left
03:59
unicodable6 joined,
bisectable6 joined,
shareable6 joined,
statisfiable6 joined,
committable6 joined,
notable6 joined
04:00
bloatable6 joined,
linkable6 joined,
greppable6 joined,
coverable6 joined,
sourceable6 joined
04:01
releasable6 joined
04:12
archenoth left
04:43
vrurg left
04:45
vrurg joined
04:56
labster joined
05:01
epony left
05:03
epony joined
05:07
labster left
06:07
committable6 left,
statisfiable6 left,
squashable6 left,
bisectable6 left,
greppable6 left,
tellable6 left,
benchable6 left,
nativecallable6 left,
linkable6 left,
evalable6 left,
bloatable6 left,
coverable6 left,
sourceable6 left,
unicodable6 left,
quotable6 left,
releasable6 left,
shareable6 left,
notable6 left,
reportable6 left,
greppable6 joined,
linkable6 joined,
squashable6 joined,
sourceable6 joined,
quotable6 joined,
evalable6 joined
06:08
bisectable6 joined,
statisfiable6 joined,
unicodable6 joined,
nativecallable6 joined,
reportable6 joined,
releasable6 joined
06:09
tellable6 joined,
coverable6 joined,
shareable6 joined,
bloatable6 joined,
committable6 joined
06:10
notable6 joined,
benchable6 joined
06:18
Xliff joined
|
|||
Xliff | \o | 06:19 | |
tellable6 | 2022-10-26T07:34:58Z #raku-dev <lizmat> Xliff: about 3.5x as fast | ||
2022-10-26T07:38:28Z #raku-dev <lizmat> Xliff Actually, more than 7.4x as fast, if you want strings, as .comb.rotor() will give you lists that would need to get joined: .comb.rotor(3 => -2)>>.join | |||
Xliff | How can I get function key input in raku? | ||
.tell lizmat Wow! Nice work. Thanks for the info. | |||
tellable6 | Xliff, I'll pass your message to lizmat | ||
Xliff | How can I get function key input in raku? | 06:43 | |
I've tried Term::ReadKey and it's not working as I expected. | |||
06:46
Sgeo left
07:03
labster joined
07:05
epony left
07:07
epony joined
07:46
archenoth joined
07:50
epony left
08:03
epony joined
|
|||
Xliff | How can I get function key input in raku? | 08:05 | |
Inline::Perl5 still doesn't work. | |||
So the one working solution I've found isn't applicable, ATM | |||
08:09
dakkar joined
|
|||
Anton Antonov | <@742445366489645080> On what platform / OS is not working as expected? | 08:22 | |
Xliff | Linux / Terminal, so I don't have access to GUI toolkits | 08:30 | |
08:35
lichtkind joined
09:09
razetime left
09:10
epony left
09:11
epony joined,
sena_kun joined
|
|||
lizmat | weekly: dev.to/lizmat/dont-fear-the-grepper-4-nki | 09:50 | |
notable6 | lizmat, Noted! (weekly) | ||
tellable6 | 2022-10-27T06:19:42Z #raku <Xliff> lizmat Wow! Nice work. Thanks for the info. | ||
09:54
japhb left
09:58
japhb joined
|
|||
Xliff | lizmat: I'm trying to detect function keys like F1, F2, etc... do you know of a good mechanism in Raku for that? | 10:02 | |
lizmat | nope :-( | ||
10:02
labster left
|
|||
Xliff | :( | 10:02 | |
Term::ReadKey gives you the sequences, but that's hard to switch into F1/F2 and such because you have to build the sequences manually. | 10:03 | ||
Inline::Perl5 is still br0kered. | 10:04 | ||
m: use CPAN:from<Perl5> | |||
camelia | ===SORRY!=== Error while compiling <tmp> Please install Inline::Perl5 for Perl 5 support. at <tmp>:1 |
||
Xliff | Ah. | ||
lizmat | Xliff: looks like you will need to make a supply converter | 10:05 | |
Xliff | How would that work? | 10:10 | |
lizmat | github.com/rakudo/rakudo/blob/mast...s.pm6#L498 gives a nice example of that | 10:12 | |
Xliff | Not really. That's a lot of code with no examples. :) | 10:13 | |
lizmat | method produce | 10:14 | |
taking a Supply, and producing another Supply | |||
Xliff | And how does that apply to keystroke sequences? | 10:15 | |
lizmat | Term::Readkey produces a Supply, right ? | ||
Xliff | Yes.... it can. | ||
lizmat | key-pressed | 10:16 | |
the problem is that function keys are emitted as more than one value by that supply, right ? | |||
Xliff | Yes. | 10:18 | |
I've only ever used supplies as event handlers. | |||
I've never used them for things like lists, so this is new to me. | |||
So can you get a Supply to take successive values and then check if that list is (1, 2, 3, 4)? | 10:19 | ||
lizmat | the Supply produce method is an example of a taking a supply, and collecting info from a given supply, and emitting values on a new supply | ||
yup, just collect them, and pass them on when it matches your idea of a sensible sequence | 10:20 | ||
Xliff | Is there an example of this? | ||
lizmat | the link I just posted ? | ||
Xliff | That's the source for produce. Not an example. | 10:21 | |
And the docs have this: docs.raku.org/type/Supply#method_produce | 10:22 | ||
Which is just a sum, not a sequence tracker. | |||
lizmat | gist.github.com/lizmat/737f60089a9...bbfed4f17d | 10:26 | |
I mean, it's very simplified | |||
10:30
kjp left
|
|||
Xliff | Thinking. I just tried something like this, myself. | 10:30 | |
10:30
kjp joined
10:32
razetime joined
|
|||
Xliff | This still doesn't work -- | 10:38 | |
raku -e 'use Mojo::DOM:from<Perl5>; #===SORRY!=== Error while compiling -e. Too many positionals passed; expected 1 argument but got 2 | 10:39 | ||
10:40
Nemokosch joined
10:42
sena_kun left
10:43
sena_kun joined
|
|||
Xliff | It would be nice if Supply.tail(3) would automatically give me the last 3 values emitted. | 10:44 | |
10:54
jjido joined
|
|||
lizmat | it doesn't? | 11:02 | |
it should? | 11:03 | ||
ah, you mean "the last 3 values emitted before the current value" | 11:04 | ||
Xliff: but that wouldn't help you, would it? because it would pass on invalid values also? | 11:05 | ||
11:11
jjido left
11:14
epony left
11:15
epony joined
11:19
sena_kun left
|
|||
lizmat | afk& | 11:25 | |
11:33
razetime left
11:34
jjido joined
11:36
jjido left
|
|||
SmokeMachine | m: Supply.from-list(4, 3, 2, 1, 2, 3, 4).rotor(3 => -2).grep({ $_ ~~ [1, 2, 3] }).act: &say # Xliff would something like this help? | 11:38 | |
camelia | [1 2 3] | ||
12:07
reportable6 left,
reportable6 joined
12:27
xinming left
|
|||
Xliff | SmokeMachine: Thanks for trying, but no. | 12:35 | |
SmokeMachine | then I think I gon't get what the problem is... :( | ||
Xliff | The valies come one at a time, therefore .rotor and .tail don't wokr. | ||
So it's more like... | 12:36 | ||
SmokeMachine | but it works with that coming aone at a time... | ||
12:38
derpydoo joined
|
|||
Xliff | m: my $s = Supplier::Preserving.new; $s.emit($_) for 4, 3, 2, 1, 2, 3, 4; my $sup = $s.Supply; $s.rotor(3 => -2).grep({ $_ ~~ [1, 2, 3] ]).act: .say | 12:39 | |
camelia | ===SORRY!=== Error while compiling <tmp> Missing block at <tmp>:1 ------> s.rotor(3 => -2).grep({ $_ ~~ [1, 2, 3] ⏏]).act: .say expecting any of: statement end statement modifier statement modif… |
||
Xliff | m: my $s = Supplier::Preserving.new; $s.emit($_) for 4, 3, 2, 1, 2, 3, 4; my $sup = $s.Supply; $s.rotor(3 => -2).grep({ $_ ~~ [1, 2, 3] }).act: .say | ||
camelia | (Any) No such method 'act' for invocant of type 'Seq' in block <unit> at <tmp> line 1 |
||
SmokeMachine | m: supply { whenever Supply.interval: 0.001 { emit ^5 .roll } }.rotor(3 => -2).grep({ $_ ~~ [1, 2, 3] }).act: &say; sleep 1 | ||
camelia | [1 2 3] [1 2 3] [1 2 3] [1 2 3] [1 2 3] [1 2 3] |
||
Xliff | m: supply { whenever Supply.interval: 0.001 { emit (^5).roll } }.rotor(3 => -2).grep({ $_ ~~ [1, 2, 3] }).act: &say; sleep 1 | 12:40 | |
camelia | [1 2 3] [1 2 3] |
||
Xliff | That might work. | ||
SmokeMachine | the rotor I'm using is not the List's one, but the Supply's one | ||
Xliff | That's what I was hoping to use. | 12:41 | |
Let me try that last one and see what I get. | 12:42 | ||
12:47
archenoth left
12:48
archenoth joined
13:15
xinming joined
13:18
epony left
13:19
epony joined
|
|||
Xliff | SmokeMachine: OK, after attempts I have managed to get this: "use Term::ReadKey; react { whenever key-pressed( :!echo ).rotor(4) { .map( *.ord ).say }; }; | 13:21 | |
However, if the return sequence isn't 3 characters, I have to wait until a 4th character comes before I can act on the input. | 13:22 | ||
The problem is I need to be able to act on sequences of an arbitrary number of values | 13:24 | ||
F1-F4 have 3 characters per sequence. | 13:25 | ||
F-F10 have 5 characters. | |||
s/F-F10/F5-F10/ | 13:26 | ||
How can the supply pattern handle that in a non-blocking way? | |||
13:32
Sgeo joined
13:42
archenoth left
13:43
archenoth joined
13:58
xinming left
13:59
Nemokosch left
14:00
xinming joined
14:14
Nemokosch joined
|
|||
Xliff | How can I detect if $*OUT is redirected to a file? | 14:23 | |
Oh! .t is available. Excellent! | 14:25 | ||
japhb | Oh dear lord, don't do this by hand! | 14:27 | |
Xliff: See Terminal::ANSIParser if you absolutely need the key sequence yourself. | 14:28 | ||
See Terminal::LineEditor (and its guts) if you want to learn more about how to use a parsed ANSI sequence | 14:29 | ||
See also Terminal::Widgets (and its guts) for an even more advanced user of same | |||
14:29
Nemokosch1 joined
14:31
Nemokosch left
|
|||
japhb | In particular Terminal::LineEditor::RawTerminalInput and Terminal::Widgets::Terminal may be of use. | 14:32 | |
Do we still have a knowledge bot in channel? | 14:33 | ||
Xliff | japhb: Oh. Thank. You. Jeebus! | ||
I just wanna get the keystrokes. | |||
japhb | I feel like I need to create a bot that detects Term::ReadKey and goes "YOU PROBABLY DON'T WANT THAT, PLEASE LOOK OVER HERE." ;-) | ||
Xliff | YES, PLS! | ||
:-) | |||
I thought I looked at Terminal::Widgets. But it was late at night. I want to put an interface on this app I am writing for $dayJob. | 14:34 | ||
japhb | Terminal::Widgets only has a very small actual widget set. Most of my available hours were spent on getting the guts right. | 14:35 | |
So that's completely understandable. | |||
I mean, it's usable for some things, with some work on your part, but certainly not "out of the box ready" | 14:36 | ||
Xliff | japhb: I am most happy to PR the parts I need that aren't there. | ||
I just need something to take keystrokes and give me: F1, or F2, etc | |||
japhb | Look at Terminal::LineEditor::RawTerminalInput, that should give you an idea how I wrapped up usage of Terminal::ANSIParser. | 14:37 | |
BTW, I gave a talk on all this at the last Raku conf. | |||
conf.raku.org/talk/178 (It's not technical, but the second half does show you what each of the Terminal::Modules do. The first half talks about *why* I've been going through all this pain.) | 14:39 | ||
Xliff | So far, not seeing any function key symbols. | ||
Ooh! Watching, now. | |||
japhb | github.com/japhb/Terminal-LineEdit...akumod#L21 | 14:40 | |
The next couple hundred lines have structures and declarations for decoding the result of Terminal::ANSIParser; starting around github.com/japhb/Terminal-LineEdit...kumod#L356 are the input and output pumps for the ANSI parser. | 14:42 | ||
(And the length of all that is why I suggest just using the module. ;-) | 14:43 | ||
14:46
razetime joined
14:53
Nemokosch1 left
14:54
Nemokosch joined
|
|||
Xliff | japhb: So how is ::RawTerminalInput used? | 15:06 | |
japhb: This doesn't seem to be sufficient. All of your examples focus on line, not key based input handling... | 15:20 | ||
japhb | Xliff: Starting here: github.com/japhb/Terminal-LineEdit...kumod#L652 you can see how all of that is used to make a single-line line editor input. github.com/japhb/Terminal-Widgets/...al.rakumod shows using the building blocks to form an event pump for terminal events. | ||
Xliff: Have you watched the whole video? :-) | 15:21 | ||
Xliff | --> "use Terminal::LineEditor; use Terminal::LineEditor::RawTerminalInput; my $cli = Terminal::LineEditor::CLIInput.new; $cli.start-decoder; react { whenever $cli.decoded { say $_ } } | ||
Not yet. I am doing like... 3 things at once. I'm in the middle of the workday, here. | |||
japhb | AH! | ||
Xliff | I got as far as your Basic games books and cracked up laughing. Got strange looks, here. | ||
=D | |||
I think I had those. | 15:22 | ||
japhb | Terminal::LineEditor::CLIInput *uses* the real-time key handling to create a line editor. But that's just the cap on that particular stack. ;-) | ||
:-D | |||
Love it! | |||
15:22
epony left
|
|||
Xliff | OK. I might have to wait until lunch. | 15:24 | |
.... oh wait.... | |||
It is lunch! | |||
japhb | :-) | 15:25 | |
15:25
Kaipei left,
Kaipei joined
15:27
epony joined
15:31
Kaipii joined
15:34
Kaipei left
15:38
razetime left
15:50
razetime joined
15:57
archenoth left
15:58
archenoth joined
16:07
archenoth left
16:18
archenoth joined
16:27
clarjon1 joined
16:30
dakkar left
16:54
Kaipei joined
16:57
Kaipii left
17:02
archenoth left
17:03
archenoth joined
17:12
archenoth left
17:13
archenoth joined
17:16
Kaipii joined,
razetime left
|
|||
Xliff | japh: Do you still have those OpenGL demos? | 17:18 | |
17:19
Kaipei left
|
|||
Xliff | japhb: github.com/Xliff/p6-COGL | 17:20 | |
I can pull >60fps from this one: github.com/Xliff/p6-COGL/blob/mast...03-crate.t | |||
Nemokosch | What is this? | 17:23 | |
Xliff | Raku bindings for the COGL library. | ||
It's based on my p6-GLib work, so it's a bear to install. | 17:24 | ||
Nemokosch | wowie | 17:29 | |
17:31
derpydoo left,
epony left
17:32
epony joined
|
|||
Xliff | COGL is basically a wrapper around Open GL | 17:35 | |
Installation instructions updated in case anyone wants to check it out. | |||
17:52
archenoth left,
jjido joined
17:53
archenoth joined
|
|||
Xliff | japhb: Is the mad scientist demo anywhere? | 18:05 | |
18:06
reportable6 left
|
|||
Xliff | japhb: MMORPG roguelike FTW? | 18:07 | |
18:07
reportable6 joined
|
|||
Xliff | Oh! MUGS! | 18:11 | |
18:15
Kaipei joined
18:18
Kaipii left
|
|||
Nemokosch wonders which one is the real Kaiepi | 18:22 | ||
Xliff | Nemokosch... it's the one with two eyes! | 18:23 | |
japhb: my &parse-codepoint := make-ansi-parser( emit-item => { @parsed.push: $_ }); parse-codepoint($_) for $input-buffer.list; # missing the definition for $input-buffer! | 18:24 | ||
Nemokosch | what is the state of MUGS, by the way? | 18:31 | |
18:35
Kaipei left
18:58
Kaipei joined
|
|||
Xliff | <punchy>Advocating an Array.lop as the front analog for .chop -- who's with me?</punchy> | 19:09 | |
m: "Hello".chop(2).say | 19:10 | ||
camelia | Hel | ||
Xliff | m: "Hello".lop(2).say | ||
camelia | No such method 'lop' for invocant of type 'Str'. Did you mean 'log'? in block <unit> at <tmp> line 1 |
||
Xliff | :( -- This needs correcting!! # :-) | ||
Xliff got into the catnip again.... don't mind him | 19:11 | ||
japhb: use Terminal::Print::DecodedInput; my $in = decoded-input-supply; react { whenever $in { .say } }; | 19:18 | ||
Ahhhhhhh..... | |||
19:19
Sauvin left
19:20
Xliff left
19:28
Nemokosch left
19:34
Sauvin joined
19:36
epony left
19:37
epony joined
|
|||
gfldex | .tell Xliff a simple implementation for your problem: gist.github.com/abebd2c82c79858a43...b1bf564412 | 20:06 | |
tellable6 | gfldex, I'll pass your message to Xliff | ||
20:09
jgaz joined
21:04
jjido left
21:14
jjido joined
21:24
jgaz left
21:25
jjido left,
Xliff joined
21:26
mykhal left
21:28
mykhal joined
|
|||
japhb | Xliff: It's an older code, but it checks out. :-) | 21:30 | |
Xliff: Several of the demos from that talk are not *externally* available, mostly because people get weird expectations around released code, and those don't hit the bar for me. | 21:33 | ||
Still working on the rpg-ui demo in my "spare time". The "intuitive character creation" demo will eventually be merged into that. | 21:34 | ||
MUGS development has been paused a bit while I throw energy at those demos, and try to turn them into decent code via Terminal::Widgets improvements. | 21:35 | ||
My life as a yak shaver, I guess. :-) | |||
21:49
jjido joined
|
|||
Xliff | Hahahaha! | 22:16 | |
tellable6 | 2022-10-27T20:06:26Z #raku <gfldex> Xliff a simple implementation for your problem: gist.github.com/abebd2c82c79858a43...b1bf564412 | ||
22:19
deoac joined
|
|||
Xliff | gfldex: Ooh! Thanks | 22:21 | |
japhb: What am I missing from the newer code. I would prefer to use the latest and greatest, but I see a lot of similarities between the two... and it works. | 22:22 | ||
22:22
lichtkind left
|
|||
Xliff | How can I get a method's callable object? | 22:25 | |
m: class A { method a { }; method b { &self.a.^name.say }; }; A.b | |||
camelia | Nil | ||
Xliff | m: class A { method a { }; method b { &self.a.^name.say }; }; A.b() | 22:26 | |
camelia | Nil | ||
Xliff | m: class A { method a { }; method b { &self.a.name.say }; }; A.b() | ||
camelia | Nil | ||
Xliff | ?? | ||
22:26
Xliff left
22:37
Kaipei left
23:14
patterner____ left,
patterner____ joined
|
|||
Voldenet | m: class A { method a { say "a called"; }; method b { self.^lookup("a") }; }; A.b.(A) | 23:30 | |
camelia | a called | ||
Voldenet | consider the following | 23:31 | |
docs.raku.org/type/Metamodel::MethodContainer | |||
23:36
jjido left
23:44
epony left
23:45
epony joined
|